@fmidev/smartmet-alert-client 4.2.7 → 4.7.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/.eslintignore +2 -14
  2. package/.github/workflows/test.yaml +26 -0
  3. package/.nvmrc +1 -0
  4. package/dist/index.dark.html +1 -1
  5. package/dist/index.en.html +1 -1
  6. package/dist/index.fi.html +1 -1
  7. package/dist/index.html +5 -0
  8. package/dist/index.js +105 -135
  9. package/dist/index.mjs +112 -135
  10. package/dist/index.sv.html +1 -1
  11. package/dist/locale-en-DCEKDw5G.js +8 -0
  12. package/dist/locale-fi-DPiOM1rB.js +8 -0
  13. package/dist/locale-sv-B0FlbgEF.js +8 -0
  14. package/dist/vendor-Cfkkvdz7.js +21 -0
  15. package/dist/vue/index.mjs +15245 -0
  16. package/dist/vue/style.css +1 -0
  17. package/dist/xml-parser-BiNO9kc-.js +13 -0
  18. package/package.json +61 -25
  19. package/public/index.dark.html +1 -1
  20. package/public/index.en.html +1 -1
  21. package/public/index.fi.html +1 -1
  22. package/public/index.sv.html +1 -1
  23. package/src/AlertClientVue.vue +170 -0
  24. package/src/App.vue +58 -176
  25. package/src/assets/img/ui/arrow-down.svg +4 -14
  26. package/src/assets/img/ui/arrow-up.svg +4 -14
  27. package/src/assets/img/ui/clear.svg +7 -21
  28. package/src/assets/img/ui/close.svg +4 -15
  29. package/src/assets/img/ui/toggle-selected.svg +12 -0
  30. package/src/assets/img/ui/toggle-unselected.svg +12 -0
  31. package/src/assets/img/warning/cold-weather.svg +3 -6
  32. package/src/assets/img/warning/flood-level-3.svg +4 -7
  33. package/src/assets/img/warning/forest-fire-weather.svg +2 -6
  34. package/src/assets/img/warning/grass-fire-weather.svg +2 -6
  35. package/src/assets/img/warning/hot-weather.svg +3 -6
  36. package/src/assets/img/warning/pedestrian-safety.svg +3 -7
  37. package/src/assets/img/warning/rain.svg +2 -7
  38. package/src/assets/img/warning/sea-icing.svg +2 -6
  39. package/src/assets/img/warning/sea-thunder-storm.svg +2 -5
  40. package/src/assets/img/warning/sea-water-height-high-water.svg +3 -8
  41. package/src/assets/img/warning/sea-water-height-shallow-water.svg +3 -7
  42. package/src/assets/img/warning/sea-wave-height.svg +4 -7
  43. package/src/assets/img/warning/sea-wind-legend.svg +2 -5
  44. package/src/assets/img/warning/sea-wind.svg +2 -5
  45. package/src/assets/img/warning/several.svg +2 -5
  46. package/src/assets/img/warning/thunder-storm.svg +2 -5
  47. package/src/assets/img/warning/traffic-weather.svg +2 -6
  48. package/src/assets/img/warning/uv-note.svg +2 -6
  49. package/src/assets/img/warning/wind.svg +2 -5
  50. package/src/components/AlertClient.vue +42 -20
  51. package/src/components/CollapsiblePanel.vue +284 -0
  52. package/src/components/DayLarge.vue +40 -32
  53. package/src/components/DaySmall.vue +17 -7
  54. package/src/components/Days.vue +77 -52
  55. package/src/components/DescriptionWarning.vue +26 -8
  56. package/src/components/GrayScaleToggle.vue +42 -35
  57. package/src/components/Legend.vue +36 -240
  58. package/src/components/MapLarge.vue +55 -50
  59. package/src/components/MapSmall.vue +48 -29
  60. package/src/components/PopupRow.vue +6 -3
  61. package/src/components/Region.vue +162 -53
  62. package/src/components/RegionWarning.vue +33 -11
  63. package/src/components/Regions.vue +59 -29
  64. package/src/components/Warning.vue +53 -49
  65. package/src/components/Warnings.vue +54 -16
  66. package/src/locales/en.json +21 -4
  67. package/src/locales/fi.json +23 -6
  68. package/src/locales/sv.json +20 -3
  69. package/src/main.js +1 -0
  70. package/src/mixins/alertClientCore.js +210 -0
  71. package/src/mixins/config.js +263 -257
  72. package/src/mixins/utils.js +46 -15
  73. package/src/plugins/index.js +1 -1
  74. package/src/scss/_utilities.scss +193 -0
  75. package/src/scss/backgrounds.scss +2 -0
  76. package/src/scss/colors.scss +5 -3
  77. package/src/scss/constants.scss +3 -2
  78. package/src/scss/themes/dark-gray.scss +3 -3
  79. package/src/scss/themes/dark.scss +1 -1
  80. package/src/scss/themes/light-gray.scss +5 -5
  81. package/src/scss/themes/light.scss +3 -3
  82. package/src/scss/warningImages.scss +9 -5
  83. package/src/vue.js +41 -0
  84. package/svgo.config.js +45 -0
  85. package/tests/README.md +430 -0
  86. package/tests/fixtures/mockWarningData.js +135 -0
  87. package/tests/integration/warning-flow.spec.js +452 -0
  88. package/tests/setup.js +41 -0
  89. package/tests/unit/components/AlertClient.spec.js +734 -0
  90. package/tests/unit/components/DayLarge.spec.js +281 -0
  91. package/tests/unit/components/DaySmall.spec.js +278 -0
  92. package/tests/unit/components/Days.spec.js +565 -0
  93. package/tests/unit/components/DescriptionWarning.spec.js +432 -0
  94. package/tests/unit/components/GrayScaleToggle.spec.js +311 -0
  95. package/tests/unit/components/Legend.spec.js +223 -0
  96. package/tests/unit/components/MapLarge.spec.js +276 -0
  97. package/tests/unit/components/MapSmall.spec.js +226 -0
  98. package/tests/unit/components/PopupRow.spec.js +261 -0
  99. package/tests/unit/components/Region.spec.js +430 -0
  100. package/tests/unit/components/RegionWarning.snapshot.spec.js +73 -0
  101. package/tests/unit/components/RegionWarning.spec.js +408 -0
  102. package/tests/unit/components/Regions.spec.js +335 -0
  103. package/tests/unit/components/Warning.snapshot.spec.js +107 -0
  104. package/tests/unit/components/Warning.spec.js +472 -0
  105. package/tests/unit/components/Warnings.spec.js +329 -0
  106. package/tests/unit/components/__snapshots__/RegionWarning.snapshot.spec.js.snap +21 -0
  107. package/tests/unit/components/__snapshots__/Warning.snapshot.spec.js.snap +199 -0
  108. package/tests/unit/mixins/config.spec.js +269 -0
  109. package/tests/unit/mixins/i18n.spec.js +115 -0
  110. package/tests/unit/mixins/keycodes.spec.js +37 -0
  111. package/tests/unit/mixins/utils.spec.js +624 -0
  112. package/vite.config.js +96 -26
  113. package/vitest.config.js +40 -0
  114. package/dist/index.mjs.map +0 -1
  115. package/dist/index.relative.html +0 -19
  116. package/dist/index.start.html +0 -20
  117. package/playwright.config.ts +0 -18
  118. package/public/index.relative.html +0 -19
  119. package/public/index.start.html +0 -20
  120. package/src/assets/img/ui/toggle-selected-blue.svg +0 -4
  121. package/src/assets/img/ui/toggle-selected-dark.svg +0 -4
  122. package/src/assets/img/ui/toggle-selected-light.svg +0 -4
  123. package/src/assets/img/ui/toggle-unselected-dark.svg +0 -4
  124. package/src/assets/img/ui/toggle-unselected-light.svg +0 -4
  125. package/src/mixins/panzoom.js +0 -900
  126. package/test/snapshot.test.ts +0 -126
  127. package/vitest.config.ts +0 -6
@@ -0,0 +1,170 @@
1
+ <template>
2
+ <AlertClient
3
+ v-if="visible"
4
+ :refresh-interval="refreshIntervalNormalized"
5
+ :default-day="selectedDayNormalized"
6
+ :static-days="staticDaysNormalized"
7
+ :start-from="startFrom"
8
+ :region-list-enabled="regionListEnabledNormalized"
9
+ :gray-scale-selector="grayScaleSelectorNormalized"
10
+ :current-time="currentTime"
11
+ :warnings-data="warningsData"
12
+ :daily-warning-types="dailyWarningTypesNormalized"
13
+ :geometry-id="geometryIdNormalized"
14
+ :language="language"
15
+ :theme="themeClass"
16
+ :sleep="sleepNormalized"
17
+ :loading="loading"
18
+ :spinner-enabled="spinnerEnabledNormalized"
19
+ @loaded="onLoaded"
20
+ @theme-changed="onThemeChanged"
21
+ @update-warnings="fetchWarnings" />
22
+ </template>
23
+ <script>
24
+ /**
25
+ * Vue wrapper component for AlertClient.
26
+ * Accepts native JavaScript types (Number, Boolean) unlike the web component
27
+ * version which only accepts strings.
28
+ */
29
+ import AlertClient from './components/AlertClient.vue'
30
+ import alertClientCore, { toBool, toNum } from './mixins/alertClientCore'
31
+ import config from './mixins/config'
32
+ import utils from './mixins/utils'
33
+
34
+ export default {
35
+ name: 'AlertClientVue',
36
+ components: {
37
+ AlertClient,
38
+ },
39
+ mixins: [config, utils, alertClientCore],
40
+ props: {
41
+ currentDate: {
42
+ type: [String, Date],
43
+ default: null,
44
+ },
45
+ baseUrl: {
46
+ type: String,
47
+ default: 'https://www.ilmatieteenlaitos.fi/geoserver/alert/ows',
48
+ },
49
+ selectedDay: {
50
+ type: [String, Number],
51
+ default: 0,
52
+ },
53
+ regionListEnabled: {
54
+ type: [String, Boolean],
55
+ default: true,
56
+ },
57
+ spinnerEnabled: {
58
+ type: [String, Boolean],
59
+ default: true,
60
+ },
61
+ grayScaleSelector: {
62
+ type: [String, Boolean],
63
+ default: true,
64
+ },
65
+ staticDays: {
66
+ type: [String, Boolean],
67
+ default: true,
68
+ },
69
+ startFrom: {
70
+ type: String,
71
+ default: '',
72
+ },
73
+ weatherUpdated: {
74
+ type: String,
75
+ default: '',
76
+ },
77
+ floodUpdated: {
78
+ type: String,
79
+ default: '',
80
+ },
81
+ weatherWarnings: {
82
+ type: String,
83
+ default: '',
84
+ },
85
+ floodWarnings: {
86
+ type: String,
87
+ default: '',
88
+ },
89
+ warnings: {
90
+ type: [String, Object],
91
+ default: null,
92
+ },
93
+ dailyWarningTypes: {
94
+ type: [String, Array],
95
+ default: () => [],
96
+ },
97
+ refreshInterval: {
98
+ type: [String, Number],
99
+ default: 900000, // 1000 * 60 * 15
100
+ },
101
+ geometryId: {
102
+ type: [String, Number],
103
+ default: () => Number(config.props.defaultGeometryId) || 2021,
104
+ },
105
+ language: {
106
+ type: String,
107
+ default: import.meta.env.VITE_LANGUAGE || 'fi',
108
+ },
109
+ theme: {
110
+ type: String,
111
+ default: 'light',
112
+ },
113
+ fontScale: {
114
+ type: [String, Number],
115
+ default: 1,
116
+ },
117
+ sleep: {
118
+ type: [String, Boolean],
119
+ default: true,
120
+ },
121
+ debugMode: {
122
+ type: [String, Boolean],
123
+ default: false,
124
+ },
125
+ },
126
+ computed: {
127
+ // Type normalizers for mixed-type props
128
+ selectedDayNormalized() {
129
+ return toNum(this.selectedDay, 0)
130
+ },
131
+ regionListEnabledNormalized() {
132
+ return toBool(this.regionListEnabled, true)
133
+ },
134
+ grayScaleSelectorNormalized() {
135
+ return toBool(this.grayScaleSelector, true)
136
+ },
137
+ staticDaysNormalized() {
138
+ return toBool(this.staticDays, true)
139
+ },
140
+ dailyWarningTypesNormalized() {
141
+ if (Array.isArray(this.dailyWarningTypes)) return this.dailyWarningTypes
142
+ if (
143
+ typeof this.dailyWarningTypes === 'string' &&
144
+ this.dailyWarningTypes
145
+ ) {
146
+ return this.dailyWarningTypes.split(',').map((item) => item.trim())
147
+ }
148
+ return []
149
+ },
150
+ refreshIntervalNormalized() {
151
+ return toNum(this.refreshInterval, 900000)
152
+ },
153
+ geometryIdNormalized() {
154
+ return toNum(this.geometryId, 2021)
155
+ },
156
+ sleepNormalized() {
157
+ return toBool(this.sleep, true)
158
+ },
159
+ spinnerEnabledNormalized() {
160
+ return toBool(this.spinnerEnabled, true)
161
+ },
162
+ debugModeNormalized() {
163
+ return toBool(this.debugMode, false)
164
+ },
165
+ },
166
+ }
167
+ </script>
168
+ <style lang="scss">
169
+ @import './scss/utilities.scss';
170
+ </style>
package/src/App.vue CHANGED
@@ -1,29 +1,33 @@
1
1
  <template>
2
2
  <AlertClient
3
3
  v-if="visible"
4
- :refresh-interval="refreshIntervalParsed"
5
- :default-day="selectedDayParsed"
6
- :static-days="staticDaysParsed"
4
+ :refresh-interval="refreshIntervalNormalized"
5
+ :default-day="selectedDayNormalized"
6
+ :static-days="staticDaysNormalized"
7
7
  :start-from="startFrom"
8
- :region-list-enabled="regionListEnabledParsed"
9
- :gray-scale-selector="grayScaleSelectorParsed"
8
+ :region-list-enabled="regionListEnabledNormalized"
9
+ :gray-scale-selector="grayScaleSelectorNormalized"
10
10
  :current-time="currentTime"
11
11
  :warnings-data="warningsData"
12
- :daily-warning-types="dailyWarningTypesParsed"
13
- :geometry-id="geometryIdParsed"
12
+ :daily-warning-types="dailyWarningTypesNormalized"
13
+ :geometry-id="geometryIdNormalized"
14
14
  :language="language"
15
15
  :theme="themeClass"
16
- :sleep="sleepParsed"
16
+ :sleep="sleepNormalized"
17
17
  :loading="loading"
18
- :spinner-enabled="spinnerEnabledParsed"
18
+ :spinner-enabled="spinnerEnabledNormalized"
19
19
  @loaded="onLoaded"
20
- @themeChanged="onThemeChanged"
20
+ @theme-changed="onThemeChanged"
21
21
  @update-warnings="fetchWarnings" />
22
22
  </template>
23
23
  <script>
24
- import fetch from 'cross-fetch'
25
-
24
+ /**
25
+ * Web component wrapper for AlertClient.
26
+ * All props are strings (HTML attribute limitation).
27
+ * Use AlertClientVue.vue for native Vue usage with proper types.
28
+ */
26
29
  import AlertClient from './components/AlertClient.vue'
30
+ import alertClientCore, { toBool, toNum } from './mixins/alertClientCore'
27
31
  import config from './mixins/config'
28
32
  import utils from './mixins/utils'
29
33
 
@@ -32,7 +36,7 @@ export default {
32
36
  components: {
33
37
  AlertClient,
34
38
  },
35
- mixins: [config, utils],
39
+ mixins: [config, utils, alertClientCore],
36
40
  props: {
37
41
  currentDate: {
38
42
  type: String,
@@ -66,10 +70,22 @@ export default {
66
70
  type: String,
67
71
  default: '',
68
72
  },
69
- weatherUpdated: String,
70
- floodUpdated: String,
71
- weatherWarnings: String,
72
- floodWarnings: String,
73
+ weatherUpdated: {
74
+ type: String,
75
+ default: '',
76
+ },
77
+ floodUpdated: {
78
+ type: String,
79
+ default: '',
80
+ },
81
+ weatherWarnings: {
82
+ type: String,
83
+ default: '',
84
+ },
85
+ floodWarnings: {
86
+ type: String,
87
+ default: '',
88
+ },
73
89
  warnings: {
74
90
  type: String,
75
91
  default: '',
@@ -94,11 +110,11 @@ export default {
94
110
  type: String,
95
111
  default: 'light',
96
112
  },
97
- sleep: {
113
+ fontScale: {
98
114
  type: String,
99
- default: 'true',
115
+ default: '1',
100
116
  },
101
- spinnerEnabled: {
117
+ sleep: {
102
118
  type: String,
103
119
  default: 'true',
104
120
  },
@@ -107,177 +123,43 @@ export default {
107
123
  default: 'false',
108
124
  },
109
125
  },
110
- data() {
111
- return {
112
- loading: 1,
113
- updatedAt: null,
114
- refreshedAt: null,
115
- themeClass: `${this.theme}-theme`,
116
- warningsData: null,
117
- visible: true,
118
- }
119
- },
120
126
  computed: {
121
- selectedDayParsed() {
122
- return Number(this.selectedDay)
127
+ // String-to-type normalizers for web component props
128
+ selectedDayNormalized() {
129
+ return toNum(this.selectedDay, 0)
123
130
  },
124
- regionListEnabledParsed() {
125
- return this.regionListEnabled.toLowerCase() !== 'false'
131
+ regionListEnabledNormalized() {
132
+ return toBool(this.regionListEnabled, true)
126
133
  },
127
- grayScaleSelectorParsed() {
128
- return this.grayScaleSelector.toLowerCase() !== 'false'
134
+ grayScaleSelectorNormalized() {
135
+ return toBool(this.grayScaleSelector, true)
129
136
  },
130
- staticDaysParsed() {
131
- return this.staticDays.toLowerCase() !== 'false'
137
+ staticDaysNormalized() {
138
+ return toBool(this.staticDays, true)
132
139
  },
133
- dailyWarningTypesParsed() {
140
+ dailyWarningTypesNormalized() {
134
141
  return this.dailyWarningTypes
135
142
  ? this.dailyWarningTypes.split(',').map((item) => item.trim())
136
143
  : []
137
144
  },
138
- refreshIntervalParsed() {
139
- return Number(this.refreshInterval)
140
- },
141
- geometryIdParsed() {
142
- return Number(this.geometryId)
143
- },
144
- sleepParsed() {
145
- return this.sleep.toLowerCase() !== 'false'
146
- },
147
- spinnerEnabledParsed() {
148
- return this.spinnerEnabled.toLowerCase() !== 'false'
149
- },
150
- weatherUpdatedType() {
151
- return 'weather_update_time'
152
- },
153
- floodUpdatedType() {
154
- return 'flood_update_time'
155
- },
156
- weatherWarningsType() {
157
- return 'weather_finland_active_all'
158
- },
159
- floodWarningsType() {
160
- return 'flood_finland_active_all'
161
- },
162
- weatherUpdatedQuery() {
163
- return this.weatherUpdated || `${this.query}${this.weatherUpdatedType}`
164
- },
165
- floodUpdatedQuery() {
166
- return this.floodUpdated || `${this.query}${this.floodUpdatedType}`
167
- },
168
- weatherWarningsQuery() {
169
- return this.weatherWarnings || `${this.query}${this.weatherWarningsType}`
170
- },
171
- floodWarningsQuery() {
172
- return (
173
- this.floodWarnings ||
174
- `${this.query}${this.floodWarningsType}${this.floodFilter}`
175
- )
176
- },
177
- query() {
178
- return '?service=WFS&version=1.0.0&request=GetFeature&maxFeatures=1000&outputFormat=application%2Fjson&typeName='
179
- },
180
- floodSupportedSeverities() {
181
- return ['moderate', 'severe', 'extreme']
182
- },
183
- floodFilter() {
184
- return `${this.floodSupportedSeverities.reduce(
185
- (filter, severity, index) =>
186
- `${filter + (index === 0 ? '' : ',')}%27${severity.toUpperCase()}%27`,
187
- '&cql_filter=severity%20IN%20('
188
- )})%20AND%20language=%27${this.capLanguage()}%27`
189
- },
190
- capLanguage() {
191
- return () =>
192
- ({
193
- fi: 'fi-FI',
194
- sv: 'sv-SV',
195
- en: 'en-US',
196
- })[this.language]
197
- },
198
- currentTime() {
199
- if (this.refreshedAt) {
200
- return this.refreshedAt
201
- }
202
- if (this.currentDate) {
203
- return new Date(this.currentDate).getTime()
204
- }
205
- return Date.now()
206
- },
207
- },
208
- created() {
209
- if (this.warnings) {
210
- this.warningsData = JSON.parse(this.warnings)
211
- }
212
- },
213
- serverPrefetch() {
214
- if (!this.warnings) {
215
- return this.fetchWarnings()
216
- }
217
- },
218
- methods: {
219
- onLoaded(loaded) {
220
- if (loaded !== 0) {
221
- this.loading = loaded === -1 ? -1 : 0
222
- }
145
+ refreshIntervalNormalized() {
146
+ return toNum(this.refreshInterval, 900000)
223
147
  },
224
- onThemeChanged(newTheme) {
225
- this.themeClass = `${
226
- newTheme != null && newTheme.length > 0 ? newTheme : this.theme
227
- }-theme`
148
+ geometryIdNormalized() {
149
+ return toNum(this.geometryId, 2021)
228
150
  },
229
- fetchWarnings() {
230
- this.loading = 1
231
- if (this.debugMode.toLowerCase() !== 'false') {
232
- console.log(`Updating warnings at ${new Date()}`)
233
- }
234
- const queries = new Map()
235
- .set(
236
- `${this.baseUrl}${this.weatherUpdatedQuery}`,
237
- this.weatherUpdatedType
238
- )
239
- .set(`${this.baseUrl}${this.floodUpdatedQuery}`, this.floodUpdatedType)
240
- .set(
241
- `${this.baseUrl}${this.weatherWarningsQuery}`,
242
- this.weatherWarningsType
243
- )
244
- .set(
245
- `${this.baseUrl}${this.floodWarningsQuery}`,
246
- this.floodWarningsType
247
- )
248
- const responseData = {}
249
- return Promise.allSettled(
250
- [...queries.keys()].map(async (query) =>
251
- fetch(query).then((response) =>
252
- response
253
- .json()
254
- .then((json) => {
255
- const currentTime = Date.now()
256
- if (this.updatedAt != null) {
257
- this.refreshedAt = currentTime
258
- }
259
- this.updatedAt = currentTime
260
- responseData[queries.get(query)] = json
261
- })
262
- .catch((error) => {
263
- this.loading = -1
264
- console.log(error)
265
- })
266
- )
267
- )
268
- ).then(() => {
269
- this.warningsData = responseData
270
- })
151
+ sleepNormalized() {
152
+ return toBool(this.sleep, true)
271
153
  },
272
- show() {
273
- this.visible = true
154
+ spinnerEnabledNormalized() {
155
+ return toBool(this.spinnerEnabled, true)
274
156
  },
275
- hide() {
276
- this.visible = false
157
+ debugModeNormalized() {
158
+ return toBool(this.debugMode, false)
277
159
  },
278
160
  },
279
161
  }
280
162
  </script>
281
- <style>
282
- @import 'bootstrap/dist/css/bootstrap.min.css';
163
+ <style lang="scss">
164
+ @import './scss/utilities.scss';
283
165
  </style>
@@ -1,14 +1,4 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="15px" height="8px" viewBox="0 0 15 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
4
- <title>arrow-down-symbol</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
8
- <g id="Symbols" transform="translate(-732.000000, -738.000000)" stroke="#979797" stroke-width="1.5">
9
- <g id="arrow-down-symbol" transform="translate(733.000000, 739.000000)">
10
- <polyline id="fill-1" transform="translate(6.500000, 3.000000) rotate(-270.000000) translate(-6.500000, -3.000000) " points="3.5 -3.5 9.5 3 3.5 9.5"></polyline>
11
- </g>
12
- </g>
13
- </g>
14
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8">
2
+ <title>arrow-down-symbol</title>
3
+ <path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M14 1 7.5 7 1 1"/>
4
+ </svg>
@@ -1,14 +1,4 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="15px" height="8px" viewBox="0 0 15 8" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
4
- <title>arrow-up-symbol</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round" stroke-linejoin="round">
8
- <g id="Symbols" transform="translate(-670.000000, -738.000000)" stroke="#979797" stroke-width="1.5">
9
- <g id="arrow-up-symbol" transform="translate(671.000000, 739.000000)">
10
- <polyline id="fill-1" transform="translate(6.500000, 3.000000) scale(1, -1) rotate(-270.000000) translate(-6.500000, -3.000000) " points="3.5 -3.5 9.5 3 3.5 9.5"></polyline>
11
- </g>
12
- </g>
13
- </g>
14
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="15" height="8">
2
+ <title>arrow-up-symbol</title>
3
+ <path fill="none" stroke="#fff" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d="M14 7 7.5 1 1 7"/>
4
+ </svg>
@@ -1,21 +1,7 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="14px" height="14px" viewBox="0 0 14 14" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 3.8.2 (29753) - http://www.bohemiancoding.com/sketch -->
4
- <title>close icon</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="Layouts" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
8
- <g id="varoitukset-tablet-aktiivinen-varoitussymboli-v1" transform="translate(-710.000000, -241.000000)">
9
- <g id="legenda" transform="translate(514.000000, 240.000000)">
10
- <g id="poista-valinnat-linkki" transform="translate(106.000000, 1.000000)">
11
- <g id="close-icon" transform="translate(90.000000, 0.000000)">
12
- <circle id="oval" fill="#56B8E5" cx="7" cy="7" r="7"></circle>
13
- <g id="Group" transform="translate(7.156854, 7.156854) rotate(-315.000000) translate(-7.156854, -7.156854) translate(3.156854, 3.156854)" fill="#FFFFFF">
14
- <path d="M4.5,4.5 L4.5,7 C4.5,7.27614237 4.27614237,7.5 4,7.5 C3.72385763,7.5 3.5,7.27614237 3.5,7 L3.5,4.5 L1,4.5 C0.723857625,4.5 0.5,4.27614237 0.5,4 C0.5,3.72385763 0.723857625,3.5 1,3.5 L3.5,3.5 L3.5,1 C3.5,0.723857625 3.72385763,0.5 4,0.5 C4.27614237,0.5 4.5,0.723857625 4.5,1 L4.5,3.5 L7,3.5 C7.27614237,3.5 7.5,3.72385763 7.5,4 C7.5,4.27614237 7.27614237,4.5 7,4.5 L4.5,4.5 L4.5,4.5 Z" id="x"></path>
15
- </g>
16
- </g>
17
- </g>
18
- </g>
19
- </g>
20
- </g>
21
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14">
2
+ <title>close icon</title>
3
+ <g fill="none" fill-rule="evenodd">
4
+ <circle cx="7" cy="7" r="7" fill="#56b8e5"/>
5
+ <path fill="#fff" d="M7.157 7.864 5.389 9.632a.5.5 0 0 1-.707-.707L6.45 7.157 4.682 5.389a.5.5 0 0 1 .707-.707L7.157 6.45l1.768-1.768a.5.5 0 0 1 .707.707L7.864 7.157l1.768 1.768a.5.5 0 0 1-.707.707z"/>
6
+ </g>
7
+ </svg>
@@ -1,15 +1,4 @@
1
- <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
- <svg width="11px" height="11px" viewBox="0 0 11 11" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
- <!-- Generator: Sketch 3.7.1 (28215) - http://www.bohemiancoding.com/sketch -->
4
- <title>close-symbol</title>
5
- <desc>Created with Sketch.</desc>
6
- <defs></defs>
7
- <g id="icons" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" stroke-linecap="round">
8
- <g id="Symbols" transform="translate(-793.000000, -735.000000)" stroke="#000000" stroke-width="1.5">
9
- <g id="close-symbol" transform="translate(794.000000, 736.000000)">
10
- <path d="M0,9.19238816 L9.19238816,0" id="fill-2"></path>
11
- <path d="M0,0 L9.19238816,9.19238816" id="fill-1"></path>
12
- </g>
13
- </g>
14
- </g>
15
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="11" height="11">
2
+ <title>close-symbol</title>
3
+ <path fill="none" stroke="#000" stroke-linecap="round" stroke-width="1.5" d="M1 10.192 10.192 1M1 1l9.192 9.192"/>
4
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="55" height="30">
2
+ <defs>
3
+ <clipPath id="outer-clip">
4
+ <rect width="55" height="20" y="5" rx="4" ry="4"/>
5
+ </clipPath>
6
+ <clipPath id="inner-clip">
7
+ <path d="M35 5h16a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H35Z"/>
8
+ </clipPath>
9
+ </defs>
10
+ <rect width="55" height="20" y="5" fill="#767676" stroke="#767676" clip-path="url(#outer-clip)" rx="4" ry="4"/>
11
+ <path fill="#fff" stroke="#767676" d="M35 5h16a4 4 0 0 1 4 4v12a4 4 0 0 1-4 4H35Z" clip-path="url(#inner-clip)"/>
12
+ </svg>
@@ -0,0 +1,12 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="55" height="30">
2
+ <defs>
3
+ <clipPath id="outer-clip">
4
+ <rect width="55" height="20" y="5" rx="4" ry="4"/>
5
+ </clipPath>
6
+ <clipPath id="inner-clip">
7
+ <path d="M4 5h16v20H4a4 4 0 0 1-4-4V9a4 4 0 0 1 4-4"/>
8
+ </clipPath>
9
+ </defs>
10
+ <rect width="55" height="20" y="5" fill="#ebebeb" stroke="#767676" clip-path="url(#outer-clip)" rx="4" ry="4"/>
11
+ <path fill="#fff" stroke="#767676" d="M4 5h16v20H4a4 4 0 0 1-4-4V9a4 4 0 0 1 4-4Z" clip-path="url(#inner-clip)"/>
12
+ </svg>
@@ -1,7 +1,4 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" version="1.1">
3
- <g id="surface1">
4
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.5px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.333333%,12.156863%,12.54902%);fill-opacity:1;" d="M 13.828125 21.453125 C 12.722656 21.453125 11.820312 20.554688 11.820312 19.445312 C 11.820312 18.882812 12.050781 18.359375 12.46875 17.976562 L 12.46875 17.972656 C 12.589844 17.859375 12.667969 17.699219 12.667969 17.519531 L 12.667969 7.382812 C 12.667969 6.742188 13.1875 6.222656 13.828125 6.222656 C 14.46875 6.222656 14.992188 6.742188 14.992188 7.382812 L 14.992188 17.519531 C 14.992188 17.699219 15.070312 17.859375 15.191406 17.972656 L 15.191406 17.976562 C 15.609375 18.359375 15.835938 18.882812 15.835938 19.445312 C 15.835938 20.554688 14.9375 21.453125 13.828125 21.453125 Z M 17.503906 9.894531 C 17.792969 9.894531 18.023438 9.660156 18.023438 9.375 C 18.023438 9.089844 17.792969 8.855469 17.503906 8.855469 L 16.234375 8.855469 L 16.234375 8.203125 L 17.503906 8.203125 C 17.792969 8.203125 18.023438 7.96875 18.023438 7.683594 C 18.023438 7.398438 17.792969 7.164062 17.503906 7.164062 L 16.226562 7.164062 C 16.113281 5.941406 15.082031 4.976562 13.828125 4.976562 C 12.503906 4.976562 11.425781 6.058594 11.425781 7.382812 L 11.425781 17.265625 C 10.882812 17.859375 10.578125 18.640625 10.578125 19.445312 C 10.578125 21.238281 12.035156 22.699219 13.828125 22.699219 C 15.621094 22.699219 17.082031 21.238281 17.082031 19.445312 C 17.082031 18.640625 16.777344 17.859375 16.234375 17.265625 L 16.234375 11.585938 L 17.503906 11.585938 C 17.792969 11.585938 18.023438 11.355469 18.023438 11.066406 C 18.023438 10.78125 17.792969 10.550781 17.503906 10.550781 L 16.234375 10.550781 L 16.234375 9.894531 Z M 17.503906 9.894531 "/>
5
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 1px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.333333%,12.156863%,12.54902%);fill-opacity:1;" d="M 14.367188 18.234375 L 14.367188 12.691406 C 14.367188 12.390625 14.128906 12.152344 13.828125 12.152344 C 13.53125 12.152344 13.289062 12.390625 13.289062 12.691406 L 13.289062 18.234375 C 12.824219 18.441406 12.5 18.90625 12.5 19.445312 C 12.5 20.179688 13.097656 20.773438 13.828125 20.773438 C 14.5625 20.773438 15.15625 20.179688 15.15625 19.445312 C 15.15625 18.90625 14.832031 18.441406 14.367188 18.234375 "/>
6
- </g>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28">
2
+ <path fill="#221f20" fill-rule="evenodd" stroke="#fff" stroke-width="2.5" d="M13.828 21.453a2.01 2.01 0 0 1-2.008-2.008c0-.562.23-1.086.649-1.468v-.004a.62.62 0 0 0 .199-.453V7.383a1.16 1.16 0 0 1 2.324 0V17.52c0 .18.078.34.2.453v.004c.417.382.644.906.644 1.468 0 1.11-.899 2.008-2.008 2.008Zm3.676-11.558a.52.52 0 1 0 0-1.04h-1.27v-.652h1.27a.52.52 0 1 0 0-1.039h-1.277a2.414 2.414 0 0 0-2.399-2.187 2.41 2.41 0 0 0-2.402 2.406v9.883a3.24 3.24 0 0 0-.848 2.18 3.256 3.256 0 0 0 3.25 3.253 3.26 3.26 0 0 0 3.254-3.254 3.24 3.24 0 0 0-.848-2.18v-5.68h1.27a.517.517 0 1 0 0-1.034h-1.27v-.656Zm0 0" paint-order="stroke"/>
3
+ <path fill="#221f20" fill-rule="evenodd" stroke="#fff" d="M14.367 18.234v-5.543c0-.3-.238-.539-.539-.539a.54.54 0 0 0-.539.54v5.542a1.327 1.327 0 1 0 1.867 1.211c0-.539-.324-1.004-.789-1.21" paint-order="stroke"/>
7
4
  </svg>
@@ -1,8 +1,5 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" version="1.1">
3
- <g id="surface1">
4
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.2px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.72549%,12.156863%,12.54902%);fill-opacity:1;" d="M 21.542969 17.964844 C 20.371094 17.964844 19.757812 18.617188 19.265625 19.140625 C 18.828125 19.609375 18.480469 19.980469 17.765625 19.980469 C 17.050781 19.980469 16.703125 19.609375 16.265625 19.140625 C 15.773438 18.617188 15.160156 17.964844 13.988281 17.964844 C 12.8125 17.964844 12.199219 18.617188 11.707031 19.140625 C 11.269531 19.609375 10.921875 19.976562 10.207031 19.976562 C 9.492188 19.976562 9.148438 19.609375 8.707031 19.140625 C 8.214844 18.617188 7.605469 17.964844 6.429688 17.964844 C 6.132812 17.964844 5.894531 18.203125 5.894531 18.5 C 5.894531 18.792969 6.132812 19.03125 6.429688 19.03125 L 6.441406 19.03125 C 7.144531 19.035156 7.492188 19.40625 7.929688 19.871094 C 8.421875 20.394531 9.03125 21.046875 10.207031 21.046875 C 11.382812 21.046875 11.996094 20.394531 12.484375 19.871094 C 12.925781 19.402344 13.273438 19.03125 13.988281 19.03125 C 14.699219 19.03125 15.046875 19.402344 15.488281 19.871094 C 15.980469 20.394531 16.589844 21.046875 17.765625 21.046875 C 18.941406 21.046875 19.554688 20.394531 20.042969 19.871094 C 20.480469 19.40625 20.828125 19.039062 21.535156 19.03125 L 21.542969 19.03125 C 21.839844 19.03125 22.078125 18.792969 22.078125 18.5 C 22.078125 18.203125 21.839844 17.964844 21.542969 17.964844 Z M 21.542969 17.964844 "/>
5
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.2px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.72549%,12.156863%,12.54902%);fill-opacity:1;" d="M 20.386719 11.488281 L 13.933594 6.632812 L 7.480469 11.488281 L 9.886719 11.488281 L 9.886719 18.070312 L 9.90625 18.070312 C 10.667969 18.070312 11.035156 17.675781 11.503906 17.175781 C 12.027344 16.617188 12.679688 15.921875 13.933594 15.921875 C 15.1875 15.921875 15.835938 16.617188 16.359375 17.175781 C 16.828125 17.675781 17.199219 18.070312 17.957031 18.070312 L 17.976562 18.070312 L 17.976562 11.488281 Z M 15.074219 13.90625 L 12.753906 13.90625 L 12.753906 11.589844 L 15.074219 11.589844 Z M 15.074219 13.90625 "/>
6
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.2px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.72549%,12.156863%,12.54902%);fill-opacity:1;" d="M 21.542969 15.527344 C 20.371094 15.527344 19.757812 16.179688 19.265625 16.703125 C 18.828125 17.171875 18.480469 17.542969 17.765625 17.542969 C 17.050781 17.542969 16.707031 17.171875 16.265625 16.703125 C 15.773438 16.179688 15.164062 15.527344 13.988281 15.527344 C 12.8125 15.527344 12.199219 16.179688 11.707031 16.703125 C 11.269531 17.171875 10.921875 17.542969 10.207031 17.542969 C 9.492188 17.542969 9.148438 17.171875 8.707031 16.703125 C 8.214844 16.179688 7.605469 15.527344 6.429688 15.527344 C 6.132812 15.527344 5.894531 15.765625 5.894531 16.0625 C 5.894531 16.355469 6.132812 16.59375 6.429688 16.59375 L 6.4375 16.59375 C 7.144531 16.597656 7.492188 16.96875 7.929688 17.433594 C 8.417969 17.957031 9.03125 18.609375 10.207031 18.609375 C 11.382812 18.609375 11.996094 17.957031 12.484375 17.433594 C 12.925781 16.964844 13.273438 16.59375 13.988281 16.59375 C 14.699219 16.59375 15.046875 16.964844 15.488281 17.433594 C 15.980469 17.957031 16.589844 18.609375 17.765625 18.609375 C 18.941406 18.609375 19.554688 17.957031 20.042969 17.433594 C 20.480469 16.96875 20.828125 16.597656 21.535156 16.59375 L 21.542969 16.59375 C 21.734375 16.59375 21.910156 16.492188 22.007812 16.328125 C 22.101562 16.164062 22.101562 15.960938 22.007812 15.792969 C 21.910156 15.628906 21.734375 15.527344 21.542969 15.527344 Z M 21.542969 15.527344 "/>
7
- </g>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28">
2
+ <path fill="#231f20" fill-rule="evenodd" stroke="#fff" stroke-width="2.2" d="M21.543 17.965c-1.172 0-1.785.652-2.277 1.176-.438.468-.786.84-1.5.84-.715 0-1.063-.372-1.5-.84-.493-.524-1.106-1.176-2.278-1.176-1.175 0-1.789.652-2.281 1.176-.437.468-.785.836-1.5.836s-1.059-.368-1.5-.836c-.492-.524-1.102-1.176-2.277-1.176a.533.533 0 1 0 0 1.066h.011c.704.004 1.051.375 1.489.84.492.524 1.101 1.176 2.277 1.176s1.79-.652 2.277-1.176c.442-.469.79-.84 1.504-.84.711 0 1.059.371 1.5.84.492.524 1.102 1.176 2.278 1.176s1.789-.652 2.277-1.176c.437-.465.785-.832 1.492-.84h.008a.533.533 0 1 0 0-1.066Zm0 0" paint-order="stroke"/>
3
+ <path fill="#231f20" fill-rule="evenodd" stroke="#fff" stroke-width="2.2" d="m20.387 11.488-6.453-4.855-6.454 4.855h2.407v6.582h.02c.761 0 1.128-.394 1.597-.894.523-.559 1.176-1.254 2.43-1.254s1.902.695 2.425 1.254c.47.5.84.894 1.598.894h.02v-6.582Zm-5.313 2.418h-2.32V11.59h2.32Zm0 0" paint-order="stroke"/>
4
+ <path fill="#231f20" fill-rule="evenodd" stroke="#fff" stroke-width="2.2" d="M21.543 15.527c-1.172 0-1.785.653-2.277 1.176-.438.469-.786.84-1.5.84-.715 0-1.059-.371-1.5-.84-.493-.523-1.102-1.176-2.278-1.176s-1.789.653-2.281 1.176c-.437.469-.785.84-1.5.84s-1.059-.371-1.5-.84c-.492-.523-1.102-1.176-2.277-1.176a.533.533 0 1 0 0 1.067h.008c.707.004 1.054.375 1.492.84.488.523 1.101 1.175 2.277 1.175s1.79-.652 2.277-1.175c.442-.47.79-.84 1.504-.84.711 0 1.059.37 1.5.84.492.523 1.102 1.175 2.278 1.175s1.789-.652 2.277-1.175c.437-.465.785-.836 1.492-.84h.008a.54.54 0 0 0 .465-.266.54.54 0 0 0 0-.535.54.54 0 0 0-.465-.266Zm0 0" paint-order="stroke"/>
8
5
  </svg>
@@ -1,7 +1,3 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="28px" height="28px" viewBox="0 0 28 28" version="1.1">
3
- <g id="surface1">
4
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.5px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.333333%,12.156863%,12.54902%);fill-opacity:1;" d="M 17.992188 12.910156 C 18.265625 14.246094 16.886719 16.019531 16.394531 15.089844 C 16.152344 14.632812 16.546875 13.894531 16.683594 13.460938 C 16.910156 12.742188 17.089844 11.980469 17.058594 11.222656 C 16.96875 8.910156 15.054688 5.578125 12.042969 5.601562 C 13.71875 7.621094 9.484375 9.496094 10.328125 13.910156 C 9.578125 13.78125 9.035156 12.359375 9.035156 12.359375 C 9.035156 12.359375 7.273438 18.726562 12.558594 18.726562 C 11.25 17.902344 10.289062 16.695312 10.25 15.304688 C 10.25 15.304688 11.398438 16.257812 12.414062 16.214844 C 11.648438 14.226562 13.027344 12.148438 14.742188 11.414062 C 14.175781 12.597656 13.578125 14.074219 13.753906 15.40625 C 14.027344 17.46875 16.335938 17.34375 17.816406 16.050781 C 17.816406 16.929688 16.609375 18.023438 15.855469 18.726562 C 20.917969 17.769531 19.09375 13.390625 17.992188 12.910156 "/>
5
- <path style="stroke:rgba(255, 255, 255, 1.0);stroke-width: 2.5px;paint-order: stroke;fill-rule:evenodd;fill:rgb(13.333333%,12.156863%,12.54902%);fill-opacity:1;" d="M 8.089844 20.925781 L 20.527344 20.925781 L 20.527344 19.714844 L 8.089844 19.714844 Z M 8.089844 20.925781 "/>
6
- </g>
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="28" height="28">
2
+ <path fill="#221f20" fill-rule="evenodd" stroke="#fff" stroke-width="2.5" d="M17.992 12.91c.274 1.336-1.105 3.11-1.597 2.18-.243-.457.152-1.195.289-1.63.226-.718.406-1.48.375-2.237-.09-2.313-2.004-5.645-5.016-5.621 1.676 2.02-2.559 3.894-1.715 8.308-.75-.129-1.293-1.55-1.293-1.55s-1.762 6.367 3.524 6.367c-1.309-.825-2.27-2.032-2.309-3.422 0 0 1.148.953 2.164.91-.766-1.988.613-4.067 2.328-4.8-.566 1.183-1.164 2.66-.988 3.991.273 2.063 2.582 1.938 4.062.645 0 .879-1.207 1.972-1.96 2.676 5.062-.957 3.238-5.336 2.136-5.817M8.09 20.926h12.437v-1.211H8.09Zm0 0" paint-order="stroke"/>
7
3
  </svg>