Add Weather App Sample to showcase Jewel usages
@ -25,11 +25,16 @@ repositories {
|
|||||||
intellijPlatform {
|
intellijPlatform {
|
||||||
defaultRepositories()
|
defaultRepositories()
|
||||||
}
|
}
|
||||||
|
// Needed for tests
|
||||||
|
google()
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
testImplementation(libs.junit)
|
testImplementation(libs.junit)
|
||||||
testImplementation(libs.opentest4j)
|
testImplementation(libs.opentest4j)
|
||||||
|
testImplementation(libs.hamcrest)
|
||||||
|
testImplementation(libs.composeuitest)
|
||||||
|
testImplementation(libs.jewelstandalone)
|
||||||
|
|
||||||
intellijPlatform {
|
intellijPlatform {
|
||||||
create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion"))
|
create(providers.gradleProperty("platformType"), providers.gradleProperty("platformVersion"))
|
||||||
|
|||||||
@ -11,7 +11,7 @@ pluginSinceBuild = 251
|
|||||||
|
|
||||||
# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
|
# IntelliJ Platform Properties -> https://plugins.jetbrains.com/docs/intellij/tools-gradle-intellij-plugin.html#configuration-intellij-extension
|
||||||
platformType = IC
|
platformType = IC
|
||||||
platformVersion = 2025.1.1
|
platformVersion = 2025.1.4.1
|
||||||
|
|
||||||
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
|
# Plugin Dependencies -> https://plugins.jetbrains.com/docs/intellij/plugin-dependencies.html
|
||||||
# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP
|
# Example: platformPlugins = com.jetbrains.php:203.4449.22, org.intellij.scala:2023.3.27@EAP
|
||||||
|
|||||||
@ -2,15 +2,22 @@
|
|||||||
# libraries
|
# libraries
|
||||||
junit = "4.13.2"
|
junit = "4.13.2"
|
||||||
opentest4j = "1.3.0"
|
opentest4j = "1.3.0"
|
||||||
|
hamcrest = "2.2"
|
||||||
|
# Has to be in sync with IntelliJ Platform
|
||||||
|
composeuitest="1.8.0-alpha04"
|
||||||
|
jewelstandalone="0.29.0-251.27828"
|
||||||
|
|
||||||
# plugins
|
# plugins
|
||||||
changelog = "2.2.1"
|
changelog = "2.2.1"
|
||||||
intelliJPlatform = "2.5.0"
|
intelliJPlatform = "2.7.0"
|
||||||
kotlin = "2.1.20"
|
kotlin = "2.1.20"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
junit = { group = "junit", name = "junit", version.ref = "junit" }
|
||||||
opentest4j = { group = "org.opentest4j", name = "opentest4j", version.ref = "opentest4j" }
|
opentest4j = { group = "org.opentest4j", name = "opentest4j", version.ref = "opentest4j" }
|
||||||
|
hamcrest = { group = "org.hamcrest", name = "hamcrest", version.ref = "hamcrest" }
|
||||||
|
composeuitest = { group = "org.jetbrains.compose.ui", name ="ui-test-junit4-desktop", version.ref="composeuitest" }
|
||||||
|
jewelstandalone = { group = "org.jetbrains.jewel", name ="jewel-int-ui-standalone", version.ref="jewelstandalone" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" }
|
changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" }
|
||||||
|
|||||||
@ -0,0 +1,31 @@
|
|||||||
|
package org.jetbrains.plugins.template
|
||||||
|
|
||||||
|
import com.intellij.openapi.components.Service
|
||||||
|
import com.intellij.openapi.components.Service.Level
|
||||||
|
import com.intellij.platform.util.coroutines.childScope
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A service-level class that provides and manages coroutine scopes for a given project.
|
||||||
|
*
|
||||||
|
* @constructor Initializes the [CoroutineScopeHolder] with a project-wide coroutine scope.
|
||||||
|
* @param projectWideCoroutineScope A [CoroutineScope] defining the lifecycle of project-wide coroutines.
|
||||||
|
*/
|
||||||
|
@Service(Level.PROJECT)
|
||||||
|
class CoroutineScopeHolder(private val projectWideCoroutineScope: CoroutineScope) {
|
||||||
|
/**
|
||||||
|
* Creates a new coroutine scope as a child of the project-wide coroutine scope with the specified name.
|
||||||
|
*
|
||||||
|
* @param name The name for the newly created coroutine scope.
|
||||||
|
* @return a scope with a [Job] which parent is the [Job] of [projectWideCoroutineScope] scope.
|
||||||
|
*
|
||||||
|
* The returned scope can be completed only by cancellation.
|
||||||
|
* [projectWideCoroutineScope] scope will cancel the returned scope when canceled.
|
||||||
|
* If the child scope has a narrower lifecycle than [projectWideCoroutineScope] scope,
|
||||||
|
* then it should be canceled explicitly when not needed,
|
||||||
|
* otherwise, it will continue to live in the Job hierarchy until termination of the [CoroutineScopeHolder] service.
|
||||||
|
*/
|
||||||
|
@Suppress("UnstableApiUsage")
|
||||||
|
fun createScope(name: String): CoroutineScope = projectWideCoroutineScope.childScope(name)
|
||||||
|
}
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
package org.jetbrains.plugins.template.components
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.*
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.unit.TextUnit
|
||||||
|
import org.jetbrains.jewel.foundation.theme.JewelTheme
|
||||||
|
import org.jetbrains.jewel.ui.component.Text
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun PulsingText(
|
||||||
|
text: String,
|
||||||
|
isLoading: Boolean,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
color: Color = Color.White,
|
||||||
|
fontSize: TextUnit = JewelTheme.defaultTextStyle.fontSize,
|
||||||
|
fontWeight: FontWeight? = JewelTheme.defaultTextStyle.fontWeight
|
||||||
|
) {
|
||||||
|
val alpha = if (isLoading) {
|
||||||
|
val infiniteTransition = rememberInfiniteTransition(label = "pulsing_text")
|
||||||
|
infiniteTransition.animateFloat(
|
||||||
|
initialValue = 0.3f,
|
||||||
|
targetValue = 1f,
|
||||||
|
animationSpec = infiniteRepeatable(
|
||||||
|
animation = tween(
|
||||||
|
durationMillis = 1000,
|
||||||
|
easing = FastOutSlowInEasing
|
||||||
|
),
|
||||||
|
repeatMode = RepeatMode.Reverse
|
||||||
|
),
|
||||||
|
label = "text_alpha"
|
||||||
|
).value
|
||||||
|
} else {
|
||||||
|
1f
|
||||||
|
}
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = text,
|
||||||
|
color = color.copy(alpha = alpha),
|
||||||
|
fontSize = fontSize,
|
||||||
|
fontWeight = fontWeight,
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -0,0 +1,310 @@
|
|||||||
|
package org.jetbrains.plugins.template.components
|
||||||
|
|
||||||
|
import androidx.compose.foundation.clickable
|
||||||
|
import androidx.compose.foundation.interaction.HoverInteraction
|
||||||
|
import androidx.compose.foundation.interaction.MutableInteractionSource
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.foundation.layout.width
|
||||||
|
import androidx.compose.foundation.text.input.TextFieldState
|
||||||
|
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.focus.FocusRequester
|
||||||
|
import androidx.compose.ui.focus.focusRequester
|
||||||
|
import androidx.compose.ui.input.key.*
|
||||||
|
import androidx.compose.ui.input.pointer.PointerIcon
|
||||||
|
import androidx.compose.ui.input.pointer.pointerHoverIcon
|
||||||
|
import androidx.compose.ui.layout.onSizeChanged
|
||||||
|
import androidx.compose.ui.platform.LocalDensity
|
||||||
|
import androidx.compose.ui.semantics.Role
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.window.PopupProperties
|
||||||
|
import kotlinx.coroutines.flow.distinctUntilChanged
|
||||||
|
import org.jetbrains.jewel.foundation.ExperimentalJewelApi
|
||||||
|
import org.jetbrains.jewel.ui.component.Icon
|
||||||
|
import org.jetbrains.jewel.ui.component.PopupMenu
|
||||||
|
import org.jetbrains.jewel.ui.component.Text
|
||||||
|
import org.jetbrains.jewel.ui.component.TextField
|
||||||
|
import org.jetbrains.jewel.ui.icons.AllIconsKeys
|
||||||
|
import org.jetbrains.plugins.template.ComposeTemplateBundle
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.PreviewableItem
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Searchable
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.SearchAutoCompletionItemProvider
|
||||||
|
|
||||||
|
@OptIn(ExperimentalJewelApi::class)
|
||||||
|
@Composable
|
||||||
|
fun <T> SearchBarWithAutoCompletion(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<T>,
|
||||||
|
textFieldState: TextFieldState,
|
||||||
|
searchFieldPlaceholder: String = "Type a place name...",
|
||||||
|
onClear: () -> Unit = {},
|
||||||
|
onSelectCompletion: (T) -> Unit = {},
|
||||||
|
) where T : Searchable, T : PreviewableItem {
|
||||||
|
val focusRequester = remember { FocusRequester() }
|
||||||
|
|
||||||
|
val popupController = remember {
|
||||||
|
CompletionPopupController(searchAutoCompletionItemProvider) { completionItem ->
|
||||||
|
textFieldState.setTextAndPlaceCursorAtEnd(completionItem.item.label)
|
||||||
|
onSelectCompletion(completionItem.item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val isInputFieldEmpty by remember { derivedStateOf { textFieldState.text.isBlank() } }
|
||||||
|
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
snapshotFlow { textFieldState.text.toString() }
|
||||||
|
.distinctUntilChanged()
|
||||||
|
.collect { searchTerm ->
|
||||||
|
if (searchTerm.isEmpty()) {
|
||||||
|
onClear()
|
||||||
|
}
|
||||||
|
|
||||||
|
popupController.onQueryChanged(searchTerm)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Box(
|
||||||
|
modifier = modifier
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
var textFieldWidth by remember { mutableIntStateOf(-1) }
|
||||||
|
TextField(
|
||||||
|
state = textFieldState,
|
||||||
|
modifier = Modifier
|
||||||
|
.onSizeChanged { coordinates -> textFieldWidth = coordinates.width }
|
||||||
|
.fillMaxWidth()
|
||||||
|
.handlePopupCompletionKeyEvents(popupController)
|
||||||
|
.focusRequester(focusRequester),
|
||||||
|
placeholder = { Text(searchFieldPlaceholder) },
|
||||||
|
leadingIcon = {
|
||||||
|
Icon(AllIconsKeys.Actions.Find, contentDescription = null, Modifier.padding(end = 8.dp))
|
||||||
|
},
|
||||||
|
trailingIcon = {
|
||||||
|
if (!isInputFieldEmpty) {
|
||||||
|
CloseIconButton {
|
||||||
|
textFieldState.setTextAndPlaceCursorAtEnd("")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
if (popupController.isVisible) {
|
||||||
|
PopupMenu(
|
||||||
|
onDismissRequest = {
|
||||||
|
popupController.reset()
|
||||||
|
true
|
||||||
|
},
|
||||||
|
horizontalAlignment = Alignment.Start,
|
||||||
|
modifier = Modifier
|
||||||
|
// Aligns PopupMenu with TextField
|
||||||
|
.width(with(LocalDensity.current) { textFieldWidth.toDp() }),
|
||||||
|
popupProperties = PopupProperties(focusable = false),
|
||||||
|
) {
|
||||||
|
popupController.completionItems.forEach { completionItem ->
|
||||||
|
selectableItem(
|
||||||
|
completionItem.isSelected,
|
||||||
|
onClick = {
|
||||||
|
popupController.onItemClicked(completionItem)
|
||||||
|
textFieldState.setTextAndPlaceCursorAtEnd(completionItem.item.label)
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
Text(completionItem.item.label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun CloseIconButton(onClick: () -> Unit) {
|
||||||
|
val interactionSource = remember { MutableInteractionSource() }
|
||||||
|
var hovered by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
|
LaunchedEffect(interactionSource) {
|
||||||
|
interactionSource.interactions.collect {
|
||||||
|
when (it) {
|
||||||
|
is HoverInteraction.Enter -> hovered = true
|
||||||
|
is HoverInteraction.Exit -> hovered = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Icon(
|
||||||
|
key = if (hovered) AllIconsKeys.Actions.CloseHovered else AllIconsKeys.Actions.Close,
|
||||||
|
contentDescription = ComposeTemplateBundle.message("weather.app.clear.button.content.description"),
|
||||||
|
modifier = Modifier
|
||||||
|
.pointerHoverIcon(PointerIcon.Default)
|
||||||
|
.clickable(
|
||||||
|
interactionSource = interactionSource,
|
||||||
|
indication = null,
|
||||||
|
role = Role.Button,
|
||||||
|
) { onClick() },
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
internal data class CompletionItem<T : Searchable>(
|
||||||
|
val item: T,
|
||||||
|
val isSelected: Boolean,
|
||||||
|
)
|
||||||
|
|
||||||
|
internal class CompletionPopupController<T : Searchable>(
|
||||||
|
private val itemsProvider: SearchAutoCompletionItemProvider<T>,
|
||||||
|
private val onSelectCompletion: (CompletionItem<T>) -> Unit = {},
|
||||||
|
) {
|
||||||
|
private var selectedItemIndex by mutableIntStateOf(-1)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures a popup is not shown when the user autocompletes an item.
|
||||||
|
* Suppresses making popup once onQueryChanged is called after text to TextField is set after autocompletion.
|
||||||
|
*/
|
||||||
|
private var skipPopupShowing by mutableStateOf(false)
|
||||||
|
|
||||||
|
private val _filteredCompletionItems = mutableStateListOf<CompletionItem<T>>()
|
||||||
|
|
||||||
|
val completionItems: List<CompletionItem<T>> get() = _filteredCompletionItems
|
||||||
|
|
||||||
|
val selectedItem: CompletionItem<T>
|
||||||
|
get() = _filteredCompletionItems[selectedItemIndex]
|
||||||
|
|
||||||
|
var isVisible by mutableStateOf(false)
|
||||||
|
private set
|
||||||
|
|
||||||
|
fun onSelectionMovedDown() {
|
||||||
|
moveSelectionTo(normalizeIndex(selectedItemIndex + 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onSelectionMovedUp() {
|
||||||
|
moveSelectionTo(normalizeIndex(selectedItemIndex - 1))
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onQueryChanged(searchTerm: String) {
|
||||||
|
if (skipPopupShowing) {
|
||||||
|
skipPopupShowing = false
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if (searchTerm.isEmpty()) {
|
||||||
|
hidePopup()
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
val newItems = itemsProvider.provideSearchableItems(searchTerm)
|
||||||
|
.map { CompletionItem(it, false) }
|
||||||
|
|
||||||
|
updateFilteredItems(newItems)
|
||||||
|
|
||||||
|
moveSelectionToFirstItem()
|
||||||
|
|
||||||
|
if (completionItems.isNotEmpty()) {
|
||||||
|
showPopup()
|
||||||
|
} else {
|
||||||
|
hidePopup()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showPopup() {
|
||||||
|
isVisible = true
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hidePopup() {
|
||||||
|
isVisible = false
|
||||||
|
}
|
||||||
|
|
||||||
|
fun reset() {
|
||||||
|
hidePopup()
|
||||||
|
moveSelectionToFirstItem()
|
||||||
|
clearFilteredItems()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onItemClicked(clickedItem: CompletionItem<T>) {
|
||||||
|
doCompleteSelection(clickedItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun onSelectionConfirmed() {
|
||||||
|
doCompleteSelection(this.selectedItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun doCompleteSelection(selectedItem: CompletionItem<T>) {
|
||||||
|
if (!isVisible) return
|
||||||
|
|
||||||
|
skipPopupShowing = true
|
||||||
|
|
||||||
|
reset()
|
||||||
|
|
||||||
|
onSelectCompletion(selectedItem)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateFilteredItems(newItems: List<CompletionItem<T>>) {
|
||||||
|
// TODO Can be done in a more efficient way
|
||||||
|
clearFilteredItems()
|
||||||
|
_filteredCompletionItems.addAll(newItems)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun clearFilteredItems() {
|
||||||
|
_filteredCompletionItems.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun moveSelectionToFirstItem() {
|
||||||
|
moveSelectionTo(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun moveSelectionTo(index: Int) {
|
||||||
|
if (index == selectedItemIndex) return
|
||||||
|
|
||||||
|
// Deselect previous item
|
||||||
|
val previousIndex = selectedItemIndex
|
||||||
|
if (previousIndex in _filteredCompletionItems.indices) {
|
||||||
|
_filteredCompletionItems[previousIndex] = _filteredCompletionItems[previousIndex].copy(isSelected = false)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Select a new item
|
||||||
|
if (index in _filteredCompletionItems.indices) {
|
||||||
|
_filteredCompletionItems[index] = _filteredCompletionItems[index].copy(isSelected = true)
|
||||||
|
}
|
||||||
|
|
||||||
|
selectedItemIndex = index
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun normalizeIndex(index: Int) = index.coerceIn(0..completionItems.lastIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Handles navigation keyboard key events for the completion popup.
|
||||||
|
*/
|
||||||
|
private fun <T : Searchable> Modifier.handlePopupCompletionKeyEvents(
|
||||||
|
popupController: CompletionPopupController<T>
|
||||||
|
): Modifier {
|
||||||
|
return onPreviewKeyEvent { keyEvent ->
|
||||||
|
if (keyEvent.type != KeyEventType.KeyDown) return@onPreviewKeyEvent false
|
||||||
|
|
||||||
|
return@onPreviewKeyEvent when (keyEvent.key) {
|
||||||
|
Key.Tab, Key.Enter, Key.NumPadEnter -> {
|
||||||
|
popupController.onSelectionConfirmed()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
Key.DirectionUp -> {
|
||||||
|
popupController.onSelectionMovedUp()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
Key.DirectionDown -> {
|
||||||
|
popupController.onSelectionMovedDown()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
Key.Escape -> {
|
||||||
|
popupController.reset()
|
||||||
|
true
|
||||||
|
}
|
||||||
|
|
||||||
|
else -> false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,8 +0,0 @@
|
|||||||
package org.jetbrains.plugins.template.services
|
|
||||||
|
|
||||||
import com.intellij.openapi.components.Service
|
|
||||||
|
|
||||||
@Service
|
|
||||||
class MyProjectService() {
|
|
||||||
fun getRandomNumber() = (1..100).random()
|
|
||||||
}
|
|
||||||
@ -0,0 +1,54 @@
|
|||||||
|
package org.jetbrains.plugins.template.toolWindow
|
||||||
|
|
||||||
|
import androidx.compose.runtime.DisposableEffect
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import com.intellij.openapi.components.service
|
||||||
|
import com.intellij.openapi.project.DumbAware
|
||||||
|
import com.intellij.openapi.project.Project
|
||||||
|
import com.intellij.openapi.wm.ToolWindow
|
||||||
|
import com.intellij.openapi.wm.ToolWindowFactory
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import org.jetbrains.jewel.bridge.addComposeTab
|
||||||
|
import org.jetbrains.plugins.template.CoroutineScopeHolder
|
||||||
|
import org.jetbrains.plugins.template.ui.ChatAppSample
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.LocationsProvider
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppViewModel
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.WeatherForecastService
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherAppSample
|
||||||
|
|
||||||
|
class ComposeSamplesToolWindowFactory : ToolWindowFactory, DumbAware {
|
||||||
|
|
||||||
|
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
|
||||||
|
val coroutineScopeHolder = project.service<CoroutineScopeHolder>()
|
||||||
|
|
||||||
|
toolWindow.addComposeTab("Weather App") {
|
||||||
|
val locationProviderApi = remember { service<LocationsProvider>() }
|
||||||
|
val viewModel = remember {
|
||||||
|
val weatherForecastServiceApi = WeatherForecastService(Dispatchers.IO)
|
||||||
|
WeatherAppViewModel(
|
||||||
|
listOf(Location("Munich", "Germany")),
|
||||||
|
coroutineScopeHolder
|
||||||
|
.createScope(WeatherAppViewModel::class.java.simpleName),
|
||||||
|
weatherForecastServiceApi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
DisposableEffect(Unit) {
|
||||||
|
viewModel.onReloadWeatherForecast()
|
||||||
|
|
||||||
|
onDispose { viewModel.dispose() }
|
||||||
|
}
|
||||||
|
|
||||||
|
WeatherAppSample(
|
||||||
|
viewModel,
|
||||||
|
viewModel,
|
||||||
|
locationProviderApi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
toolWindow.addComposeTab("Chat App") { ChatAppSample() }
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun shouldBeAvailable(project: Project) = true
|
||||||
|
}
|
||||||
@ -1,48 +0,0 @@
|
|||||||
package org.jetbrains.plugins.template.toolWindow
|
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
import androidx.compose.runtime.getValue
|
|
||||||
import androidx.compose.runtime.mutableStateOf
|
|
||||||
import androidx.compose.runtime.remember
|
|
||||||
import androidx.compose.runtime.setValue
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import com.intellij.openapi.components.service
|
|
||||||
import com.intellij.openapi.project.DumbAware
|
|
||||||
import com.intellij.openapi.project.Project
|
|
||||||
import com.intellij.openapi.wm.ToolWindow
|
|
||||||
import com.intellij.openapi.wm.ToolWindowFactory
|
|
||||||
import com.intellij.ui.content.ContentFactory
|
|
||||||
import org.jetbrains.jewel.bridge.JewelComposePanel
|
|
||||||
import org.jetbrains.jewel.ui.component.DefaultButton
|
|
||||||
import org.jetbrains.jewel.ui.component.Text
|
|
||||||
import org.jetbrains.plugins.template.ComposeTemplateBundle
|
|
||||||
import org.jetbrains.plugins.template.services.MyProjectService
|
|
||||||
|
|
||||||
class MyToolWindowFactory : ToolWindowFactory, DumbAware {
|
|
||||||
|
|
||||||
override fun createToolWindowContent(project: Project, toolWindow: ToolWindow) {
|
|
||||||
val myToolWindow = MyToolWindow()
|
|
||||||
val content = ContentFactory.getInstance().createContent(myToolWindow.getContent(), null, false)
|
|
||||||
toolWindow.contentManager.addContent(content)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun shouldBeAvailable(project: Project) = true
|
|
||||||
|
|
||||||
class MyToolWindow() {
|
|
||||||
private val service = service<MyProjectService>()
|
|
||||||
|
|
||||||
fun getContent() = JewelComposePanel {
|
|
||||||
Column(Modifier.fillMaxWidth().padding(16.dp)) {
|
|
||||||
var param by remember { mutableStateOf("?") }
|
|
||||||
Text(ComposeTemplateBundle.message("randomLabel", param))
|
|
||||||
Spacer(Modifier.height(8.dp))
|
|
||||||
DefaultButton(onClick = {
|
|
||||||
param = service.getRandomNumber().toString()
|
|
||||||
}) {
|
|
||||||
Text(ComposeTemplateBundle.message("shuffle"))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
package org.jetbrains.plugins.template.ui
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.Arrangement
|
||||||
|
import androidx.compose.foundation.layout.Column
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import org.jetbrains.jewel.foundation.theme.JewelTheme
|
||||||
|
import org.jetbrains.jewel.ui.component.Text
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun ChatAppSample() {
|
||||||
|
Column(
|
||||||
|
Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(16.dp),
|
||||||
|
verticalArrangement = Arrangement.Center
|
||||||
|
) {
|
||||||
|
Text("Not yet implemented.", style = JewelTheme.defaultTextStyle)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp
|
||||||
|
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
|
||||||
|
object WeatherAppColors {
|
||||||
|
val nightWeatherColor = Color(0xFF1A237E)
|
||||||
|
val coldWeatherColor = Color(0xFF3F51B5)
|
||||||
|
val coolWeatherColor = Color(0xFF5E35B1)
|
||||||
|
val mildWeatherColor = Color(0xFF039BE5)
|
||||||
|
val warmWeatherColor = Color(0xFFFF9800)
|
||||||
|
val hotWeatherColor = Color(0xFFE91E63)
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.model
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Immutable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a location with a name and associated country.
|
||||||
|
*
|
||||||
|
* @property name The name of the location.
|
||||||
|
* @property country The associated country of the location.
|
||||||
|
* @property label A textual representation of the location.
|
||||||
|
*/
|
||||||
|
@Immutable
|
||||||
|
data class Location(val name: String, val country: String) : PreviewableItem, Searchable {
|
||||||
|
|
||||||
|
override val label: String
|
||||||
|
get() {
|
||||||
|
if (country.isBlank()) {
|
||||||
|
return name.takeIf { it.isNotBlank() } ?: "-"
|
||||||
|
}
|
||||||
|
|
||||||
|
if (name.isBlank()) {
|
||||||
|
return country.takeIf { it.isNotBlank() } ?: "-"
|
||||||
|
}
|
||||||
|
|
||||||
|
return "$name, $country"
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun matches(query: String): Boolean {
|
||||||
|
val applicableCandidates = listOf(
|
||||||
|
label,
|
||||||
|
name,
|
||||||
|
country,
|
||||||
|
name.split(" ").map { it.first() }.joinToString(""),
|
||||||
|
"${name.first()}${country.first()}",
|
||||||
|
"${country.first()}${name.first()}"
|
||||||
|
)
|
||||||
|
|
||||||
|
return applicableCandidates.any { it.contains(query, ignoreCase = true) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Immutable
|
||||||
|
data class SelectableLocation(val location: Location, val isSelected: Boolean)
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.model
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an item that can be previewed with a label.
|
||||||
|
*
|
||||||
|
* @property label A textual representation of the item, often used for display purposes.
|
||||||
|
*/
|
||||||
|
interface PreviewableItem {
|
||||||
|
val label: String
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.model
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents an entity that can be filtered by a search query.
|
||||||
|
*/
|
||||||
|
interface Searchable {
|
||||||
|
fun matches(query: String): Boolean
|
||||||
|
}
|
||||||
@ -0,0 +1,88 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.model
|
||||||
|
|
||||||
|
import org.jetbrains.jewel.ui.icon.IconKey
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherIcons
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data class representing a daily weather forecast.
|
||||||
|
*/
|
||||||
|
data class DailyForecast(
|
||||||
|
val date: LocalDateTime,
|
||||||
|
val temperature: Float,
|
||||||
|
val weatherType: WeatherType,
|
||||||
|
val humidity: Int,
|
||||||
|
val windSpeed: Float,
|
||||||
|
val windDirection: WindDirection
|
||||||
|
)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Data class representing weather information to be displayed in the Weather Card.
|
||||||
|
*/
|
||||||
|
data class WeatherForecastData(
|
||||||
|
val location: Location,
|
||||||
|
val currentWeatherForecast: DailyForecast,
|
||||||
|
val dailyForecasts: List<DailyForecast> = emptyList()
|
||||||
|
) {
|
||||||
|
companion object Companion {
|
||||||
|
val EMPTY: WeatherForecastData = WeatherForecastData(
|
||||||
|
Location("", ""),
|
||||||
|
DailyForecast(
|
||||||
|
LocalDateTime.now(),
|
||||||
|
0f,
|
||||||
|
WeatherType.CLEAR,
|
||||||
|
0,
|
||||||
|
0f,
|
||||||
|
WindDirection.NORTH,
|
||||||
|
),
|
||||||
|
emptyList()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum representing different weather types.
|
||||||
|
*/
|
||||||
|
enum class WeatherType(val label: String, val dayIconKey: IconKey, val nightIconKey: IconKey) {
|
||||||
|
CLEAR("Sunny", WeatherIcons.dayClear, WeatherIcons.nightHalfMoonClear),
|
||||||
|
CLOUDY("Cloudy", dayIconKey = WeatherIcons.cloudy, nightIconKey = WeatherIcons.cloudy),
|
||||||
|
PARTLY_CLOUDY(
|
||||||
|
"Partly Cloudy",
|
||||||
|
dayIconKey = WeatherIcons.dayPartialCloud,
|
||||||
|
nightIconKey = WeatherIcons.nightHalfMoonPartialCloud
|
||||||
|
),
|
||||||
|
RAINY("Rainy", dayIconKey = WeatherIcons.dayRain, nightIconKey = WeatherIcons.nightHalfMoonRain),
|
||||||
|
RAINY_AND_THUNDER(
|
||||||
|
"Rainy and Thunder",
|
||||||
|
dayIconKey = WeatherIcons.dayRainThunder,
|
||||||
|
nightIconKey = WeatherIcons.nightHalfMoonRainThunder
|
||||||
|
),
|
||||||
|
THUNDER("Thunder", dayIconKey = WeatherIcons.thunder, nightIconKey = WeatherIcons.thunder),
|
||||||
|
|
||||||
|
SNOWY("Snowy", dayIconKey = WeatherIcons.daySnow, nightIconKey = WeatherIcons.nightHalfMoonSnow),
|
||||||
|
TORNADO("Stormy", dayIconKey = WeatherIcons.tornado, nightIconKey = WeatherIcons.tornado),
|
||||||
|
FOG("Fog", dayIconKey = WeatherIcons.fog, nightIconKey = WeatherIcons.fog),
|
||||||
|
MIST("Mist", dayIconKey = WeatherIcons.mist, nightIconKey = WeatherIcons.mist);
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun random(): WeatherType = entries.toTypedArray().random()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Enum representing wind directions.
|
||||||
|
*/
|
||||||
|
enum class WindDirection(val label: String) {
|
||||||
|
NORTH("↑"),
|
||||||
|
NORTH_EAST("↗"),
|
||||||
|
EAST("→"),
|
||||||
|
SOUTH_EAST("↘"),
|
||||||
|
SOUTH("↓"),
|
||||||
|
SOUTH_WEST("↙"),
|
||||||
|
WEST("←"),
|
||||||
|
NORTH_WEST("↖");
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
fun random(): WindDirection = entries.toTypedArray().random()
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,32 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.services
|
||||||
|
|
||||||
|
import com.intellij.openapi.components.Service
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
|
||||||
|
@Service
|
||||||
|
class LocationsProvider : SearchAutoCompletionItemProvider<Location> {
|
||||||
|
private val locationStateFlow = MutableStateFlow(
|
||||||
|
listOf(
|
||||||
|
Location("Munich", "Germany"),
|
||||||
|
Location("Belgrade", "Serbia"),
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Rome", "Italy"),
|
||||||
|
Location("Paris", "France"),
|
||||||
|
Location("Sydney", "Australia"),
|
||||||
|
Location("Moscow", "Russia"),
|
||||||
|
Location("Tokyo", "Japan"),
|
||||||
|
Location("New York", "USA"),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
fun provideLocations(): StateFlow<List<Location>> = locationStateFlow.asStateFlow()
|
||||||
|
|
||||||
|
override fun provideSearchableItems(searchTerm: String): List<Location> {
|
||||||
|
return locationStateFlow
|
||||||
|
.value
|
||||||
|
.filter { it.matches(searchTerm) }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.services
|
||||||
|
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Searchable
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines a provider interface for auto-completion items based on a search query.
|
||||||
|
*
|
||||||
|
* Implementations of this interface are responsible for supplying a filtered list of
|
||||||
|
* items that match the given search term. These items must conform to the [Searchable] interface,
|
||||||
|
* which ensures that they can be evaluated against the query.
|
||||||
|
*
|
||||||
|
* @param T The type of items provided by this interface, which must extend [Searchable].
|
||||||
|
*/
|
||||||
|
interface SearchAutoCompletionItemProvider<T : Searchable> {
|
||||||
|
fun provideSearchableItems(searchTerm: String): List<T>
|
||||||
|
}
|
||||||
@ -0,0 +1,100 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.services
|
||||||
|
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.withContext
|
||||||
|
import kotlinx.coroutines.yield
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.*
|
||||||
|
import java.time.LocalDate
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
import java.time.LocalTime
|
||||||
|
import kotlin.coroutines.CoroutineContext
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
|
|
||||||
|
interface WeatherForecastServiceApi {
|
||||||
|
/**
|
||||||
|
* Suspending function that returns Result<WeatherForecastData>.
|
||||||
|
* This allows callers to handle success/failure explicitly.
|
||||||
|
*
|
||||||
|
* @param location The location to get weather data for
|
||||||
|
* @return Result containing WeatherForecastData on success or exception on failure
|
||||||
|
*/
|
||||||
|
suspend fun loadWeatherForecastFor(location: Location): Result<WeatherForecastData>
|
||||||
|
}
|
||||||
|
|
||||||
|
class WeatherForecastService(
|
||||||
|
private val networkCoroutineContext: CoroutineContext = Dispatchers.IO,
|
||||||
|
) : WeatherForecastServiceApi {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Function that returns a weather forecast for provided [location] param.
|
||||||
|
*
|
||||||
|
* @param location The location to get weather data for
|
||||||
|
* @return Result containing WeatherForecastData on success or exception on failure
|
||||||
|
*/
|
||||||
|
override suspend fun loadWeatherForecastFor(location: Location): Result<WeatherForecastData> {
|
||||||
|
return withContext(networkCoroutineContext) {
|
||||||
|
runCatching { getWeatherData(location) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides mock weather data for demonstration purposes.
|
||||||
|
* In a real application, this would fetch data from a weather API.
|
||||||
|
*/
|
||||||
|
private suspend fun getWeatherData(location: Location): WeatherForecastData {
|
||||||
|
val currentTime = LocalDateTime.of(LocalDate.now(), getRandomTime())
|
||||||
|
|
||||||
|
yield() // Check cancellation
|
||||||
|
|
||||||
|
// Generate 7-day forecast data
|
||||||
|
val dailyForecasts = generateDailyForecasts(currentTime)
|
||||||
|
|
||||||
|
// Simulates a network request and stops the execution in case the coroutine
|
||||||
|
// that launched the getWeatherData task is canceled
|
||||||
|
delay(3000)
|
||||||
|
|
||||||
|
return WeatherForecastData(
|
||||||
|
location = location,
|
||||||
|
dailyForecasts.first(),
|
||||||
|
dailyForecasts = dailyForecasts.drop(1)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generates mock daily forecasts for 7 days starting from the given date.
|
||||||
|
*/
|
||||||
|
private fun generateDailyForecasts(startDate: LocalDateTime): List<DailyForecast> {
|
||||||
|
val forecasts = mutableListOf<DailyForecast>()
|
||||||
|
|
||||||
|
for (i in 0 until 8) {
|
||||||
|
val forecastDate = startDate.plusDays(i.toLong())
|
||||||
|
val temperature = (-10..40).random().toFloat()
|
||||||
|
val windSpeed = (0..30).random().toFloat()
|
||||||
|
val humidity = (30..90).random()
|
||||||
|
val weatherType = WeatherType.random()
|
||||||
|
val windDirection = WindDirection.random()
|
||||||
|
|
||||||
|
forecasts.add(
|
||||||
|
DailyForecast(
|
||||||
|
date = forecastDate,
|
||||||
|
temperature = temperature,
|
||||||
|
weatherType = weatherType,
|
||||||
|
humidity = humidity,
|
||||||
|
windSpeed = windSpeed,
|
||||||
|
windDirection = windDirection
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
return forecasts
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getRandomTime(): LocalTime {
|
||||||
|
val hour = Random.nextInt(0, 24)
|
||||||
|
val minute = Random.nextInt(0, 60)
|
||||||
|
val second = Random.nextInt(0, 60)
|
||||||
|
return LocalTime.of(hour, minute, second)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,200 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.collectAsState
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import org.jetbrains.jewel.foundation.lazy.SelectableLazyColumn
|
||||||
|
import org.jetbrains.jewel.foundation.lazy.SelectionMode
|
||||||
|
import org.jetbrains.jewel.foundation.lazy.itemsIndexed
|
||||||
|
import org.jetbrains.jewel.foundation.lazy.rememberSelectableLazyListState
|
||||||
|
import org.jetbrains.jewel.foundation.theme.JewelTheme
|
||||||
|
import org.jetbrains.jewel.ui.component.*
|
||||||
|
import org.jetbrains.jewel.ui.icon.IconKey
|
||||||
|
import org.jetbrains.jewel.ui.icons.AllIconsKeys
|
||||||
|
import org.jetbrains.plugins.template.ComposeTemplateBundle
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.*
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.components.SearchToolbarMenu
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.components.WeatherDetailsCard
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun WeatherAppSample(
|
||||||
|
myLocationViewModel: MyLocationsViewModelApi,
|
||||||
|
weatherViewModelApi: WeatherViewModelApi,
|
||||||
|
searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<Location>
|
||||||
|
) {
|
||||||
|
HorizontalSplitLayout(
|
||||||
|
first = {
|
||||||
|
LeftColumn(
|
||||||
|
myLocationViewModel,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(start = 8.dp, end = 8.dp)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
second = {
|
||||||
|
RightColumn(
|
||||||
|
myLocationViewModel,
|
||||||
|
weatherViewModelApi,
|
||||||
|
searchAutoCompletionItemProvider,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(start = 8.dp, end = 8.dp)
|
||||||
|
)
|
||||||
|
},
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(all = 8.dp),
|
||||||
|
firstPaneMinWidth = 100.dp,
|
||||||
|
secondPaneMinWidth = 300.dp,
|
||||||
|
state = rememberSplitLayoutState(.2f)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun LeftColumn(
|
||||||
|
myLocationsViewModelApi: MyLocationsViewModelApi,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
) {
|
||||||
|
Column(modifier) {
|
||||||
|
GroupHeader(
|
||||||
|
ComposeTemplateBundle.message("weather.app.my.locations.header.text"),
|
||||||
|
modifier = Modifier
|
||||||
|
.wrapContentHeight()
|
||||||
|
.fillMaxWidth()
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(10.dp))
|
||||||
|
|
||||||
|
MyLocationsListWithEmptyListPlaceholder(Modifier.fillMaxSize(), myLocationsViewModelApi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun MyLocationsListWithEmptyListPlaceholder(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
myLocationsViewModelApi: MyLocationsViewModelApi
|
||||||
|
) {
|
||||||
|
val myLocationsUIState =
|
||||||
|
myLocationsViewModelApi.myLocationsUIStateFlow.collectAsState(LocationsUIState.empty()).value
|
||||||
|
|
||||||
|
if (!myLocationsUIState.isEmpty) {
|
||||||
|
MyLocationList(myLocationsUIState, modifier, myLocationsViewModelApi)
|
||||||
|
} else {
|
||||||
|
EmptyListPlaceholder(modifier)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun EmptyListPlaceholder(
|
||||||
|
modifier: Modifier,
|
||||||
|
placeholderText: String = ComposeTemplateBundle.message("weather.app.my.locations.empty.list.placeholder.text"),
|
||||||
|
placeholderIcon: IconKey = AllIconsKeys.Actions.AddList
|
||||||
|
) {
|
||||||
|
Column(
|
||||||
|
modifier = modifier.fillMaxSize().padding(16.dp),
|
||||||
|
verticalArrangement = Arrangement.Top,
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
placeholderIcon,
|
||||||
|
contentDescription = ComposeTemplateBundle.message("weather.app.my.locations.empty.list.placeholder.icon.content.description"),
|
||||||
|
Modifier.size(32.dp),
|
||||||
|
tint = Color.White
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = placeholderText,
|
||||||
|
style = JewelTheme.defaultTextStyle,
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun MyLocationList(
|
||||||
|
myLocationsUIState: LocationsUIState,
|
||||||
|
modifier: Modifier,
|
||||||
|
myLocationsViewModelApi: MyLocationsViewModelApi
|
||||||
|
) {
|
||||||
|
val listState = rememberSelectableLazyListState()
|
||||||
|
// JEWEL-938 This will trigger on SelectableLazyColum's `onSelectedIndexesChange` callback
|
||||||
|
LaunchedEffect(myLocationsUIState) {
|
||||||
|
var lastActiveItemIndex = -1
|
||||||
|
val selectedItemKeys = mutableSetOf<String>()
|
||||||
|
myLocationsUIState.locations.forEachIndexed { index, location ->
|
||||||
|
if (index == myLocationsUIState.selectedIndex) {
|
||||||
|
if (lastActiveItemIndex == -1) {
|
||||||
|
// Only the first selected item should be active
|
||||||
|
lastActiveItemIndex = index
|
||||||
|
}
|
||||||
|
// Must match the key used in the `items()` call's `key` parameter to ensure correct item identity.
|
||||||
|
selectedItemKeys.add(location.label)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Sets the first selected item as an active item to avoid triggering on click event when user clocks on it
|
||||||
|
listState.lastActiveItemIndex = lastActiveItemIndex
|
||||||
|
// Sets keys of selected items
|
||||||
|
listState.selectedKeys = selectedItemKeys
|
||||||
|
}
|
||||||
|
|
||||||
|
SelectableLazyColumn(
|
||||||
|
modifier = modifier,
|
||||||
|
selectionMode = SelectionMode.Single,
|
||||||
|
state = listState,
|
||||||
|
onSelectedIndexesChange = { indices ->
|
||||||
|
val selectedLocationIndex = indices.firstOrNull() ?: return@SelectableLazyColumn
|
||||||
|
myLocationsViewModelApi.onLocationSelected(selectedLocationIndex)
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
itemsIndexed(
|
||||||
|
items = myLocationsUIState.locations,
|
||||||
|
key = { _, item -> item.label },
|
||||||
|
) { index, item ->
|
||||||
|
|
||||||
|
SimpleListItem(text = item.label, isSelected = myLocationsUIState.selectedIndex == index, isActive = isActive)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun RightColumn(
|
||||||
|
myLocationViewModel: MyLocationsViewModelApi,
|
||||||
|
weatherViewModelApi: WeatherViewModelApi,
|
||||||
|
searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<Location>,
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
) {
|
||||||
|
val weatherForecastData = weatherViewModelApi
|
||||||
|
.weatherForecastUIState
|
||||||
|
.collectAsState(WeatherForecastUIState.Empty).value
|
||||||
|
|
||||||
|
Column(modifier) {
|
||||||
|
SearchToolbarMenu(
|
||||||
|
searchAutoCompletionItemProvider = searchAutoCompletionItemProvider,
|
||||||
|
confirmButtonText = ComposeTemplateBundle.message("weather.app.search.toolbar.menu.add.button.text"),
|
||||||
|
onSearchPerformed = { place ->
|
||||||
|
weatherViewModelApi.onLoadWeatherForecast(place)
|
||||||
|
},
|
||||||
|
onSearchConfirmed = { place ->
|
||||||
|
myLocationViewModel.onAddLocation(place)
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
WeatherDetailsCard(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.align(Alignment.CenterHorizontally),
|
||||||
|
weatherForecastData
|
||||||
|
) { location ->
|
||||||
|
weatherViewModelApi.onLoadWeatherForecast(location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,326 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui
|
||||||
|
|
||||||
|
import com.intellij.openapi.Disposable
|
||||||
|
import kotlinx.coroutines.*
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.SelectableLocation
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.WeatherForecastData
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.WeatherForecastServiceApi
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Defines the contract for managing and observing location-related data in the application.
|
||||||
|
*
|
||||||
|
* This interface provides methods for adding, deleting, and selecting locations, as well as
|
||||||
|
* a flow to observe the list of selectable locations. Implementations are expected to handle
|
||||||
|
* location-related logic and state management.
|
||||||
|
*/
|
||||||
|
interface MyLocationsViewModelApi : Disposable {
|
||||||
|
fun onAddLocation(locationToAdd: Location)
|
||||||
|
|
||||||
|
fun onDeleteLocation(locationToDelete: Location)
|
||||||
|
|
||||||
|
fun onLocationSelected(selectedLocationIndex: Int)
|
||||||
|
|
||||||
|
val myLocationsUIStateFlow: Flow<LocationsUIState>
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Interface representing a ViewModel for managing weather-related data
|
||||||
|
* and user interactions.
|
||||||
|
*/
|
||||||
|
interface WeatherViewModelApi : Disposable {
|
||||||
|
val weatherForecastUIState: Flow<WeatherForecastUIState>
|
||||||
|
|
||||||
|
fun onLoadWeatherForecast(location: Location)
|
||||||
|
|
||||||
|
fun onReloadWeatherForecast()
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents the state of a weather data fetching process.
|
||||||
|
*
|
||||||
|
* This class is sealed, meaning it can have a fixed set of subclasses
|
||||||
|
* that represent each possible state of the process. It is designed to
|
||||||
|
* handle and encapsulate the different phases or outcomes when fetching
|
||||||
|
* weather information, such as loading, success, error, or empty state.
|
||||||
|
*
|
||||||
|
* Subclasses:
|
||||||
|
* - `Loading`: Indicates that the weather data is currently being fetched.
|
||||||
|
* - `Success`: Indicates that the weather data was successfully fetched and
|
||||||
|
* contains the loaded data of type `WeatherForecastData`.
|
||||||
|
* - `Error`: Indicates a failure in fetching the weather data, carrying the
|
||||||
|
* error message and optional cause details.
|
||||||
|
* - `Empty`: Indicates that no weather data is available, typically because
|
||||||
|
* no location has been selected.
|
||||||
|
*/
|
||||||
|
sealed class WeatherForecastUIState {
|
||||||
|
data class Loading(val location: Location) : WeatherForecastUIState()
|
||||||
|
data class Success(val weatherForecastData: WeatherForecastData) : WeatherForecastUIState()
|
||||||
|
data class Error(val message: String, val location: Location, val cause: Throwable? = null) :
|
||||||
|
WeatherForecastUIState()
|
||||||
|
|
||||||
|
object Empty : WeatherForecastUIState() // When no location is selected
|
||||||
|
|
||||||
|
fun getLocationOrNull(): Location? {
|
||||||
|
return when (this) {
|
||||||
|
Empty -> null
|
||||||
|
is Error -> location
|
||||||
|
is Loading -> location
|
||||||
|
is Success -> weatherForecastData.location
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
val isLoading: Boolean get() = this is Loading
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* UI state object for locations and selection
|
||||||
|
*/
|
||||||
|
class LocationsUIState private constructor(
|
||||||
|
val locations: List<Location>,
|
||||||
|
val selectedIndex: Int
|
||||||
|
) {
|
||||||
|
|
||||||
|
private constructor(locations: List<Location>) : this(locations, if (locations.isEmpty()) -1 else 0)
|
||||||
|
|
||||||
|
init {
|
||||||
|
if (locations.isEmpty()) {
|
||||||
|
require(selectedIndex == -1) {
|
||||||
|
"For an empty list, selected index has to be -1."
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
require(selectedIndex in locations.indices) {
|
||||||
|
"Selected index has to be in range from 0 to ${locations.lastIndex}."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the currently selected location
|
||||||
|
*/
|
||||||
|
val selectedLocation: Location?
|
||||||
|
get() = locations.getOrNull(selectedIndex)
|
||||||
|
|
||||||
|
val isEmpty: Boolean get() = locations.isEmpty()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert to UI representation with selection state
|
||||||
|
*/
|
||||||
|
fun toSelectableLocations(): List<SelectableLocation> {
|
||||||
|
return locations.mapIndexed { index, location ->
|
||||||
|
SelectableLocation(location, index == selectedIndex)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new state with a location added
|
||||||
|
*/
|
||||||
|
fun withLocationAdded(locationToAdd: Location): LocationsUIState {
|
||||||
|
val existingIndex = locations.indexOf(locationToAdd)
|
||||||
|
return if (existingIndex >= 0) {
|
||||||
|
// Location exists, just select it
|
||||||
|
LocationsUIState(locations = locations, selectedIndex = existingIndex)
|
||||||
|
} else {
|
||||||
|
// Add a new location and select it
|
||||||
|
val newLocations = locations + locationToAdd
|
||||||
|
LocationsUIState(
|
||||||
|
locations = newLocations,
|
||||||
|
selectedIndex = newLocations.lastIndex
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new state with a location removed
|
||||||
|
*/
|
||||||
|
fun withLocationDeleted(locationToRemove: Location): LocationsUIState {
|
||||||
|
val indexToDelete = locations.indexOf(locationToRemove)
|
||||||
|
if (indexToDelete < 0) return this // Location not found
|
||||||
|
|
||||||
|
val newLocations = locations - locationToRemove
|
||||||
|
|
||||||
|
val newSelectedIndex = when {
|
||||||
|
newLocations.isEmpty() -> -1
|
||||||
|
indexToDelete <= selectedIndex -> (selectedIndex - 1).coerceIn(0, newLocations.lastIndex)
|
||||||
|
else -> selectedIndex // Deleted item after selected, no change
|
||||||
|
}
|
||||||
|
|
||||||
|
return LocationsUIState(
|
||||||
|
locations = newLocations,
|
||||||
|
selectedIndex = newSelectedIndex
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create new state with different selection
|
||||||
|
*/
|
||||||
|
fun withItemAtIndexSelected(newIndex: Int): LocationsUIState {
|
||||||
|
if (newIndex == selectedIndex) return this
|
||||||
|
|
||||||
|
return LocationsUIState(locations = locations, selectedIndex = newIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun equals(other: Any?): Boolean {
|
||||||
|
if (this === other) return true
|
||||||
|
if (javaClass != other?.javaClass) return false
|
||||||
|
|
||||||
|
other as LocationsUIState
|
||||||
|
|
||||||
|
if (selectedIndex != other.selectedIndex) return false
|
||||||
|
if (locations != other.locations) return false
|
||||||
|
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun hashCode(): Int {
|
||||||
|
var result = selectedIndex
|
||||||
|
result = 31 * result + locations.hashCode()
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
/**
|
||||||
|
* Initializes a `LocationsUIState` object with the given list of locations.
|
||||||
|
* The initial selection index is set to `-1` if the list is empty or `0` if it contains locations.
|
||||||
|
*
|
||||||
|
* @param locations The list of locations to initialize the state with.
|
||||||
|
* @return The initialized `LocationsUIState` containing the provided locations and selection state.
|
||||||
|
*/
|
||||||
|
fun initial(locations: List<Location>): LocationsUIState = LocationsUIState(locations = locations)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates an empty instance of `LocationsUIState` with no locations and a default selection state.
|
||||||
|
*
|
||||||
|
* @return A `LocationsUIState` initialized with an empty list of locations.
|
||||||
|
*/
|
||||||
|
fun empty(): LocationsUIState = initial(emptyList())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A ViewModel responsible for managing the user's locations and corresponding weather data.
|
||||||
|
*
|
||||||
|
* This class coordinates the interaction between the UI, locations, and weather data. It provides
|
||||||
|
* functionality to add, delete, select locations, and reload weather forecasts. Additionally, it
|
||||||
|
* supplies observable state flows for the list of selectable locations and the currently selected
|
||||||
|
* location's weather forecast.
|
||||||
|
*
|
||||||
|
* @property myInitialLocations The initial list of user-defined locations.
|
||||||
|
* @property viewModelScope The coroutine scope in which this ViewModel operates.
|
||||||
|
* @property weatherService The service responsible for fetching weather forecasts for given locations.
|
||||||
|
*/
|
||||||
|
class WeatherAppViewModel(
|
||||||
|
myInitialLocations: List<Location>,
|
||||||
|
private val viewModelScope: CoroutineScope,
|
||||||
|
private val weatherService: WeatherForecastServiceApi,
|
||||||
|
) : MyLocationsViewModelApi, WeatherViewModelApi {
|
||||||
|
|
||||||
|
private var currentWeatherJob: Job? = null
|
||||||
|
|
||||||
|
private val _myLocationsUIStateFlow = MutableStateFlow(LocationsUIState.initial(myInitialLocations))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A state flow representing the current UI state of locations, including the list of locations
|
||||||
|
* and the selected location index. This is observed by the UI layer to render location data and
|
||||||
|
* selection state dynamically.
|
||||||
|
*
|
||||||
|
* This ensures that the state is safely encapsulated and modifications only occur through
|
||||||
|
* authorized ViewModel methods.
|
||||||
|
*
|
||||||
|
* @see LocationsUIState
|
||||||
|
*/
|
||||||
|
override val myLocationsUIStateFlow: Flow<LocationsUIState> = _myLocationsUIStateFlow.asStateFlow()
|
||||||
|
|
||||||
|
private val _weatherState = MutableStateFlow<WeatherForecastUIState>(WeatherForecastUIState.Empty)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A flow representing the current UI state of the weather forecast.
|
||||||
|
*
|
||||||
|
* This flow emits instances of [WeatherForecastUIState], which encapsulate information
|
||||||
|
* about the state of weather data loading and processing. The emitted states can represent
|
||||||
|
* scenarios such as the data being loaded, successfully fetched, an error occurring, or
|
||||||
|
* the absence of data when no location is selected.
|
||||||
|
*
|
||||||
|
* Observers of this flow can react to these state changes to update the UI accordingly.
|
||||||
|
*/
|
||||||
|
override val weatherForecastUIState: Flow<WeatherForecastUIState> = _weatherState.asStateFlow()
|
||||||
|
|
||||||
|
override fun onAddLocation(locationToAdd: Location) {
|
||||||
|
val newState = _myLocationsUIStateFlow.value.withLocationAdded(locationToAdd)
|
||||||
|
updateLocationsUIStateWith(newState)
|
||||||
|
|
||||||
|
|
||||||
|
if (_weatherState.value.getLocationOrNull() != locationToAdd) {
|
||||||
|
onReloadWeatherForecast()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDeleteLocation(locationToDelete: Location) {
|
||||||
|
val newState = _myLocationsUIStateFlow.value.withLocationDeleted(locationToDelete)
|
||||||
|
updateLocationsUIStateWith(newState)
|
||||||
|
|
||||||
|
onReloadWeatherForecast()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLocationSelected(selectedLocationIndex: Int) {
|
||||||
|
val newState = _myLocationsUIStateFlow.value.withItemAtIndexSelected(selectedLocationIndex)
|
||||||
|
updateLocationsUIStateWith(newState)
|
||||||
|
|
||||||
|
if (_weatherState.value.getLocationOrNull() != newState.selectedLocation) {
|
||||||
|
onReloadWeatherForecast()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onReloadWeatherForecast() {
|
||||||
|
_myLocationsUIStateFlow.value.selectedLocation?.let { location ->
|
||||||
|
onLoadWeatherForecast(location)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLoadWeatherForecast(location: Location) {
|
||||||
|
currentWeatherJob?.cancel()
|
||||||
|
|
||||||
|
currentWeatherJob = viewModelScope.launch {
|
||||||
|
_weatherState.value = WeatherForecastUIState.Loading(location)
|
||||||
|
|
||||||
|
weatherService.loadWeatherForecastFor(location)
|
||||||
|
.onSuccess { weatherData ->
|
||||||
|
_weatherState.value = WeatherForecastUIState.Success(weatherData)
|
||||||
|
}.onFailure { error ->
|
||||||
|
if (error is CancellationException) {
|
||||||
|
throw error
|
||||||
|
}
|
||||||
|
|
||||||
|
_weatherState.value = errorStateFor(location, error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cancels all coroutines running within the context of the ViewModel's scope.
|
||||||
|
*
|
||||||
|
* This method is used to release resources and stop ongoing tasks when the ViewModel
|
||||||
|
* is no longer needed, ensuring proper cleanup of coroutine-based operations.
|
||||||
|
*/
|
||||||
|
override fun dispose() {
|
||||||
|
viewModelScope.cancel()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun updateLocationsUIStateWith(newState: LocationsUIState) {
|
||||||
|
_myLocationsUIStateFlow.value = newState
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun errorStateFor(
|
||||||
|
location: Location,
|
||||||
|
error: Throwable
|
||||||
|
): WeatherForecastUIState.Error = WeatherForecastUIState.Error(
|
||||||
|
"Failed to load weather forecast for ${location.label}",
|
||||||
|
location,
|
||||||
|
error
|
||||||
|
)
|
||||||
|
}
|
||||||
@ -0,0 +1,63 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui
|
||||||
|
|
||||||
|
import org.jetbrains.jewel.ui.icon.IconKey
|
||||||
|
import org.jetbrains.jewel.ui.icon.PathIconKey
|
||||||
|
|
||||||
|
object WeatherIcons {
|
||||||
|
|
||||||
|
// Precipitation
|
||||||
|
val rain: IconKey = PathIconKey("icons/weather/rain.svg", WeatherIcons::class.java)
|
||||||
|
val rainThunder: IconKey = PathIconKey("icons/weather/rain_thunder.svg", WeatherIcons::class.java)
|
||||||
|
val sleet: IconKey = PathIconKey("icons/weather/sleet.svg", WeatherIcons::class.java)
|
||||||
|
val snow: IconKey = PathIconKey("icons/weather/snow.svg", WeatherIcons::class.java)
|
||||||
|
val snowThunder: IconKey = PathIconKey("icons/weather/snow_thunder.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Severe weather
|
||||||
|
val thunder: IconKey = PathIconKey("icons/weather/thunder.svg", WeatherIcons::class.java)
|
||||||
|
val tornado: IconKey = PathIconKey("icons/weather/tornado.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Angry/Storm conditions
|
||||||
|
val angryClouds: IconKey = PathIconKey("icons/weather/angry_clouds.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Basic cloud conditions
|
||||||
|
val cloudy: IconKey = PathIconKey("icons/weather/cloudy.svg", WeatherIcons::class.java)
|
||||||
|
val overcast: IconKey = PathIconKey("icons/weather/overcast.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Day conditions
|
||||||
|
val dayClear: IconKey = PathIconKey("icons/weather/day_clear.svg", WeatherIcons::class.java)
|
||||||
|
val dayPartialCloud: IconKey = PathIconKey("icons/weather/day_partial_cloud.svg", WeatherIcons::class.java)
|
||||||
|
val dayRain: IconKey = PathIconKey("icons/weather/day_rain.svg", WeatherIcons::class.java)
|
||||||
|
val dayRainThunder: IconKey = PathIconKey("icons/weather/day_rain_thunder.svg", WeatherIcons::class.java)
|
||||||
|
val daySleet: IconKey = PathIconKey("icons/weather/day_sleet.svg", WeatherIcons::class.java)
|
||||||
|
val daySnow: IconKey = PathIconKey("icons/weather/day_snow.svg", WeatherIcons::class.java)
|
||||||
|
val daySnowThunder: IconKey = PathIconKey("icons/weather/day_snow_thunder.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Atmospheric conditions
|
||||||
|
val fog: IconKey = PathIconKey("icons/weather/fog.svg", WeatherIcons::class.java)
|
||||||
|
val mist: IconKey = PathIconKey("icons/weather/mist.svg", WeatherIcons::class.java)
|
||||||
|
val wind: IconKey = PathIconKey("icons/weather/wind.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Night - Full Moon conditions
|
||||||
|
val nightFullMoonClear: IconKey = PathIconKey("icons/weather/night_full_moon_clear.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonPartialCloud: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_full_moon_partial_cloud.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonRain: IconKey = PathIconKey("icons/weather/night_full_moon_rain.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonRainThunder: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_full_moon_rain_thunder.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonSleet: IconKey = PathIconKey("icons/weather/night_full_moon_sleet.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonSnow: IconKey = PathIconKey("icons/weather/night_full_moon_snow.svg", WeatherIcons::class.java)
|
||||||
|
val nightFullMoonSnowThunder: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_full_moon_snow_thunder.svg", WeatherIcons::class.java)
|
||||||
|
|
||||||
|
// Night - Half Moon conditions
|
||||||
|
val nightHalfMoonClear: IconKey = PathIconKey("icons/weather/night_half_moon_clear.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonPartialCloud: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_half_moon_partial_cloud.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonRain: IconKey = PathIconKey("icons/weather/night_half_moon_rain.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonRainThunder: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_half_moon_rain_thunder.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonSleet: IconKey = PathIconKey("icons/weather/night_half_moon_sleet.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonSnow: IconKey = PathIconKey("icons/weather/night_half_moon_snow.svg", WeatherIcons::class.java)
|
||||||
|
val nightHalfMoonSnowThunder: IconKey =
|
||||||
|
PathIconKey("icons/weather/night_half_moon_snow_thunder.svg", WeatherIcons::class.java)
|
||||||
|
}
|
||||||
@ -0,0 +1,177 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui.components
|
||||||
|
|
||||||
|
import org.jetbrains.jewel.ui.painter.PainterProviderScope
|
||||||
|
import org.jetbrains.jewel.ui.painter.PainterSvgPatchHint
|
||||||
|
import org.w3c.dom.Document
|
||||||
|
import org.w3c.dom.Element
|
||||||
|
import org.w3c.dom.Node
|
||||||
|
import org.w3c.dom.NodeList
|
||||||
|
import java.io.IOException
|
||||||
|
import java.io.StringWriter
|
||||||
|
import javax.xml.transform.OutputKeys
|
||||||
|
import javax.xml.transform.Transformer
|
||||||
|
import javax.xml.transform.TransformerException
|
||||||
|
import javax.xml.transform.TransformerFactory
|
||||||
|
import javax.xml.transform.dom.DOMSource
|
||||||
|
import javax.xml.transform.stream.StreamResult
|
||||||
|
import javax.xml.xpath.XPathConstants
|
||||||
|
import javax.xml.xpath.XPathFactory
|
||||||
|
|
||||||
|
object EmbeddedToInlineCssSvgTransformerHint : PainterSvgPatchHint {
|
||||||
|
private val CSS_STYLEABLE_TAGS = listOf(
|
||||||
|
"linearGradient", "radialGradient", "pattern",
|
||||||
|
"filter", "clipPath", "mask", "symbol",
|
||||||
|
"marker", "font", "image"
|
||||||
|
)
|
||||||
|
|
||||||
|
override fun PainterProviderScope.patch(element: Element) {
|
||||||
|
element.inlineEmbeddedStylesCSS()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.inlineEmbeddedStylesCSS(): Element {
|
||||||
|
val svgElement = this
|
||||||
|
|
||||||
|
svgElement.moveStyleableElementsToDefsNode(CSS_STYLEABLE_TAGS)
|
||||||
|
|
||||||
|
val cache = svgElement.parseCssDefinitionsInStylesElement()
|
||||||
|
|
||||||
|
svgElement.inlineStyleDeclarations(cache)
|
||||||
|
|
||||||
|
return svgElement
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.getElementsWithAttributeXPath(attributeName: String): List<Element> {
|
||||||
|
val xPath = XPathFactory.newInstance().newXPath()
|
||||||
|
|
||||||
|
val eligibleNodes = xPath.evaluate(
|
||||||
|
"//*[@$attributeName]",
|
||||||
|
this,
|
||||||
|
XPathConstants.NODESET
|
||||||
|
) as NodeList
|
||||||
|
|
||||||
|
return buildList {
|
||||||
|
for (i in 0 until eligibleNodes.length) {
|
||||||
|
eligibleNodes.item(i)
|
||||||
|
.let { node -> if (node is Element) add(node) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun Element.inlineStyleDeclarations(cache: Map<String, Map<String, String>>) {
|
||||||
|
val classAttributeName = "class"
|
||||||
|
val styleElementName = "style"
|
||||||
|
|
||||||
|
for (element in getElementsWithAttributeXPath(classAttributeName)) {
|
||||||
|
if (element.hasAttribute(classAttributeName)) {
|
||||||
|
val cssClassId = element.getAttribute(classAttributeName)
|
||||||
|
if (cssClassId.isBlank()) continue
|
||||||
|
|
||||||
|
element.removeAttribute(classAttributeName)
|
||||||
|
|
||||||
|
// Set a new "style" attribute (example value)
|
||||||
|
val styleAttributesCache = cache[cssClassId] ?: continue
|
||||||
|
val styleAttributes = styleAttributesCache.entries.joinToString(";") { "${it.key}:${it.value}" }
|
||||||
|
element.setAttribute(styleElementName, styleAttributes)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.getSingleChildElement(styleElementName)
|
||||||
|
?.let { styleNode -> this.removeChild(styleNode) }
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.moveStyleableElementsToDefsNode(stylableElementTags: List<String>) {
|
||||||
|
// Find or create <defs> element
|
||||||
|
val defs = ensureDefsNodeExists()
|
||||||
|
|
||||||
|
// For each tag, find all elements and move those not already inside defs
|
||||||
|
stylableElementTags.forEach { tag ->
|
||||||
|
val nodes = getElementsByTagName(tag)
|
||||||
|
(0..<nodes.length)
|
||||||
|
.map { nodes.item(it) to defs }
|
||||||
|
.forEach { (nodeToMove, newParentNode) ->
|
||||||
|
if (nodeToMove.parentNode != newParentNode) {
|
||||||
|
newParentNode.appendChild(nodeToMove)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See: https://www.w3.org/TR/2018/CR-SVG2-20181004/struct.html#DefsElement
|
||||||
|
*/
|
||||||
|
private fun Element.ensureDefsNodeExists(): Node {
|
||||||
|
var defsNode = getElementsByTagName("defs").item(0)
|
||||||
|
|
||||||
|
if (defsNode == null) {
|
||||||
|
defsNode = this.ownerDocument.createElement("defs")
|
||||||
|
insertBefore(defsNode, this.firstChild)
|
||||||
|
}
|
||||||
|
return defsNode
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.parseCssDefinitionsInStylesElement(): Map<String, Map<String, String>> {
|
||||||
|
val styleNode = this.getChildElements("style")
|
||||||
|
.firstOrNull() ?: return emptyMap()
|
||||||
|
|
||||||
|
val cssClassIdRegex = Regex("""\.([^\s{]+)\s*\{\s*([^}]+)\s*}""")
|
||||||
|
|
||||||
|
return buildMap {
|
||||||
|
cssClassIdRegex.findAll(styleNode.textContent).forEach { match ->
|
||||||
|
val styleId = match.groups[1]?.value ?: return@forEach
|
||||||
|
val styleAttributes = match.groups[2]?.value ?: return@forEach
|
||||||
|
|
||||||
|
val styleAttributesMap = styleAttributes
|
||||||
|
.split(";")
|
||||||
|
.filter { it.isNotBlank() }
|
||||||
|
.associate { attributeKeyValue ->
|
||||||
|
val (key, value) = attributeKeyValue.trim().split(":")
|
||||||
|
key.trim() to value.trim()
|
||||||
|
}
|
||||||
|
|
||||||
|
this[styleId] = styleAttributesMap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.getChildElements(tagName: String): List<Element> {
|
||||||
|
val childNodes = childNodes
|
||||||
|
val result = ArrayList<Element>()
|
||||||
|
for (i in 0 until childNodes.length) {
|
||||||
|
val node = childNodes.item(i)
|
||||||
|
if (node is Element && tagName == node.tagName) {
|
||||||
|
result.add(node)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Element.getSingleChildElement(tagName: String): Element? {
|
||||||
|
return getChildElements(tagName).getOrNull(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
private class PrintableElement(private val element: Element) {
|
||||||
|
|
||||||
|
fun writeToString(): String {
|
||||||
|
return element.ownerDocument.writeToString()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun Document.writeToString(): String {
|
||||||
|
val tf = TransformerFactory.newInstance()
|
||||||
|
val transformer: Transformer
|
||||||
|
|
||||||
|
try {
|
||||||
|
transformer = tf.newTransformer()
|
||||||
|
transformer.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes")
|
||||||
|
|
||||||
|
val writer = StringWriter()
|
||||||
|
transformer.transform(DOMSource(this), StreamResult(writer))
|
||||||
|
return writer.buffer.toString()
|
||||||
|
} catch (e: TransformerException) {
|
||||||
|
error("Unable to render XML document to string: ${e.message}")
|
||||||
|
} catch (e: IOException) {
|
||||||
|
error("Unable to render XML document to string: ${e.message}")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,84 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui.components
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.text.input.rememberTextFieldState
|
||||||
|
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import org.jetbrains.jewel.ui.component.Icon
|
||||||
|
import org.jetbrains.jewel.ui.component.OutlinedButton
|
||||||
|
import org.jetbrains.jewel.ui.component.Text
|
||||||
|
import org.jetbrains.jewel.ui.icons.AllIconsKeys
|
||||||
|
import org.jetbrains.plugins.template.ComposeTemplateBundle
|
||||||
|
import org.jetbrains.plugins.template.components.SearchBarWithAutoCompletion
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.PreviewableItem
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Searchable
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.SearchAutoCompletionItemProvider
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun <T> SearchToolbarMenu(
|
||||||
|
searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<T>,
|
||||||
|
confirmButtonText: String = "Confirm",
|
||||||
|
onSearchPerformed: (T) -> Unit = {},
|
||||||
|
onSearchConfirmed: (T) -> Unit = {},
|
||||||
|
) where T : Searchable, T : PreviewableItem {
|
||||||
|
val isConfirmButtonVisible = remember { mutableStateOf(false) }
|
||||||
|
val previewItem = remember { mutableStateOf<T?>(null) }
|
||||||
|
val searchTextFieldState = rememberTextFieldState("")
|
||||||
|
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.padding(horizontal = 2.dp, vertical = 4.dp)
|
||||||
|
.wrapContentHeight(),
|
||||||
|
horizontalArrangement = Arrangement.End,
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
) {
|
||||||
|
|
||||||
|
if (isConfirmButtonVisible.value) {
|
||||||
|
OutlinedButton(
|
||||||
|
onClick = {
|
||||||
|
previewItem.value?.let { onSearchConfirmed(it) }
|
||||||
|
|
||||||
|
searchTextFieldState.setTextAndPlaceCursorAtEnd("")
|
||||||
|
isConfirmButtonVisible.value = false
|
||||||
|
previewItem.value = null
|
||||||
|
},
|
||||||
|
modifier = Modifier
|
||||||
|
.align(Alignment.CenterVertically),
|
||||||
|
) {
|
||||||
|
Row(horizontalArrangement = Arrangement.spacedBy(4.dp)) {
|
||||||
|
Icon(
|
||||||
|
AllIconsKeys.Actions.AddList,
|
||||||
|
contentDescription = ComposeTemplateBundle.message("weather.app.search.toolbar.menu.add.button.content.description")
|
||||||
|
)
|
||||||
|
Text(confirmButtonText)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.width(4.dp))
|
||||||
|
|
||||||
|
SearchBarWithAutoCompletion(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth(0.4f)
|
||||||
|
.align(Alignment.CenterVertically),
|
||||||
|
searchAutoCompletionItemProvider = searchAutoCompletionItemProvider,
|
||||||
|
textFieldState = searchTextFieldState,
|
||||||
|
onClear = {
|
||||||
|
isConfirmButtonVisible.value = false
|
||||||
|
previewItem.value = null
|
||||||
|
},
|
||||||
|
onSelectCompletion = { autocompletedItem ->
|
||||||
|
isConfirmButtonVisible.value = true
|
||||||
|
previewItem.value = autocompletedItem
|
||||||
|
onSearchPerformed(autocompletedItem)
|
||||||
|
},
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,667 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.ui.components
|
||||||
|
|
||||||
|
import androidx.compose.animation.core.*
|
||||||
|
import androidx.compose.foundation.ExperimentalFoundationApi
|
||||||
|
import androidx.compose.foundation.background
|
||||||
|
import androidx.compose.foundation.border
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.foundation.lazy.LazyRow
|
||||||
|
import androidx.compose.foundation.lazy.items
|
||||||
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.draw.clip
|
||||||
|
import androidx.compose.ui.draw.rotate
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.text.font.FontWeight
|
||||||
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import org.jetbrains.jewel.foundation.theme.JewelTheme
|
||||||
|
import org.jetbrains.jewel.ui.component.*
|
||||||
|
import org.jetbrains.jewel.ui.icons.AllIconsKeys
|
||||||
|
import org.jetbrains.plugins.template.ComposeTemplateBundle
|
||||||
|
import org.jetbrains.plugins.template.components.PulsingText
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.WeatherAppColors
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.DailyForecast
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.WeatherForecastData
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherForecastUIState
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.WeatherIcons
|
||||||
|
import java.time.LocalDateTime
|
||||||
|
import java.time.format.DateTimeFormatter
|
||||||
|
import java.time.format.TextStyle
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Displays the weather details in a styled card format. This card presents various weather information
|
||||||
|
* including the current time, temperature, city name, wind details, humidity, and a 7-day forecast.
|
||||||
|
* The appearance and content dynamically change based on the given weather state.
|
||||||
|
*
|
||||||
|
* @param modifier Modifier to be applied to the card layout.
|
||||||
|
* @param weatherForecastState The current state of the weather forecast, which dictates the displayed content
|
||||||
|
* and appearance. It can represent loading, success, error, or empty states.
|
||||||
|
* @param onReloadWeatherData Callback invoked to reload weather data when the refresh action is triggered. It
|
||||||
|
* provides the location for which the weather data should be fetched.
|
||||||
|
*/
|
||||||
|
@OptIn(ExperimentalFoundationApi::class)
|
||||||
|
@Composable
|
||||||
|
fun WeatherDetailsCard(
|
||||||
|
modifier: Modifier = Modifier,
|
||||||
|
weatherForecastState: WeatherForecastUIState,
|
||||||
|
onReloadWeatherData: (Location) -> Unit
|
||||||
|
) {
|
||||||
|
|
||||||
|
val (cardColor, textColor) = when (weatherForecastState) {
|
||||||
|
is WeatherForecastUIState.Success -> {
|
||||||
|
val isNightTime = isNightTime(weatherForecastState.weatherForecastData.currentWeatherForecast.date)
|
||||||
|
val color =
|
||||||
|
getCardColorByTemperature(
|
||||||
|
weatherForecastState.weatherForecastData.currentWeatherForecast.temperature,
|
||||||
|
isNightTime
|
||||||
|
)
|
||||||
|
color to Color.White
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Loading -> WeatherAppColors.mildWeatherColor to Color.White
|
||||||
|
is WeatherForecastUIState.Error -> WeatherAppColors.hotWeatherColor to Color.White // Brown for errors
|
||||||
|
is WeatherForecastUIState.Empty -> WeatherAppColors.coolWeatherColor to Color.White
|
||||||
|
}
|
||||||
|
|
||||||
|
VerticallyScrollableContainer(modifier = modifier.safeContentPadding()) {
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.clip(RoundedCornerShape(16.dp))
|
||||||
|
.background(cardColor)
|
||||||
|
.padding(16.dp)
|
||||||
|
) {
|
||||||
|
|
||||||
|
// Card content
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
// Current Time
|
||||||
|
TimeDisplay(weatherForecastState, textColor)
|
||||||
|
|
||||||
|
ActionButton(
|
||||||
|
modifier = Modifier
|
||||||
|
.clip(RoundedCornerShape(8.dp))
|
||||||
|
.background(Color.Transparent)
|
||||||
|
.padding(8.dp),
|
||||||
|
tooltip = { Text("Refresh weather data") },
|
||||||
|
onClick = {
|
||||||
|
weatherForecastState.getLocationOrNull()?.let { onReloadWeatherData(it) }
|
||||||
|
},
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
key = AllIconsKeys.Actions.Refresh,
|
||||||
|
contentDescription = "Refresh",
|
||||||
|
tint = Color.White
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
|
|
||||||
|
// Temperature and weather type column (vertically aligned)
|
||||||
|
Column(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally
|
||||||
|
) {
|
||||||
|
|
||||||
|
WeatherIconDisplay(weatherForecastState)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
TemperatureDisplay(weatherForecastState, textColor)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// City name
|
||||||
|
CityNameDisplay(weatherForecastState, textColor)
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
|
|
||||||
|
// Wind and humidity info
|
||||||
|
WeatherDetailsRow(Modifier.fillMaxWidth(), weatherForecastState, textColor)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(24.dp))
|
||||||
|
|
||||||
|
// 7-day forecast section
|
||||||
|
SevenDaysForecastWidget(
|
||||||
|
weatherForecastState,
|
||||||
|
textColor,
|
||||||
|
Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.wrapContentHeight()
|
||||||
|
.align(Alignment.CenterHorizontally)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun SevenDaysForecastWidget(
|
||||||
|
weatherForecastData: WeatherForecastData,
|
||||||
|
modifier: Modifier,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
if (weatherForecastData.dailyForecasts.isNotEmpty()) {
|
||||||
|
Column(modifier) {
|
||||||
|
Text(
|
||||||
|
text = ComposeTemplateBundle.message("weather.app.7days.forecast.title.text"),
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 18.sp,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
modifier = Modifier.padding(bottom = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
val scrollState = rememberLazyListState()
|
||||||
|
|
||||||
|
HorizontallyScrollableContainer(
|
||||||
|
modifier = Modifier.fillMaxWidth().safeContentPadding(),
|
||||||
|
scrollState = scrollState,
|
||||||
|
) {
|
||||||
|
LazyRow(
|
||||||
|
state = scrollState,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth(),
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
) {
|
||||||
|
items(weatherForecastData.dailyForecasts) { forecast ->
|
||||||
|
DayForecastItem(
|
||||||
|
forecast = forecast,
|
||||||
|
currentDate = weatherForecastData.currentWeatherForecast.date,
|
||||||
|
textColor = textColor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A composable function that displays a single day's forecast.
|
||||||
|
*
|
||||||
|
* @param forecast The forecast data for a single day
|
||||||
|
* @param currentDate The current date for determining relative day names (Today, Tomorrow)
|
||||||
|
* @param textColor The color of the text
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun DayForecastItem(
|
||||||
|
forecast: DailyForecast,
|
||||||
|
currentDate: LocalDateTime,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
val dayName = getDayName(forecast.date, currentDate)
|
||||||
|
val date = formatDateTime(forecast.date, showYear = false, showTime = false)
|
||||||
|
Column(
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
modifier = Modifier
|
||||||
|
.width(120.dp)
|
||||||
|
.border(1.dp, textColor.copy(alpha = 0.3f), RoundedCornerShape(8.dp))
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
// Day name
|
||||||
|
Text(
|
||||||
|
text = dayName,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 14.sp,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
|
|
||||||
|
Text(
|
||||||
|
text = date,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 10.sp,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
textAlign = TextAlign.Center
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// Weather icon
|
||||||
|
Icon(
|
||||||
|
key = if (isNightTime(forecast.date)) forecast.weatherType.nightIconKey else forecast.weatherType.dayIconKey,
|
||||||
|
contentDescription = forecast.weatherType.label,
|
||||||
|
hint = EmbeddedToInlineCssSvgTransformerHint,
|
||||||
|
modifier = Modifier.size(48.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// Temperature
|
||||||
|
Text(
|
||||||
|
text = ComposeTemplateBundle.message(
|
||||||
|
"weather.app.temperature.text",
|
||||||
|
forecast.temperature.toInt()
|
||||||
|
),
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 16.sp,
|
||||||
|
fontWeight = FontWeight.Bold
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// Humidity
|
||||||
|
Text(
|
||||||
|
text = ComposeTemplateBundle.message(
|
||||||
|
"weather.app.humidity.text",
|
||||||
|
forecast.humidity
|
||||||
|
),
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 12.sp
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
// Wind direction
|
||||||
|
Text(
|
||||||
|
text = ComposeTemplateBundle.message(
|
||||||
|
"weather.app.wind.direction.text",
|
||||||
|
forecast.windSpeed.toInt(),
|
||||||
|
forecast.windDirection.label
|
||||||
|
),
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 12.sp
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Time display component with loading state
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun TimeDisplay(
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
val text = when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> formatDateTime(weatherState.weatherForecastData.currentWeatherForecast.date)
|
||||||
|
else -> "-"
|
||||||
|
}.let { time -> ComposeTemplateBundle.message("weather.app.time.text", time) }
|
||||||
|
|
||||||
|
PulsingText(
|
||||||
|
text,
|
||||||
|
weatherState.isLoading,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = JewelTheme.defaultTextStyle.fontSize,
|
||||||
|
fontWeight = FontWeight.Bold
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Weather icon that shows spinning progress during loading
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun WeatherIconDisplay(
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
modifier: Modifier = Modifier
|
||||||
|
) {
|
||||||
|
when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Loading -> {
|
||||||
|
val infiniteTransition = rememberInfiniteTransition(label = "rotating_weather_icon")
|
||||||
|
|
||||||
|
val rotation = infiniteTransition.animateFloat(
|
||||||
|
initialValue = 0f,
|
||||||
|
targetValue = 360f,
|
||||||
|
animationSpec = infiniteRepeatable(
|
||||||
|
animation = tween(
|
||||||
|
durationMillis = 3000, // 3 seconds per rotation
|
||||||
|
easing = FastOutSlowInEasing
|
||||||
|
),
|
||||||
|
repeatMode = RepeatMode.Reverse
|
||||||
|
),
|
||||||
|
label = "icon_rotation"
|
||||||
|
).value
|
||||||
|
|
||||||
|
Icon(
|
||||||
|
key = WeatherIcons.dayClear,
|
||||||
|
contentDescription = null,
|
||||||
|
modifier = modifier.rotate(rotation),
|
||||||
|
hint = EmbeddedToInlineCssSvgTransformerHint
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Success -> {
|
||||||
|
val currentForecast = weatherState.weatherForecastData.currentWeatherForecast
|
||||||
|
val isNightTime = isNightTime(currentForecast.date)
|
||||||
|
|
||||||
|
Icon(
|
||||||
|
key = if (isNightTime) {
|
||||||
|
currentForecast.weatherType.nightIconKey
|
||||||
|
} else {
|
||||||
|
currentForecast.weatherType.dayIconKey
|
||||||
|
},
|
||||||
|
contentDescription = currentForecast.weatherType.label,
|
||||||
|
hint = EmbeddedToInlineCssSvgTransformerHint,
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Error -> {
|
||||||
|
Icon(
|
||||||
|
key = AllIconsKeys.General.Warning,
|
||||||
|
contentDescription = "Weather data error",
|
||||||
|
tint = Color.White.copy(alpha = 0.8f),
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Empty -> {
|
||||||
|
Icon(
|
||||||
|
key = AllIconsKeys.Actions.Find,
|
||||||
|
contentDescription = "No location selected",
|
||||||
|
tint = Color.White.copy(alpha = 0.6f),
|
||||||
|
modifier = modifier
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Temperature display with loading animation
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun TemperatureDisplay(
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
val temperatureText = when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> ComposeTemplateBundle.message(
|
||||||
|
"weather.app.temperature.text",
|
||||||
|
weatherState.weatherForecastData.currentWeatherForecast.temperature.toInt()
|
||||||
|
)
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Loading -> "--°"
|
||||||
|
is WeatherForecastUIState.Error -> "N/A°"
|
||||||
|
is WeatherForecastUIState.Empty -> "--°"
|
||||||
|
}
|
||||||
|
|
||||||
|
PulsingText(
|
||||||
|
text = temperatureText,
|
||||||
|
isLoading = weatherState.isLoading,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 32.sp,
|
||||||
|
fontWeight = FontWeight.ExtraBold
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* City name display that shows "Loading..." during loading state
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun CityNameDisplay(
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
val loadingText = when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> weatherState.weatherForecastData.location.label
|
||||||
|
is WeatherForecastUIState.Loading -> weatherState.location.label
|
||||||
|
is WeatherForecastUIState.Error -> "weatherState.location.label} - Error"
|
||||||
|
is WeatherForecastUIState.Empty -> "Select a location"
|
||||||
|
}
|
||||||
|
|
||||||
|
PulsingText(
|
||||||
|
text = loadingText,
|
||||||
|
isLoading = weatherState.isLoading,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 18.sp,
|
||||||
|
fontWeight = FontWeight.Bold
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Composable function to display a row of weather details including wind and humidity information.
|
||||||
|
*
|
||||||
|
* @param modifier A [Modifier] that can be used to customize the layout or add behavior to the composable.
|
||||||
|
* @param weatherState The current state of the weather forecast, represented by [WeatherForecastUIState].
|
||||||
|
* This determines the display of wind and humidity information based on state.
|
||||||
|
* @param textColor The color to be applied to the text of the weather details.
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun WeatherDetailsRow(
|
||||||
|
modifier: Modifier,
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
textColor: Color
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = modifier,
|
||||||
|
horizontalArrangement = Arrangement.SpaceBetween
|
||||||
|
) {
|
||||||
|
// Wind info
|
||||||
|
val windText = when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> {
|
||||||
|
val forecast = weatherState.weatherForecastData.currentWeatherForecast
|
||||||
|
ComposeTemplateBundle.message(
|
||||||
|
"weather.app.wind.direction.text",
|
||||||
|
forecast.windSpeed.toInt(),
|
||||||
|
forecast.windDirection.label
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Loading -> "Wind: --"
|
||||||
|
is WeatherForecastUIState.Error -> "Wind: N/A"
|
||||||
|
is WeatherForecastUIState.Empty -> "Wind: --"
|
||||||
|
}
|
||||||
|
|
||||||
|
PulsingText(
|
||||||
|
windText,
|
||||||
|
weatherState.isLoading,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 18.sp
|
||||||
|
)
|
||||||
|
|
||||||
|
// Humidity info
|
||||||
|
val humidityText = when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> ComposeTemplateBundle.message(
|
||||||
|
"weather.app.humidity.text",
|
||||||
|
weatherState.weatherForecastData.currentWeatherForecast.humidity
|
||||||
|
)
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Loading -> "Humidity: -- %"
|
||||||
|
is WeatherForecastUIState.Error -> "Humidity: N/A"
|
||||||
|
is WeatherForecastUIState.Empty -> "Humidity: -- %"
|
||||||
|
}
|
||||||
|
PulsingText(
|
||||||
|
text = humidityText,
|
||||||
|
weatherState.isLoading,
|
||||||
|
color = textColor,
|
||||||
|
fontSize = 18.sp
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Forecast section that shows skeleton during loading
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun SevenDaysForecastWidget(
|
||||||
|
weatherState: WeatherForecastUIState,
|
||||||
|
textColor: Color,
|
||||||
|
modifier: Modifier
|
||||||
|
) {
|
||||||
|
when (weatherState) {
|
||||||
|
is WeatherForecastUIState.Success -> {
|
||||||
|
if (weatherState.weatherForecastData.dailyForecasts.isNotEmpty()) {
|
||||||
|
SevenDaysForecastWidget(
|
||||||
|
weatherState.weatherForecastData,
|
||||||
|
modifier,
|
||||||
|
textColor
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is WeatherForecastUIState.Loading -> LoadingForecastSkeleton(textColor)
|
||||||
|
is WeatherForecastUIState.Error -> ErrorForecastMessage(textColor)
|
||||||
|
is WeatherForecastUIState.Empty -> EmptyForecastMessage(textColor)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loading skeleton for forecast section
|
||||||
|
*/
|
||||||
|
@Composable
|
||||||
|
private fun LoadingForecastSkeleton(textColor: Color) {
|
||||||
|
Column {
|
||||||
|
Text(
|
||||||
|
text = ComposeTemplateBundle.message("weather.app.7days.forecast.title.text"),
|
||||||
|
color = textColor.copy(alpha = 0.7f),
|
||||||
|
fontSize = 18.sp,
|
||||||
|
fontWeight = FontWeight.Bold,
|
||||||
|
modifier = Modifier.padding(bottom = 8.dp)
|
||||||
|
)
|
||||||
|
|
||||||
|
val scrollState = rememberLazyListState()
|
||||||
|
HorizontallyScrollableContainer(
|
||||||
|
modifier = Modifier.fillMaxWidth().safeContentPadding(),
|
||||||
|
scrollState = scrollState,
|
||||||
|
) {
|
||||||
|
LazyRow(
|
||||||
|
state = scrollState,
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth(),
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(8.dp),
|
||||||
|
) {
|
||||||
|
items(count = 7) { LoadingForecastItem(textColor) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun LoadingForecastItem(textColor: Color) {
|
||||||
|
val infiniteTransition = rememberInfiniteTransition()
|
||||||
|
val alpha = infiniteTransition.animateFloat(
|
||||||
|
initialValue = 0.3f,
|
||||||
|
targetValue = 0.6f,
|
||||||
|
animationSpec = infiniteRepeatable(
|
||||||
|
animation = tween(1000),
|
||||||
|
repeatMode = RepeatMode.Reverse
|
||||||
|
)
|
||||||
|
).value
|
||||||
|
|
||||||
|
Column(
|
||||||
|
horizontalAlignment = Alignment.CenterHorizontally,
|
||||||
|
modifier = Modifier
|
||||||
|
.width(120.dp)
|
||||||
|
.border(1.dp, textColor.copy(alpha = 0.3f), RoundedCornerShape(8.dp))
|
||||||
|
.padding(8.dp)
|
||||||
|
) {
|
||||||
|
Text("--", color = textColor.copy(alpha = alpha), fontSize = 14.sp)
|
||||||
|
Text("", color = textColor.copy(alpha = alpha), fontSize = 14.sp)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.size(48.dp)
|
||||||
|
.background(textColor.copy(alpha = alpha), RoundedCornerShape(4.dp))
|
||||||
|
)
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.height(8.dp))
|
||||||
|
|
||||||
|
Text("--°", color = textColor.copy(alpha = alpha), fontSize = 16.sp)
|
||||||
|
Text("", color = textColor.copy(alpha = alpha), fontSize = 14.sp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun ErrorForecastMessage(textColor: Color) {
|
||||||
|
Text(
|
||||||
|
text = "Forecast unavailable",
|
||||||
|
color = textColor.copy(alpha = 0.7f),
|
||||||
|
fontSize = 16.sp,
|
||||||
|
textAlign = TextAlign.Center,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
private fun EmptyForecastMessage(textColor: Color) {
|
||||||
|
Text(
|
||||||
|
text = "Select a location to view forecast",
|
||||||
|
color = textColor.copy(alpha = 0.7f),
|
||||||
|
fontSize = 16.sp,
|
||||||
|
textAlign = TextAlign.Center,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the day name for a given date relative to the current date.
|
||||||
|
* Returns "Today" for the current date, "Tomorrow" for the next day,
|
||||||
|
* and the day of week plus date for other days.
|
||||||
|
*/
|
||||||
|
private fun getDayName(date: LocalDateTime, currentDate: LocalDateTime): String {
|
||||||
|
val daysDifference = date.toLocalDate().toEpochDay() - currentDate.toLocalDate().toEpochDay()
|
||||||
|
|
||||||
|
return when (daysDifference) {
|
||||||
|
0L -> "Today"
|
||||||
|
1L -> "Tomorrow"
|
||||||
|
else -> {
|
||||||
|
val dayOfWeek = date.dayOfWeek.getDisplayName(TextStyle.SHORT, Locale.getDefault())
|
||||||
|
date.dayOfMonth
|
||||||
|
"$dayOfWeek"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Determines if it's night time based on the current hour.
|
||||||
|
* Night time is considered to be between 7 PM (19:00) and 6 AM (6:00).
|
||||||
|
*/
|
||||||
|
fun isNightTime(dateTime: LocalDateTime): Boolean {
|
||||||
|
val hour = dateTime.hour
|
||||||
|
return hour !in 6..<19
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns a color based on the temperature and whether it's night time.
|
||||||
|
* - Cold temperatures: blue/purple
|
||||||
|
* - Warm temperatures: red/pink
|
||||||
|
* - Night time: darker shades
|
||||||
|
*/
|
||||||
|
fun getCardColorByTemperature(temperature: Float, isNightTime: Boolean): Color {
|
||||||
|
return when {
|
||||||
|
isNightTime -> WeatherAppColors.nightWeatherColor
|
||||||
|
temperature < 0 -> WeatherAppColors.coldWeatherColor
|
||||||
|
temperature < 10 -> WeatherAppColors.coolWeatherColor
|
||||||
|
temperature < 20 -> WeatherAppColors.mildWeatherColor
|
||||||
|
temperature < 30 -> WeatherAppColors.warmWeatherColor
|
||||||
|
else -> WeatherAppColors.hotWeatherColor
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Formats the date time to a readable string.
|
||||||
|
*/
|
||||||
|
fun formatDateTime(
|
||||||
|
dateTime: LocalDateTime,
|
||||||
|
showYear: Boolean = true,
|
||||||
|
showTime: Boolean = true
|
||||||
|
): String {
|
||||||
|
val dateFormattingPattern = buildString {
|
||||||
|
append("dd MMM")
|
||||||
|
if (showYear) append(" yyyy")
|
||||||
|
if (showTime) append(", HH:mm")
|
||||||
|
}
|
||||||
|
|
||||||
|
val formatter = DateTimeFormatter.ofPattern(dateFormattingPattern)
|
||||||
|
return dateTime.format(formatter)
|
||||||
|
}
|
||||||
@ -14,6 +14,6 @@
|
|||||||
<resource-bundle>messages.ComposeTemplate</resource-bundle>
|
<resource-bundle>messages.ComposeTemplate</resource-bundle>
|
||||||
|
|
||||||
<extensions defaultExtensionNs="com.intellij">
|
<extensions defaultExtensionNs="com.intellij">
|
||||||
<toolWindow factoryClass="org.jetbrains.plugins.template.toolWindow.MyToolWindowFactory" id="MyToolWindow"/>
|
<toolWindow factoryClass="org.jetbrains.plugins.template.toolWindow.ComposeSamplesToolWindowFactory" id="ComposeSamplesToolWindow"/>
|
||||||
</extensions>
|
</extensions>
|
||||||
</idea-plugin>
|
</idea-plugin>
|
||||||
|
|||||||
25
src/main/resources/icons/weather/angry_clouds.svg
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BBBBBC;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#999999;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
25
src/main/resources/icons/weather/cloudy.svg
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
86
src/main/resources/icons/weather/day_clear.svg
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_3_);}
|
||||||
|
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_4_);}
|
||||||
|
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_5_);}
|
||||||
|
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_6_);}
|
||||||
|
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_7_);}
|
||||||
|
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_8_);}
|
||||||
|
.st7{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_9_);}
|
||||||
|
.st8{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_10_);}
|
||||||
|
.st9{opacity:0.5;fill:#D58128;}
|
||||||
|
.st10{opacity:0.2;fill:#D58128;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="261.0342" y1="14.0686" x2="261.0342" y2="349.5351" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E29F25"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st0" cx="256.2" cy="255.4" r="167.7"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="417.1527" y1="-7.9987" x2="417.1527" y2="60.5246" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st1" d="M487.1,134.8c-5.1-9.8-17.3-13.6-27.1-8.5L424.4,145c-9.8,5.1-13.6,17.3-8.5,27.1
|
||||||
|
c5.1,9.8,17.3,13.6,27.1,8.5l35.6-18.6C488.4,156.8,492.2,144.6,487.1,134.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="104.9157" y1="304.2383" x2="104.9157" y2="372.7617" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st2" d="M96,339.9c-5.1-9.8-17.3-13.6-27.1-8.5l-35.6,18.6c-9.8,5.1-13.6,17.3-8.5,27.1
|
||||||
|
c5.1,9.8,17.3,13.6,27.1,8.5L87.6,367C97.4,361.8,101.2,349.7,96,339.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="481.8142" y1="162.2933" x2="481.8142" y2="202.4319" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st3" d="M505.1,333.7c3.3-10.6-2.6-21.8-13.2-25.1l-38.3-12c-10.6-3.3-21.8,2.6-25.1,13.2
|
||||||
|
c-3.3,10.6,2.6,21.8,13.2,25.1l38.3,12C490.5,350.2,501.8,344.3,505.1,333.7z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="40.2544" y1="162.3311" x2="40.2544" y2="202.4697" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st4" d="M83.6,202.2c3.3-10.6-2.6-21.8-13.2-25.1l-38.3-12c-10.6-3.3-21.8,2.6-25.1,13.2
|
||||||
|
c-3.3,10.6,2.6,21.8,13.2,25.1l38.3,12C69,218.7,80.2,212.8,83.6,202.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="104.9157" y1="-7.9987" x2="104.9157" y2="60.5246" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st5" d="M134.8,24.9c-9.8,5.1-13.6,17.3-8.5,27.1L145,87.6c5.1,9.8,17.3,13.6,27.1,8.5
|
||||||
|
c9.8-5.1,13.6-17.3,8.5-27.1l-18.6-35.6C156.8,23.6,144.6,19.8,134.8,24.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="417.1527" y1="304.2383" x2="417.1527" y2="372.7617" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st6" d="M339.9,416c-9.8,5.1-13.6,17.3-8.5,27.1l18.6,35.6c5.1,9.8,17.3,13.6,27.1,8.5
|
||||||
|
c9.8-5.1,13.6-17.3,8.5-27.1L367,424.4C361.8,414.6,349.7,410.8,339.9,416z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="261.0533" y1="363.0227" x2="261.0533" y2="443.2999" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st7" d="M178.3,505.1c10.6,3.3,21.8-2.6,25.1-13.2l12-38.3c3.3-10.6-2.6-21.8-13.2-25.1
|
||||||
|
c-10.6-3.3-21.8,2.6-25.1,13.2l-12,38.3C161.8,490.5,167.7,501.8,178.3,505.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="261.0155" y1="-78.5369" x2="261.0155" y2="1.7398" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.1308 4.1511)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="1" style="stop-color:#E6A323"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st8" d="M309.8,83.6c10.6,3.3,21.8-2.6,25.1-13.2l12-38.3c3.3-10.6-2.6-21.8-13.2-25.1
|
||||||
|
s-21.8,2.6-25.1,13.2l-12,38.3C293.3,69,299.2,80.2,309.8,83.6z"/>
|
||||||
|
<path id="XMLID_470_" class="st9" d="M248.7,422.5c43.6,1.4,93.8-14.3,123.7-47.2c-31.8,16.3-73.6,35.4-121.5,33.9
|
||||||
|
c-47.9-1.5-73.3-12.5-100-24.4C173.1,402.8,204.5,421.1,248.7,422.5z"/>
|
||||||
|
<path id="XMLID_469_" class="st10" d="M263.3,86.3c-43.1-1.4-92.8,14.4-122.4,47.2c31.5-16.3,72.8-35.4,120.1-33.9
|
||||||
|
c47.3,1.5,72.5,12.5,98.9,24.4C338,105.9,307,87.6,263.3,86.3z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.7 KiB |
104
src/main/resources/icons/weather/day_partial_cloud.svg
Normal file
@ -0,0 +1,104 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill:url(#XMLID_3_);}
|
||||||
|
.st2{fill:url(#XMLID_4_);}
|
||||||
|
.st3{fill:url(#XMLID_5_);}
|
||||||
|
.st4{fill:url(#XMLID_6_);}
|
||||||
|
.st5{fill:url(#XMLID_7_);}
|
||||||
|
.st6{fill:url(#XMLID_8_);}
|
||||||
|
.st7{fill:url(#XMLID_9_);}
|
||||||
|
.st8{fill:url(#XMLID_10_);}
|
||||||
|
.st9{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st10{opacity:0.2;fill:#D58128;enable-background:new ;}
|
||||||
|
.st11{fill:#BEC6D2;}
|
||||||
|
.st12{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st13{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="107.1837" y1="17.7359" x2="107.1837" y2="188.3861" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st0" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="186.5537" y1="6.5909" x2="186.5537" y2="41.4178" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st1" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="27.879" y1="165.2937" x2="27.879" y2="200.1207" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st2" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8s8.8,6.9,13.8,4.3
|
||||||
|
l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="219.4633" y1="93.1504" x2="219.4633" y2="113.5508" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st3" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
s1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="-4.9654" y1="93.1635" x2="-4.9654" y2="113.5824" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st4" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="27.9626" y1="6.6009" x2="27.9626" y2="41.4278" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st5" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8L76.7,49c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="186.6133" y1="165.2824" x2="186.6133" y2="200.1094" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st6" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="107.2838" y1="195.1708" x2="107.2838" y2="235.9716" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st7" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2623" y1="-29.2752" x2="107.2623" y2="11.5253" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st8" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
s-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st9" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2s-37.3-6.4-50.8-12.4
|
||||||
|
C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st10" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st11" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st12" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st13" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st11" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.8 KiB |
111
src/main/resources/icons/weather/day_rain.svg
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill:url(#XMLID_3_);}
|
||||||
|
.st2{fill:url(#XMLID_4_);}
|
||||||
|
.st3{fill:url(#XMLID_5_);}
|
||||||
|
.st4{fill:url(#XMLID_6_);}
|
||||||
|
.st5{fill:url(#XMLID_7_);}
|
||||||
|
.st6{fill:url(#XMLID_8_);}
|
||||||
|
.st7{fill:url(#XMLID_9_);}
|
||||||
|
.st8{fill:url(#XMLID_10_);}
|
||||||
|
.st9{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st10{opacity:0.2;fill:#D58128;enable-background:new ;}
|
||||||
|
.st11{fill:#BEC6D2;}
|
||||||
|
.st12{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st13{fill:#D3DEE2;}
|
||||||
|
.st14{fill-rule:evenodd;clip-rule:evenodd;fill:#00ADEE;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="107.1837" y1="494.264" x2="107.1837" y2="323.6139" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st0" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="186.5538" y1="505.4091" x2="186.5538" y2="470.5822" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st1" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="27.879" y1="346.7063" x2="27.879" y2="311.8793" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st2" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8s8.8,6.9,13.8,4.3
|
||||||
|
l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="219.4633" y1="418.8496" x2="219.4633" y2="398.4492" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st3" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
s1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="-4.9654" y1="418.8365" x2="-4.9654" y2="398.4176" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st4" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="27.9626" y1="505.3991" x2="27.9626" y2="470.5722" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st5" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8L76.7,49c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="186.6133" y1="346.7176" x2="186.6133" y2="311.8906" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st6" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="107.2838" y1="316.8292" x2="107.2838" y2="276.0284" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st7" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2623" y1="541.2752" x2="107.2623" y2="500.4747" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st8" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
s-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st9" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2s-37.3-6.4-50.8-12.4
|
||||||
|
C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st10" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st11" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st12" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st13" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st11" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_45_" class="st14" d="M360.2,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S354.8,445.1,360.2,458.8z"/>
|
||||||
|
<path id="XMLID_44_" class="st14" d="M119,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S113.6,445.1,119,458.8z"/>
|
||||||
|
<path id="XMLID_41_" class="st14" d="M239.6,478.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S234.2,465.1,239.6,478.8z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 7.4 KiB |
128
src/main/resources/icons/weather/day_rain_thunder.svg
Normal file
@ -0,0 +1,128 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:#00AEEF;}
|
||||||
|
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_3_);}
|
||||||
|
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_4_);}
|
||||||
|
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_5_);}
|
||||||
|
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_6_);}
|
||||||
|
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_7_);}
|
||||||
|
.st7{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_8_);}
|
||||||
|
.st8{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_9_);}
|
||||||
|
.st9{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_10_);}
|
||||||
|
.st10{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_11_);}
|
||||||
|
.st11{opacity:0.5;fill:#D58128;}
|
||||||
|
.st12{opacity:0.2;fill:#D58128;}
|
||||||
|
.st13{fill-rule:evenodd;clip-rule:evenodd;fill:#BEC6D2;}
|
||||||
|
.st14{opacity:5.000000e-002;fill-rule:evenodd;clip-rule:evenodd;fill:#A7A9AC;}
|
||||||
|
.st15{fill-rule:evenodd;clip-rule:evenodd;fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="1194.1445" y1="288.1528" x2="1194.1445" y2="510.9846" gradientTransform="matrix(-1 0 0 1 1439.9739 0)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st0" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<path id="XMLID_67_" class="st1" d="M103,456.7c5.6,14.3,21.7,21.2,36,15.6c14.3-5.6,21.2-21.7,15.6-36
|
||||||
|
c-5.6-14.3-46.2-41.4-46.2-41.4S97.4,442.4,103,456.7z"/>
|
||||||
|
<path id="XMLID_38_" class="st1" d="M373,456.6c5.6,14.3,21.7,21.2,36,15.6c14.3-5.6,21.2-21.7,15.6-36
|
||||||
|
c-5.6-14.3-46.2-41.4-46.2-41.4S367.4,442.4,373,456.6z"/>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="107.2386" y1="17.8155" x2="107.2386" y2="188.3158" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st2" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="186.5856" y1="6.5998" x2="186.5856" y2="41.4267" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st3" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="27.8916" y1="165.2937" x2="27.8916" y2="200.1207" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st4" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="219.4497" y1="93.1504" x2="219.4497" y2="113.5508" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st5" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="-4.9723" y1="93.1697" x2="-4.9723" y2="113.57" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st6" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="27.8916" y1="6.5998" x2="27.8916" y2="41.4267" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st7" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="186.5856" y1="165.2937" x2="186.5856" y2="200.1207" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st8" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2483" y1="195.1708" x2="107.2483" y2="235.9716" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st9" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="107.2291" y1="-29.2511" x2="107.2291" y2="11.5494" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st10" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st11" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2
|
||||||
|
c-24.3-0.8-37.3-6.4-50.8-12.4C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st12" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st13" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106
|
||||||
|
c-55.5,0-103.1,32-126.7,78.2c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4
|
||||||
|
c26.2,31.6,65.2,52.1,109.4,52.1c44.2,0,83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3
|
||||||
|
S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st14" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st15" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2
|
||||||
|
c-55.5,0-103.1,32-126.7,78.2c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281c0,49.3,40,89.3,89.3,89.3
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406c44.2,0,83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c49.3,0,89.3-40,89.3-89.3C506,231.7,466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st13" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.6 KiB |
129
src/main/resources/icons/weather/day_sleet.svg
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{fill:url(#XMLID_4_);}
|
||||||
|
.st2{fill:url(#XMLID_5_);}
|
||||||
|
.st3{fill:url(#XMLID_6_);}
|
||||||
|
.st4{fill:url(#XMLID_7_);}
|
||||||
|
.st5{fill:url(#XMLID_8_);}
|
||||||
|
.st6{fill:url(#XMLID_9_);}
|
||||||
|
.st7{fill:url(#XMLID_10_);}
|
||||||
|
.st8{fill:url(#XMLID_11_);}
|
||||||
|
.st9{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st10{opacity:0.2;fill:#D58128;enable-background:new ;}
|
||||||
|
.st11{fill:#BEC6D2;}
|
||||||
|
.st12{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st13{fill:#D3DEE2;}
|
||||||
|
.st14{fill:#00ADEE;}
|
||||||
|
.st15{fill:url(#XMLID_12_);}
|
||||||
|
.st16{fill:url(#XMLID_13_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="107.1837" y1="17.7359" x2="107.1837" y2="188.3861" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st0" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="186.5537" y1="6.5909" x2="186.5537" y2="41.4178" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st1" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="27.879" y1="165.2937" x2="27.879" y2="200.1207" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st2" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8s8.8,6.9,13.8,4.3
|
||||||
|
l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="219.4633" y1="93.1504" x2="219.4633" y2="113.5508" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st3" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
s1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="-4.9654" y1="93.1635" x2="-4.9654" y2="113.5824" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st4" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="27.9626" y1="6.6009" x2="27.9626" y2="41.4278" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st5" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8L76.7,49c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="186.6133" y1="165.2824" x2="186.6133" y2="200.1094" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st6" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2838" y1="195.1708" x2="107.2838" y2="235.9716" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st7" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="107.2623" y1="-29.2752" x2="107.2623" y2="11.5253" gradientTransform="matrix(0.9546 0.2978 -0.2978 0.9546 61.474 3.8986)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st8" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
s-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st9" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2s-37.3-6.4-50.8-12.4
|
||||||
|
C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st10" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st11" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st12" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st13" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st11" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_257_" class="st14" d="M289.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S285.3,460.7,289.4,471.2z"/>
|
||||||
|
<radialGradient id="XMLID_12_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st15" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_13_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st16" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<path id="XMLID_1_" class="st14" d="M189.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S185.3,460.7,189.4,471.2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.6 KiB |
133
src/main/resources/icons/weather/day_snow.svg
Normal file
@ -0,0 +1,133 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{fill:url(#XMLID_4_);}
|
||||||
|
.st2{fill:url(#XMLID_5_);}
|
||||||
|
.st3{fill:url(#XMLID_6_);}
|
||||||
|
.st4{fill:url(#XMLID_7_);}
|
||||||
|
.st5{fill:url(#XMLID_8_);}
|
||||||
|
.st6{fill:url(#XMLID_9_);}
|
||||||
|
.st7{fill:url(#XMLID_10_);}
|
||||||
|
.st8{fill:url(#XMLID_11_);}
|
||||||
|
.st9{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st10{opacity:0.2;fill:#D58128;enable-background:new ;}
|
||||||
|
.st11{fill:#BEC6D2;}
|
||||||
|
.st12{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st13{fill:#D3DEE2;}
|
||||||
|
.st14{fill:url(#XMLID_12_);}
|
||||||
|
.st15{fill:url(#XMLID_13_);}
|
||||||
|
.st16{fill:url(#XMLID_14_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="107.1837" y1="494.264" x2="107.1837" y2="323.6139" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st0" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="186.5538" y1="505.4091" x2="186.5538" y2="470.5822" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st1" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="27.879" y1="346.7063" x2="27.879" y2="311.8793" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st2" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8s8.8,6.9,13.8,4.3
|
||||||
|
l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="219.4633" y1="418.8496" x2="219.4633" y2="398.4492" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st3" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
s1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="-4.9654" y1="418.8365" x2="-4.9654" y2="398.4176" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st4" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="27.9626" y1="505.3991" x2="27.9626" y2="470.5722" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st5" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8L76.7,49c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="186.6133" y1="346.7176" x2="186.6133" y2="311.8906" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st6" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2838" y1="316.8292" x2="107.2838" y2="276.0284" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st7" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="107.2623" y1="541.2752" x2="107.2623" y2="500.4747" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st8" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
s-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st9" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2s-37.3-6.4-50.8-12.4
|
||||||
|
C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st10" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st11" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st12" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st13" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st11" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_12_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st14" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_13_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st15" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<radialGradient id="XMLID_14_" cx="256.5" cy="57.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_1_" class="st16" d="M284,450.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L261,444.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0s-1.7,4.6,0,6.3l11.8,11.8H229c-2.5,0-4.5,2-4.5,4.5
|
||||||
|
s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5
|
||||||
|
v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H284c2.5,0,4.5-2,4.5-4.5S286.4,450.4,284,450.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 9.1 KiB |
161
src/main/resources/icons/weather/day_snow_thunder.svg
Normal file
@ -0,0 +1,161 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill:url(#XMLID_3_);}
|
||||||
|
.st2{fill:url(#XMLID_4_);}
|
||||||
|
.st3{fill:url(#XMLID_5_);}
|
||||||
|
.st4{fill:url(#XMLID_6_);}
|
||||||
|
.st5{fill:url(#XMLID_7_);}
|
||||||
|
.st6{fill:url(#XMLID_8_);}
|
||||||
|
.st7{fill:url(#XMLID_9_);}
|
||||||
|
.st8{fill:url(#XMLID_10_);}
|
||||||
|
.st9{fill:url(#XMLID_11_);}
|
||||||
|
.st10{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st11{opacity:0.2;fill:#D58128;enable-background:new ;}
|
||||||
|
.st12{fill:#BEC6D2;}
|
||||||
|
.st13{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st14{fill:#D3DEE2;}
|
||||||
|
.st15{fill:url(#XMLID_12_);}
|
||||||
|
.st16{fill:url(#XMLID_13_);}
|
||||||
|
.st17{fill:url(#XMLID_14_);}
|
||||||
|
.st18{fill:url(#XMLID_15_);}
|
||||||
|
</style>
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="223.8" x2="1194.1239" y2="1" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st0" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<g id="XMLID_27_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="107.1837" y1="494.264" x2="107.1837" y2="323.6139" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<circle id="XMLID_496_" class="st1" cx="133.1" cy="134.2" r="85.3"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="186.5538" y1="505.4091" x2="186.5538" y2="470.5822" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_495_" class="st2" d="M250.5,72.9c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8
|
||||||
|
c2.6,5,8.8,6.9,13.8,4.3l18.1-9.5C251.2,84.1,253.1,77.9,250.5,72.9z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="27.879" y1="346.7063" x2="27.879" y2="311.8793" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_494_" class="st3" d="M51.8,177.1c-2.6-5-8.8-6.9-13.8-4.3l-18.1,9.5c-5,2.6-6.9,8.8-4.3,13.8s8.8,6.9,13.8,4.3
|
||||||
|
l18.1-9.5C52.4,188.3,54.4,182.1,51.8,177.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="219.4633" y1="418.8496" x2="219.4633" y2="398.4492" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_492_" class="st4" d="M259.7,174c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1c-5.4-1.7-11.1,1.3-12.8,6.7
|
||||||
|
s1.3,11.1,6.7,12.8l19.5,6.1C252.3,182.4,258,179.4,259.7,174z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="-4.9654" y1="418.8365" x2="-4.9654" y2="398.4176" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_491_" class="st5" d="M45.4,107.2c1.7-5.4-1.3-11.1-6.7-12.8l-19.5-6.1C13.9,86.6,8.1,89.6,6.5,95
|
||||||
|
c-1.7,5.4,1.3,11.1,6.7,12.8l19.5,6.1C38,115.5,43.7,112.6,45.4,107.2z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="27.9626" y1="505.3991" x2="27.9626" y2="470.5722" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_489_" class="st6" d="M71.5,17.1c-5,2.6-6.9,8.8-4.3,13.8L76.7,49c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C82.6,16.4,76.5,14.4,71.5,17.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="186.6133" y1="346.7176" x2="186.6133" y2="311.8906" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_477_" class="st7" d="M175.7,215.8c-5,2.6-6.9,8.8-4.3,13.8l9.5,18.1c2.6,5,8.8,6.9,13.8,4.3s6.9-8.8,4.3-13.8
|
||||||
|
l-9.5-18.1C186.9,215.1,180.7,213.2,175.7,215.8z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="107.2838" y1="316.8292" x2="107.2838" y2="276.0284" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_475_" class="st8" d="M93.6,261.1c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
c-5.4-1.7-11.1,1.3-12.8,6.7l-6.1,19.5C85.2,253.7,88.2,259.4,93.6,261.1z"/>
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_11_" gradientUnits="userSpaceOnUse" x1="107.2623" y1="541.2752" x2="107.2623" y2="500.4747" gradientTransform="matrix(0.9546 0.2978 0.2978 -0.9546 -90.9996 492.6538)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="1" style="stop-color:#E7A423"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_474_" class="st9" d="M160.4,46.9c5.4,1.7,11.1-1.3,12.8-6.7l6.1-19.5c1.7-5.4-1.3-11.1-6.7-12.8
|
||||||
|
s-11.1,1.3-12.8,6.7l-6.1,19.5C152,39.5,155,45.2,160.4,46.9z"/>
|
||||||
|
<path id="XMLID_470_" class="st10" d="M129.3,219.1c22.1,0.7,47.7-7.3,62.9-24c-16.2,8.3-37.4,18-61.7,17.2s-37.3-6.4-50.8-12.4
|
||||||
|
C90.9,209.1,106.9,218.4,129.3,219.1z"/>
|
||||||
|
<path id="XMLID_469_" class="st11" d="M136.8,48.2c-21.9-0.7-47.2,7.3-62.2,24c16-8.3,37-18,61.1-17.3c24.1,0.8,36.8,6.4,50.2,12.4
|
||||||
|
C174.7,58.2,159,48.9,136.8,48.2z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st12" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st13" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st14" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st12" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_12_" cx="365.538" cy="410.4113" r="31.962" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st15" d="M393,405.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L370,399.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5c-2.5,0-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H338
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H393
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S395.5,405.9,393,405.9z"/>
|
||||||
|
<radialGradient id="XMLID_13_" cx="129.462" cy="414.829" r="31.962" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st16" d="M157,410.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0l-11.8,11.8v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5c-2.5,0-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H157
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S159.4,410.4,157,410.4z"/>
|
||||||
|
<radialGradient id="XMLID_14_" cx="152.5291" cy="461.5135" r="25.3816" gradientTransform="matrix(0.9444 0 0 0.9444 45.527 46.664)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_190_" class="st17" d="M210.2,479.2h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9H169
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3c0,1.8,1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3v-12.5l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3C213.6,480.7,212,479.2,210.2,479.2z"/>
|
||||||
|
<radialGradient id="XMLID_15_" cx="298.0168" cy="445.0013" r="25.3816" gradientTransform="matrix(0.9444 0 0 0.9444 45.527 46.664)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_182_" class="st18" d="M347.6,463.6h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3c-1.8,0-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9h-12.5
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3c1.8,0,3.3-1.5,3.3-3.3V475l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3S349.5,463.6,347.6,463.6z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 11 KiB |
32
src/main/resources/icons/weather/fog.svg
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#B7CAD1;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_16_" class="st3" d="M157.9,438.1h196.2c6,0,10.9-4.2,10.9-9.4s-4.9-9.4-10.9-9.4H157.9c-6,0-10.9,4.2-10.9,9.4
|
||||||
|
S151.9,438.1,157.9,438.1z"/>
|
||||||
|
<path id="XMLID_13_" class="st3" d="M354.1,448.3H157.9c-6,0-10.9,4.2-10.9,9.4s4.9,9.4,10.9,9.4h196.2c6,0,10.9-4.2,10.9-9.4
|
||||||
|
S360.1,448.3,354.1,448.3z"/>
|
||||||
|
<path id="XMLID_11_" class="st3" d="M354.1,477.4H157.9c-6,0-10.9,4.2-10.9,9.4c0,5.2,4.9,9.4,10.9,9.4h196.2c6,0,10.9-4.2,10.9-9.4
|
||||||
|
C365,481.6,360.1,477.4,354.1,477.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.4 KiB |
30
src/main/resources/icons/weather/mist.svg
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#B7CAD1;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_16_" class="st3" d="M157.9,438.1h196.2c6,0,10.9-4.2,10.9-9.4s-4.9-9.4-10.9-9.4H157.9c-6,0-10.9,4.2-10.9,9.4
|
||||||
|
S151.9,438.1,157.9,438.1z"/>
|
||||||
|
<path id="XMLID_13_" class="st3" d="M354.1,448.3H157.9c-6,0-10.9,4.2-10.9,9.4s4.9,9.4,10.9,9.4h196.2c6,0,10.9-4.2,10.9-9.4
|
||||||
|
S360.1,448.3,354.1,448.3z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
41
src/main/resources/icons/weather/night_full_moon_clear.svg
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCC05;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="197.7818" y1="724.0313" x2="695.6421" y2="724.0313" gradientTransform="matrix(0.1621 0.9868 -0.9868 0.1621 898.0699 -302.1421)">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E29F25"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M295.5,501.3c-66.3,16.5-136-12.4-186.1-51.4c-51.2-40.6-82.9-91.4-98.7-154.3
|
||||||
|
c-16.5-66.3,12.4-136,51.4-186.1c40.6-51.2,91.4-82.9,154.3-98.7c66.3-16.5,136,12.4,186,51.4c51.2,40.6,82.9,91.4,98.7,154.3
|
||||||
|
c16.5,66.3-12.4,136-51.4,186.1C409.3,453.7,358.5,485.4,295.5,501.3z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M240.7,225.2c-15.1,21.4-49.6,20-47.7-6.9c1.6-21.9,13.7-50,38.4-47
|
||||||
|
C258.7,174.8,255.5,204.2,240.7,225.2z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M151.1,363.7c-5.2,9.6-20.3,9.5-20.9-2.3c-0.4-9.5,3.9-21.5,14.5-20.4
|
||||||
|
C156.5,342.3,156.2,354.4,151.1,363.7z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M326.9,261.1c-5.7,8.1-20.4,6.4-20.3-4.1c0-8.5,4.6-18.8,14.8-17
|
||||||
|
C332.9,242.1,332.4,253.2,326.9,261.1z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M260.7,371.6c7.1-30.7,52.1-37.6,65.5-6c10.8,25.8,13.7,63.3-19.6,68.8
|
||||||
|
C269.1,440.5,253.6,401.7,260.7,371.6z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M289.9,88c2-15.4,21.9-21.7,28.5-5.2c5.3,13.3,5,31.5-9.3,33.9C293.3,119.5,288,103,289.9,88z
|
||||||
|
"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M400.2,260.9c4-13.3,26.1-20.3,32.1-7c4.9,10.9,4,27.3-12.7,30.9
|
||||||
|
C401.1,288.7,396.3,274,400.2,260.9z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M71.9,177.2c6.1-23.9,38.4-34.4,45.9-11.3c6.2,18.7,3.4,44.8-19.2,51.2
|
||||||
|
C73.2,224.6,66,200.5,71.9,177.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M263,503.4c58.4-3.7,116.1-28,152.2-64.8c-42.4,18.9-90.5,43.6-153.5,46.7
|
||||||
|
c-63.1,2.6-98.9-9.9-134.8-22C157.3,484,203.8,506.8,263,503.4z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M56.9,127.5c70-87.6,171.5-139,290.3-89.6c29.4,13.2,54.4,31.3,75.2,51
|
||||||
|
c7.4,4.2,14.6,8.5,21.6,12.8c-24.7-29-57-56.8-98.1-75.4C279-4.5,216,4.5,163.4,28.7c-53,25.4-95.5,66.1-130.6,127.3
|
||||||
|
C40.3,145.7,48.4,136.2,56.9,127.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.6 KiB |
@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;enable-background:new ;}
|
||||||
|
.st5{fill:#BEC6D2;}
|
||||||
|
.st6{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st7{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="179.9286" y1="827.4436" x2="432.9864" y2="827.4436" gradientTransform="matrix(0.1621 0.9868 -0.9868 0.1621 899.8947 -302.2909)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
C0,120.7,14.7,85.3,34.5,59.8c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st5" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st6" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st7" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st5" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.1 KiB |
66
src/main/resources/icons/weather/night_full_moon_rain.svg
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;enable-background:new ;}
|
||||||
|
.st5{fill:#BEC6D2;}
|
||||||
|
.st6{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st7{fill:#D3DEE2;}
|
||||||
|
.st8{fill-rule:evenodd;clip-rule:evenodd;fill:#00ADEE;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="179.9286" y1="-315.4436" x2="432.9864" y2="-315.4436" gradientTransform="matrix(0.1621 0.9868 0.9868 -0.1621 394.653 -219.2957)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
C0,120.7,14.7,85.3,34.5,59.8c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st5" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st6" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st7" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st5" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_45_" class="st8" d="M360.2,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S354.8,445.1,360.2,458.8z"/>
|
||||||
|
<path id="XMLID_44_" class="st8" d="M119,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S113.6,445.1,119,458.8z"/>
|
||||||
|
<path id="XMLID_41_" class="st8" d="M239.6,478.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6
|
||||||
|
c-5.4-13.7-44.4-39.8-44.4-39.8S234.2,465.1,239.6,478.8z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
@ -0,0 +1,82 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;}
|
||||||
|
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_3_);}
|
||||||
|
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:#00AEEF;}
|
||||||
|
.st7{fill-rule:evenodd;clip-rule:evenodd;fill:#BEC6D2;}
|
||||||
|
.st8{opacity:5.000000e-002;fill-rule:evenodd;clip-rule:evenodd;fill:#A7A9AC;}
|
||||||
|
.st9{fill-rule:evenodd;clip-rule:evenodd;fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="179.9715" y1="827.3492" x2="433.008" y2="827.3492" gradientTransform="matrix(0.1621 0.9868 -0.9868 0.1621 899.8946 -302.2909)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
c-8.4-33.7,6.3-69.1,26.1-94.6c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="1194.1445" y1="288.1528" x2="1194.1445" y2="510.9846" gradientTransform="matrix(-1 0 0 1 1439.9739 0)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st5" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<path id="XMLID_67_" class="st6" d="M103,456.7c5.6,14.3,21.7,21.2,36,15.6c14.3-5.6,21.2-21.7,15.6-36
|
||||||
|
c-5.6-14.3-46.2-41.4-46.2-41.4S97.4,442.4,103,456.7z"/>
|
||||||
|
<path id="XMLID_38_" class="st6" d="M373,456.6c5.6,14.3,21.7,21.2,36,15.6c14.3-5.6,21.2-21.7,15.6-36
|
||||||
|
c-5.6-14.3-46.2-41.4-46.2-41.4S367.4,442.4,373,456.6z"/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st7" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106c-55.5,0-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
c44.2,0,83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st8" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st9" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2
|
||||||
|
c-55.5,0-103.1,32-126.7,78.2c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281c0,49.3,40,89.3,89.3,89.3
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406c44.2,0,83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c49.3,0,89.3-40,89.3-89.3C506,231.7,466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st7" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.6 KiB |
84
src/main/resources/icons/weather/night_full_moon_sleet.svg
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;enable-background:new ;}
|
||||||
|
.st5{fill:#BEC6D2;}
|
||||||
|
.st6{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st7{fill:#D3DEE2;}
|
||||||
|
.st8{fill:#00ADEE;}
|
||||||
|
.st9{fill:url(#XMLID_4_);}
|
||||||
|
.st10{fill:url(#XMLID_5_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="179.9286" y1="827.4436" x2="432.9864" y2="827.4436" gradientTransform="matrix(0.1621 0.9868 -0.9868 0.1621 899.8947 -302.2909)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
C0,120.7,14.7,85.3,34.5,59.8c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st5" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st6" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st7" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st5" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_257_" class="st8" d="M289.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S285.3,460.7,289.4,471.2z"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st9" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st10" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<path id="XMLID_1_" class="st8" d="M189.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S185.3,460.7,189.4,471.2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.0 KiB |
88
src/main/resources/icons/weather/night_full_moon_snow.svg
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;enable-background:new ;}
|
||||||
|
.st5{fill:#BEC6D2;}
|
||||||
|
.st6{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st7{fill:#D3DEE2;}
|
||||||
|
.st8{fill:url(#XMLID_4_);}
|
||||||
|
.st9{fill:url(#XMLID_5_);}
|
||||||
|
.st10{fill:url(#XMLID_6_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="179.9286" y1="-315.4437" x2="432.9864" y2="-315.4437" gradientTransform="matrix(0.1621 0.9868 0.9868 -0.1621 394.6531 -219.2957)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
C0,120.7,14.7,85.3,34.5,59.8c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st5" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st6" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st7" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st5" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_4_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st8" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st9" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<radialGradient id="XMLID_6_" cx="256.5" cy="57.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_1_" class="st10" d="M284,450.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L261,444.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0s-1.7,4.6,0,6.3l11.8,11.8H229c-2.5,0-4.5,2-4.5,4.5
|
||||||
|
s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5
|
||||||
|
v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H284c2.5,0,4.5-2,4.5-4.5S286.4,450.4,284,450.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.4 KiB |
@ -0,0 +1,116 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.4;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st3{opacity:0.3;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{opacity:0.5;fill:#FFCD05;enable-background:new ;}
|
||||||
|
.st5{fill:url(#XMLID_3_);}
|
||||||
|
.st6{fill:#BEC6D2;}
|
||||||
|
.st7{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st8{fill:#D3DEE2;}
|
||||||
|
.st9{fill:url(#XMLID_4_);}
|
||||||
|
.st10{fill:url(#XMLID_5_);}
|
||||||
|
.st11{fill:url(#XMLID_6_);}
|
||||||
|
.st12{fill:url(#XMLID_7_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_268_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="179.9286" y1="-315.4436" x2="432.9864" y2="-315.4436" gradientTransform="matrix(0.1621 0.9868 0.9868 -0.1621 394.653 -219.2957)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_407_" class="st0" d="M153.2,258.9c-33.7,8.4-69.1-6.3-94.6-26.1c-26-20.6-42.1-46.5-50.2-78.4
|
||||||
|
C0,120.7,14.7,85.3,34.5,59.8c20.6-26,46.5-42.1,78.4-50.2c33.7-8.4,69.1,6.3,94.6,26.1c26,20.6,42.1,46.4,50.2,78.4
|
||||||
|
c8.4,33.7-6.3,69.1-26.1,94.6C211,234.7,185.2,250.8,153.2,258.9z"/>
|
||||||
|
<path id="XMLID_404_" class="st1" d="M125.4,118.6c-7.7,10.9-25.2,10.2-24.3-3.5c0.8-11.1,7-25.4,19.5-23.9
|
||||||
|
C134.5,93,132.9,107.9,125.4,118.6z"/>
|
||||||
|
<path id="XMLID_403_" class="st2" d="M79.8,189c-2.7,4.9-10.3,4.8-10.6-1.1c-0.2-4.9,2-10.9,7.4-10.4
|
||||||
|
C82.6,178.1,82.4,184.2,79.8,189z"/>
|
||||||
|
<path id="XMLID_353_" class="st3" d="M169.2,136.8c-2.9,4.1-10.4,3.2-10.3-2.1c0-4.3,2.3-9.6,7.5-8.6
|
||||||
|
C172.2,127.1,172,132.8,169.2,136.8z"/>
|
||||||
|
<path id="XMLID_352_" class="st3" d="M135.5,193c3.6-15.6,26.5-19.1,33.3-3.1c5.5,13.1,7,32.2-10,35
|
||||||
|
C139.8,228,131.9,208.3,135.5,193z"/>
|
||||||
|
<path id="XMLID_348_" class="st3" d="M150.4,48.8c1-7.8,11.1-11,14.5-2.6c2.7,6.8,2.5,16-4.7,17.2
|
||||||
|
C152.1,64.8,149.4,56.5,150.4,48.8z"/>
|
||||||
|
<path id="XMLID_343_" class="st3" d="M206.5,136.7c2-6.8,13.2-10.3,16.3-3.5c2.5,5.5,2,13.9-6.5,15.7
|
||||||
|
C206.9,150.8,204.5,143.4,206.5,136.7z"/>
|
||||||
|
<path id="XMLID_339_" class="st2" d="M39.6,94.2c3.1-12.2,19.5-17.5,23.3-5.7c3.1,9.5,1.7,22.7-9.7,26
|
||||||
|
C40.2,118.3,36.6,106,39.6,94.2z"/>
|
||||||
|
<path id="XMLID_338_" class="st2" d="M136.7,260c29.7-1.9,59-14.2,77.3-32.9c-21.6,9.6-46,22.2-78,23.7c-32.1,1.3-50.3-5-68.5-11.2
|
||||||
|
C83,250.1,106.6,261.7,136.7,260z"/>
|
||||||
|
<path id="XMLID_337_" class="st4" d="M32,68.9c35.6-44.5,87.1-70.7,147.5-45.5c14.9,6.7,27.7,15.9,38.2,25.9
|
||||||
|
c3.8,2.1,7.4,4.3,11,6.5c-12.6-14.7-29-28.9-49.9-38.3c-34-15.7-66-11.1-92.8,1.2C59.2,31.6,37.5,52.3,19.7,83.4
|
||||||
|
C23.5,78.2,27.6,73.3,32,68.9z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="223.8" x2="1194.1239" y2="1" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st5" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st6" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st7" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st8" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st6" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_4_" cx="365.538" cy="410.4113" r="31.962" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st9" d="M393,405.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L370,399.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5c-2.5,0-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H338
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H393
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S395.5,405.9,393,405.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.462" cy="414.829" r="31.962" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st10" d="M157,410.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0l-11.8,11.8v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5c-2.5,0-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5c2.5,0,4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H157
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S159.4,410.4,157,410.4z"/>
|
||||||
|
<radialGradient id="XMLID_6_" cx="152.5291" cy="461.5135" r="25.3816" gradientTransform="matrix(0.9444 0 0 0.9444 45.527 46.664)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_190_" class="st11" d="M210.2,479.2h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9H169
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3c0,1.8,1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3v-12.5l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3C213.6,480.7,212,479.2,210.2,479.2z"/>
|
||||||
|
<radialGradient id="XMLID_7_" cx="298.0168" cy="445.0013" r="25.3816" gradientTransform="matrix(0.9444 0 0 0.9444 45.527 46.664)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_182_" class="st12" d="M347.6,463.6h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3c-1.8,0-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9h-12.5
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3c1.8,0,3.3-1.5,3.3-3.3V475l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3S349.5,463.6,347.6,463.6z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.3 KiB |
31
src/main/resources/icons/weather/night_half_moon_clear.svg
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;}
|
||||||
|
.st3{opacity:0.24;fill:#D58128;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_22_">
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="256" y1="6.3033" x2="256" y2="505.6967">
|
||||||
|
<stop offset="0" style="stop-color:#FDD900"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E29F25"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_420_" class="st0" d="M502,334.9c-89.3,26.8-189.9,5.7-260.4-64.8c-64.9-64.9-88-155.2-70.4-238.8
|
||||||
|
c0-0.4-0.1-0.7-0.1-1.1c3.3-10.6,2.7-20.3-3.9-23.1c-6.8-2.9-22,2.9-35.1,13c-17.6,10.4-34.2,23.1-49.4,38.2
|
||||||
|
c-102.4,102.4-102.4,268.3,0,370.7c102.3,102.3,268.2,102.4,370.6,0c23-22.9,40.2-49.3,52.6-77.2
|
||||||
|
C506.2,344.6,504.9,338.7,502,334.9z"/>
|
||||||
|
<path id="XMLID_419_" class="st1" d="M237.5,499.4c55.6,6.6,121.4-5.2,162.8-38.7c-42.3,14.6-97.5,31.3-158.7,24
|
||||||
|
c-61.1-7.3-92.7-22.7-125.7-39.1C142.6,468.4,181.1,492.6,237.5,499.4z"/>
|
||||||
|
<path id="XMLID_412_" class="st2" d="M469.7,343.2c-64.7,17.2-171.3,2.6-236.4-60.4c-65-63-73.3-154.8-68.2-182.9
|
||||||
|
c4.7,30.8,18.3,123.6,77.8,175.9C301.2,327.1,405.5,354.5,469.7,343.2z"/>
|
||||||
|
<path id="XMLID_410_" class="st3" d="M69.4,255.6c-27.6-10.5-32.5-54.7-1.5-62.5c25.3-6.3,59-0.7,60.1,31
|
||||||
|
C129.4,259.4,96.4,265.9,69.4,255.6z"/>
|
||||||
|
<path id="XMLID_232_" class="st3" d="M112.5,171.5c-10.1-3.8-11.9-19.9-0.5-22.8c9.2-2.3,21.5-0.2,21.9,11.3
|
||||||
|
C134.4,172.9,122.4,175.3,112.5,171.5z"/>
|
||||||
|
<path id="XMLID_231_" class="st3" d="M140.2,281c-10.1-3.8-11.9-19.9-0.5-22.8c9.2-2.3,21.5-0.2,21.9,11.3
|
||||||
|
C162.1,282.4,150,284.8,140.2,281z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 1.9 KiB |
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:#BEC6D2;}
|
||||||
|
.st5{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st6{fill:#D3DEE2;}
|
||||||
|
.st7{fill:url(#SVGID_1_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="8.4131" x2="134.7337" y2="262.2" gradientTransform="matrix(-1 0 0 1 269.379 0)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st4" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st5" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st6" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st4" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1435" y1="35.1068" x2="65.1435" y2="92.1702">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st7" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.8 KiB |
63
src/main/resources/icons/weather/night_half_moon_rain.svg
Normal file
@ -0,0 +1,63 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:#BEC6D2;}
|
||||||
|
.st5{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st6{fill:#D3DEE2;}
|
||||||
|
.st7{fill:#00AEEF;}
|
||||||
|
.st8{fill:url(#SVGID_1_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="503.5869" x2="134.7337" y2="249.8" gradientTransform="matrix(-1 0 0 -1 269.379 512)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st4" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st5" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st6" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st4" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_45_" class="st7" d="M360.2,458.8c5.4,13.7,20.9,20.4,34.6,15s20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S354.8,445.1,360.2,458.8z"/>
|
||||||
|
<path id="XMLID_44_" class="st7" d="M119,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S113.6,445.1,119,458.8z"/>
|
||||||
|
<path id="XMLID_41_" class="st7" d="M239.6,478.8c5.4,13.7,20.9,20.4,34.6,15s20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S234.2,465.1,239.6,478.8z"/>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1435" y1="35.1068" x2="65.1435" y2="92.1702">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st8" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.3 KiB |
@ -0,0 +1,78 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:url(#XMLID_3_);}
|
||||||
|
.st5{fill:#00AEEF;}
|
||||||
|
.st6{fill:#BEC6D2;}
|
||||||
|
.st7{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st8{fill:#D3DEE2;}
|
||||||
|
.st9{fill:url(#SVGID_1_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="503.5869" x2="134.7337" y2="249.8" gradientTransform="matrix(-1 0 0 -1 269.379 512)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="223.8" x2="1194.1239" y2="1" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st4" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<path id="XMLID_67_" class="st5" d="M103,456.7c5.6,14.3,21.7,21.2,36,15.6s21.2-21.7,15.6-36c-5.6-14.3-46.2-41.4-46.2-41.4
|
||||||
|
S97.4,442.4,103,456.7z"/>
|
||||||
|
<path id="XMLID_38_" class="st5" d="M373,456.6c5.6,14.3,21.7,21.2,36,15.6s21.2-21.7,15.6-36s-46.2-41.4-46.2-41.4
|
||||||
|
S367.4,442.4,373,456.6z"/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st6" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st7" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st8" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st6" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1435" y1="35.1068" x2="65.1435" y2="92.1702">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st9" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.1 KiB |
81
src/main/resources/icons/weather/night_half_moon_sleet.svg
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:#BEC6D2;}
|
||||||
|
.st5{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st6{fill:#D3DEE2;}
|
||||||
|
.st7{fill:url(#SVGID_1_);}
|
||||||
|
.st8{fill:#00ADEE;}
|
||||||
|
.st9{fill:url(#XMLID_4_);}
|
||||||
|
.st10{fill:url(#XMLID_5_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="8.4131" x2="134.7337" y2="262.2" gradientTransform="matrix(-1 0 0 1 269.379 0)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st4" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st5" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st6" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st4" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1" y1="476.9" x2="65.1" y2="419.8" gradientTransform="matrix(1 0 0 -1 0 512)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st7" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
<path id="XMLID_257_" class="st8" d="M289.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S285.3,460.7,289.4,471.2z"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st9" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st10" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<path id="XMLID_1_" class="st8" d="M189.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S185.3,460.7,189.4,471.2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 5.7 KiB |
85
src/main/resources/icons/weather/night_half_moon_snow.svg
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_3_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:#BEC6D2;}
|
||||||
|
.st5{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st6{fill:#D3DEE2;}
|
||||||
|
.st7{fill:url(#SVGID_1_);}
|
||||||
|
.st8{fill:url(#XMLID_4_);}
|
||||||
|
.st9{fill:url(#XMLID_5_);}
|
||||||
|
.st10{fill:url(#XMLID_6_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="503.5869" x2="134.7337" y2="249.8" gradientTransform="matrix(-1 0 0 -1 269.379 512)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st4" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st5" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st6" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st4" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1" y1="476.9" x2="65.1" y2="419.8" gradientTransform="matrix(1 0 0 -1 0 512)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st7" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st8" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st9" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<radialGradient id="XMLID_6_" cx="256.5" cy="57.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_1_" class="st10" d="M284,450.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L261,444.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0s-1.7,4.6,0,6.3l11.8,11.8H229c-2.5,0-4.5,2-4.5,4.5
|
||||||
|
s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5
|
||||||
|
v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H284c2.5,0,4.5-2,4.5-4.5S286.4,450.4,284,450.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.2 KiB |
@ -0,0 +1,112 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{opacity:0.5;fill:#D58128;enable-background:new ;}
|
||||||
|
.st2{opacity:0.5;fill:#FDD900;enable-background:new ;}
|
||||||
|
.st3{opacity:0.19;fill:#D58128;enable-background:new ;}
|
||||||
|
.st4{fill:url(#XMLID_3_);}
|
||||||
|
.st5{fill:#BEC6D2;}
|
||||||
|
.st6{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st7{fill:#D3DEE2;}
|
||||||
|
.st8{fill:url(#XMLID_4_);}
|
||||||
|
.st9{fill:url(#XMLID_5_);}
|
||||||
|
.st10{fill:url(#XMLID_6_);}
|
||||||
|
.st11{fill:url(#XMLID_7_);}
|
||||||
|
.st12{fill:url(#SVGID_1_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_58_">
|
||||||
|
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="134.7337" y1="8.4131" x2="134.7337" y2="262.2" gradientTransform="matrix(-1 0 0 1 269.379 0)">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<path id="XMLID_439_" class="st0" d="M9.7,175.5c45.4,13.6,96.5,2.9,132.3-32.9c33-33,44.7-78.9,35.8-121.4c0-0.2,0-0.4,0-0.6
|
||||||
|
c-1.7-5.4-1.4-10.3,2-11.8s11.2,1.5,17.8,6.6c8.9,5.3,17.4,11.7,25.1,19.4c52,52,52,136.4,0,188.4s-136.3,52-188.4,0
|
||||||
|
C22.7,211.6,14,198.2,7.6,184C7.5,180.4,8.2,177.4,9.7,175.5z"/>
|
||||||
|
<path id="XMLID_438_" class="st1" d="M144.1,259.1c-28.3,3.4-61.7-2.6-82.7-19.7c21.5,7.4,49.6,15.9,80.6,12.2
|
||||||
|
c31.1-3.7,47.1-11.5,63.9-19.9C192.3,243.3,172.8,255.6,144.1,259.1z"/>
|
||||||
|
<path id="XMLID_437_" class="st2" d="M26.1,179.7c32.9,8.7,87.1,1.3,120.1-30.7c33.1-32,37.3-78.7,34.7-93
|
||||||
|
c-2.4,15.6-9.3,62.8-39.6,89.4C111.7,171.5,58.7,185.4,26.1,179.7z"/>
|
||||||
|
<path id="XMLID_400_" class="st3" d="M231.5,115.2c14-5.3,16.5-27.8,0.7-31.8c-12.8-3.2-30-0.3-30.6,15.7
|
||||||
|
C201,117.1,217.8,120.4,231.5,115.2z"/>
|
||||||
|
<path id="XMLID_399_" class="st3" d="M209.6,72.4c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C198.5,73.1,204.6,74.3,209.6,72.4z"/>
|
||||||
|
<path id="XMLID_62_" class="st3" d="M195.6,128.1c5.1-1.9,6-10.1,0.3-11.6c-4.7-1.2-10.9-0.1-11.1,5.7
|
||||||
|
C184.4,128.8,190.5,130,195.6,128.1z"/>
|
||||||
|
</g>
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="288.2" x2="1194.1239" y2="511" gradientTransform="matrix(-1 0 0 1 1439.9739 0)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st4" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st5" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st6" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st7" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st5" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_4_" cx="365.5" cy="101.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st8" d="M393,405.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L370,399.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H338
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H393
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S395.5,405.9,393,405.9z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="129.5" cy="97.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st9" d="M157,410.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,404.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,410.4,157,410.4z"/>
|
||||||
|
<radialGradient id="XMLID_6_" cx="152.5291" cy="50.5049" r="25.3723" gradientTransform="matrix(0.9444 0 0 -0.9444 45.527 530.1968)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_190_" class="st10" d="M210.2,479.2h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9V462
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0s-1.3,3.4,0,4.7l8.9,8.9H169c-1.8,0-3.3,1.5-3.3,3.3
|
||||||
|
s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9V503c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3
|
||||||
|
v-12.5l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0s1.3-3.4,0-4.7l-8.9-8.9H210c1.8,0,3.3-1.5,3.3-3.3C213.6,480.7,212,479.2,210.2,479.2z"/>
|
||||||
|
<radialGradient id="XMLID_7_" cx="298.0168" cy="67.0233" r="25.3693" gradientTransform="matrix(0.9444 0 0 -0.9444 45.527 530.1968)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_182_" class="st11" d="M347.6,463.6h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9h-12.5
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3V475l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3S349.5,463.6,347.6,463.6z"/>
|
||||||
|
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="65.1435" y1="35.1068" x2="65.1435" y2="92.1702">
|
||||||
|
<stop offset="0" style="stop-color:#FEDA00"/>
|
||||||
|
<stop offset="0.7755" style="stop-color:#E2A025"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon class="st12" points="65.1,48 83.7,35.1 77.1,56.7 95.1,70.4 72.6,70.8 65.1,92.2 57.7,70.8 35.1,70.4 53.1,56.7 46.6,35.1
|
||||||
|
"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 8.0 KiB |
59
src/main/resources/icons/weather/overcast.svg
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_6_">
|
||||||
|
<path id="XMLID_10_" class="st0" d="M465.7,137.1c-5.4,0-10.6,1.1-15.3,3.1c-10.7-20.9-32.1-35.3-57.2-35.3
|
||||||
|
c-25,0-46.5,14.4-57.2,35.3c-4.7-1.9-9.9-3.1-15.3-3.1c-22.3,0-40.3,18.1-40.3,40.3s18.1,40.3,40.3,40.3c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5c19.9,0,37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c22.3,0,40.3-18.1,40.3-40.3
|
||||||
|
S487.9,137.1,465.7,137.1z"/>
|
||||||
|
<path id="XMLID_9_" class="st1" d="M398.5,172c-43.4-4.4-84.1,1.7-116.2,15.2c4,18.1,20.1,31.5,39.3,31.5c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5c19.9,0,37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c12.9,0,24.4-6.1,31.8-15.6
|
||||||
|
C471.1,187.2,436.6,175.8,398.5,172z"/>
|
||||||
|
<path id="XMLID_8_" class="st2" d="M465.7,143.6c-5.4,0-10.6,1.1-15.3,3.1c-10.7-20.9-32.1-35.3-57.2-35.3
|
||||||
|
c-25,0-46.5,14.4-57.2,35.3c-4.7-1.9-9.9-3.1-15.3-3.1c-22.3,0-40.3,18.1-40.3,40.3s18.1,40.3,40.3,40.3c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5c19.9,0,37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c22.3,0,40.3-18.1,40.3-40.3
|
||||||
|
S487.9,143.6,465.7,143.6z"/>
|
||||||
|
<path id="XMLID_7_" class="st0" d="M348.1,168.8c3.4,0,6.5,0.7,9.5,1.9c6.6-12.9,19.9-21.8,35.3-21.8c15.5,0,28.7,8.9,35.3,21.8
|
||||||
|
c2.9-1.2,6.1-1.9,9.5-1.9c12.6,0,23,9.3,24.6,21.5c0.1-1.1,0.3-2.3,0.3-3.4c0-13.8-11.1-24.9-24.9-24.9c-3.3,0-6.5,0.7-9.5,1.9
|
||||||
|
c-6.6-12.9-19.9-21.8-35.3-21.8c-15.5,0-28.7,8.9-35.3,21.8c-2.9-1.2-6.1-1.9-9.5-1.9c-13.8,0-24.9,11.1-24.9,24.9
|
||||||
|
c0,1.2,0.1,2.3,0.3,3.4C325.1,178.1,335.5,168.8,348.1,168.8z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<path id="XMLID_5_" class="st0" d="M192.7,137.1c-5.4,0-10.6,1.1-15.3,3.1c-10.7-20.9-32.1-35.3-57.2-35.3s-46.5,14.4-57.2,35.3
|
||||||
|
c-4.7-1.9-9.9-3.1-15.3-3.1c-22.3,0-40.3,18.1-40.3,40.3s18.1,40.3,40.3,40.3c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5s37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c22.3,0,40.3-18.1,40.3-40.3S214.9,137.1,192.7,137.1
|
||||||
|
z"/>
|
||||||
|
<path id="XMLID_4_" class="st1" d="M125.5,172c-43.4-4.4-84.1,1.7-116.2,15.2c4,18.1,20.1,31.5,39.3,31.5c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5s37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c12.9,0,24.4-6.1,31.8-15.6
|
||||||
|
C198,187.2,163.6,175.8,125.5,172z"/>
|
||||||
|
<path id="XMLID_3_" class="st2" d="M192.7,143.6c-5.4,0-10.6,1.1-15.3,3.1c-10.7-20.9-32.1-35.3-57.2-35.3s-46.5,14.4-57.2,35.3
|
||||||
|
c-4.7-1.9-9.9-3.1-15.3-3.1c-22.3,0-40.3,18.1-40.3,40.3s18.1,40.3,40.3,40.3c8.6,0,16.6-2.8,23.2-7.4
|
||||||
|
c11.8,14.3,29.4,23.5,49.4,23.5s37.6-9.3,49.4-23.5c6.5,4.6,14.5,7.4,23.2,7.4c22.3,0,40.3-18.1,40.3-40.3S214.9,143.6,192.7,143.6
|
||||||
|
z"/>
|
||||||
|
<path id="XMLID_2_" class="st0" d="M75.1,168.8c3.4,0,6.5,0.7,9.5,1.9c6.6-12.9,19.9-21.8,35.3-21.8s28.7,8.9,35.3,21.8
|
||||||
|
c2.9-1.2,6.1-1.9,9.5-1.9c12.6,0,23,9.3,24.6,21.5c0.1-1.1,0.3-2.3,0.3-3.4c0-13.8-11.1-24.9-24.9-24.9c-3.3,0-6.5,0.7-9.5,1.9
|
||||||
|
c-6.6-12.9-19.9-21.8-35.3-21.8s-28.7,8.9-35.3,21.8c-2.9-1.2-6.1-1.9-9.5-1.9c-13.8,0-24.9,11.1-24.9,24.9c0,1.2,0.1,2.3,0.3,3.4
|
||||||
|
C52.1,178.1,62.5,168.8,75.1,168.8z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.7 KiB |
32
src/main/resources/icons/weather/rain.svg
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
.st3{fill:#00ADEE;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<path id="XMLID_45_" class="st3" d="M360.2,458.8c5.4,13.7,20.9,20.4,34.6,15s20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S354.8,445.1,360.2,458.8z"/>
|
||||||
|
<path id="XMLID_44_" class="st3" d="M119,458.8c5.4,13.7,20.9,20.4,34.6,15c13.7-5.4,20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S113.6,445.1,119,458.8z"/>
|
||||||
|
<path id="XMLID_41_" class="st3" d="M239.6,478.8c5.4,13.7,20.9,20.4,34.6,15s20.4-20.9,15-34.6s-44.4-39.8-44.4-39.8
|
||||||
|
S234.2,465.1,239.6,478.8z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
47
src/main/resources/icons/weather/rain_thunder.svg
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill:#00AEEF;}
|
||||||
|
.st2{fill:#BEC6D2;}
|
||||||
|
.st3{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st4{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="223.8" x2="1194.1239" y2="1" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st0" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<path id="XMLID_67_" class="st1" d="M103,456.7c5.6,14.3,21.7,21.2,36,15.6s21.2-21.7,15.6-36c-5.6-14.3-46.2-41.4-46.2-41.4
|
||||||
|
S97.4,442.4,103,456.7z"/>
|
||||||
|
<path id="XMLID_38_" class="st1" d="M373,456.6c5.6,14.3,21.7,21.2,36,15.6s21.2-21.7,15.6-36s-46.2-41.4-46.2-41.4
|
||||||
|
S367.4,442.4,373,456.6z"/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st2" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st3" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st4" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st2" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.2 KiB |
50
src/main/resources/icons/weather/sleet.svg
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#00ADEE;}
|
||||||
|
.st1{fill:#BEC6D2;}
|
||||||
|
.st2{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st3{fill:#D3DEE2;}
|
||||||
|
.st4{fill:url(#XMLID_3_);}
|
||||||
|
.st5{fill:url(#XMLID_4_);}
|
||||||
|
</style>
|
||||||
|
<path id="XMLID_257_" class="st0" d="M289.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S285.3,460.7,289.4,471.2z"/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st1" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st2" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st3" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st1" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_3_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st4" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st5" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<path id="XMLID_1_" class="st0" d="M189.4,471.2c4.1,10.5,16,15.6,26.5,11.5s15.6-16,11.5-26.5s-34-30.5-34-30.5
|
||||||
|
S185.3,460.7,189.4,471.2z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 3.7 KiB |
54
src/main/resources/icons/weather/snow.svg
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
.st3{fill:url(#XMLID_3_);}
|
||||||
|
.st4{fill:url(#XMLID_4_);}
|
||||||
|
.st5{fill:url(#XMLID_5_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_3_" cx="375.5" cy="91.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st3" d="M403,415.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L380,409.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H348
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H403
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S405.5,415.9,403,415.9z"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="129.5" cy="87.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st4" d="M157,420.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,414.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,420.4,157,420.4z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="256.5" cy="57.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_1_" class="st5" d="M284,450.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L261,444.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0s-1.7,4.6,0,6.3l11.8,11.8H229c-2.5,0-4.5,2-4.5,4.5
|
||||||
|
s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5
|
||||||
|
v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H284c2.5,0,4.5-2,4.5-4.5S286.4,450.4,284,450.4z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.2 KiB |
81
src/main/resources/icons/weather/snow_thunder.svg
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_2_);}
|
||||||
|
.st1{fill:#BEC6D2;}
|
||||||
|
.st2{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st3{fill:#D3DEE2;}
|
||||||
|
.st4{fill:url(#XMLID_3_);}
|
||||||
|
.st5{fill:url(#XMLID_4_);}
|
||||||
|
.st6{fill:url(#XMLID_5_);}
|
||||||
|
.st7{fill:url(#XMLID_6_);}
|
||||||
|
</style>
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="288.2" x2="1194.1239" y2="511" gradientTransform="matrix(-1 0 0 1 1439.9739 0)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st0" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st1" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st2" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st3" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st1" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<radialGradient id="XMLID_3_" cx="365.5" cy="101.6" r="32" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_215_" class="st4" d="M393,405.9h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L370,399.6v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H338
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0c1.7-1.7,1.7-4.6,0-6.3l-11.8-11.8H393
|
||||||
|
c2.5,0,4.5-2,4.5-4.5S395.5,405.9,393,405.9z"/>
|
||||||
|
<radialGradient id="XMLID_4_" cx="129.5" cy="97.171" r="31.9645" gradientTransform="matrix(1 0 0 -1 0 512)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_213_" class="st5" d="M157,410.4h-16.7l11.8-11.8c1.7-1.7,1.7-4.6,0-6.3c-1.7-1.7-4.6-1.7-6.3,0L134,404.1v-16.7
|
||||||
|
c0-2.5-2-4.5-4.5-4.5s-4.5,2-4.5,4.5v16.7l-11.8-11.8c-1.7-1.7-4.6-1.7-6.3,0c-1.7,1.7-1.7,4.6,0,6.3l11.8,11.8H102
|
||||||
|
c-2.5,0-4.5,2-4.5,4.5s2,4.5,4.5,4.5h16.7l-11.8,11.8c-1.7,1.7-1.7,4.6,0,6.3c1.7,1.7,4.6,1.7,6.3,0l11.8-11.8v16.7
|
||||||
|
c0,2.5,2,4.5,4.5,4.5s4.5-2,4.5-4.5v-16.7l11.8,11.8c1.7,1.7,4.6,1.7,6.3,0s1.7-4.6,0-6.3l-11.8-11.8H157c2.5,0,4.5-2,4.5-4.5
|
||||||
|
S159.4,410.4,157,410.4z"/>
|
||||||
|
<radialGradient id="XMLID_5_" cx="152.5291" cy="50.5049" r="25.3723" gradientTransform="matrix(0.9444 0 0 -0.9444 45.527 530.1968)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_190_" class="st6" d="M210.2,479.2h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9V462
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0s-1.3,3.4,0,4.7l8.9,8.9H169c-1.8,0-3.3,1.5-3.3,3.3
|
||||||
|
s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9V503c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3
|
||||||
|
v-12.5l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0s1.3-3.4,0-4.7l-8.9-8.9H210c1.8,0,3.3-1.5,3.3-3.3C213.6,480.7,212,479.2,210.2,479.2z"/>
|
||||||
|
<radialGradient id="XMLID_6_" cx="298.0168" cy="67.0233" r="25.3693" gradientTransform="matrix(0.9444 0 0 -0.9444 45.527 530.1968)" gradientUnits="userSpaceOnUse">
|
||||||
|
<stop offset="0" style="stop-color:#CEECFB"/>
|
||||||
|
<stop offset="1" style="stop-color:#E1F3FC"/>
|
||||||
|
</radialGradient>
|
||||||
|
<path id="XMLID_182_" class="st7" d="M347.6,463.6h-12.5l8.9-8.9c1.3-1.3,1.3-3.4,0-4.7c-1.3-1.3-3.4-1.3-4.7,0l-8.9,8.9v-12.5
|
||||||
|
c0-1.8-1.5-3.3-3.3-3.3s-3.3,1.5-3.3,3.3v12.5l-8.9-8.9c-1.3-1.3-3.4-1.3-4.7,0c-1.3,1.3-1.3,3.4,0,4.7l8.9,8.9h-12.5
|
||||||
|
c-1.8,0-3.3,1.5-3.3,3.3s1.5,3.3,3.3,3.3h12.5l-8.9,8.9c-1.3,1.3-1.3,3.4,0,4.7c1.3,1.3,3.4,1.3,4.7,0l8.9-8.9v12.5
|
||||||
|
c0,1.8,1.5,3.3,3.3,3.3s3.3-1.5,3.3-3.3V475l8.9,8.9c1.3,1.3,3.4,1.3,4.7,0c1.3-1.3,1.3-3.4,0-4.7l-8.9-8.9h12.5
|
||||||
|
c1.8,0,3.3-1.5,3.3-3.3S349.5,463.6,347.6,463.6z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.0 KiB |
76
src/main/resources/icons/weather/thunder.svg
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:url(#XMLID_4_);}
|
||||||
|
.st1{fill:url(#XMLID_5_);}
|
||||||
|
.st2{fill:url(#XMLID_6_);}
|
||||||
|
.st3{fill:#BEC6D2;}
|
||||||
|
.st4{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st5{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="1314.0287" y1="217.8" x2="1314.0287" y2="67" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_1_" class="st0" points="169.2,373.3 136.6,382.8 146.6,445 82.7,365.8 115.3,356.4 105.2,294.2 "/>
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="1053.9191" y1="217.8" x2="1053.9191" y2="67" gradientTransform="matrix(1 0 0 -1 -667.8642 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_2_" class="st1" points="406.8,294.2 396.7,356.4 429.3,365.8 365.4,445 375.4,382.8 342.8,373.3 "/>
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="1194.1239" y1="223.8" x2="1194.1239" y2="1" gradientTransform="matrix(-1 0 0 -1 1439.9739 512)">
|
||||||
|
<stop offset="0" style="stop-color:#F8F6C3"/>
|
||||||
|
<stop offset="2.186788e-002" style="stop-color:#F9F0B1"/>
|
||||||
|
<stop offset="8.719299e-002" style="stop-color:#FBE684"/>
|
||||||
|
<stop offset="0.1478" style="stop-color:#FDDE5B"/>
|
||||||
|
<stop offset="0.2018" style="stop-color:#FED935"/>
|
||||||
|
<stop offset="0.2472" style="stop-color:#FED616"/>
|
||||||
|
<stop offset="0.2784" style="stop-color:#FED504"/>
|
||||||
|
<stop offset="0.3882" style="stop-color:#FDD209"/>
|
||||||
|
<stop offset="0.5124" style="stop-color:#F9C713"/>
|
||||||
|
<stop offset="0.6436" style="stop-color:#F3B61B"/>
|
||||||
|
<stop offset="0.7796" style="stop-color:#EC9E21"/>
|
||||||
|
<stop offset="0.918" style="stop-color:#E48225"/>
|
||||||
|
<stop offset="1" style="stop-color:#DF6E26"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_287_" class="st2" points="309.7,405.1 261.6,419.1 276.4,511 182,394 230.1,380.1 215.2,288.2 "/>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st3" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st4" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st5" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st3" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 4.9 KiB |
100
src/main/resources/icons/weather/tornado.svg
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill-rule:evenodd;clip-rule:evenodd;fill:#B7CAD1;}
|
||||||
|
.st1{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_2_);}
|
||||||
|
.st2{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_3_);}
|
||||||
|
.st3{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_4_);}
|
||||||
|
.st4{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_5_);}
|
||||||
|
.st5{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_6_);}
|
||||||
|
.st6{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_7_);}
|
||||||
|
.st7{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_8_);}
|
||||||
|
.st8{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_9_);}
|
||||||
|
.st9{fill-rule:evenodd;clip-rule:evenodd;fill:url(#XMLID_10_);}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_135_">
|
||||||
|
<g id="XMLID_134_">
|
||||||
|
<polygon id="XMLID_574_" class="st0" points="194.3,278.1 95.4,278.1 112.8,307.8 194.3,307.8 217.9,307.8 298.7,307.8
|
||||||
|
316.1,278.1 217.9,278.1 "/>
|
||||||
|
<polygon id="XMLID_572_" class="st0" points="238.3,89.9 261.9,89.9 470.2,89.9 496.2,45.3 6,45.3 6,50.2 29.2,89.9 "/>
|
||||||
|
<polygon id="XMLID_570_" class="st0" points="217.9,190.9 194.3,190.9 44.4,190.9 61.7,220.6 194.3,220.6 217.9,220.6
|
||||||
|
349.7,220.6 367.1,190.9 "/>
|
||||||
|
<polygon id="XMLID_569_" class="st0" points="173.9,234.5 150.3,234.5 25.9,234.5 43.3,264.2 150.3,264.2 173.9,264.2
|
||||||
|
280.2,264.2 297.6,234.5 "/>
|
||||||
|
<polygon id="XMLID_568_" class="st0" points="282.2,103.8 81.3,103.8 98.7,133.4 282.2,133.4 305.8,133.4 488.6,133.4 506,103.8
|
||||||
|
305.8,103.8 "/>
|
||||||
|
<polygon id="XMLID_567_" class="st0" points="173.9,408.8 150.3,408.8 127.9,408.8 161.8,466.7 195.6,408.8 "/>
|
||||||
|
<polygon id="XMLID_566_" class="st0" points="217.9,395 247.7,395 265.1,365.3 217.9,365.3 194.3,365.3 146.4,365.3 163.8,395
|
||||||
|
194.3,395 "/>
|
||||||
|
<polygon id="XMLID_565_" class="st0" points="261.9,147.3 238.3,147.3 62.8,147.3 80.2,177 238.3,177 261.9,177 419.2,177
|
||||||
|
436.5,147.3 "/>
|
||||||
|
<polygon id="XMLID_564_" class="st0" points="261.9,351.4 317.1,351.4 334.5,321.7 261.9,321.7 238.3,321.7 164.8,321.7
|
||||||
|
182.2,351.4 238.3,351.4 "/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_575_">
|
||||||
|
<linearGradient id="XMLID_2_" gradientUnits="userSpaceOnUse" x1="95.3753" y1="292.9361" x2="316.0608" y2="292.9361">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_596_" class="st1" points="194.3,278.1 95.4,278.1 112.8,307.8 194.3,307.8 217.9,307.8 298.7,307.8
|
||||||
|
316.1,278.1 217.9,278.1 "/>
|
||||||
|
<linearGradient id="XMLID_3_" gradientUnits="userSpaceOnUse" x1="6" y1="67.5962" x2="496.2175" y2="67.5962">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_593_" class="st2" points="238.3,89.9 261.9,89.9 470.2,89.9 496.2,45.3 6,45.3 6,50.2 29.2,89.9 "/>
|
||||||
|
<linearGradient id="XMLID_4_" gradientUnits="userSpaceOnUse" x1="44.3707" y1="205.767" x2="367.0655" y2="205.767">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_590_" class="st3" points="217.9,190.9 194.3,190.9 44.4,190.9 61.7,220.6 194.3,220.6 217.9,220.6
|
||||||
|
349.7,220.6 367.1,190.9 "/>
|
||||||
|
<linearGradient id="XMLID_5_" gradientUnits="userSpaceOnUse" x1="25.9083" y1="249.3515" x2="297.5984" y2="249.3515">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_587_" class="st4" points="173.9,234.5 150.3,234.5 25.9,234.5 43.3,264.2 150.3,264.2 173.9,264.2
|
||||||
|
280.2,264.2 297.6,234.5 "/>
|
||||||
|
<linearGradient id="XMLID_6_" gradientUnits="userSpaceOnUse" x1="81.295" y1="118.5979" x2="506" y2="118.5979">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_584_" class="st5" points="282.2,103.8 81.3,103.8 98.7,133.4 282.2,133.4 305.8,133.4 488.6,133.4 506,103.8
|
||||||
|
305.8,103.8 "/>
|
||||||
|
<linearGradient id="XMLID_7_" gradientUnits="userSpaceOnUse" x1="127.918" y1="437.7553" x2="195.5887" y2="437.7553">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_583_" class="st6" points="173.9,408.8 150.3,408.8 127.9,408.8 161.8,466.7 195.6,408.8 "/>
|
||||||
|
<linearGradient id="XMLID_8_" gradientUnits="userSpaceOnUse" x1="146.3799" y1="380.1052" x2="265.0562" y2="380.1052">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_582_" class="st7" points="217.9,395 247.7,395 265.1,365.3 217.9,365.3 194.3,365.3 146.4,365.3 163.8,395
|
||||||
|
194.3,395 "/>
|
||||||
|
<linearGradient id="XMLID_9_" gradientUnits="userSpaceOnUse" x1="62.8326" y1="162.1824" x2="436.533" y2="162.1824">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_579_" class="st8" points="261.9,147.3 238.3,147.3 62.8,147.3 80.2,177 238.3,177 261.9,177 419.2,177
|
||||||
|
436.5,147.3 "/>
|
||||||
|
<linearGradient id="XMLID_10_" gradientUnits="userSpaceOnUse" x1="164.8423" y1="336.5206" x2="334.5232" y2="336.5206">
|
||||||
|
<stop offset="0" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
<stop offset="0.5" style="stop-color:#F1F1F2;stop-opacity:0.4"/>
|
||||||
|
<stop offset="1" style="stop-color:#FFFFFF;stop-opacity:0"/>
|
||||||
|
</linearGradient>
|
||||||
|
<polygon id="XMLID_577_" class="st9" points="261.9,351.4 317.1,351.4 334.5,321.7 261.9,321.7 238.3,321.7 164.8,321.7
|
||||||
|
182.2,351.4 238.3,351.4 "/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 6.5 KiB |
33
src/main/resources/icons/weather/wind.svg
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||||
|
viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
|
||||||
|
<style type="text/css">
|
||||||
|
.st0{fill:#BEC6D2;}
|
||||||
|
.st1{opacity:5.000000e-002;fill:#A7A9AC;enable-background:new ;}
|
||||||
|
.st2{fill:#D3DEE2;}
|
||||||
|
</style>
|
||||||
|
<g id="XMLID_78_">
|
||||||
|
<path id="XMLID_637_" class="st0" d="M416.7,177.4c-12,0-23.5,2.5-34,6.8C359.1,138,311.5,106,256,106s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,177.4,6,217.4,6,266.7S46,356,95.3,356c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,177.4,416.7,177.4z"/>
|
||||||
|
<path id="XMLID_636_" class="st1" d="M267.8,254.6c-96.2-9.7-186.3,3.7-257.5,33.7c8.9,40,44.5,69.9,87.1,69.9
|
||||||
|
c19.1,0,36.8-6.1,51.3-16.4c26.2,31.6,65.2,52.1,109.4,52.1s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4
|
||||||
|
c28.6,0,54-13.5,70.4-34.5C428.6,288.3,352.3,263.1,267.8,254.6z"/>
|
||||||
|
<path id="XMLID_635_" class="st2" d="M416.7,191.7c-12,0-23.5,2.5-34,6.8c-23.7-46.2-71.2-78.2-126.7-78.2s-103.1,32-126.7,78.2
|
||||||
|
c-10.5-4.3-21.9-6.8-34-6.8C46,191.7,6,231.7,6,281s40,89.3,89.3,89.3c19.1,0,36.8-6.1,51.3-16.4C172.8,385.5,211.8,406,256,406
|
||||||
|
s83.2-20.5,109.4-52.1c14.5,10.2,32.2,16.4,51.3,16.4c49.3,0,89.3-40,89.3-89.3S466,191.7,416.7,191.7z"/>
|
||||||
|
<path id="XMLID_541_" class="st0" d="M156.2,247.5c7.5,0,14.5,1.5,21,4.2c14.6-28.6,44-48.3,78.3-48.3s63.7,19.8,78.3,48.3
|
||||||
|
c6.5-2.7,13.6-4.2,21-4.2c27.9,0,50.9,20.7,54.6,47.6c0.3-2.5,0.6-5,0.6-7.5c0-30.5-24.7-55.2-55.2-55.2c-7.4,0-14.5,1.5-21,4.2
|
||||||
|
c-14.6-28.6-44-48.3-78.3-48.3s-63.7,19.8-78.3,48.3c-6.5-2.7-13.5-4.2-21-4.2c-30.5,0-55.2,24.7-55.2,55.2c0,2.6,0.2,5.1,0.6,7.5
|
||||||
|
C105.2,268.2,128.2,247.5,156.2,247.5z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_48_">
|
||||||
|
<path id="XMLID_57_" class="st2" d="M60.2,431.6l-0.2,50l49.8,0.4l-12.9-12.9c0,0,66.5-37.1,30.3-89c-1.3,10.2-15.7,57.7-54.7,63.6
|
||||||
|
L60.2,431.6L60.2,431.6z"/>
|
||||||
|
</g>
|
||||||
|
<g id="XMLID_1_">
|
||||||
|
<path id="XMLID_2_" class="st2" d="M451.8,431.6l-12.2,12.2c-39-5.9-53.5-53.5-54.7-63.6c-36.3,51.8,30.3,89,30.3,89L402.2,482
|
||||||
|
l49.8-0.4L451.8,431.6L451.8,431.6z"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 2.3 KiB |
@ -1,6 +1,12 @@
|
|||||||
projectService=Project service: {0}
|
weather.app.temperature.text={0}\u00B0C
|
||||||
randomLabel=The random number is: {0}
|
weather.app.time.text=Time: {0}
|
||||||
shuffle=Shuffle
|
weather.app.humidity.text=Humidity: {0}%
|
||||||
helloWorld=Hello world #{0}
|
weather.app.wind.direction.text=Wind: {0} km/h {1}
|
||||||
increment=Moar
|
weather.app.my.locations.header.text=My Locations
|
||||||
action.dev.sebastiano.jewel.ijplugin.demo.text=Jewel Demo Dialog
|
weather.app.my.locations.empty.list.placeholder.text=No locations added yet. Go and add the first location.
|
||||||
|
weather.app.my.locations.empty.list.placeholder.icon.content.description=Empty list icon.
|
||||||
|
weather.app.search.toolbar.menu.add.button.text=Add
|
||||||
|
weather.app.search.toolbar.menu.add.button.content.description=Add a place to a watch list.
|
||||||
|
weather.app.7days.forecast.title.text=7-day Forecast
|
||||||
|
|
||||||
|
weather.app.clear.button.content.description=Clear
|
||||||
@ -0,0 +1,46 @@
|
|||||||
|
package org.jetbrains.plugins.template
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.test.junit4.ComposeContentTestRule
|
||||||
|
import androidx.compose.ui.test.junit4.ComposeTestRule
|
||||||
|
import androidx.compose.ui.test.junit4.createComposeRule
|
||||||
|
import kotlinx.coroutines.test.runTest
|
||||||
|
import org.jetbrains.jewel.intui.standalone.theme.IntUiTheme
|
||||||
|
import org.junit.Rule
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An abstract base class for Compose-based test cases.
|
||||||
|
*
|
||||||
|
* This class provides a framework for running Compose UI tests. It includes a
|
||||||
|
* test rule for composing UI content and abstracts the content under test.
|
||||||
|
*/
|
||||||
|
internal abstract class ComposeBasedTestCase {
|
||||||
|
@get:Rule
|
||||||
|
val composableRule = createComposeRule()
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Provides the Composable Content under test.
|
||||||
|
*/
|
||||||
|
abstract val contentUnderTest: @Composable () -> Unit
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Runs the given Compose test block in the context of a Compose content test rule.
|
||||||
|
*/
|
||||||
|
fun runComposeTest(block: suspend ComposeTestRule.() -> Unit) = runTest {
|
||||||
|
composableRule.setContentWrappedInTheme {
|
||||||
|
contentUnderTest()
|
||||||
|
}
|
||||||
|
|
||||||
|
composableRule.block()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun ComposeContentTestRule.setContentWrappedInTheme(content: @Composable () -> Unit) {
|
||||||
|
setContent {
|
||||||
|
IntUiTheme {
|
||||||
|
content()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,209 @@
|
|||||||
|
package org.jetbrains.plugins.template
|
||||||
|
|
||||||
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.test.assertIsSelected
|
||||||
|
import androidx.compose.ui.test.junit4.ComposeTestRule
|
||||||
|
import androidx.compose.ui.test.onNodeWithContentDescription
|
||||||
|
import androidx.compose.ui.test.onNodeWithText
|
||||||
|
import androidx.compose.ui.test.performClick
|
||||||
|
import kotlinx.coroutines.flow.Flow
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlinx.coroutines.flow.asStateFlow
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.LocationsUIState
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.MyLocationsViewModelApi
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.MyLocationsListWithEmptyListPlaceholder
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
internal class MyLocationListTest : ComposeBasedTestCase() {
|
||||||
|
private val noLocations = emptyList<Location>()
|
||||||
|
private val myLocationsViewModelApi = FakeMyLocationsViewModel(locations = noLocations)
|
||||||
|
|
||||||
|
override val contentUnderTest: @Composable () -> Unit = {
|
||||||
|
MyLocationsListWithEmptyListPlaceholder(
|
||||||
|
modifier = Modifier.fillMaxWidth(),
|
||||||
|
myLocationsViewModelApi = myLocationsViewModelApi
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify placeholder is shown when no locations is added`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
myLocationsRobot
|
||||||
|
.verifyNoLocationsPlaceHolderVisible()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify location is selected when user adds location`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
myLocationsViewModelApi.onAddLocation(Location("Munich", "Germany"))
|
||||||
|
|
||||||
|
myLocationsRobot
|
||||||
|
.verifyListItemWithTextIsSelected("Munich, Germany")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify item selection when multiple items are present`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
// Add multiple locations
|
||||||
|
myLocationsViewModelApi.onAddLocation(Location("Munich", "Germany"))
|
||||||
|
myLocationsViewModelApi.onAddLocation(Location("Berlin", "Germany"))
|
||||||
|
myLocationsViewModelApi.onAddLocation(Location("Paris", "France"))
|
||||||
|
|
||||||
|
// Initially, the last added location (Paris) should be selected
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Paris, France")
|
||||||
|
|
||||||
|
// Select a different location
|
||||||
|
myLocationsRobot.clickOnItemWithText("Berlin, Germany")
|
||||||
|
|
||||||
|
// Verify the clicked location is now selected
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Berlin, Germany")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify item deletion when multiple items are present`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
// Add multiple locations
|
||||||
|
val munich = Location("Munich", "Germany")
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
|
||||||
|
myLocationsViewModelApi.onAddLocation(munich)
|
||||||
|
myLocationsViewModelApi.onAddLocation(berlin)
|
||||||
|
myLocationsViewModelApi.onAddLocation(paris)
|
||||||
|
|
||||||
|
// Initially, the last added location (Paris) should be selected
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Paris, France")
|
||||||
|
|
||||||
|
// Delete the selected location (Paris)
|
||||||
|
myLocationsViewModelApi.onDeleteLocation(paris)
|
||||||
|
|
||||||
|
// Verify Paris is no longer in the list and Berlin is now selected
|
||||||
|
// (as it's the last item in the list after deletion)
|
||||||
|
myLocationsRobot.verifyItemDoesNotExist("Paris, France")
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Berlin, Germany")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify middle item deletion when three items are present`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
// Add three locations
|
||||||
|
val munich = Location("Munich", "Germany")
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
|
||||||
|
myLocationsViewModelApi.onAddLocation(munich)
|
||||||
|
myLocationsViewModelApi.onAddLocation(berlin)
|
||||||
|
myLocationsViewModelApi.onAddLocation(paris)
|
||||||
|
|
||||||
|
// Initially, the last added location (Paris) should be selected
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Paris, France")
|
||||||
|
|
||||||
|
// Delete the middle location (Berlin)
|
||||||
|
myLocationsViewModelApi.onDeleteLocation(berlin)
|
||||||
|
|
||||||
|
// Verify Berlin is no longer in the list
|
||||||
|
myLocationsRobot.verifyItemDoesNotExist("Berlin, Germany")
|
||||||
|
|
||||||
|
// Verify Munich and Paris still exist
|
||||||
|
myLocationsRobot.verifyItemExists("Munich, Germany")
|
||||||
|
myLocationsRobot.verifyItemExists("Paris, France")
|
||||||
|
|
||||||
|
// Paris should still be selected as it was the selected item before deletion
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Paris, France")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `verify deletion of the only item in list`() = runComposeTest {
|
||||||
|
val myLocationsRobot = MyLocationListRobot(this)
|
||||||
|
|
||||||
|
// Add one location
|
||||||
|
val munich = Location("Munich", "Germany")
|
||||||
|
myLocationsViewModelApi.onAddLocation(munich)
|
||||||
|
|
||||||
|
// Verify the location is selected
|
||||||
|
myLocationsRobot.verifyListItemWithTextIsSelected("Munich, Germany")
|
||||||
|
|
||||||
|
// Delete the only location
|
||||||
|
myLocationsViewModelApi.onDeleteLocation(munich)
|
||||||
|
|
||||||
|
// Verify the location is no longer in the list
|
||||||
|
myLocationsRobot.verifyItemDoesNotExist("Munich, Germany")
|
||||||
|
|
||||||
|
// Verify the empty list placeholder is shown
|
||||||
|
myLocationsRobot.verifyNoLocationsPlaceHolderVisible()
|
||||||
|
}
|
||||||
|
|
||||||
|
private class FakeMyLocationsViewModel(
|
||||||
|
locations: List<Location> = emptyList()
|
||||||
|
) : MyLocationsViewModelApi {
|
||||||
|
|
||||||
|
private val _myLocationsUIStateFlow: MutableStateFlow<LocationsUIState> =
|
||||||
|
MutableStateFlow(LocationsUIState.initial(locations))
|
||||||
|
|
||||||
|
|
||||||
|
override fun onAddLocation(locationToAdd: Location) {
|
||||||
|
_myLocationsUIStateFlow.value = _myLocationsUIStateFlow.value.withLocationAdded(locationToAdd)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onDeleteLocation(locationToDelete: Location) {
|
||||||
|
_myLocationsUIStateFlow.value = _myLocationsUIStateFlow.value.withLocationDeleted(locationToDelete)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLocationSelected(selectedLocationIndex: Int) {
|
||||||
|
_myLocationsUIStateFlow.value = _myLocationsUIStateFlow.value.withItemAtIndexSelected(selectedLocationIndex)
|
||||||
|
}
|
||||||
|
|
||||||
|
override val myLocationsUIStateFlow: Flow<LocationsUIState>
|
||||||
|
get() = _myLocationsUIStateFlow.asStateFlow()
|
||||||
|
|
||||||
|
override fun dispose() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MyLocationListRobot(private val composableRule: ComposeTestRule) {
|
||||||
|
|
||||||
|
fun clickOnItemWithText(text: String) {
|
||||||
|
composableRule
|
||||||
|
.onNodeWithText(text)
|
||||||
|
.performClick()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun verifyNoLocationsPlaceHolderVisible() {
|
||||||
|
composableRule
|
||||||
|
.onNodeWithText("No locations added yet. Go and add the first location.")
|
||||||
|
.assertExists()
|
||||||
|
|
||||||
|
composableRule
|
||||||
|
.onNodeWithContentDescription("Empty list icon.")
|
||||||
|
.assertExists()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun verifyListItemWithTextIsSelected(text: String) {
|
||||||
|
composableRule
|
||||||
|
.onNodeWithText(text)
|
||||||
|
.assertExists()
|
||||||
|
.assertIsSelected()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun verifyItemDoesNotExist(text: String) {
|
||||||
|
composableRule
|
||||||
|
.onNodeWithText(text)
|
||||||
|
.assertDoesNotExist()
|
||||||
|
}
|
||||||
|
|
||||||
|
fun verifyItemExists(text: String) {
|
||||||
|
composableRule
|
||||||
|
.onNodeWithText(text)
|
||||||
|
.assertExists()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,39 +0,0 @@
|
|||||||
package org.jetbrains.plugins.template
|
|
||||||
|
|
||||||
import com.intellij.ide.highlighter.XmlFileType
|
|
||||||
import com.intellij.openapi.components.service
|
|
||||||
import com.intellij.psi.xml.XmlFile
|
|
||||||
import com.intellij.testFramework.TestDataPath
|
|
||||||
import com.intellij.testFramework.fixtures.BasePlatformTestCase
|
|
||||||
import com.intellij.util.PsiErrorElementUtil
|
|
||||||
import org.jetbrains.plugins.template.services.MyProjectService
|
|
||||||
|
|
||||||
@TestDataPath("\$CONTENT_ROOT/src/test/testData")
|
|
||||||
class MyPluginTest : BasePlatformTestCase() {
|
|
||||||
|
|
||||||
fun testXMLFile() {
|
|
||||||
val psiFile = myFixture.configureByText(XmlFileType.INSTANCE, "<foo>bar</foo>")
|
|
||||||
val xmlFile = assertInstanceOf(psiFile, XmlFile::class.java)
|
|
||||||
|
|
||||||
assertFalse(PsiErrorElementUtil.hasErrors(project, xmlFile.virtualFile))
|
|
||||||
|
|
||||||
assertNotNull(xmlFile.rootTag)
|
|
||||||
|
|
||||||
xmlFile.rootTag?.let {
|
|
||||||
assertEquals("foo", it.name)
|
|
||||||
assertEquals("bar", it.value.text)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun testRename() {
|
|
||||||
myFixture.testRename("foo.xml", "foo_after.xml", "a2")
|
|
||||||
}
|
|
||||||
|
|
||||||
fun testProjectService() {
|
|
||||||
val projectService = project.service<MyProjectService>()
|
|
||||||
|
|
||||||
assertNotSame(projectService.getRandomNumber(), projectService.getRandomNumber())
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun getTestDataPath() = "src/test/testData/rename"
|
|
||||||
}
|
|
||||||
@ -0,0 +1,211 @@
|
|||||||
|
package org.jetbrains.plugins.template.components
|
||||||
|
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.PreviewableItem
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Searchable
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.services.SearchAutoCompletionItemProvider
|
||||||
|
import org.junit.After
|
||||||
|
import org.junit.Assert.*
|
||||||
|
import org.junit.Before
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
internal class CompletionPopupControllerTest {
|
||||||
|
|
||||||
|
private lateinit var mockProvider: MockSearchProvider
|
||||||
|
private lateinit var controller: CompletionPopupController<TestItem>
|
||||||
|
|
||||||
|
// Autocompleted items
|
||||||
|
private val selectedItems = mutableListOf<CompletionItem<TestItem>>()
|
||||||
|
|
||||||
|
@Before
|
||||||
|
fun setUp() {
|
||||||
|
val testItems = listOf(
|
||||||
|
TestItem("Paris, France"),
|
||||||
|
TestItem("Berlin, Germany"),
|
||||||
|
TestItem("Chicago, USA"),
|
||||||
|
TestItem("Rome, Italy")
|
||||||
|
)
|
||||||
|
mockProvider = MockSearchProvider(testItems)
|
||||||
|
|
||||||
|
controller = CompletionPopupController(mockProvider) { item ->
|
||||||
|
selectedItems.add(item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@After
|
||||||
|
fun tearDown() {
|
||||||
|
selectedItems.clear()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test query changes updates completion items`() {
|
||||||
|
// When
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertTrue(controller.isVisible)
|
||||||
|
assertItemCount(4)
|
||||||
|
assertOnlyItemAtIndexIsSelected(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test keyboard selection with onSelectMovedDown`() {
|
||||||
|
// Given
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
assertEquals(4, controller.completionItems.size)
|
||||||
|
assertOnlyItemAtIndexIsSelected(0) // First item is initially selected
|
||||||
|
|
||||||
|
// When
|
||||||
|
moveSelectionDown(1)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertOnlyItemAtIndexIsSelected(1) // Second item should now be selected
|
||||||
|
|
||||||
|
// When moving down again
|
||||||
|
moveSelectionDown(1)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertOnlyItemAtIndexIsSelected(2) // Third item should now be selected
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test keyboard selection with onSelectMovedUp`() {
|
||||||
|
// Given - Initialize with query and move to the last item
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
assertOnlyItemAtIndexIsSelected(0)
|
||||||
|
assertItemCount(4)
|
||||||
|
moveSelectionDown(3) // Move to the last item (index 3)
|
||||||
|
|
||||||
|
// Test case 1: Move up from last item (index 3) to third item (index 2)
|
||||||
|
moveSelectionUp()
|
||||||
|
assertOnlyItemAtIndexIsSelected(2)
|
||||||
|
|
||||||
|
// Test case 2: Move up from third item (index 2) to second item (index 1)
|
||||||
|
moveSelectionUp()
|
||||||
|
assertOnlyItemAtIndexIsSelected(1)
|
||||||
|
|
||||||
|
// Test case 3: Move up from second item (index 1) to first item (index 0)
|
||||||
|
moveSelectionUp()
|
||||||
|
assertOnlyItemAtIndexIsSelected(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test keyboard selection stays within boundaries`() {
|
||||||
|
// Given
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
assertEquals(4, controller.completionItems.size)
|
||||||
|
assertOnlyItemAtIndexIsSelected(0) // First item is initially selected
|
||||||
|
|
||||||
|
// When moving up from the first item
|
||||||
|
moveSelectionUp(1)
|
||||||
|
|
||||||
|
// Then it should stay at the first item (no wrapping)
|
||||||
|
assertOnlyItemAtIndexIsSelected(0) // First item should still be selected
|
||||||
|
|
||||||
|
// Move to the last item
|
||||||
|
moveSelectionDown(3)
|
||||||
|
assertOnlyItemAtIndexIsSelected(3) // Last item is selected
|
||||||
|
|
||||||
|
// When moving down from the last item
|
||||||
|
moveSelectionDown(1)
|
||||||
|
|
||||||
|
// Then it should stay at the last item (no wrapping)
|
||||||
|
assertOnlyItemAtIndexIsSelected(3) // Last item should still be selected
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test selection confirmation with keyboard navigation`() {
|
||||||
|
// Given
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
moveSelectionDown(1)
|
||||||
|
|
||||||
|
// When
|
||||||
|
controller.onSelectionConfirmed()
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertItemSelected("Berlin, Germany")
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test selection confirmation with explicit item (mouse click)`() {
|
||||||
|
// Given
|
||||||
|
controller.onQueryChanged("a")
|
||||||
|
val itemToSelect = controller.completionItems[2] // "Chicago, USA"
|
||||||
|
|
||||||
|
controller.onItemClicked(itemToSelect)
|
||||||
|
|
||||||
|
// Then
|
||||||
|
assertItemSelected("Chicago, USA")
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the given selected item label matches the expected label and verifies the state
|
||||||
|
* of the selected items list and popup visibility after a selection operation.
|
||||||
|
*
|
||||||
|
* @param selectedItemLabel The expected label of the selected item.
|
||||||
|
*/
|
||||||
|
private fun assertItemSelected(selectedItemLabel: String) {
|
||||||
|
assertEquals(1, selectedItems.size)
|
||||||
|
assertEquals(selectedItemLabel, selectedItems[0].item.label)
|
||||||
|
assertFalse(controller.isVisible) // Popup should be hidden after selection
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to move selection down by the specified number of steps
|
||||||
|
*
|
||||||
|
* @param step Number of steps to move down
|
||||||
|
*/
|
||||||
|
private fun moveSelectionDown(step: Int) {
|
||||||
|
repeat(step) {
|
||||||
|
controller.onSelectionMovedDown()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to move selection up by the specified number of steps
|
||||||
|
*
|
||||||
|
* @param step Number of steps to move up
|
||||||
|
*/
|
||||||
|
private fun moveSelectionUp(step: Int = 1) {
|
||||||
|
repeat(step) {
|
||||||
|
controller.onSelectionMovedUp()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the current number of completion items matches the expected count.
|
||||||
|
*
|
||||||
|
* @param count The expected number of completion items.
|
||||||
|
*/
|
||||||
|
private fun assertItemCount(count: Int) {
|
||||||
|
assertEquals(count, controller.completionItems.size)
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helper method to assert that only the item at the specified index is selected
|
||||||
|
*/
|
||||||
|
private fun assertOnlyItemAtIndexIsSelected(selectedIndex: Int) {
|
||||||
|
for (i in controller.completionItems.indices) {
|
||||||
|
if (i == selectedIndex) {
|
||||||
|
assertTrue(
|
||||||
|
"Item at index $selectedIndex should be selected",
|
||||||
|
controller.completionItems[i].isSelected
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
assertFalse(
|
||||||
|
"Item at index $i should not be selected",
|
||||||
|
controller.completionItems[i].isSelected
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private data class TestItem(override val label: String) : Searchable, PreviewableItem {
|
||||||
|
override fun matches(query: String): Boolean = label.contains(query, ignoreCase = true)
|
||||||
|
}
|
||||||
|
|
||||||
|
private class MockSearchProvider(private val items: List<TestItem>) : SearchAutoCompletionItemProvider<TestItem> {
|
||||||
|
override fun provideSearchableItems(searchTerm: String): List<TestItem> {
|
||||||
|
return items.filter { it.matches(searchTerm) }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,209 @@
|
|||||||
|
package org.jetbrains.plugins.template.weatherApp.services
|
||||||
|
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.model.Location
|
||||||
|
import org.jetbrains.plugins.template.weatherApp.ui.LocationsUIState
|
||||||
|
import org.junit.Assert.*
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
internal class LocationsUIStateTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test initialization with empty locations`() {
|
||||||
|
val state = LocationsUIState.initial(emptyList())
|
||||||
|
|
||||||
|
assertTrue(state.locations.isEmpty())
|
||||||
|
assertEquals(-1, state.selectedIndex)
|
||||||
|
assertNull(state.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test initialization with locations and valid selection`() {
|
||||||
|
val locations = listOf(
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Paris", "France")
|
||||||
|
)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(1)
|
||||||
|
|
||||||
|
assertEquals(2, state.locations.size)
|
||||||
|
assertEquals(1, state.selectedIndex)
|
||||||
|
assertEquals(locations[1], state.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test selecting item out of range throws exception`() {
|
||||||
|
val locations = listOf(
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Paris", "France")
|
||||||
|
)
|
||||||
|
|
||||||
|
assertThrows(IllegalArgumentException::class.java) {
|
||||||
|
LocationsUIState.initial(locations).withItemAtIndexSelected(5)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test toSelectableLocations with selection`() {
|
||||||
|
val locations = listOf(
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Paris", "France"),
|
||||||
|
Location("Rome", "Italy")
|
||||||
|
)
|
||||||
|
val state = LocationsUIState
|
||||||
|
.initial(locations)
|
||||||
|
.withItemAtIndexSelected(1)
|
||||||
|
|
||||||
|
val selectableLocations = state.toSelectableLocations()
|
||||||
|
|
||||||
|
assertEquals(3, selectableLocations.size)
|
||||||
|
assertFalse(selectableLocations[0].isSelected)
|
||||||
|
assertTrue(selectableLocations[1].isSelected)
|
||||||
|
assertFalse(selectableLocations[2].isSelected)
|
||||||
|
|
||||||
|
assertEquals("Berlin, Germany", selectableLocations[0].location.label)
|
||||||
|
assertEquals("Paris, France", selectableLocations[1].location.label)
|
||||||
|
assertEquals("Rome, Italy", selectableLocations[2].location.label)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationAdded adds location when location doesn't exist`() {
|
||||||
|
val locations = listOf(
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Paris", "France")
|
||||||
|
)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(0)
|
||||||
|
|
||||||
|
val newLocation = Location("Rome", "Italy")
|
||||||
|
val newState = state.withLocationAdded(newLocation)
|
||||||
|
|
||||||
|
assertEquals(3, newState.locations.size)
|
||||||
|
assertEquals(2, newState.selectedIndex) // New location should be selected
|
||||||
|
assertEquals(newLocation, newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationAdded selects existing location when location already exists in list`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val locations = listOf(berlin, paris)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(0)
|
||||||
|
|
||||||
|
// Add Berlin again (already exists)
|
||||||
|
val newState = state.withLocationAdded(berlin)
|
||||||
|
|
||||||
|
assertEquals(2, newState.locations.size) // No new location added
|
||||||
|
assertEquals(0, newState.selectedIndex) // Berlin is selected
|
||||||
|
assertEquals(berlin, newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved removes location when location exists`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val rome = Location("Rome", "Italy")
|
||||||
|
val locations = listOf(berlin, paris, rome)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(1) // Paris selected
|
||||||
|
|
||||||
|
// Remove Paris (the selected location)
|
||||||
|
val newState = state.withLocationDeleted(paris)
|
||||||
|
|
||||||
|
assertEquals(2, newState.locations.size)
|
||||||
|
assertEquals(0, newState.selectedIndex) // Selection should move to Berlin
|
||||||
|
assertEquals(berlin, newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved does nothing when location to remove doesn't exist in list`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val locations = listOf(berlin, paris)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(1) // Paris selected
|
||||||
|
|
||||||
|
// Try to remove a location that doesn't exist
|
||||||
|
val newState = state.withLocationDeleted(Location("Rome", "Italy"))
|
||||||
|
|
||||||
|
// State should remain unchanged
|
||||||
|
assertEquals(2, newState.locations.size)
|
||||||
|
assertEquals(1, newState.selectedIndex)
|
||||||
|
assertEquals(paris, newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved when location to remove is currently selected location`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val locations = listOf(berlin, paris)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(1) // Paris selected
|
||||||
|
|
||||||
|
// Remove Paris (the selected and last location)
|
||||||
|
val newState = state.withLocationDeleted(paris)
|
||||||
|
|
||||||
|
assertEquals(1, newState.locations.size)
|
||||||
|
assertEquals(0, newState.selectedIndex) // Selection should move to Berlin
|
||||||
|
assertEquals(berlin, newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved when removing the only location`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val locations = listOf(berlin)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(0) // Berlin selected
|
||||||
|
|
||||||
|
// Remove Berlin (the only location)
|
||||||
|
val newState = state.withLocationDeleted(berlin)
|
||||||
|
|
||||||
|
assertTrue(newState.locations.isEmpty())
|
||||||
|
assertEquals(-1, newState.selectedIndex) // No selection
|
||||||
|
assertNull(newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved moves selection when location to remove is between first location and selected location`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val rome = Location("Rome", "Italy")
|
||||||
|
val madrid = Location("Madrid", "Spain")
|
||||||
|
val locations = listOf(berlin, paris, rome, madrid)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(2) // Rome selected (index 3)
|
||||||
|
|
||||||
|
// Remove Paris (index 1) which is between 0 and selectedIndex (3)
|
||||||
|
val newState = state.withLocationDeleted(paris)
|
||||||
|
|
||||||
|
assertEquals(3, newState.locations.size)
|
||||||
|
assertEquals(1, newState.selectedIndex) // Selection should be decremented by 1
|
||||||
|
assertEquals(rome, newState.selectedLocation) // Still Rome, but at index 2 now
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withItemAtIndexSelected with valid index`() {
|
||||||
|
val locations = listOf(
|
||||||
|
Location("Berlin", "Germany"),
|
||||||
|
Location("Paris", "France"),
|
||||||
|
Location("Rome", "Italy")
|
||||||
|
)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(0) // Berlin selected
|
||||||
|
|
||||||
|
// Select Rome
|
||||||
|
val newState = state.withItemAtIndexSelected(2)
|
||||||
|
|
||||||
|
assertEquals(3, newState.locations.size)
|
||||||
|
assertEquals(2, newState.selectedIndex)
|
||||||
|
assertEquals(locations[2], newState.selectedLocation)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `test withLocationRemoved when removed location is after the selected location in list`() {
|
||||||
|
val berlin = Location("Berlin", "Germany")
|
||||||
|
val paris = Location("Paris", "France")
|
||||||
|
val rome = Location("Rome", "Italy")
|
||||||
|
val madrid = Location("Madrid", "Spain")
|
||||||
|
val locations = listOf(berlin, paris, rome, madrid)
|
||||||
|
val state = LocationsUIState.initial(locations).withItemAtIndexSelected(1) // Paris selected (index 1)
|
||||||
|
|
||||||
|
// Remove Madrid (index 3) which is greater than selectedIndex (1)
|
||||||
|
val newState = state.withLocationDeleted(madrid)
|
||||||
|
|
||||||
|
assertEquals(3, newState.locations.size)
|
||||||
|
assertEquals(1, newState.selectedIndex) // Selection should remain unchanged
|
||||||
|
assertEquals(paris, newState.selectedLocation) // Still Paris at index 1
|
||||||
|
}
|
||||||
|
}
|
||||||