Refactoring: highlight the currently selected element
|  | @ -107,7 +107,7 @@ export default class PerLayerFeatureSourceSplitter<T extends FeatureSource = Fea | |||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     public forEach(f: (featureSource: FeatureSource) => void) { | ||||
|     public forEach(f: (featureSource: T) => void) { | ||||
|         for (const fs of this.perLayer.values()) { | ||||
|             f(fs) | ||||
|         } | ||||
|  |  | |||
|  | @ -30,7 +30,7 @@ export class UpdateLegacyLayer extends DesugaringStep< | |||
|             config.source = config.source ?? { | ||||
|                 osmTags: config["overpassTags"], | ||||
|             } | ||||
|             config.source.osmTags = config["overpassTags"] | ||||
|             config.source["osmTags"] = config["overpassTags"] | ||||
|             delete config["overpassTags"] | ||||
|         } | ||||
| 
 | ||||
|  |  | |||
|  | @ -13,7 +13,7 @@ import Combine from "../../UI/Base/Combine" | |||
| import { VariableUiElement } from "../../UI/Base/VariableUIElement" | ||||
| 
 | ||||
| export default class PointRenderingConfig extends WithContextLoader { | ||||
|     private static readonly allowed_location_codes = new Set<string>([ | ||||
|     static readonly allowed_location_codes: ReadonlySet<string> = new Set<string>([ | ||||
|         "point", | ||||
|         "centroid", | ||||
|         "start", | ||||
|  |  | |||
|  | @ -476,29 +476,45 @@ export default class ThemeViewState implements SpecialVisualizationState { | |||
|      * Setup various services for which no reference are needed | ||||
|      */ | ||||
|     private initActors() { | ||||
|         this.selectedElement.addCallback((selected) => { | ||||
|             Hash.hash.setData(selected?.properties?.id) | ||||
|         }) | ||||
|         { | ||||
|             // Set the hash based on the selected element...
 | ||||
|             this.selectedElement.addCallback((selected) => { | ||||
|                 Hash.hash.setData(selected?.properties?.id) | ||||
|             }) | ||||
|             // ... search and select an element based on the hash
 | ||||
|             Hash.hash.mapD( | ||||
|                 (hash) => { | ||||
|                     console.log("Searching for an id:", hash) | ||||
|                     if (this.selectedElement.data?.properties?.id === hash) { | ||||
|                         // We already have the correct hash
 | ||||
|                         return | ||||
|                     } | ||||
| 
 | ||||
|         Hash.hash.mapD( | ||||
|             (hash) => { | ||||
|                 console.log("Searching for an id:", hash) | ||||
|                 if (this.selectedElement.data?.properties?.id === hash) { | ||||
|                     // We already have the correct hash
 | ||||
|                     const found = this.indexedFeatures.featuresById.data?.get(hash) | ||||
|                     if (!found) { | ||||
|                         return | ||||
|                     } | ||||
|                     const layer = this.layout.getMatchingLayer(found.properties) | ||||
|                     this.selectedElement.setData(found) | ||||
|                     this.selectedLayer.setData(layer) | ||||
|                 }, | ||||
|                 [this.indexedFeatures.featuresById.stabilized(250)] | ||||
|             ) | ||||
|         } | ||||
| 
 | ||||
|         { | ||||
|             // Unselect the selected element if it is panned out of view
 | ||||
|             this.mapProperties.bounds.stabilized(250).addCallbackD((bounds) => { | ||||
|                 const selected = this.selectedElement.data | ||||
|                 if (selected === undefined) { | ||||
|                     return | ||||
|                 } | ||||
| 
 | ||||
|                 const found = this.indexedFeatures.featuresById.data?.get(hash) | ||||
|                 if (!found) { | ||||
|                     return | ||||
|                 const bbox = BBox.get(selected) | ||||
|                 if (!bbox.overlapsWith(bounds)) { | ||||
|                     this.selectedElement.setData(undefined) | ||||
|                 } | ||||
|                 const layer = this.layout.getMatchingLayer(found.properties) | ||||
|                 this.selectedElement.setData(found) | ||||
|                 this.selectedLayer.setData(layer) | ||||
|             }, | ||||
|             [this.indexedFeatures.featuresById.stabilized(250)] | ||||
|         ) | ||||
| 
 | ||||
|             }) | ||||
|         } | ||||
|         new MetaTagging(this) | ||||
|         new TitleHandler(this.selectedElement, this.selectedLayer, this.featureProperties, this) | ||||
|         new ChangeToElementsActor(this.changes, this.featureProperties) | ||||
|  |  | |||
|  | @ -6,7 +6,7 @@ import { GeoOperations } from "../../Logic/GeoOperations" | |||
| import LayerConfig from "../../Models/ThemeConfig/LayerConfig" | ||||
| import PointRenderingConfig from "../../Models/ThemeConfig/PointRenderingConfig" | ||||
| import { OsmTags } from "../../Models/OsmFeature" | ||||
| import { FeatureSource } from "../../Logic/FeatureSource/FeatureSource" | ||||
| import { FeatureSource, FeatureSourceForLayer } from "../../Logic/FeatureSource/FeatureSource" | ||||
| import { BBox } from "../../Logic/BBox" | ||||
| import { Feature, Point } from "geojson" | ||||
| import LineRenderingConfig from "../../Models/ThemeConfig/LineRenderingConfig" | ||||
|  | @ -15,7 +15,7 @@ import * as range_layer from "../../assets/layers/range/range.json" | |||
| import { LayerConfigJson } from "../../Models/ThemeConfig/Json/LayerConfigJson" | ||||
| import PerLayerFeatureSourceSplitter from "../../Logic/FeatureSource/PerLayerFeatureSourceSplitter" | ||||
| import FilteredLayer from "../../Models/FilteredLayer" | ||||
| import StaticFeatureSource from "../../Logic/FeatureSource/Sources/StaticFeatureSource" | ||||
| import SimpleFeatureSource from "../../Logic/FeatureSource/Sources/SimpleFeatureSource" | ||||
| 
 | ||||
| class PointRenderingLayer { | ||||
|     private readonly _config: PointRenderingConfig | ||||
|  | @ -24,6 +24,8 @@ class PointRenderingLayer { | |||
|     private readonly _map: MlMap | ||||
|     private readonly _onClick: (feature: Feature) => void | ||||
|     private readonly _allMarkers: Map<string, Marker> = new Map<string, Marker>() | ||||
|     private readonly _selectedElement: Store<{ properties: { id?: string } }> | ||||
|     private readonly _markedAsSelected: HTMLElement[] = [] | ||||
|     private _dirty = false | ||||
| 
 | ||||
|     constructor( | ||||
|  | @ -32,13 +34,15 @@ class PointRenderingLayer { | |||
|         config: PointRenderingConfig, | ||||
|         visibility?: Store<boolean>, | ||||
|         fetchStore?: (id: string) => Store<Record<string, string>>, | ||||
|         onClick?: (feature: Feature) => void | ||||
|         onClick?: (feature: Feature) => void, | ||||
|         selectedElement?: Store<{ properties: { id?: string } }> | ||||
|     ) { | ||||
|         this._visibility = visibility | ||||
|         this._config = config | ||||
|         this._map = map | ||||
|         this._fetchStore = fetchStore | ||||
|         this._onClick = onClick | ||||
|         this._selectedElement = selectedElement | ||||
|         const self = this | ||||
| 
 | ||||
|         features.features.addCallbackAndRunD((features) => self.updateFeatures(features)) | ||||
|  | @ -48,6 +52,24 @@ class PointRenderingLayer { | |||
|             } | ||||
|             self.setVisibility(visible) | ||||
|         }) | ||||
|         selectedElement?.addCallbackAndRun((selected) => { | ||||
|             this._markedAsSelected.forEach((el) => el.classList.remove("selected")) | ||||
|             this._markedAsSelected.splice(0, this._markedAsSelected.length) | ||||
|             if (selected === undefined) { | ||||
|                 return | ||||
|             } | ||||
|             PointRenderingConfig.allowed_location_codes.forEach((code) => { | ||||
|                 const marker = this._allMarkers | ||||
|                     .get(selected.properties?.id + "-" + code) | ||||
|                     ?.getElement() | ||||
|                 if (marker === undefined) { | ||||
|                     return | ||||
|                 } | ||||
|                 console.log("Marking", marker, "as selected for config", config) | ||||
|                 marker?.classList?.add("selected") | ||||
|                 this._markedAsSelected.push(marker) | ||||
|             }) | ||||
|         }) | ||||
|     } | ||||
| 
 | ||||
|     private updateFeatures(features: Feature[]) { | ||||
|  | @ -91,6 +113,10 @@ class PointRenderingLayer { | |||
|                 } | ||||
| 
 | ||||
|                 const marker = this.addPoint(feature, loc) | ||||
|                 if (this._selectedElement?.data === feature.properties.id) { | ||||
|                     marker.getElement().classList.add("selected") | ||||
|                     this._markedAsSelected.push(marker.getElement()) | ||||
|                 } | ||||
|                 cache.set(id, marker) | ||||
|             } | ||||
|         } | ||||
|  | @ -179,6 +205,7 @@ class LineRenderingLayer { | |||
|     private readonly _onClick?: (feature: Feature) => void | ||||
|     private readonly _layername: string | ||||
|     private readonly _listenerInstalledOn: Set<string> = new Set<string>() | ||||
|     private currentSourceData | ||||
| 
 | ||||
|     constructor( | ||||
|         map: MlMap, | ||||
|  | @ -228,7 +255,6 @@ class LineRenderingLayer { | |||
|         return calculatedProps | ||||
|     } | ||||
| 
 | ||||
|     private currentSourceData | ||||
|     private async update(featureSource: Store<Feature[]>) { | ||||
|         const map = this._map | ||||
|         while (!map.isStyleLoaded()) { | ||||
|  | @ -380,10 +406,14 @@ export default class ShowDataLayer { | |||
|         layers: LayerConfig[], | ||||
|         options?: Partial<ShowDataLayerOptions> | ||||
|     ) { | ||||
|         const perLayer = new PerLayerFeatureSourceSplitter( | ||||
|             layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)), | ||||
|             new StaticFeatureSource(features) | ||||
|         ) | ||||
|         const perLayer: PerLayerFeatureSourceSplitter<FeatureSourceForLayer> = | ||||
|             new PerLayerFeatureSourceSplitter( | ||||
|                 layers.filter((l) => l.source !== null).map((l) => new FilteredLayer(l)), | ||||
|                 features, | ||||
|                 { | ||||
|                     constructStore: (features, layer) => new SimpleFeatureSource(layer, features), | ||||
|                 } | ||||
|             ) | ||||
|         perLayer.forEach((fs) => { | ||||
|             new ShowDataLayer(mlmap, { | ||||
|                 layer: fs.layer.layerDef, | ||||
|  | @ -445,7 +475,8 @@ export default class ShowDataLayer { | |||
|                     pointRenderingConfig, | ||||
|                     doShowLayer, | ||||
|                     fetchStore, | ||||
|                     onClick | ||||
|                     onClick, | ||||
|                     selectedElement | ||||
|                 ) | ||||
|             } | ||||
|         } | ||||
|  |  | |||
|  | @ -1,8 +0,0 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <rect x="0" y="0" width="375" height="375" style="fill:rgb(16.078432%,73.333335%,24.313726%);fill-opacity:1;stroke:none;"/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 279.210938 32.8125 L 309.375 32.8125 L 309.375 63.179688 L 339.742188 63.179688 L 339.742188 93.34375 L 309.375 93.34375 L 309.375 123.710938 L 279.210938 123.710938 L 279.210938 93.34375 L 248.84375 93.34375 L 248.84375 63.179688 L 279.210938 63.179688 Z M 279.210938 32.8125 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 96.808594 114.742188 C 57.675781 115.148438 22.621094 154.074219 33.21875 205.433594 C 41.167969 244.769531 82.949219 295.71875 155.707031 345.039062 C 228.464844 295.515625 270.246094 244.566406 278.191406 205.433594 C 288.789062 153.871094 253.941406 115.148438 214.605469 114.742188 C 194.429688 114.335938 169.15625 125.136719 155.707031 150.816406 C 142.253906 125.136719 116.984375 114.335938 96.808594 114.742188 Z M 187.09375 145.925781 L 152.851562 216.238281 L 196.261719 216.238281 L 120.246094 304.6875 L 149.59375 235.394531 L 107.40625 235.394531 Z M 187.09375 145.925781 "/> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 1.4 KiB | 
|  | @ -650,11 +650,11 @@ | |||
|   "mapRendering": [ | ||||
|     { | ||||
|       "icon": { | ||||
|         "render": "./assets/themes/aed/aed.svg", | ||||
|         "render": "square:#008754;./assets/layers/defibrillator/defibrillator.svg", | ||||
|         "mappings": [ | ||||
|           { | ||||
|             "if": "_recently_surveyed=true", | ||||
|             "then": "./assets/layers/defibrillator/aed_checked.svg" | ||||
|             "then": "square:#28ba3d;./assets/layers/defibrillator/defibrillator.svg" | ||||
|           } | ||||
|         ] | ||||
|       }, | ||||
|  |  | |||
							
								
								
									
										45
									
								
								assets/layers/defibrillator/defibrillator.svg
									
										
									
									
									
										Normal file
									
								
							
							
						
						|  | @ -0,0 +1,45 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    width="375px" | ||||
|    height="375px" | ||||
|    viewBox="0 0 375 375" | ||||
|    version="1.1" | ||||
|    id="svg9" | ||||
|    sodipodi:docname="aed_checked.svg" | ||||
|    inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <defs | ||||
|      id="defs13" /> | ||||
|   <sodipodi:namedview | ||||
|      id="namedview11" | ||||
|      pagecolor="#505050" | ||||
|      bordercolor="#eeeeee" | ||||
|      borderopacity="1" | ||||
|      inkscape:pageshadow="0" | ||||
|      inkscape:pageopacity="0" | ||||
|      inkscape:pagecheckerboard="0" | ||||
|      showgrid="false" | ||||
|      inkscape:zoom="2.04" | ||||
|      inkscape:cx="187.7451" | ||||
|      inkscape:cy="187.5" | ||||
|      inkscape:window-width="1920" | ||||
|      inkscape:window-height="995" | ||||
|      inkscape:window-x="0" | ||||
|      inkscape:window-y="0" | ||||
|      inkscape:window-maximized="1" | ||||
|      inkscape:current-layer="surface1" /> | ||||
|   <g | ||||
|      id="surface1"> | ||||
|     <path | ||||
|        style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" | ||||
|        d="M 279.210938 32.8125 L 309.375 32.8125 L 309.375 63.179688 L 339.742188 63.179688 L 339.742188 93.34375 L 309.375 93.34375 L 309.375 123.710938 L 279.210938 123.710938 L 279.210938 93.34375 L 248.84375 93.34375 L 248.84375 63.179688 L 279.210938 63.179688 Z M 279.210938 32.8125 " | ||||
|        id="path4" /> | ||||
|     <path | ||||
|        style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" | ||||
|        d="M 96.808594 114.742188 C 57.675781 115.148438 22.621094 154.074219 33.21875 205.433594 C 41.167969 244.769531 82.949219 295.71875 155.707031 345.039062 C 228.464844 295.515625 270.246094 244.566406 278.191406 205.433594 C 288.789062 153.871094 253.941406 115.148438 214.605469 114.742188 C 194.429688 114.335938 169.15625 125.136719 155.707031 150.816406 C 142.253906 125.136719 116.984375 114.335938 96.808594 114.742188 Z M 187.09375 145.925781 L 152.851562 216.238281 L 196.261719 216.238281 L 120.246094 304.6875 L 149.59375 235.394531 L 107.40625 235.394531 Z M 187.09375 145.925781 " | ||||
|        id="path6" /> | ||||
|   </g> | ||||
| </svg> | ||||
| After Width: | Height: | Size: 2.1 KiB | 
|  | @ -1,6 +1,6 @@ | |||
| [ | ||||
|   { | ||||
|     "path": "aed_checked.svg", | ||||
|     "path": "defibrillator.svg", | ||||
|     "license": "CC0", | ||||
|     "authors": [ | ||||
|       "MaxxL" | ||||
|  |  | |||
|  | @ -521,7 +521,7 @@ | |||
|   "mapRendering": [ | ||||
|     { | ||||
|       "icon": { | ||||
|         "render": "./assets/themes/bookcases/bookcase.svg" | ||||
|         "render": "circle:#ffffff;./assets/themes/bookcases/bookcase.svg" | ||||
|       }, | ||||
|       "label": { | ||||
|         "mappings": [ | ||||
|  |  | |||
|  | @ -681,7 +681,7 @@ | |||
|   "mapRendering": [ | ||||
|     { | ||||
|       "icon": { | ||||
|         "render": "./assets/layers/toilet/toilets.svg", | ||||
|         "render": "circle:#ffffff;./assets/layers/toilet/toilets.svg", | ||||
|         "mappings": [ | ||||
|           { | ||||
|             "if": { | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 370.085938 188.761719 C 370.085938 290.742188 287.238281 373.410156 185.042969 373.410156 C 82.847656 373.410156 0 290.742188 0 188.761719 C 0 86.78125 82.847656 4.113281 185.042969 4.113281 C 287.238281 4.113281 370.085938 86.78125 370.085938 188.761719 Z M 370.085938 188.761719 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(45.09804%,29.019609%,3.137255%);fill-opacity:1;" d="M 172.925781 76.054688 L 172.925781 302.253906 L 197.160156 302.253906 L 197.160156 76.054688 Z M 112.335938 92.214844 C 98.953125 92.214844 88.101562 103.0625 88.101562 116.449219 C 88.101562 129.832031 98.953125 140.683594 112.335938 140.683594 C 125.722656 140.683594 136.570312 129.832031 136.570312 116.449219 C 136.570312 103.0625 125.722656 92.214844 112.335938 92.214844 Z M 257.75 92.214844 C 244.363281 92.214844 233.511719 103.0625 233.511719 116.449219 C 233.511719 129.832031 244.363281 140.683594 257.75 140.683594 C 271.132812 140.683594 281.984375 129.832031 281.984375 116.449219 C 281.984375 103.0625 271.132812 92.214844 257.75 92.214844 Z M 96.179688 156.839844 C 86.488281 156.839844 80.023438 166.027344 80.023438 172.996094 C 80.023438 181.515625 100.21875 197.179688 100.21875 205.3125 C 100.21875 214.292969 71.945312 221.46875 71.945312 253.78125 L 100.21875 253.78125 L 100.21875 302.253906 L 124.453125 302.253906 L 124.453125 253.78125 L 152.730469 253.78125 C 152.730469 221.46875 124.453125 213.867188 124.453125 205.3125 C 124.453125 196.757812 144.648438 181.90625 144.648438 172.996094 C 144.648438 166.414062 137.789062 156.839844 128.492188 156.839844 Z M 233.511719 156.839844 C 224.992188 156.839844 217.355469 164.605469 217.355469 172.996094 C 217.355469 189.15625 245.628906 237.882812 245.628906 253.78125 L 245.628906 302.253906 L 269.867188 302.253906 L 269.867188 253.78125 C 269.867188 238.199219 298.140625 189.15625 298.140625 172.996094 C 298.140625 164.058594 290.890625 156.839844 281.984375 156.839844 Z M 233.511719 156.839844 "/> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 2.2 KiB After Width: | Height: | Size: 1.8 KiB | 
|  | @ -1,6 +1,9 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 375 187.5 C 375 291.054688 291.054688 375 187.5 375 C 83.945312 375 0 291.054688 0 187.5 C 0 83.945312 83.945312 0 187.5 0 C 291.054688 0 375 83.945312 375 187.5 Z M 375 187.5 "/> | ||||
|   </g> | ||||
|     <g id="surface1"> | ||||
|         <path | ||||
|                 style="fill:#000000;" | ||||
|                 class="selectable" | ||||
|               d="M 375 187.5 C 375 291.054688 291.054688 375 187.5 375 C 83.945312 375 0 291.054688 0 187.5 C 0 83.945312 83.945312 0 187.5 0 C 291.054688 0 375 83.945312 375 187.5 Z M 375 187.5 "/> | ||||
|     </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 464 B After Width: | Height: | Size: 486 B | 
|  | @ -11,6 +11,7 @@ | |||
|      id="defs11" /> | ||||
|   <path | ||||
|      id="path2" | ||||
|      class="selectable" | ||||
|      style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" | ||||
|      d="M 157 0 C 70.296875 1.8947806e-14 0.01171875 70.121098 0.01171875 156.62109 C 0.01171875 231.01726 52.025471 293.25325 121.74219 309.22266 L 147.24609 364.68359 C 152.95703 377.10547 170.65234 377.10547 176.36719 364.68359 L 203.19922 306.33398 C 267.35183 286.6535 313.98828 227.07489 313.98828 156.62109 C 313.98828 70.121098 243.70312 0 157 0 z " /> | ||||
| </svg> | ||||
|  |  | |||
| Before Width: | Height: | Size: 722 B After Width: | Height: | Size: 746 B | 
|  | @ -1,6 +1,21 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <rect x="0" y="0" width="375" height="375" style="fill:rgb(0%,0%,0%);fill-opacity:1;stroke:none;"/> | ||||
| <?xml version="1.0" encoding="UTF-8" standalone="no"?> | ||||
| <svg | ||||
|    width="375px" | ||||
|    height="375px" | ||||
|    viewBox="0 0 375 375" | ||||
|    version="1.1" | ||||
|    id="svg5" | ||||
|    sodipodi:docname="square.svg" | ||||
|    inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)" | ||||
|    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | ||||
|    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | ||||
|    xmlns="http://www.w3.org/2000/svg" | ||||
|    xmlns:svg="http://www.w3.org/2000/svg"> | ||||
|   <g | ||||
|      id="surface1"> | ||||
|     <path class="selectable" | ||||
|        id="rect2" | ||||
|           style="fill:#000000;" | ||||
|        d="M 0,0 H 375 V 375 H 0 Z" /> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 299 B After Width: | Height: | Size: 608 B | 
|  | @ -1,6 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="374px" height="374px" viewBox="0 0 374 374" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:1;" d="M 197.824219 10.429688 C 193.816406 11.191406 188.988281 15.195312 184.570312 21.386719 C 178.515625 29.949219 173.335938 40.234375 161.109375 68.078125 C 150.957031 91.164062 146.890625 99.34375 141.597656 107.144531 C 135.421875 116.230469 131.152344 118.042969 115.910156 118.074219 C 107.046875 118.074219 99.144531 117.429688 77.4375 114.976562 C 68.371094 113.925781 57.953125 112.84375 50.230469 112.140625 C 44.644531 111.644531 27.0625 111.644531 23.753906 112.140625 C 13.253906 113.777344 8.394531 117.226562 8.015625 123.304688 C 7.8125 127.042969 9.273438 131.046875 12.726562 136.21875 C 18.488281 144.808594 27.761719 154.101562 51.253906 174.875 C 79.195312 199.5625 87.738281 209.175781 88.996094 217.300781 C 90.078125 224.136719 86.214844 236.46875 75.742188 259.902344 C 65.09375 283.742188 63.164062 288.039062 61.40625 292.332031 C 54.035156 310.1875 51.109375 321.492188 52.105469 328.449219 C 53.011719 334.933594 56.347656 338.179688 62.546875 338.558594 C 71.644531 339.171875 85.015625 333.621094 112.253906 317.988281 C 134.164062 305.394531 138.144531 303.144531 143 300.574219 C 156.195312 293.5625 164.003906 290.699219 170.03125 290.609375 C 173.570312 290.582031 174.742188 290.902344 179.101562 293.0625 C 186.855469 296.949219 195.894531 304.167969 217.132812 323.453125 C 246.5625 350.214844 258.238281 358.6875 268.386719 360.734375 C 271.371094 361.347656 273.449219 361.113281 275.847656 359.945312 C 278.863281 358.484375 280.527344 356 281.816406 351.0625 C 282.429688 348.695312 282.488281 347.820312 282.488281 341.859375 C 282.488281 338.207031 282.34375 334.058594 282.136719 332.507812 C 280.644531 321.433594 279.007812 312.816406 274.738281 293.503906 C 268.039062 263.289062 266.574219 254.730469 266.574219 245.378906 C 266.574219 240.644531 267.042969 237.78125 268.183594 235.269531 C 271.136719 228.8125 281.699219 220.953125 305.484375 207.453125 C 324.820312 196.496094 329.796875 193.632812 334.886719 190.566406 C 356.503906 177.53125 366.042969 168.328125 366.042969 160.558594 C 366.042969 156.027344 363.234375 152.582031 357.089844 149.511719 C 348.3125 145.128906 335.207031 142.617188 305.484375 139.519531 C 274.707031 136.363281 266.457031 135.195312 257.59375 132.945312 C 246.269531 130.023438 242.554688 127.074219 238.636719 117.898438 C 235.210938 109.832031 232.460938 99.519531 227.195312 74.59375 C 223.246094 55.777344 220.996094 46.164062 218.742188 38.453125 C 215.378906 26.824219 211.722656 18.933594 207.625 14.375 C 204.875 11.308594 201.160156 9.816406 197.824219 10.429688 Z M 197.824219 10.429688 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:1;" class="selectable" d="M 197.824219 10.429688 C 193.816406 11.191406 188.988281 15.195312 184.570312 21.386719 C 178.515625 29.949219 173.335938 40.234375 161.109375 68.078125 C 150.957031 91.164062 146.890625 99.34375 141.597656 107.144531 C 135.421875 116.230469 131.152344 118.042969 115.910156 118.074219 C 107.046875 118.074219 99.144531 117.429688 77.4375 114.976562 C 68.371094 113.925781 57.953125 112.84375 50.230469 112.140625 C 44.644531 111.644531 27.0625 111.644531 23.753906 112.140625 C 13.253906 113.777344 8.394531 117.226562 8.015625 123.304688 C 7.8125 127.042969 9.273438 131.046875 12.726562 136.21875 C 18.488281 144.808594 27.761719 154.101562 51.253906 174.875 C 79.195312 199.5625 87.738281 209.175781 88.996094 217.300781 C 90.078125 224.136719 86.214844 236.46875 75.742188 259.902344 C 65.09375 283.742188 63.164062 288.039062 61.40625 292.332031 C 54.035156 310.1875 51.109375 321.492188 52.105469 328.449219 C 53.011719 334.933594 56.347656 338.179688 62.546875 338.558594 C 71.644531 339.171875 85.015625 333.621094 112.253906 317.988281 C 134.164062 305.394531 138.144531 303.144531 143 300.574219 C 156.195312 293.5625 164.003906 290.699219 170.03125 290.609375 C 173.570312 290.582031 174.742188 290.902344 179.101562 293.0625 C 186.855469 296.949219 195.894531 304.167969 217.132812 323.453125 C 246.5625 350.214844 258.238281 358.6875 268.386719 360.734375 C 271.371094 361.347656 273.449219 361.113281 275.847656 359.945312 C 278.863281 358.484375 280.527344 356 281.816406 351.0625 C 282.429688 348.695312 282.488281 347.820312 282.488281 341.859375 C 282.488281 338.207031 282.34375 334.058594 282.136719 332.507812 C 280.644531 321.433594 279.007812 312.816406 274.738281 293.503906 C 268.039062 263.289062 266.574219 254.730469 266.574219 245.378906 C 266.574219 240.644531 267.042969 237.78125 268.183594 235.269531 C 271.136719 228.8125 281.699219 220.953125 305.484375 207.453125 C 324.820312 196.496094 329.796875 193.632812 334.886719 190.566406 C 356.503906 177.53125 366.042969 168.328125 366.042969 160.558594 C 366.042969 156.027344 363.234375 152.582031 357.089844 149.511719 C 348.3125 145.128906 335.207031 142.617188 305.484375 139.519531 C 274.707031 136.363281 266.457031 135.195312 257.59375 132.945312 C 246.269531 130.023438 242.554688 127.074219 238.636719 117.898438 C 235.210938 109.832031 232.460938 99.519531 227.195312 74.59375 C 223.246094 55.777344 220.996094 46.164062 218.742188 38.453125 C 215.378906 26.824219 211.722656 18.933594 207.625 14.375 C 204.875 11.308594 201.160156 9.816406 197.824219 10.429688 Z M 197.824219 10.429688 "/> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 2.8 KiB After Width: | Height: | Size: 2.8 KiB | 
|  | @ -1,7 +1,7 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="275px" height="374px" viewBox="0 0 275 374" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:0.988235;" d="M 137.433594 370.035156 C 136.605469 368.027344 119.402344 351.226562 107.082031 335.960938 C 34.097656 239.179688 -47.273438 149.257812 47.746094 39.980469 C 89.816406 -0.617188 141.691406 -2.933594 195.023438 15.992188 C 345.191406 102.777344 236.46875 244.351562 165.078125 337.421875 Z M 182.605469 221.6875 C 282.765625 150.148438 205.328125 12.386719 95.28125 58.183594 C 63.148438 75.296875 47.203125 105.070312 46.644531 140.195312 C 45.109375 174.359375 63.277344 202.929688 92.066406 220.429688 C 112.707031 231.652344 121.78125 233.675781 145.152344 232.285156 C 160.300781 231.386719 169.027344 228.914062 182.605469 221.6875 Z M 182.605469 221.6875 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:#000000;fill-opacity:0.988235;" class="selectable" d="M 137.433594 370.035156 C 136.605469 368.027344 119.402344 351.226562 107.082031 335.960938 C 34.097656 239.179688 -47.273438 149.257812 47.746094 39.980469 C 89.816406 -0.617188 141.691406 -2.933594 195.023438 15.992188 C 345.191406 102.777344 236.46875 244.351562 165.078125 337.421875 Z M 182.605469 221.6875 C 282.765625 150.148438 205.328125 12.386719 95.28125 58.183594 C 63.148438 75.296875 47.203125 105.070312 46.644531 140.195312 C 45.109375 174.359375 63.277344 202.929688 92.066406 220.429688 C 112.707031 231.652344 121.78125 233.675781 145.152344 232.285156 C 160.300781 231.386719 169.027344 228.914062 182.605469 221.6875 Z M 182.605469 221.6875 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(0%,0%,0%);fill-opacity:0.988235;" d="M 108.722656 255.84375 C 37.953125 241.132812 -7.363281 173.46875 7.277344 104.371094 C 21.914062 35.273438 91.019531 -9.34375 161.976562 4.492188 C 232.9375 18.328125 279.128906 85.421875 265.390625 154.699219 C 251.65625 223.972656 183.136719 269.4375 112.003906 256.484375 "/> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB | 
|  | @ -1,7 +1,6 @@ | |||
| <?xml version="1.0" encoding="UTF-8" standalone="yes"?> | ||||
| <svg xmlns="http://www.w3.org/2000/svg" width="375px" height="375px" viewBox="0 0 375 375" version="1.1"> | ||||
|   <g id="surface1"> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(100%,100%,100%);fill-opacity:1;" d="M 374.863281 188.140625 C 374.863281 291.519531 290.890625 375.324219 187.308594 375.324219 C 83.722656 375.324219 -0.25 291.519531 -0.25 188.140625 C -0.25 84.757812 83.722656 0.953125 187.308594 0.953125 C 290.890625 0.953125 374.863281 84.757812 374.863281 188.140625 Z M 374.863281 188.140625 "/> | ||||
|     <path style=" stroke:none;fill-rule:nonzero;fill:rgb(45.09804%,29.019609%,3.137255%);fill-opacity:1;" d="M 188.226562 61.175781 L 50.847656 100.425781 L 50.847656 120.050781 L 188.226562 80.800781 L 325.605469 120.050781 L 325.605469 100.425781 Z M 120.265625 131.285156 C 117.203125 131.40625 114.164062 132.011719 111.140625 133.160156 L 111.140625 255.246094 C 111.140625 255.246094 160.289062 253.359375 172.816406 301.050781 L 172.816406 172.835938 C 163.257812 152.910156 141.691406 130.429688 120.265625 131.285156 Z M 172.816406 301.050781 C 141.011719 276.726562 95.695312 270.539062 95.695312 270.539062 L 95.695312 154.550781 L 80.285156 148.417969 L 80.285156 285.796875 L 172.816406 316.308594 L 203.636719 316.308594 L 296.164062 285.796875 L 296.164062 148.417969 L 280.757812 154.550781 L 280.757812 276.632812 L 203.636719 301.050781 C 193.355469 297.164062 181.394531 297.855469 172.816406 301.050781 Z M 265.308594 133.160156 C 234.585938 131.535156 199.136719 149.800781 180.519531 165.511719 L 180.519531 294.6875 C 197.710938 280.578125 228.511719 262.027344 265.308594 258.3125 Z M 265.308594 133.160156 "/> | ||||
|   </g> | ||||
| </svg> | ||||
| Before Width: | Height: | Size: 1.7 KiB After Width: | Height: | Size: 1.3 KiB | 
|  | @ -2094,6 +2094,31 @@ li::marker { | |||
|   display: none; | ||||
| } | ||||
| 
 | ||||
| .selected svg path.selectable { | ||||
|   stroke: white !important; | ||||
|   stroke-width: 20px !important; | ||||
|   /* filter: drop-shadow(5px 5px 40px rgb(0 0 0 / 0.6));*/ | ||||
|   overflow: visible !important; | ||||
|   -webkit-animation: glowing-drop-shadow 1s ease-in-out infinite alternate; | ||||
|   animation: glowing-drop-shadow 1s ease-in-out infinite alternate; | ||||
| } | ||||
| 
 | ||||
| .selected svg { | ||||
|   overflow: visible !important; | ||||
| } | ||||
| 
 | ||||
| @-webkit-keyframes glowing-drop-shadow { | ||||
|   from { | ||||
|     -webkit-filter: drop-shadow(5px 5px 60px rgb(128 128 128 / 0.6)); | ||||
|             filter: drop-shadow(5px 5px 60px rgb(128 128 128 / 0.6)); | ||||
|   } | ||||
| 
 | ||||
|   to { | ||||
|     -webkit-filter: drop-shadow(5px 5px 80px rgb(0.5 0.5 0.5 / 0.8)); | ||||
|             filter: drop-shadow(5px 5px 80px rgb(0.5 0.5 0.5 / 0.8)); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| /**************** GENERIC ****************/ | ||||
| 
 | ||||
| .alert { | ||||
|  | @ -2355,18 +2380,10 @@ input { | |||
|     height: 6rem; | ||||
|   } | ||||
| 
 | ||||
|   .sm\:h-6 { | ||||
|     height: 1.5rem; | ||||
|   } | ||||
| 
 | ||||
|   .sm\:w-24 { | ||||
|     width: 6rem; | ||||
|   } | ||||
| 
 | ||||
|   .sm\:w-6 { | ||||
|     width: 1.5rem; | ||||
|   } | ||||
| 
 | ||||
|   .sm\:max-w-xl { | ||||
|     max-width: 36rem; | ||||
|   } | ||||
|  |  | |||
							
								
								
									
										24
									
								
								index.css
									
										
									
									
									
								
							
							
						
						|  | @ -304,6 +304,30 @@ li::marker { | |||
|   display: none; | ||||
| } | ||||
| 
 | ||||
| .selected svg path.selectable { | ||||
|   stroke: white !important; | ||||
|   stroke-width: 20px !important; | ||||
|   overflow: visible !important; | ||||
|   -webkit-animation: glowing-drop-shadow 1s ease-in-out infinite alternate; | ||||
|   -moz-animation: glowing-drop-shadow 1s ease-in-out infinite alternate; | ||||
|   animation: glowing-drop-shadow 1s ease-in-out infinite alternate; | ||||
| } | ||||
| 
 | ||||
| .selected svg { | ||||
|   overflow: visible !important; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| @-webkit-keyframes glowing-drop-shadow { | ||||
|   from { | ||||
|     filter: drop-shadow(5px 5px 60px rgb(128 128 128 / 0.6)); | ||||
|   } | ||||
|   to { | ||||
|     filter: drop-shadow(5px 5px 80px rgb(0.5 0.5 0.5 / 0.8)); | ||||
|   } | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /**************** GENERIC ****************/ | ||||
| 
 | ||||
| .alert { | ||||
|  |  | |||