raain-ui 2.3.21 → 2.3.23
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.
- package/CHANGELOG.md +9 -0
- package/README.md +5 -56
- package/data/wind-markers.css +71 -536
- package/drawers/CartesianDrawer.js +2 -2
- package/drawers/PolarDrawer.js +3 -3
- package/factories/DynamicDateStatusElement.js +5 -6
- package/factories/MapElement.d.ts +19 -20
- package/factories/MapElement.js +52 -50
- package/layers/MarkersLayer.d.ts +3 -3
- package/layers/MarkersLayer.js +13 -12
- package/package.json +3 -3
- package/tools/RaainDivIcon.d.ts +130 -0
- package/tools/RaainDivIcon.js +243 -0
- package/tools/index.d.ts +1 -0
- package/tools/index.js +2 -1
- package/utils/spinning-ball-wrapper.js +2 -2
- package/data/wind-markers-test.css +0 -174
- package/data/wind-markers.v1.css +0 -260
- package/data/wind-markers.v2.css +0 -619
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RaainDivIcon = void 0;
|
|
4
|
+
const leaflet_1 = require("leaflet");
|
|
5
|
+
/**
|
|
6
|
+
* A DivIcon with built-in rotation and dynamic sizing support
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* ```typescript
|
|
10
|
+
* // Basic usage with rotation
|
|
11
|
+
* const icon = new RaainDivIcon({
|
|
12
|
+
* html: '<div style="width: 30px; height: 30px; background: red;"></div>',
|
|
13
|
+
* rotationAngle: 0,
|
|
14
|
+
* className: 'my-custom-marker'
|
|
15
|
+
* });
|
|
16
|
+
*
|
|
17
|
+
* // With dynamic sizing (for wind speed visualization)
|
|
18
|
+
* const windIcon = new RaainDivIcon({
|
|
19
|
+
* htmlTemplate: `<div style="width: {width}px; height: {height}px; background: blue;"></div>`,
|
|
20
|
+
* width: 40,
|
|
21
|
+
* height: 40,
|
|
22
|
+
* rotationAngle: 45
|
|
23
|
+
* });
|
|
24
|
+
*
|
|
25
|
+
* const marker = L.marker([51.505, -0.09], { icon: windIcon }).addTo(map);
|
|
26
|
+
*
|
|
27
|
+
* // Update rotation dynamically
|
|
28
|
+
* windIcon.setRotation(90);
|
|
29
|
+
*
|
|
30
|
+
* // Update size dynamically (e.g., based on wind speed)
|
|
31
|
+
* windIcon.setSize(60, 60);
|
|
32
|
+
*
|
|
33
|
+
* // Update both size and rotation
|
|
34
|
+
* windIcon.update({ width: 50, height: 50, rotationAngle: 180 });
|
|
35
|
+
* ```
|
|
36
|
+
*/
|
|
37
|
+
class RaainDivIcon extends leaflet_1.DivIcon {
|
|
38
|
+
constructor(options) {
|
|
39
|
+
var _a, _b;
|
|
40
|
+
// Process initial size options
|
|
41
|
+
const processedOptions = RaainDivIcon._processSizeOptions(options);
|
|
42
|
+
super(processedOptions);
|
|
43
|
+
this.options = options;
|
|
44
|
+
this._icon = null;
|
|
45
|
+
this._marker = null;
|
|
46
|
+
this.options = Object.assign(Object.assign({}, processedOptions), { rotationAngle: (_a = options.rotationAngle) !== null && _a !== void 0 ? _a : 0, rotationOrigin: (_b = options.rotationOrigin) !== null && _b !== void 0 ? _b : 'center center', width: options.width, height: options.height, htmlTemplate: options.htmlTemplate });
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Process size options and generate HTML from template if needed
|
|
50
|
+
*/
|
|
51
|
+
static _processSizeOptions(options) {
|
|
52
|
+
var _a, _b, _c, _d;
|
|
53
|
+
const processed = Object.assign({}, options);
|
|
54
|
+
// Update iconSize if width/height are provided
|
|
55
|
+
if (options.width !== undefined || options.height !== undefined) {
|
|
56
|
+
const width = (_a = options.width) !== null && _a !== void 0 ? _a : (Array.isArray(options.iconSize) ? options.iconSize[0] : 30);
|
|
57
|
+
const height = (_b = options.height) !== null && _b !== void 0 ? _b : (Array.isArray(options.iconSize) ? options.iconSize[1] : 30);
|
|
58
|
+
processed.iconSize = [width, height];
|
|
59
|
+
// Update iconAnchor proportionally if it exists
|
|
60
|
+
if (options.iconAnchor && Array.isArray(options.iconAnchor)) {
|
|
61
|
+
const oldSize = Array.isArray(options.iconSize) ? options.iconSize : [30, 30];
|
|
62
|
+
const anchorX = (options.iconAnchor[0] / oldSize[0]) * width;
|
|
63
|
+
const anchorY = (options.iconAnchor[1] / oldSize[1]) * height;
|
|
64
|
+
processed.iconAnchor = [anchorX, anchorY];
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Generate HTML from template if provided
|
|
68
|
+
if (options.htmlTemplate && (options.width !== undefined || options.height !== undefined)) {
|
|
69
|
+
const width = (_c = options.width) !== null && _c !== void 0 ? _c : (Array.isArray(processed.iconSize) ? processed.iconSize[0] : 30);
|
|
70
|
+
const height = (_d = options.height) !== null && _d !== void 0 ? _d : (Array.isArray(processed.iconSize) ? processed.iconSize[1] : 30);
|
|
71
|
+
processed.html = options.htmlTemplate
|
|
72
|
+
.replace(/\{width\}/g, String(width))
|
|
73
|
+
.replace(/\{height\}/g, String(height));
|
|
74
|
+
}
|
|
75
|
+
return processed;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Override createIcon to store reference and apply initial rotation
|
|
79
|
+
*/
|
|
80
|
+
createIcon(oldIcon) {
|
|
81
|
+
const div = super.createIcon(oldIcon);
|
|
82
|
+
this._icon = div;
|
|
83
|
+
// Set transform-origin
|
|
84
|
+
div.style.transformOrigin = this.options.rotationOrigin;
|
|
85
|
+
// Apply initial rotation
|
|
86
|
+
this.applyRotation();
|
|
87
|
+
return div;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Set the rotation angle in degrees
|
|
91
|
+
* @param angle Rotation angle (0 = North, 90 = East, 180 = South, 270 = West)
|
|
92
|
+
*/
|
|
93
|
+
setRotation(angle) {
|
|
94
|
+
this.options.rotationAngle = angle;
|
|
95
|
+
this.applyRotation();
|
|
96
|
+
return this;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Get the current rotation angle
|
|
100
|
+
*/
|
|
101
|
+
getRotation() {
|
|
102
|
+
var _a;
|
|
103
|
+
return (_a = this.options.rotationAngle) !== null && _a !== void 0 ? _a : 0;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Set the size (width and height) of the icon dynamically
|
|
107
|
+
* @param width New width in pixels
|
|
108
|
+
* @param height New height in pixels
|
|
109
|
+
*/
|
|
110
|
+
setSize(width, height) {
|
|
111
|
+
this.options.width = width;
|
|
112
|
+
this.options.height = height;
|
|
113
|
+
this._updateSize();
|
|
114
|
+
return this;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the current size
|
|
118
|
+
*/
|
|
119
|
+
getSize() {
|
|
120
|
+
var _a, _b;
|
|
121
|
+
const iconSize = Array.isArray(this.options.iconSize) ? this.options.iconSize : [30, 30];
|
|
122
|
+
return {
|
|
123
|
+
width: (_a = this.options.width) !== null && _a !== void 0 ? _a : iconSize[0],
|
|
124
|
+
height: (_b = this.options.height) !== null && _b !== void 0 ? _b : iconSize[1],
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Update multiple properties at once (size, rotation)
|
|
129
|
+
* @param updates Object with properties to update
|
|
130
|
+
*/
|
|
131
|
+
update(updates) {
|
|
132
|
+
let sizeChanged = false;
|
|
133
|
+
if (updates.width !== undefined) {
|
|
134
|
+
this.options.width = updates.width;
|
|
135
|
+
sizeChanged = true;
|
|
136
|
+
}
|
|
137
|
+
if (updates.height !== undefined) {
|
|
138
|
+
this.options.height = updates.height;
|
|
139
|
+
sizeChanged = true;
|
|
140
|
+
}
|
|
141
|
+
if (updates.rotationAngle !== undefined) {
|
|
142
|
+
this.options.rotationAngle = updates.rotationAngle;
|
|
143
|
+
}
|
|
144
|
+
if (sizeChanged) {
|
|
145
|
+
this._updateSize();
|
|
146
|
+
}
|
|
147
|
+
this.applyRotation();
|
|
148
|
+
return this;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Set the transform origin for rotation
|
|
152
|
+
* @param origin CSS transform-origin value (e.g., 'center center', '50% 50%')
|
|
153
|
+
*/
|
|
154
|
+
setRotationOrigin(origin) {
|
|
155
|
+
this.options.rotationOrigin = origin;
|
|
156
|
+
if (this._icon) {
|
|
157
|
+
this._icon.style.transformOrigin = origin;
|
|
158
|
+
this.applyRotation();
|
|
159
|
+
}
|
|
160
|
+
return this;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Apply the current rotation to the icon element
|
|
164
|
+
* This preserves any existing translate3d transformations from Leaflet
|
|
165
|
+
*/
|
|
166
|
+
applyRotation() {
|
|
167
|
+
var _a;
|
|
168
|
+
if (!this._icon) {
|
|
169
|
+
return this;
|
|
170
|
+
}
|
|
171
|
+
const currentTransform = this._icon.style.transform || '';
|
|
172
|
+
const angle = (_a = this.options.rotationAngle) !== null && _a !== void 0 ? _a : 0;
|
|
173
|
+
// Preserve existing translate3d from Leaflet positioning
|
|
174
|
+
if (currentTransform.includes('translate3d')) {
|
|
175
|
+
// Remove any existing rotation from the transform
|
|
176
|
+
const withoutRotation = currentTransform.replace(/\s*rotate\([^)]+\)/g, '');
|
|
177
|
+
this._icon.style.transform = `${withoutRotation} rotate(${angle}deg)`;
|
|
178
|
+
}
|
|
179
|
+
else {
|
|
180
|
+
this._icon.style.transform = `rotate(${angle}deg)`;
|
|
181
|
+
}
|
|
182
|
+
return this;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Bind this icon to a marker for automatic rotation updates
|
|
186
|
+
* @param marker The Leaflet marker to bind to
|
|
187
|
+
*/
|
|
188
|
+
bindToMarker(marker) {
|
|
189
|
+
this._marker = marker;
|
|
190
|
+
// Re-apply rotation on marker events that might reset the transform
|
|
191
|
+
marker.on('move', () => this.applyRotation());
|
|
192
|
+
marker.on('add', () => this.applyRotation());
|
|
193
|
+
return this;
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Unbind from the current marker
|
|
197
|
+
*/
|
|
198
|
+
unbindFromMarker() {
|
|
199
|
+
if (this._marker) {
|
|
200
|
+
this._marker.off('move');
|
|
201
|
+
this._marker.off('add');
|
|
202
|
+
this._marker = null;
|
|
203
|
+
}
|
|
204
|
+
return this;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Get the icon HTML element (if created)
|
|
208
|
+
*/
|
|
209
|
+
getIconElement() {
|
|
210
|
+
return this._icon;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Internal method to update the icon's size
|
|
214
|
+
*/
|
|
215
|
+
_updateSize() {
|
|
216
|
+
if (!this._icon || this.options.width === undefined || this.options.height === undefined) {
|
|
217
|
+
return;
|
|
218
|
+
}
|
|
219
|
+
const width = this.options.width;
|
|
220
|
+
const height = this.options.height;
|
|
221
|
+
// Update iconSize
|
|
222
|
+
this.options.iconSize = [width, height];
|
|
223
|
+
// Update the icon element's size
|
|
224
|
+
this._icon.style.width = `${width}px`;
|
|
225
|
+
this._icon.style.height = `${height}px`;
|
|
226
|
+
// Update anchor proportionally
|
|
227
|
+
if (this.options.iconAnchor && Array.isArray(this.options.iconAnchor)) {
|
|
228
|
+
const anchorX = this.options.iconAnchor[0];
|
|
229
|
+
const anchorY = this.options.iconAnchor[1];
|
|
230
|
+
this._icon.style.marginLeft = `-${anchorX}px`;
|
|
231
|
+
this._icon.style.marginTop = `-${anchorY}px`;
|
|
232
|
+
}
|
|
233
|
+
// Regenerate HTML from template if available
|
|
234
|
+
if (this.options.htmlTemplate) {
|
|
235
|
+
const newHtml = this.options.htmlTemplate
|
|
236
|
+
.replace(/\{width\}/g, String(width))
|
|
237
|
+
.replace(/\{height\}/g, String(height));
|
|
238
|
+
this._icon.innerHTML = newHtml;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
exports.RaainDivIcon = RaainDivIcon;
|
|
243
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmFhaW5EaXZJY29uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rvb2xzL1JhYWluRGl2SWNvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBeUU7QUFnQ3pFOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBK0JHO0FBQ0gsTUFBYSxZQUFhLFNBQVEsaUJBQU87SUFJckMsWUFBbUIsT0FBNEI7O1FBQzNDLCtCQUErQjtRQUMvQixNQUFNLGdCQUFnQixHQUFHLFlBQVksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuRSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUhULFlBQU8sR0FBUCxPQUFPLENBQXFCO1FBSHZDLFVBQUssR0FBdUIsSUFBSSxDQUFDO1FBQ2pDLFlBQU8sR0FBa0IsSUFBSSxDQUFDO1FBT2xDLElBQUksQ0FBQyxPQUFPLG1DQUNMLGdCQUFnQixLQUNuQixhQUFhLEVBQUUsTUFBQSxPQUFPLENBQUMsYUFBYSxtQ0FBSSxDQUFDLEVBQ3pDLGNBQWMsRUFBRSxNQUFBLE9BQU8sQ0FBQyxjQUFjLG1DQUFJLGVBQWUsRUFDekQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQ3BCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUN0QixZQUFZLEVBQUUsT0FBTyxDQUFDLFlBQVksR0FDckMsQ0FBQztJQUNOLENBQUM7SUFFRDs7T0FFRztJQUNLLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxPQUE0Qjs7UUFDM0QsTUFBTSxTQUFTLHFCQUFPLE9BQU8sQ0FBQyxDQUFDO1FBRS9CLCtDQUErQztRQUMvQyxJQUFJLE9BQU8sQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssU0FBUyxFQUFFO1lBQzdELE1BQU0sS0FBSyxHQUNQLE1BQUEsT0FBTyxDQUFDLEtBQUssbUNBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FB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
|
package/tools/index.d.ts
CHANGED
package/tools/index.js
CHANGED
|
@@ -19,4 +19,5 @@ __exportStar(require("./CartesianMapValue"), exports);
|
|
|
19
19
|
__exportStar(require("./MapTools"), exports);
|
|
20
20
|
__exportStar(require("./MapLatLng"), exports);
|
|
21
21
|
__exportStar(require("./IconMapValue"), exports);
|
|
22
|
-
|
|
22
|
+
__exportStar(require("./RaainDivIcon"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLGtEQUFnQztBQUNoQyxzREFBb0M7QUFDcEMsNkNBQTJCO0FBQzNCLDhDQUE0QjtBQUM1QixpREFBK0I7QUFDL0IsaURBQStCIn0=
|
|
@@ -29,7 +29,7 @@ const spinningBallOriginal = __importStar(require("spinning-ball"));
|
|
|
29
29
|
// Use the imported module or create a fallback if it fails
|
|
30
30
|
const spinningBallModule = spinningBallOriginal || {
|
|
31
31
|
init: (params) => {
|
|
32
|
-
console.error('spinning-ball module failed to load properly');
|
|
32
|
+
console.error('raain-ui >> spinning-ball module failed to load properly');
|
|
33
33
|
// Return a minimal implementation to prevent crashes
|
|
34
34
|
return {
|
|
35
35
|
update: () => false,
|
|
@@ -42,4 +42,4 @@ const spinningBallModule = spinningBallOriginal || {
|
|
|
42
42
|
},
|
|
43
43
|
};
|
|
44
44
|
module.exports = spinningBallModule;
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5pbmctYmFsbC13cmFwcGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL3NwaW5uaW5nLWJhbGwtd3JhcHBlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsb0ZBQW9GO0FBQ3BGLDJFQUEyRTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBRTNFLG1DQUFtQztBQUNuQyxvRUFBc0Q7QUFjdEQsMkRBQTJEO0FBQzNELE1BQU0sa0JBQWtCLEdBQXVCLG9CQUFvQixJQUFJO0lBQ25FLElBQUksRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsQ0FBQyxDQUFDO1FBQzFFLHFEQUFxRDtRQUNyRCxPQUFPO1lBQ0gsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7WUFDbkIsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDMUIsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUk7WUFDckIsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7WUFDdEIsU0FBUyxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7WUFDdEIsYUFBYSxFQUFFLEdBQUcsRUFBRSxDQUFDLEtBQUs7U0FDN0IsQ0FBQztJQUNOLENBQUM7Q0FDSixDQUFDO0FBR0YsaUJBQVMsa0JBQWtCLENBQUMifQ==
|
|
@@ -1,174 +0,0 @@
|
|
|
1
|
-
/* ============================================================================
|
|
2
|
-
* Wind Speed/Direction Animation for Leaflet Markers
|
|
3
|
-
* ============================================================================
|
|
4
|
-
* Usage: Import this CSS file in your app's global styles or index.html
|
|
5
|
-
*
|
|
6
|
-
* @import "~raain-ui/data/wind-markers.css";
|
|
7
|
-
*
|
|
8
|
-
* Or in HTML:
|
|
9
|
-
* <link rel="stylesheet" href="node_modules/raain-ui/dist/data/wind-markers.css">
|
|
10
|
-
*
|
|
11
|
-
* Then apply classes to markers via MapElement.changeMarkerStyle():
|
|
12
|
-
* mapElement.changeMarkerStyle(marker, 'marker-wind marker-wind-200', {strength: 10});
|
|
13
|
-
*/
|
|
14
|
-
|
|
15
|
-
/* Base wind marker class */
|
|
16
|
-
.marker-wind {
|
|
17
|
-
/* Calculate animation speed: stronger wind = faster animation */
|
|
18
|
-
--duration: calc(5s - (min(var(--strength, 5), 25) * 0.08s));
|
|
19
|
-
|
|
20
|
-
/* Calculate displacement: strength in m/s * 2 = pixels */
|
|
21
|
-
--displacement: calc(var(--strength, 5) * 2);
|
|
22
|
-
|
|
23
|
-
/* Visual glow intensity based on strength */
|
|
24
|
-
filter: drop-shadow(0 0 calc(var(--strength, 5) * 0.5px) rgba(100, 150, 255, 0.8));
|
|
25
|
-
|
|
26
|
-
position: relative;
|
|
27
|
-
|
|
28
|
-
/* Rotation will be set by direction-specific classes */
|
|
29
|
-
--rotation: 0deg;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
.marker-wind img {
|
|
33
|
-
transform: rotate(var(--rotation)) !important;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/* Variant: Travel animation (move from src to target, disappear, reappear at src)
|
|
37
|
-
Usage: Add 'marker-wind-travel' class in addition to marker-wind and direction class
|
|
38
|
-
Example: 'marker-wind marker-wind-travel marker-wind-200' */
|
|
39
|
-
.marker-wind-travel {
|
|
40
|
-
/* Override animation to use travel mode */
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* Pulse animation (brightness/opacity) */
|
|
44
|
-
@keyframes wind-pulse {
|
|
45
|
-
0%, 100% {
|
|
46
|
-
opacity: 1;
|
|
47
|
-
filter: brightness(1);
|
|
48
|
-
}
|
|
49
|
-
50% {
|
|
50
|
-
opacity: 0.85;
|
|
51
|
-
filter: brightness(1.15);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/* Travel mode pulse - fade out at destination */
|
|
56
|
-
@keyframes wind-pulse-travel {
|
|
57
|
-
0% {
|
|
58
|
-
filter: brightness(1.2);
|
|
59
|
-
}
|
|
60
|
-
70% {
|
|
61
|
-
filter: brightness(0.8);
|
|
62
|
-
}
|
|
63
|
-
71%, 99% {
|
|
64
|
-
filter: brightness(0);
|
|
65
|
-
}
|
|
66
|
-
100% {
|
|
67
|
-
filter: brightness(1.2);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/* Direction arrow indicator */
|
|
72
|
-
.marker-wind::after {
|
|
73
|
-
content: '→';
|
|
74
|
-
position: absolute;
|
|
75
|
-
top: -20px;
|
|
76
|
-
left: 50%;
|
|
77
|
-
font-size: 18px;
|
|
78
|
-
font-weight: bold;
|
|
79
|
-
color: rgba(100, 150, 255, 0.95);
|
|
80
|
-
text-shadow: 0 0 4px rgba(0, 0, 0, 0.7);
|
|
81
|
-
pointer-events: none;
|
|
82
|
-
transform-origin: center;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
/* Wind direction classes for every available degree */
|
|
86
|
-
/* Azimuth 0 = North (upward), 90 = East (right), 180 = South (down), 270 = West (left) */
|
|
87
|
-
/* SVG arrow points right (East), so 90° = 0° rotation, others adjust from there */
|
|
88
|
-
|
|
89
|
-
.marker-wind-0::after, .marker-wind-360::after { transform: translateX(-50%) rotate(180deg); }
|
|
90
|
-
.marker-wind-0, .marker-wind-360 { --rotation: -90deg; animation: wind-0 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
91
|
-
@keyframes wind-0 { 0%, 100% { translate: 0 0; } 50% { translate: 0 calc(var(--displacement) * -1px); } }
|
|
92
|
-
.marker-wind-travel.marker-wind-0, .marker-wind-travel.marker-wind-360 { animation: wind-0-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
93
|
-
@keyframes wind-0-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: 0 calc(var(--displacement) * -1px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
94
|
-
|
|
95
|
-
.marker-wind-10::after { transform: translateX(-50%) rotate(190deg); }
|
|
96
|
-
.marker-wind-10 { --rotation: -80deg; animation: wind-10 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
97
|
-
@keyframes wind-10 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.17px) calc(var(--displacement) * -0.98px); } }
|
|
98
|
-
|
|
99
|
-
.marker-wind-20::after { transform: translateX(-50%) rotate(200deg); }
|
|
100
|
-
.marker-wind-20 { --rotation: -70deg; animation: wind-20 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
101
|
-
@keyframes wind-20 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.34px) calc(var(--displacement) * -0.94px); } }
|
|
102
|
-
|
|
103
|
-
.marker-wind-30::after { transform: translateX(-50%) rotate(210deg); }
|
|
104
|
-
.marker-wind-30 { --rotation: -60deg; animation: wind-30 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
105
|
-
@keyframes wind-30 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.5px) calc(var(--displacement) * -0.87px); } }
|
|
106
|
-
|
|
107
|
-
.marker-wind-45::after { transform: translateX(-50%) rotate(225deg); }
|
|
108
|
-
.marker-wind-45 { --rotation: -45deg; animation: wind-45 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
109
|
-
@keyframes wind-45 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.71px) calc(var(--displacement) * -0.71px); } }
|
|
110
|
-
|
|
111
|
-
.marker-wind-90::after { transform: translateX(-50%) rotate(270deg); }
|
|
112
|
-
.marker-wind-90 { --rotation: 0deg; animation: wind-90 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
113
|
-
@keyframes wind-90 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 1px) 0; } }
|
|
114
|
-
|
|
115
|
-
.marker-wind-135::after { transform: translateX(-50%) rotate(315deg); }
|
|
116
|
-
.marker-wind-135 { --rotation: 45deg; animation: wind-135 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
117
|
-
@keyframes wind-135 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.71px) calc(var(--displacement) * 0.71px); } }
|
|
118
|
-
|
|
119
|
-
.marker-wind-180::after { transform: translateX(-50%) rotate(0deg); }
|
|
120
|
-
.marker-wind-180 { --rotation: 90deg; animation: wind-180 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
121
|
-
@keyframes wind-180 { 0%, 100% { translate: 0 0; } 50% { translate: 0 calc(var(--displacement) * 1px); } }
|
|
122
|
-
|
|
123
|
-
.marker-wind-200::after { transform: translateX(-50%) rotate(20deg); }
|
|
124
|
-
.marker-wind-200 { --rotation: 110deg; animation: wind-200 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
125
|
-
@keyframes wind-200 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * 0.34px) calc(var(--displacement) * 0.94px); } }
|
|
126
|
-
|
|
127
|
-
.marker-wind-225::after { transform: translateX(-50%) rotate(45deg); }
|
|
128
|
-
.marker-wind-225 { --rotation: 135deg; animation: wind-225 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
129
|
-
@keyframes wind-225 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * -0.71px) calc(var(--displacement) * 0.71px); } }
|
|
130
|
-
|
|
131
|
-
.marker-wind-270::after { transform: translateX(-50%) rotate(90deg); }
|
|
132
|
-
.marker-wind-270 { --rotation: 180deg; animation: wind-270 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
133
|
-
@keyframes wind-270 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * -1px) 0; } }
|
|
134
|
-
|
|
135
|
-
.marker-wind-315::after { transform: translateX(-50%) rotate(135deg); }
|
|
136
|
-
.marker-wind-315 { --rotation: -135deg; animation: wind-315 var(--duration) ease-in-out infinite, wind-pulse var(--duration) ease-in-out infinite; }
|
|
137
|
-
@keyframes wind-315 { 0%, 100% { translate: 0 0; } 50% { translate: calc(var(--displacement) * -0.71px) calc(var(--displacement) * -0.71px); } }
|
|
138
|
-
|
|
139
|
-
/* ============================================================================
|
|
140
|
-
* Travel Mode Animations - Move from source to target, disappear, reappear
|
|
141
|
-
* ============================================================================ */
|
|
142
|
-
|
|
143
|
-
.marker-wind-travel.marker-wind-10 { animation: wind-10-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
144
|
-
@keyframes wind-10-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.17px) calc(var(--displacement) * -0.98px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
145
|
-
|
|
146
|
-
.marker-wind-travel.marker-wind-20 { animation: wind-20-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
147
|
-
@keyframes wind-20-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.34px) calc(var(--displacement) * -0.94px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
148
|
-
|
|
149
|
-
.marker-wind-travel.marker-wind-30 { animation: wind-30-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
150
|
-
@keyframes wind-30-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.5px) calc(var(--displacement) * -0.87px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
151
|
-
|
|
152
|
-
.marker-wind-travel.marker-wind-45 { animation: wind-45-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
153
|
-
@keyframes wind-45-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.71px) calc(var(--displacement) * -0.71px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
154
|
-
|
|
155
|
-
.marker-wind-travel.marker-wind-90 { animation: wind-90-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
156
|
-
@keyframes wind-90-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 1px) 0; opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
157
|
-
|
|
158
|
-
.marker-wind-travel.marker-wind-135 { animation: wind-135-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
159
|
-
@keyframes wind-135-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.71px) calc(var(--displacement) * 0.71px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
160
|
-
|
|
161
|
-
.marker-wind-travel.marker-wind-180 { animation: wind-180-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
162
|
-
@keyframes wind-180-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: 0 calc(var(--displacement) * 1px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
163
|
-
|
|
164
|
-
.marker-wind-travel.marker-wind-200 { animation: wind-200-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
165
|
-
@keyframes wind-200-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * 0.34px) calc(var(--displacement) * 0.94px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
166
|
-
|
|
167
|
-
.marker-wind-travel.marker-wind-225 { animation: wind-225-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
168
|
-
@keyframes wind-225-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * -0.71px) calc(var(--displacement) * 0.71px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
169
|
-
|
|
170
|
-
.marker-wind-travel.marker-wind-270 { animation: wind-270-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
171
|
-
@keyframes wind-270-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * -1px) 0; opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|
|
172
|
-
|
|
173
|
-
.marker-wind-travel.marker-wind-315 { animation: wind-315-travel var(--duration) linear infinite, wind-pulse-travel var(--duration) linear infinite; }
|
|
174
|
-
@keyframes wind-315-travel { 0% { translate: 0 0; opacity: 1; } 70% { translate: calc(var(--displacement) * -0.71px) calc(var(--displacement) * -0.71px); opacity: 1; } 71% { opacity: 0; } 99% { translate: 0 0; opacity: 0; } 100% { translate: 0 0; opacity: 1; } }
|