forked from MapComplete/MapComplete
		
	Merge branch 'develop' into feature/nsi
This commit is contained in:
		
						commit
						22c2f5166d
					
				
					 116 changed files with 5653 additions and 1538 deletions
				
			
		| 
						 | 
					@ -6,7 +6,7 @@ runs:
 | 
				
			||||||
    - name: Set up Node.js
 | 
					    - name: Set up Node.js
 | 
				
			||||||
      uses: actions/setup-node@v3
 | 
					      uses: actions/setup-node@v3
 | 
				
			||||||
      with:
 | 
					      with:
 | 
				
			||||||
        node-version: "16"
 | 
					        node-version: "20"
 | 
				
			||||||
        cache: "npm"
 | 
					        cache: "npm"
 | 
				
			||||||
        cache-dependency-path: package-lock.json
 | 
					        cache-dependency-path: package-lock.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/workflows/deploy_dev.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/deploy_dev.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -13,7 +13,7 @@ jobs:
 | 
				
			||||||
      - name: Set up Node.js
 | 
					      - name: Set up Node.js
 | 
				
			||||||
        uses: actions/setup-node@v3
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: "16"
 | 
					          node-version: "20"
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
          cache-dependency-path: package-lock.json
 | 
					          cache-dependency-path: package-lock.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/workflows/deploy_pietervdvn.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/deploy_pietervdvn.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -19,7 +19,7 @@ jobs:
 | 
				
			||||||
      - name: Set up Node.js
 | 
					      - name: Set up Node.js
 | 
				
			||||||
        uses: actions/setup-node@v3
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: "16"
 | 
					          node-version: "20"
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
          cache-dependency-path: package-lock.json
 | 
					          cache-dependency-path: package-lock.json
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/workflows/deploy_prod.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/deploy_prod.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -13,7 +13,7 @@ jobs:
 | 
				
			||||||
      - name: Set up Node.js
 | 
					      - name: Set up Node.js
 | 
				
			||||||
        uses: actions/setup-node@v3
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: "16"
 | 
					          node-version: "20"
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
          cache-dependency-path: package-lock.json
 | 
					          cache-dependency-path: package-lock.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								.github/workflows/validate-pr.yml
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/validate-pr.yml
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -11,7 +11,7 @@ jobs:
 | 
				
			||||||
      - name: Set up Node.js
 | 
					      - name: Set up Node.js
 | 
				
			||||||
        uses: actions/setup-node@v3
 | 
					        uses: actions/setup-node@v3
 | 
				
			||||||
        with:
 | 
					        with:
 | 
				
			||||||
          node-version: "16"
 | 
					          node-version: "20"
 | 
				
			||||||
          cache: "npm"
 | 
					          cache: "npm"
 | 
				
			||||||
          cache-dependency-path: package-lock.json
 | 
					          cache-dependency-path: package-lock.json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										2
									
								
								.nvmrc
									
										
									
									
									
								
							
							
						
						
									
										2
									
								
								.nvmrc
									
										
									
									
									
								
							| 
						 | 
					@ -1 +1 @@
 | 
				
			||||||
16.9.1
 | 
					20.12.2
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,7 +204,7 @@
 | 
				
			||||||
      "type": "boolean"
 | 
					      "type": "boolean"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "presets": {
 | 
					    "presets": {
 | 
				
			||||||
      "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					      "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
      "type": "array",
 | 
					      "type": "array",
 | 
				
			||||||
      "items": {
 | 
					      "items": {
 | 
				
			||||||
        "type": "object",
 | 
					        "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -379,7 +379,7 @@
 | 
				
			||||||
      "type": "boolean"
 | 
					      "type": "boolean"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "units": {
 | 
					    "units": {
 | 
				
			||||||
      "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					      "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
      "type": "array",
 | 
					      "type": "array",
 | 
				
			||||||
      "items": {
 | 
					      "items": {
 | 
				
			||||||
        "anyOf": [
 | 
					        "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -387,7 +387,7 @@
 | 
				
			||||||
            "$ref": "#/definitions/default_2"
 | 
					            "$ref": "#/definitions/default_2"
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					            "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -703,7 +703,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -717,7 +717,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1238,7 +1238,7 @@
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1386,7 +1386,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1400,7 +1400,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1464,7 +1464,7 @@
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1612,7 +1612,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1626,7 +1626,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1950,7 +1950,7 @@
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "additionalProperties": false
 | 
					      "additionalProperties": false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>": {
 | 
					    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>": {
 | 
				
			||||||
      "type": "object",
 | 
					      "type": "object",
 | 
				
			||||||
      "additionalProperties": false
 | 
					      "additionalProperties": false
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -204,7 +204,7 @@ export default {
 | 
				
			||||||
      "type": "boolean"
 | 
					      "type": "boolean"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "presets": {
 | 
					    "presets": {
 | 
				
			||||||
      "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					      "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
      "type": "array",
 | 
					      "type": "array",
 | 
				
			||||||
      "items": {
 | 
					      "items": {
 | 
				
			||||||
        "type": "object",
 | 
					        "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -379,7 +379,7 @@ export default {
 | 
				
			||||||
      "type": "boolean"
 | 
					      "type": "boolean"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "units": {
 | 
					    "units": {
 | 
				
			||||||
      "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					      "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
      "type": "array",
 | 
					      "type": "array",
 | 
				
			||||||
      "items": {
 | 
					      "items": {
 | 
				
			||||||
        "anyOf": [
 | 
					        "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -387,7 +387,7 @@ export default {
 | 
				
			||||||
            "$ref": "#/definitions/default_2"
 | 
					            "$ref": "#/definitions/default_2"
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          {
 | 
					          {
 | 
				
			||||||
            "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					            "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
| 
						 | 
					@ -696,7 +696,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -710,7 +710,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1225,7 +1225,7 @@ export default {
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1373,7 +1373,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1387,7 +1387,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1450,7 +1450,7 @@ export default {
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1598,7 +1598,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1612,7 +1612,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1930,7 +1930,7 @@ export default {
 | 
				
			||||||
        "applicableUnits"
 | 
					        "applicableUnits"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>": {
 | 
					    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>": {
 | 
				
			||||||
      "type": "object"
 | 
					      "type": "object"
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -593,7 +593,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -607,7 +607,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1128,7 +1128,7 @@
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1276,7 +1276,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1290,7 +1290,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1354,7 +1354,7 @@
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1502,7 +1502,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1516,7 +1516,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1840,7 +1840,7 @@
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "additionalProperties": false
 | 
					      "additionalProperties": false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>": {
 | 
					    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>": {
 | 
				
			||||||
      "type": "object",
 | 
					      "type": "object",
 | 
				
			||||||
      "additionalProperties": false
 | 
					      "additionalProperties": false
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
| 
						 | 
					@ -2095,7 +2095,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "presets": {
 | 
					        "presets": {
 | 
				
			||||||
          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -2270,7 +2270,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "units": {
 | 
					        "units": {
 | 
				
			||||||
          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -2278,7 +2278,7 @@
 | 
				
			||||||
                "$ref": "#/definitions/default_2"
 | 
					                "$ref": "#/definitions/default_2"
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					@ -2514,7 +2514,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "presets": {
 | 
					        "presets": {
 | 
				
			||||||
          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -2689,7 +2689,7 @@
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "units": {
 | 
					        "units": {
 | 
				
			||||||
          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -2697,7 +2697,7 @@
 | 
				
			||||||
                "$ref": "#/definitions/default_2"
 | 
					                "$ref": "#/definitions/default_2"
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -586,7 +586,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -600,7 +600,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1115,7 +1115,7 @@ export default {
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1263,7 +1263,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1277,7 +1277,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1340,7 +1340,7 @@ export default {
 | 
				
			||||||
              "type": "string"
 | 
					              "type": "string"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "placeholder": {
 | 
					            "placeholder": {
 | 
				
			||||||
              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					              "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
              "anyOf": [
 | 
					              "anyOf": [
 | 
				
			||||||
                {
 | 
					                {
 | 
				
			||||||
                  "$ref": "#/definitions/Record<string,string>"
 | 
					                  "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -1488,7 +1488,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1502,7 +1502,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -1820,7 +1820,7 @@ export default {
 | 
				
			||||||
        "applicableUnits"
 | 
					        "applicableUnits"
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>": {
 | 
					    "Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>": {
 | 
				
			||||||
      "type": "object"
 | 
					      "type": "object"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "default": {
 | 
					    "default": {
 | 
				
			||||||
| 
						 | 
					@ -2073,7 +2073,7 @@ export default {
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "presets": {
 | 
					        "presets": {
 | 
				
			||||||
          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -2248,7 +2248,7 @@ export default {
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "units": {
 | 
					        "units": {
 | 
				
			||||||
          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -2256,7 +2256,7 @@ export default {
 | 
				
			||||||
                "$ref": "#/definitions/default_2"
 | 
					                "$ref": "#/definitions/default_2"
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					@ -2491,7 +2491,7 @@ export default {
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "presets": {
 | 
					        "presets": {
 | 
				
			||||||
          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>\n\ngroup: presets",
 | 
					          "description": "<div class='flex'>\n    <div>\nPresets for this layer.\n\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\n\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\n\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>\n\ngroup: presets",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "type": "object",
 | 
					            "type": "object",
 | 
				
			||||||
| 
						 | 
					@ -2666,7 +2666,7 @@ export default {
 | 
				
			||||||
          "type": "boolean"
 | 
					          "type": "boolean"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "units": {
 | 
					        "units": {
 | 
				
			||||||
          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]",
 | 
					          "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\n\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)",
 | 
				
			||||||
          "type": "array",
 | 
					          "type": "array",
 | 
				
			||||||
          "items": {
 | 
					          "items": {
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
| 
						 | 
					@ -2674,7 +2674,7 @@ export default {
 | 
				
			||||||
                "$ref": "#/definitions/default_2"
 | 
					                "$ref": "#/definitions/default_2"
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					                "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
              }
 | 
					              }
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -379,7 +379,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -393,7 +393,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -372,7 +372,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -386,7 +386,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -406,7 +406,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -420,7 +420,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -399,7 +399,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -413,7 +413,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -453,7 +453,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -467,7 +467,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -446,7 +446,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -460,7 +460,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@
 | 
				
			||||||
          "type": "string"
 | 
					          "type": "string"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "placeholder": {
 | 
					        "placeholder": {
 | 
				
			||||||
          "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					          "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/Record<string,string>"
 | 
					              "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -177,7 +177,7 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "condition": {
 | 
					    "condition": {
 | 
				
			||||||
      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -191,7 +191,7 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "metacondition": {
 | 
					    "metacondition": {
 | 
				
			||||||
      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -510,7 +510,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -524,7 +524,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ export default {
 | 
				
			||||||
          "type": "string"
 | 
					          "type": "string"
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "placeholder": {
 | 
					        "placeholder": {
 | 
				
			||||||
          "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					          "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/Record<string,string>"
 | 
					              "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -177,7 +177,7 @@ export default {
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "condition": {
 | 
					    "condition": {
 | 
				
			||||||
      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -191,7 +191,7 @@ export default {
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "metacondition": {
 | 
					    "metacondition": {
 | 
				
			||||||
      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -503,7 +503,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -517,7 +517,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -332,7 +332,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -346,7 +346,7 @@
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -325,7 +325,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "condition": {
 | 
					        "condition": {
 | 
				
			||||||
          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					          "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -339,7 +339,7 @@ export default {
 | 
				
			||||||
          ]
 | 
					          ]
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "metacondition": {
 | 
					        "metacondition": {
 | 
				
			||||||
          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					          "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
          "anyOf": [
 | 
					          "anyOf": [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					              "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "condition": {
 | 
					    "condition": {
 | 
				
			||||||
      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -78,7 +78,7 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "metacondition": {
 | 
					    "metacondition": {
 | 
				
			||||||
      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,7 +64,7 @@ export default {
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "condition": {
 | 
					    "condition": {
 | 
				
			||||||
      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					      "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -78,7 +78,7 @@ export default {
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "metacondition": {
 | 
					    "metacondition": {
 | 
				
			||||||
      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					      "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
      "anyOf": [
 | 
					      "anyOf": [
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					          "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,3 +46,9 @@ mapcomplete.osm.be {
 | 
				
			||||||
        to http://127.0.0.1:1236
 | 
					        to http://127.0.0.1:1236
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cache.mapcomplete.org {
 | 
				
			||||||
 | 
					    reverse_proxy /summary/* {
 | 
				
			||||||
 | 
					        to http://127.0.0.1:2345
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,3 +3,10 @@
 | 
				
			||||||
This server hosts the studio files and is used for expermintal builds.
 | 
					This server hosts the studio files and is used for expermintal builds.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
For used hosts, see the Caddyfile
 | 
					For used hosts, see the Caddyfile
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Cache forwarding
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					As the ISP of Nerdlab is a bit picky, we use SSH-port-forwarding on the cache server:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					`ssh -R 5445:127.0.0.1:5445 hetzner`
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,9 +13,9 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [advertising](../Layers/advertising.md)
 | 
					  - [advertising](../Layers/advertising.md)
 | 
				
			||||||
  - [shelter](../Layers/shelter.md)
 | 
					  - [shelter](../Layers/shelter.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [defibrillator](../Layers/defibrillator.md)
 | 
					  - [defibrillator](../Layers/defibrillator.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [artwork](../Layers/artwork.md)
 | 
					  - [artwork](../Layers/artwork.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [clock](../Layers/clock.md)
 | 
					  - [clock](../Layers/clock.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,8 +13,8 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [facadegardens](../Layers/facadegardens.md)
 | 
					  - [facadegardens](../Layers/facadegardens.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,9 +13,9 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [ghostsigns](../Layers/ghostsigns.md)
 | 
					  - [ghostsigns](../Layers/ghostsigns.md)
 | 
				
			||||||
  - [advertising_wall_paintings](../Layers/advertising_wall_paintings.md)
 | 
					  - [advertising_wall_paintings](../Layers/advertising_wall_paintings.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [named_streets](../Layers/named_streets.md)
 | 
					 | 
				
			||||||
  - [osm_buildings_no_points](../Layers/osm_buildings_no_points.md)
 | 
					  - [osm_buildings_no_points](../Layers/osm_buildings_no_points.md)
 | 
				
			||||||
  - [grb](../Layers/grb.md)
 | 
					  - [grb](../Layers/grb.md)
 | 
				
			||||||
  - [service_ways](../Layers/service_ways.md)
 | 
					  - [service_ways](../Layers/service_ways.md)
 | 
				
			||||||
| 
						 | 
					@ -21,6 +20,7 @@ This theme contains the following layers:
 | 
				
			||||||
  - [address](../Layers/address.md)
 | 
					  - [address](../Layers/address.md)
 | 
				
			||||||
  - [crab_address](../Layers/crab_address.md)
 | 
					  - [crab_address](../Layers/crab_address.md)
 | 
				
			||||||
  - [current_view](../Layers/current_view.md)
 | 
					  - [current_view](../Layers/current_view.md)
 | 
				
			||||||
 | 
					  - [named_streets](../Layers/named_streets.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,7 +13,6 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [indoors](../Layers/indoors.md)
 | 
					  - [indoors](../Layers/indoors.md)
 | 
				
			||||||
  - [stairs](../Layers/stairs.md)
 | 
					  - [stairs](../Layers/stairs.md)
 | 
				
			||||||
  - [pedestrian_path](../Layers/pedestrian_path.md)
 | 
					  - [pedestrian_path](../Layers/pedestrian_path.md)
 | 
				
			||||||
| 
						 | 
					@ -36,6 +35,7 @@ This theme contains the following layers:
 | 
				
			||||||
  - [bench](../Layers/bench.md)
 | 
					  - [bench](../Layers/bench.md)
 | 
				
			||||||
  - [drinking_water](../Layers/drinking_water.md)
 | 
					  - [drinking_water](../Layers/drinking_water.md)
 | 
				
			||||||
  - [departures_board](../Layers/departures_board.md)
 | 
					  - [departures_board](../Layers/departures_board.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,9 +13,9 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					 | 
				
			||||||
  - [surveillance_camera](../Layers/surveillance_camera.md)
 | 
					  - [surveillance_camera](../Layers/surveillance_camera.md)
 | 
				
			||||||
  - [speed_camera](../Layers/speed_camera.md)
 | 
					  - [speed_camera](../Layers/speed_camera.md)
 | 
				
			||||||
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,11 +13,11 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [address](../Layers/address.md)
 | 
					 | 
				
			||||||
  - [raw_inspire_polygons](../Layers/raw_inspire_polygons.md)
 | 
					  - [raw_inspire_polygons](../Layers/raw_inspire_polygons.md)
 | 
				
			||||||
  - [to_import](../Layers/to_import.md)
 | 
					  - [to_import](../Layers/to_import.md)
 | 
				
			||||||
  - [uk_address](../Layers/uk_address.md)
 | 
					  - [uk_address](../Layers/uk_address.md)
 | 
				
			||||||
  - [named_streets](../Layers/named_streets.md)
 | 
					  - [named_streets](../Layers/named_streets.md)
 | 
				
			||||||
 | 
					  - [address](../Layers/address.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,10 +13,10 @@ This theme contains the following layers:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  - [indoors](../Layers/indoors.md)
 | 
					 | 
				
			||||||
  - [pedestrian_path](../Layers/pedestrian_path.md)
 | 
					 | 
				
			||||||
  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
					  - [walls_and_buildings](../Layers/walls_and_buildings.md)
 | 
				
			||||||
  - [entrance](../Layers/entrance.md)
 | 
					  - [entrance](../Layers/entrance.md)
 | 
				
			||||||
 | 
					  - [indoors](../Layers/indoors.md)
 | 
				
			||||||
 | 
					  - [pedestrian_path](../Layers/pedestrian_path.md)
 | 
				
			||||||
  - [selected_element](../Layers/selected_element.md)
 | 
					  - [selected_element](../Layers/selected_element.md)
 | 
				
			||||||
  - [gps_location](../Layers/gps_location.md)
 | 
					  - [gps_location](../Layers/gps_location.md)
 | 
				
			||||||
  - [gps_location_history](../Layers/gps_location_history.md)
 | 
					  - [gps_location_history](../Layers/gps_location_history.md)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -291,7 +291,7 @@ z
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The initial/current zoom level
 | 
					The initial/current zoom level
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L28)
 | 
					This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L34)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default value is _1_
 | 
					The default value is _1_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -300,7 +300,7 @@ lat
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The initial/current latitude
 | 
					The initial/current latitude
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L28)
 | 
					This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L34)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default value is _0_
 | 
					The default value is _0_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -309,7 +309,7 @@ lon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The initial/current longitude of the app
 | 
					The initial/current longitude of the app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L28)
 | 
					This documentation is defined in the source code at [InitialMapPositioning.ts](/src/Logic/Actors/InitialMapPositioning.ts#L34)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
The default value is _0_
 | 
					The default value is _0_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -155,8 +155,8 @@
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "if": "backrest=yes",
 | 
					          "if": "backrest=yes",
 | 
				
			||||||
          "then": {
 | 
					          "then": {
 | 
				
			||||||
            "en": "Does have a backrest",
 | 
					            "en": "This bench does have a backrest",
 | 
				
			||||||
            "de": "Die Sitzbank hat eine Rückenlehne",
 | 
					            "de": "Diese Sitzbank hat eine Rückenlehne",
 | 
				
			||||||
            "fr": "Dossier : Oui",
 | 
					            "fr": "Dossier : Oui",
 | 
				
			||||||
            "nl": "Heeft een rugleuning",
 | 
					            "nl": "Heeft een rugleuning",
 | 
				
			||||||
            "es": "Tiene respaldo",
 | 
					            "es": "Tiene respaldo",
 | 
				
			||||||
| 
						 | 
					@ -186,8 +186,8 @@
 | 
				
			||||||
            "two_sided="
 | 
					            "two_sided="
 | 
				
			||||||
          ],
 | 
					          ],
 | 
				
			||||||
          "then": {
 | 
					          "then": {
 | 
				
			||||||
            "en": "Does <b>not</b> have a backrest",
 | 
					            "en": "This bench does <b>not</b> have a backrest",
 | 
				
			||||||
            "de": "Die Sitzbank hat <b>keine</b> Rückenlehne",
 | 
					            "de": "Diese Sitzbank hat <b>keine</b> Rückenlehne",
 | 
				
			||||||
            "fr": "Dossier : Non",
 | 
					            "fr": "Dossier : Non",
 | 
				
			||||||
            "nl": "Heeft <b>geen</b> rugleuning",
 | 
					            "nl": "Heeft <b>geen</b> rugleuning",
 | 
				
			||||||
            "es": "<b>No</b> tiene respaldo",
 | 
					            "es": "<b>No</b> tiene respaldo",
 | 
				
			||||||
| 
						 | 
					@ -236,8 +236,8 @@
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "render": {
 | 
					      "render": {
 | 
				
			||||||
        "en": "{seats} seats",
 | 
					        "en": "This bench has {seats} seats",
 | 
				
			||||||
        "de": "Die Sitzbank hat {seats} Sitzplätze",
 | 
					        "de": "Diese Sitzbank hat {seats} Sitzplätze",
 | 
				
			||||||
        "fr": "{seats} places",
 | 
					        "fr": "{seats} places",
 | 
				
			||||||
        "nl": "{seats} zitplaatsen",
 | 
					        "nl": "{seats} zitplaatsen",
 | 
				
			||||||
        "es": "{seats} asientos",
 | 
					        "es": "{seats} asientos",
 | 
				
			||||||
| 
						 | 
					@ -882,7 +882,7 @@
 | 
				
			||||||
        "bench-questions"
 | 
					        "bench-questions"
 | 
				
			||||||
      ],
 | 
					      ],
 | 
				
			||||||
      "render": {
 | 
					      "render": {
 | 
				
			||||||
        "en": "This bench does have the following inscription:<br/><p><i>{inscription}</i></p>",
 | 
					        "en": "This bench has the following inscription:<br/><p><i>{inscription}</i></p>",
 | 
				
			||||||
        "nl": "Deze bank heeft een inscriptie: <br/><p><i>{inscription}</i></p>",
 | 
					        "nl": "Deze bank heeft een inscriptie: <br/><p><i>{inscription}</i></p>",
 | 
				
			||||||
        "de": "Diese Bank hat folgende Inschrift:<br/><p><i>{inscription}</i></p>",
 | 
					        "de": "Diese Bank hat folgende Inschrift:<br/><p><i>{inscription}</i></p>",
 | 
				
			||||||
        "fr": "Ce banc a l'inscription suivante :<br/><p><i>{inscription}</i></p>",
 | 
					        "fr": "Ce banc a l'inscription suivante :<br/><p><i>{inscription}</i></p>",
 | 
				
			||||||
| 
						 | 
					@ -931,7 +931,7 @@
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
          "if": "inscription=",
 | 
					          "if": "inscription=",
 | 
				
			||||||
          "then": {
 | 
					          "then": {
 | 
				
			||||||
            "en": "This bench does <span class='subtle'>(probably)</span> not have an inscription",
 | 
					            "en": "This bench <span class='subtle'>(probably)</span> does not not have an inscription",
 | 
				
			||||||
            "nl": "Deze bank heeft <span class='subtle'>(waarschijnlijk)</span> geen inscriptie",
 | 
					            "nl": "Deze bank heeft <span class='subtle'>(waarschijnlijk)</span> geen inscriptie",
 | 
				
			||||||
            "de": "Diese Bank hat <span class='subtle'>(wahrscheinlich)</span> keine Inschrift",
 | 
					            "de": "Diese Bank hat <span class='subtle'>(wahrscheinlich)</span> keine Inschrift",
 | 
				
			||||||
            "fr": "Ce banc n'a <span class='subtle'>(probablement)</span> pas d'inscription",
 | 
					            "fr": "Ce banc n'a <span class='subtle'>(probablement)</span> pas d'inscription",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -998,6 +998,16 @@
 | 
				
			||||||
          "weeks",
 | 
					          "weeks",
 | 
				
			||||||
          "months"
 | 
					          "months"
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
 | 
					      },
 | 
				
			||||||
 | 
					      "charge": {
 | 
				
			||||||
 | 
					        "quantity": "duration",
 | 
				
			||||||
 | 
					        "inverted": true,
 | 
				
			||||||
 | 
					        "denominations": [
 | 
				
			||||||
 | 
					          "days",
 | 
				
			||||||
 | 
					          "weeks",
 | 
				
			||||||
 | 
					          "months",
 | 
				
			||||||
 | 
					          "years"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ]
 | 
					  ]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -5,12 +5,7 @@
 | 
				
			||||||
    "nl": "Oplaadpunten",
 | 
					    "nl": "Oplaadpunten",
 | 
				
			||||||
    "de": "Ladestationen"
 | 
					    "de": "Ladestationen"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "description": {
 | 
					  "minzoom": 10,
 | 
				
			||||||
    "en": "A charging station",
 | 
					 | 
				
			||||||
    "nl": "Oplaadpunten",
 | 
					 | 
				
			||||||
    "ca": "Una estació de càrrega",
 | 
					 | 
				
			||||||
    "de": "Eine Ladestation"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "source": {
 | 
					  "source": {
 | 
				
			||||||
    "osmTags": {
 | 
					    "osmTags": {
 | 
				
			||||||
      "and": [
 | 
					      "and": [
 | 
				
			||||||
| 
						 | 
					@ -25,7 +20,6 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "minzoom": 10,
 | 
					 | 
				
			||||||
  "title": {
 | 
					  "title": {
 | 
				
			||||||
    "render": {
 | 
					    "render": {
 | 
				
			||||||
      "en": "Charging station",
 | 
					      "en": "Charging station",
 | 
				
			||||||
| 
						 | 
					@ -71,103 +65,13 @@
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "pointRendering": [
 | 
					  "description": {
 | 
				
			||||||
    {
 | 
					    "en": "A charging station",
 | 
				
			||||||
      "location": [
 | 
					    "nl": "Oplaadpunten",
 | 
				
			||||||
        "point",
 | 
					    "ca": "Una estació de càrrega",
 | 
				
			||||||
        "centroid"
 | 
					    "de": "Eine Ladestation"
 | 
				
			||||||
      ],
 | 
					  },
 | 
				
			||||||
      "marker": [
 | 
					  "#": "no-question-hint-check",
 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "icon": "pin",
 | 
					 | 
				
			||||||
          "color": "#fff"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "icon": {
 | 
					 | 
				
			||||||
            "render": "./assets/themes/charging_stations/plug.svg",
 | 
					 | 
				
			||||||
            "mappings": [
 | 
					 | 
				
			||||||
              {
 | 
					 | 
				
			||||||
                "if": "bicycle=yes",
 | 
					 | 
				
			||||||
                "then": "./assets/themes/charging_stations/bicycle.svg"
 | 
					 | 
				
			||||||
              },
 | 
					 | 
				
			||||||
              {
 | 
					 | 
				
			||||||
                "if": {
 | 
					 | 
				
			||||||
                  "or": [
 | 
					 | 
				
			||||||
                    "car=yes",
 | 
					 | 
				
			||||||
                    "motorcar=yes"
 | 
					 | 
				
			||||||
                  ]
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "then": "./assets/themes/charging_stations/car.svg"
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
          }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "iconBadges": [
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "if": {
 | 
					 | 
				
			||||||
            "or": [
 | 
					 | 
				
			||||||
              "disused:amenity=charging_station",
 | 
					 | 
				
			||||||
              "operational_status=broken"
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          "then": "close:#c22;"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "if": {
 | 
					 | 
				
			||||||
            "or": [
 | 
					 | 
				
			||||||
              "proposed:amenity=charging_station",
 | 
					 | 
				
			||||||
              "planned:amenity=charging_station"
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          "then": "./assets/layers/charging_station/under_construction.svg"
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        {
 | 
					 | 
				
			||||||
          "if": {
 | 
					 | 
				
			||||||
            "and": [
 | 
					 | 
				
			||||||
              "bicycle=yes",
 | 
					 | 
				
			||||||
              {
 | 
					 | 
				
			||||||
                "or": [
 | 
					 | 
				
			||||||
                  "motorcar=yes",
 | 
					 | 
				
			||||||
                  "car=yes"
 | 
					 | 
				
			||||||
                ]
 | 
					 | 
				
			||||||
              }
 | 
					 | 
				
			||||||
            ]
 | 
					 | 
				
			||||||
          },
 | 
					 | 
				
			||||||
          "then": "circle:#fff;./assets/themes/charging_stations/car.svg"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "anchor": "bottom",
 | 
					 | 
				
			||||||
      "iconSize": "50,50"
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "lineRendering": [],
 | 
					 | 
				
			||||||
  "presets": [
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "tags": [
 | 
					 | 
				
			||||||
        "amenity=charging_station",
 | 
					 | 
				
			||||||
        "motorcar=no",
 | 
					 | 
				
			||||||
        "bicycle=yes"
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "title": {
 | 
					 | 
				
			||||||
        "en": "charging station for electrical bikes",
 | 
					 | 
				
			||||||
        "nl": "oplaadpunt voor elektrische fietsen",
 | 
					 | 
				
			||||||
        "de": "Ladestation für Elektrofahrräder"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    {
 | 
					 | 
				
			||||||
      "tags": [
 | 
					 | 
				
			||||||
        "amenity=charging_station",
 | 
					 | 
				
			||||||
        "motorcar=yes",
 | 
					 | 
				
			||||||
        "bicycle=no"
 | 
					 | 
				
			||||||
      ],
 | 
					 | 
				
			||||||
      "title": {
 | 
					 | 
				
			||||||
        "en": "charging station for cars",
 | 
					 | 
				
			||||||
        "nl": "oplaadstation voor elektrische auto's",
 | 
					 | 
				
			||||||
        "de": "Ladestation für Autos"
 | 
					 | 
				
			||||||
      }
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
  ],
 | 
					 | 
				
			||||||
  "tagRenderings": [
 | 
					  "tagRenderings": [
 | 
				
			||||||
    "images",
 | 
					    "images",
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
| 
						 | 
					@ -2509,6 +2413,103 @@
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
 | 
					  "lineRendering": [],
 | 
				
			||||||
 | 
					  "pointRendering": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "location": [
 | 
				
			||||||
 | 
					        "point",
 | 
				
			||||||
 | 
					        "centroid"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "marker": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "icon": "pin",
 | 
				
			||||||
 | 
					          "color": "#fff"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "icon": {
 | 
				
			||||||
 | 
					            "render": "./assets/themes/charging_stations/plug.svg",
 | 
				
			||||||
 | 
					            "mappings": [
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "if": "bicycle=yes",
 | 
				
			||||||
 | 
					                "then": "./assets/themes/charging_stations/bicycle.svg"
 | 
				
			||||||
 | 
					              },
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "if": {
 | 
				
			||||||
 | 
					                  "or": [
 | 
				
			||||||
 | 
					                    "car=yes",
 | 
				
			||||||
 | 
					                    "motorcar=yes"
 | 
				
			||||||
 | 
					                  ]
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "then": "./assets/themes/charging_stations/car.svg"
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "iconBadges": [
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "if": {
 | 
				
			||||||
 | 
					            "or": [
 | 
				
			||||||
 | 
					              "disused:amenity=charging_station",
 | 
				
			||||||
 | 
					              "operational_status=broken"
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          "then": "close:#c22;"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "if": {
 | 
				
			||||||
 | 
					            "or": [
 | 
				
			||||||
 | 
					              "proposed:amenity=charging_station",
 | 
				
			||||||
 | 
					              "planned:amenity=charging_station"
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          "then": "./assets/layers/charging_station/under_construction.svg"
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        {
 | 
				
			||||||
 | 
					          "if": {
 | 
				
			||||||
 | 
					            "and": [
 | 
				
			||||||
 | 
					              "bicycle=yes",
 | 
				
			||||||
 | 
					              {
 | 
				
			||||||
 | 
					                "or": [
 | 
				
			||||||
 | 
					                  "motorcar=yes",
 | 
				
			||||||
 | 
					                  "car=yes"
 | 
				
			||||||
 | 
					                ]
 | 
				
			||||||
 | 
					              }
 | 
				
			||||||
 | 
					            ]
 | 
				
			||||||
 | 
					          },
 | 
				
			||||||
 | 
					          "then": "circle:#fff;./assets/themes/charging_stations/car.svg"
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "anchor": "bottom",
 | 
				
			||||||
 | 
					      "iconSize": "50,50"
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
 | 
					  "presets": [
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "tags": [
 | 
				
			||||||
 | 
					        "amenity=charging_station",
 | 
				
			||||||
 | 
					        "motorcar=no",
 | 
				
			||||||
 | 
					        "bicycle=yes"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "title": {
 | 
				
			||||||
 | 
					        "en": "charging station for electrical bikes",
 | 
				
			||||||
 | 
					        "nl": "oplaadpunt voor elektrische fietsen",
 | 
				
			||||||
 | 
					        "de": "Ladestation für Elektrofahrräder"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					      "tags": [
 | 
				
			||||||
 | 
					        "amenity=charging_station",
 | 
				
			||||||
 | 
					        "motorcar=yes",
 | 
				
			||||||
 | 
					        "bicycle=no"
 | 
				
			||||||
 | 
					      ],
 | 
				
			||||||
 | 
					      "title": {
 | 
				
			||||||
 | 
					        "en": "charging station for cars",
 | 
				
			||||||
 | 
					        "nl": "oplaadstation voor elektrische auto's",
 | 
				
			||||||
 | 
					        "de": "Ladestation für Autos"
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  ],
 | 
				
			||||||
  "filter": [
 | 
					  "filter": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "id": "vehicle-type",
 | 
					      "id": "vehicle-type",
 | 
				
			||||||
| 
						 | 
					@ -2714,19 +2715,6 @@
 | 
				
			||||||
      ]
 | 
					      ]
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "deletion": {
 | 
					 | 
				
			||||||
    "softDeletionTags": {
 | 
					 | 
				
			||||||
      "and": [
 | 
					 | 
				
			||||||
        "amenity=",
 | 
					 | 
				
			||||||
        "disused:amenity=charging_station"
 | 
					 | 
				
			||||||
      ]
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "neededChangesets": 10
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "allowMove": {
 | 
					 | 
				
			||||||
    "enableRelocation": false,
 | 
					 | 
				
			||||||
    "enableImproveAccuracy": true
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "units": [
 | 
					  "units": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "maxstay": {
 | 
					      "maxstay": {
 | 
				
			||||||
| 
						 | 
					@ -2885,5 +2873,17 @@
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "#": "no-question-hint-check"
 | 
					  "allowMove": {
 | 
				
			||||||
 | 
					    "enableRelocation": false,
 | 
				
			||||||
 | 
					    "enableImproveAccuracy": true
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "deletion": {
 | 
				
			||||||
 | 
					    "softDeletionTags": {
 | 
				
			||||||
 | 
					      "and": [
 | 
				
			||||||
 | 
					        "amenity=",
 | 
				
			||||||
 | 
					        "disused:amenity=charging_station"
 | 
				
			||||||
 | 
					      ]
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    "neededChangesets": 10
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -3,14 +3,17 @@
 | 
				
			||||||
  "title": {
 | 
					  "title": {
 | 
				
			||||||
    "en": "Changes made with MapComplete"
 | 
					    "en": "Changes made with MapComplete"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "description": {
 | 
					 | 
				
			||||||
    "en": "This maps shows all the changes made with MapComplete"
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  "shortDescription": {
 | 
					  "shortDescription": {
 | 
				
			||||||
    "en": "Shows changes made by MapComplete"
 | 
					    "en": "Shows changes made by MapComplete"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  "description": {
 | 
				
			||||||
 | 
					    "en": "This maps shows all the changes made with MapComplete"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  "icon": "./assets/svg/logo.svg",
 | 
					  "icon": "./assets/svg/logo.svg",
 | 
				
			||||||
  "hideFromOverview": true,
 | 
					  "hideFromOverview": true,
 | 
				
			||||||
 | 
					  "startLat": 0,
 | 
				
			||||||
 | 
					  "startLon": 0,
 | 
				
			||||||
 | 
					  "startZoom": 1,
 | 
				
			||||||
  "layers": [
 | 
					  "layers": [
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      "id": "mapcomplete-changes",
 | 
					      "id": "mapcomplete-changes",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -845,10 +845,10 @@
 | 
				
			||||||
                        "then": "Diese Bank ist zweiseitig und teilt sich die Rückenlehne"
 | 
					                        "then": "Diese Bank ist zweiseitig und teilt sich die Rückenlehne"
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "1": {
 | 
					                    "1": {
 | 
				
			||||||
                        "then": "Die Sitzbank hat eine Rückenlehne"
 | 
					                        "then": "Diese Sitzbank hat eine Rückenlehne"
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "2": {
 | 
					                    "2": {
 | 
				
			||||||
                        "then": "Die Sitzbank hat <b>keine</b> Rückenlehne"
 | 
					                        "then": "Diese Sitzbank hat <b>keine</b> Rückenlehne"
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Hat diese Sitzbank eine Rückenlehne?"
 | 
					                "question": "Hat diese Sitzbank eine Rückenlehne?"
 | 
				
			||||||
| 
						 | 
					@ -942,7 +942,7 @@
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Wie viele Sitzplätze hat diese Bank?",
 | 
					                "question": "Wie viele Sitzplätze hat diese Bank?",
 | 
				
			||||||
                "render": "Die Sitzbank hat {seats} Sitzplätze"
 | 
					                "render": "Diese Sitzbank hat {seats} Sitzplätze"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "bench-survey:date": {
 | 
					            "bench-survey:date": {
 | 
				
			||||||
                "mappings": {
 | 
					                "mappings": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -393,27 +393,6 @@
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "What is the purpose of the animal shelter?"
 | 
					                "question": "What is the purpose of the animal shelter?"
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "boarded_animals": {
 | 
					 | 
				
			||||||
                "mappings": {
 | 
					 | 
				
			||||||
                    "0": {
 | 
					 | 
				
			||||||
                        "then": "Dogs are kept here"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "1": {
 | 
					 | 
				
			||||||
                        "then": "Cats are kept here"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "2": {
 | 
					 | 
				
			||||||
                        "then": "Horses are kept here"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "3": {
 | 
					 | 
				
			||||||
                        "then": "Birds are kept here"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "4": {
 | 
					 | 
				
			||||||
                        "then": "Wild animals are kept here"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "Which animals are accepted here?",
 | 
					 | 
				
			||||||
                "render": "{animal_shelter} is kept here"
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": {
 | 
					        "title": {
 | 
				
			||||||
| 
						 | 
					@ -866,10 +845,10 @@
 | 
				
			||||||
                        "then": "This bench is two-sided and shares the backrest"
 | 
					                        "then": "This bench is two-sided and shares the backrest"
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "1": {
 | 
					                    "1": {
 | 
				
			||||||
                        "then": "Does have a backrest"
 | 
					                        "then": "This bench does have a backrest"
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "2": {
 | 
					                    "2": {
 | 
				
			||||||
                        "then": "Does <b>not</b> have a backrest"
 | 
					                        "then": "This bench does <b>not</b> have a backrest"
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Does this bench have a backrest?"
 | 
					                "question": "Does this bench have a backrest?"
 | 
				
			||||||
| 
						 | 
					@ -914,12 +893,12 @@
 | 
				
			||||||
                        "then": "This bench does not have an inscription"
 | 
					                        "then": "This bench does not have an inscription"
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "1": {
 | 
					                    "1": {
 | 
				
			||||||
                        "then": "This bench does <span class='subtle'>(probably)</span> not have an inscription"
 | 
					                        "then": "This bench <span class='subtle'>(probably)</span> does not not have an inscription"
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Does this bench have an inscription?",
 | 
					                "question": "Does this bench have an inscription?",
 | 
				
			||||||
                "questionHint": "E.g. on a mounted plaque, in the backrest, …",
 | 
					                "questionHint": "E.g. on a mounted plaque, in the backrest, …",
 | 
				
			||||||
                "render": "This bench does have the following inscription:<br/><p><i>{inscription}</i></p>"
 | 
					                "render": "This bench has the following inscription:<br/><p><i>{inscription}</i></p>"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "bench-material": {
 | 
					            "bench-material": {
 | 
				
			||||||
                "mappings": {
 | 
					                "mappings": {
 | 
				
			||||||
| 
						 | 
					@ -963,7 +942,7 @@
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "How many seats does this bench have?",
 | 
					                "question": "How many seats does this bench have?",
 | 
				
			||||||
                "render": "{seats} seats"
 | 
					                "render": "This bench has {seats} seats"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "bench-survey:date": {
 | 
					            "bench-survey:date": {
 | 
				
			||||||
                "mappings": {
 | 
					                "mappings": {
 | 
				
			||||||
| 
						 | 
					@ -1511,18 +1490,10 @@
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Are these bicycle parkings free to use?"
 | 
					                "question": "Are these bicycle parkings free to use?"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "maxstay": {
 | 
					 | 
				
			||||||
                "question": "What is the maximum allowed parking duration?",
 | 
					 | 
				
			||||||
                "questionHint": "If the bicycle is parked for a longer amount, it might be removed by the operator",
 | 
					 | 
				
			||||||
                "render": "A bike can be parked here for at most {canonical(maxstay)}"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "operator": {
 | 
					            "operator": {
 | 
				
			||||||
                "question": "Who maintains this bicycle parking?",
 | 
					                "question": "Who maintains this bicycle parking?",
 | 
				
			||||||
                "render": "This bicycle parking is maintained by {operator}"
 | 
					                "render": "This bicycle parking is maintained by {operator}"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "operator_email": {
 | 
					 | 
				
			||||||
                "question": "What is the email address of the operator of this bicycle parking?"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "operator_phone": {
 | 
					            "operator_phone": {
 | 
				
			||||||
                "question": "What is the phone number of the operator of this bicycle parking?",
 | 
					                "question": "What is the phone number of the operator of this bicycle parking?",
 | 
				
			||||||
                "questionHint": "One might be able to call this number in case of problems, e.g. to remove unmaintained bicycles"
 | 
					                "questionHint": "One might be able to call this number in case of problems, e.g. to remove unmaintained bicycles"
 | 
				
			||||||
| 
						 | 
					@ -2190,9 +2161,6 @@
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "16": {
 | 
					                    "16": {
 | 
				
			||||||
                        "question": "Has a <div style='display: inline-block'><b><b>Bosch Active Connect with 5 pins</b> and cable</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div> connector"
 | 
					                        "question": "Has a <div style='display: inline-block'><b><b>Bosch Active Connect with 5 pins</b> and cable</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div> connector"
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "17": {
 | 
					 | 
				
			||||||
                        "question": "Has a <div style='display: inline-block'><b><b>BS1363</b> (Type G)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bs1363.svg'/></div> connector"
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -2337,12 +2305,6 @@
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "31": {
 | 
					                    "31": {
 | 
				
			||||||
                        "then": "<b>Bosch Active Connect with 5 pins</b> and cable"
 | 
					                        "then": "<b>Bosch Active Connect with 5 pins</b> and cable"
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "32": {
 | 
					 | 
				
			||||||
                        "then": "<b>BS1363</b> (Type G)"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "33": {
 | 
					 | 
				
			||||||
                        "then": "<b>BS1363</b> (Type G)"
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Which charging connections are available here?"
 | 
					                "question": "Which charging connections are available here?"
 | 
				
			||||||
| 
						 | 
					@ -2577,9 +2539,6 @@
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        "15": {
 | 
					                        "15": {
 | 
				
			||||||
                            "2": "<b>Bosch Active Connect with 5 pins</b> and cable"
 | 
					                            "2": "<b>Bosch Active Connect with 5 pins</b> and cable"
 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "16": {
 | 
					 | 
				
			||||||
                            "2": "<b>BS1363</b> (Type G)"
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -5154,22 +5113,6 @@
 | 
				
			||||||
            "render": "Restaurant"
 | 
					            "render": "Restaurant"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "food_courts": {
 | 
					 | 
				
			||||||
        "description": "Food courts with a variety of food options.",
 | 
					 | 
				
			||||||
        "name": "Food Courts",
 | 
					 | 
				
			||||||
        "tagRenderings": {
 | 
					 | 
				
			||||||
            "name": {
 | 
					 | 
				
			||||||
                "freeform": {
 | 
					 | 
				
			||||||
                    "placeholder": "Name of the food court"
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "What is the name of this food court?",
 | 
					 | 
				
			||||||
                "render": "This food court is called <b>{name}</b>."
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "title": {
 | 
					 | 
				
			||||||
            "render": "Food Court"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "ghost_bike": {
 | 
					    "ghost_bike": {
 | 
				
			||||||
        "description": "A layer showing memorials for cyclists, killed in road accidents",
 | 
					        "description": "A layer showing memorials for cyclists, killed in road accidents",
 | 
				
			||||||
        "name": "Ghost bikes",
 | 
					        "name": "Ghost bikes",
 | 
				
			||||||
| 
						 | 
					@ -6682,74 +6625,6 @@
 | 
				
			||||||
            "render": "OSM Community Index"
 | 
					            "render": "OSM Community Index"
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "outdoor_seating": {
 | 
					 | 
				
			||||||
        "description": "Outdoor seating areas, usually located near cafes and restaurants.",
 | 
					 | 
				
			||||||
        "name": "Outdoor Seating",
 | 
					 | 
				
			||||||
        "tagRenderings": {
 | 
					 | 
				
			||||||
            "access": {
 | 
					 | 
				
			||||||
                "mappings": {
 | 
					 | 
				
			||||||
                    "0": {
 | 
					 | 
				
			||||||
                        "then": "Anyone can use this outdoor seating area."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "1": {
 | 
					 | 
				
			||||||
                        "then": "Only customers can use this outdoor seating area."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "2": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is private."
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "Who can use this outdoor seating area?"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "covered": {
 | 
					 | 
				
			||||||
                "mappings": {
 | 
					 | 
				
			||||||
                    "0": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is covered."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "1": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is not covered."
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "Is this outdoor seating area covered?"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "heating": {
 | 
					 | 
				
			||||||
                "mappings": {
 | 
					 | 
				
			||||||
                    "0": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is heated."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "1": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is not heated."
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "Is this outdoor seating area heated?"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "seasonal": {
 | 
					 | 
				
			||||||
                "mappings": {
 | 
					 | 
				
			||||||
                    "0": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available all year round."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "1": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available in spring."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "2": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available in summer."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "3": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available in autumn."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "4": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available in winter."
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "5": {
 | 
					 | 
				
			||||||
                        "then": "This outdoor seating area is available in the dry season."
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                },
 | 
					 | 
				
			||||||
                "question": "Is this outdoor seating area seasonal?"
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        },
 | 
					 | 
				
			||||||
        "title": {
 | 
					 | 
				
			||||||
            "render": "Outdoor Seating area"
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    },
 | 
					 | 
				
			||||||
    "parcel_lockers": {
 | 
					    "parcel_lockers": {
 | 
				
			||||||
        "description": "Layer showing parcel lockers for collecting and sending parcels.",
 | 
					        "description": "Layer showing parcel lockers for collecting and sending parcels.",
 | 
				
			||||||
        "name": "Parcel Lockers",
 | 
					        "name": "Parcel Lockers",
 | 
				
			||||||
| 
						 | 
					@ -9068,10 +8943,6 @@
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "tagRenderings": {
 | 
					        "tagRenderings": {
 | 
				
			||||||
            "camera_direction": {
 | 
					 | 
				
			||||||
                "question": "In which geographical direction does this camera film?",
 | 
					 | 
				
			||||||
                "render": "Films to a compass heading of {direction}"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "maxspeed": {
 | 
					            "maxspeed": {
 | 
				
			||||||
                "freeform": {
 | 
					                "freeform": {
 | 
				
			||||||
                    "placeholder": "Maximum speed allowed"
 | 
					                    "placeholder": "Maximum speed allowed"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1227,18 +1227,10 @@
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Is deze fietsenstalling gratis te gebruiken?"
 | 
					                "question": "Is deze fietsenstalling gratis te gebruiken?"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "maxstay": {
 | 
					 | 
				
			||||||
                "question": "Wat is de toegestane, maximale parkeerduur?",
 | 
					 | 
				
			||||||
                "questionHint": "Indien een fiets langer geparkeerd staat, kan deze verwijderd worden door de beheerder",
 | 
					 | 
				
			||||||
                "render": "Een fiets mag hier maximaal {canonical(maxstay)} parkeren"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "operator": {
 | 
					            "operator": {
 | 
				
			||||||
                "question": "Wie beheert deze fietsenstalling?",
 | 
					                "question": "Wie beheert deze fietsenstalling?",
 | 
				
			||||||
                "render": "Deze fietsenstalling wordt beheerd door {operator}"
 | 
					                "render": "Deze fietsenstalling wordt beheerd door {operator}"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "operator_email": {
 | 
					 | 
				
			||||||
                "question": "Wat is het emailadres van de beheerder van deze parking?"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "operator_phone": {
 | 
					            "operator_phone": {
 | 
				
			||||||
                "question": "Wat is het telefoonnummer van de operator van deze fietsenstalling?",
 | 
					                "question": "Wat is het telefoonnummer van de operator van deze fietsenstalling?",
 | 
				
			||||||
                "questionHint": "Men kan dit nummer bellen om bv. fietswrakken of defecten te melden"
 | 
					                "questionHint": "Men kan dit nummer bellen om bv. fietswrakken of defecten te melden"
 | 
				
			||||||
| 
						 | 
					@ -1882,9 +1874,6 @@
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "16": {
 | 
					                    "16": {
 | 
				
			||||||
                        "question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
 | 
					                        "question": "Heeft een <div style='display: inline-block'><b><b>Bosch Active Connect met 5 pinnen</b> aan een kabel</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bosch-5pin.svg'/></div>"
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "17": {
 | 
					 | 
				
			||||||
                        "question": "Heeft een <div style='display: inline-block'><b><b>BS1363</b> (VK 3-pin)</b> <img style='width:1rem; display: inline-block' src='./assets/layers/charging_station/bs1363.svg'/></div>"
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -2029,12 +2018,6 @@
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
                    "31": {
 | 
					                    "31": {
 | 
				
			||||||
                        "then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
 | 
					                        "then": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "32": {
 | 
					 | 
				
			||||||
                        "then": "<b>BS1363</b> (VK 3-pin)"
 | 
					 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "33": {
 | 
					 | 
				
			||||||
                        "then": "<b>BS1363</b> (VK 3-pin)"
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "question": "Welke aansluitingen zijn hier beschikbaar?"
 | 
					                "question": "Welke aansluitingen zijn hier beschikbaar?"
 | 
				
			||||||
| 
						 | 
					@ -2269,9 +2252,6 @@
 | 
				
			||||||
                        },
 | 
					                        },
 | 
				
			||||||
                        "15": {
 | 
					                        "15": {
 | 
				
			||||||
                            "2": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
 | 
					                            "2": "<b>Bosch Active Connect met 5 pinnen</b> aan een kabel"
 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "16": {
 | 
					 | 
				
			||||||
                            "2": "<b>BS1363</b> (VK 3-pin)"
 | 
					 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
| 
						 | 
					@ -7349,10 +7329,6 @@
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "tagRenderings": {
 | 
					        "tagRenderings": {
 | 
				
			||||||
            "camera_direction": {
 | 
					 | 
				
			||||||
                "question": "In welke geografische richting filmt deze camera?",
 | 
					 | 
				
			||||||
                "render": "Filmt in kompasrichting {direction}"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "maxspeed": {
 | 
					            "maxspeed": {
 | 
				
			||||||
                "freeform": {
 | 
					                "freeform": {
 | 
				
			||||||
                    "placeholder": "Maximum toegestane snelheid"
 | 
					                    "placeholder": "Maximum toegestane snelheid"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -899,6 +899,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "En aquest mapa, es mostren llocs públics accessibles per a cadira de rodes i es poden afegir fàcilment",
 | 
					        "description": "En aquest mapa, es mostren llocs públics accessibles per a cadira de rodes i es poden afegir fàcilment",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Estadístiques"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Importar"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Afegiu totes les etiquetes suggerides"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -941,33 +968,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Places d'aparcament per a minusvàlids"
 | 
					                    "name": "Places d'aparcament per a minusvàlids"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Estadístiques"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Importar"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Afegiu totes les etiquetes suggerides"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Sobre rodes"
 | 
					        "title": "Sobre rodes"
 | 
				
			||||||
| 
						 | 
					@ -1128,10 +1128,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Veure, editar i afegir detalls a una estació de tren",
 | 
					        "description": "Veure, editar i afegir detalls a una estació de tren",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Capa que mostra les estacions de tren",
 | 
					 | 
				
			||||||
                "name": "Estació de tren"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Pantalles que mostren els trens que sortiran de l'estació",
 | 
					                "description": "Pantalles que mostren els trens que sortiran de l'estació",
 | 
				
			||||||
                "name": "Taulers de sortides",
 | 
					                "name": "Taulers de sortides",
 | 
				
			||||||
| 
						 | 
					@ -1163,6 +1159,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Tauler de sortides"
 | 
					                    "render": "Tauler de sortides"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Capa que mostra les estacions de tren",
 | 
				
			||||||
 | 
					                "name": "Estació de tren"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Estacions de tren"
 | 
					        "title": "Estacions de tren"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -906,6 +906,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "Na této mapě jsou zobrazena veřejně přístupná místa pro vozíčkáře, a lze je také snadno přidat",
 | 
					        "description": "Na této mapě jsou zobrazena veřejně přístupná místa pro vozíčkáře, a lze je také snadno přidat",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistiky"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Dovoz"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Přidat všechny navrhované značky"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -948,33 +975,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Parkovací místa pro osoby se zdravotním postižením"
 | 
					                    "name": "Parkovací místa pro osoby se zdravotním postižením"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistiky"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Dovoz"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Přidat všechny navrhované značky"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Na kolečkách"
 | 
					        "title": "Na kolečkách"
 | 
				
			||||||
| 
						 | 
					@ -1135,10 +1135,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Zobrazení, úprava a přidání podrobností o vlakovém nádraží",
 | 
					        "description": "Zobrazení, úprava a přidání podrobností o vlakovém nádraží",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Vrstva zobrazující vlaková nádraží",
 | 
					 | 
				
			||||||
                "name": "Vlaková nádraží"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Zobrazuje vlaky odjíždějící z této stanice",
 | 
					                "description": "Zobrazuje vlaky odjíždějící z této stanice",
 | 
				
			||||||
                "name": "Odjezdové tabule",
 | 
					                "name": "Odjezdové tabule",
 | 
				
			||||||
| 
						 | 
					@ -1170,6 +1166,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Odjezdová tabule"
 | 
					                    "render": "Odjezdová tabule"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Vrstva zobrazující vlaková nádraží",
 | 
				
			||||||
 | 
					                "name": "Vlaková nádraží"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Vlaková nádraží"
 | 
					        "title": "Vlaková nádraží"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -631,6 +631,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "På dette kort vises steder, der er offentligt tilgængelige for kørestolsbrugere, og de kan nemt tilføjes",
 | 
					        "description": "På dette kort vises steder, der er offentligt tilgængelige for kørestolsbrugere, og de kan nemt tilføjes",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistikker"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Importere"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Tilføj alle de foreslåede tags"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -668,33 +695,6 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistikker"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Importere"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Tilføj alle de foreslåede tags"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -975,6 +975,133 @@
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Bordsteine und Überwege"
 | 
					        "title": "Bordsteine und Überwege"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "mapcomplete-changes": {
 | 
				
			||||||
 | 
					        "description": "Diese Karte zeigt alle mit MapComplete vorgenommenen Änderungen",
 | 
				
			||||||
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "0": {
 | 
				
			||||||
 | 
					                "description": "Alle MapComplete-Änderungen anzeigen",
 | 
				
			||||||
 | 
					                "filter": {
 | 
				
			||||||
 | 
					                    "0": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Themenname enthält {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "1": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Themename enthält <b>not</b> {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "10": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Etymologie-Thema ausschließen"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "2": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Erstellt vom Mitwirkenden {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "3": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "<b>Nicht</b> erstellt von Mitwirkendem {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "4": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Erstellt vor {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "5": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Erstellt nach {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "6": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Benutzersprache (ISO-Code) {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "7": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Erstellt mit Host {search}"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "8": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Änderungssatz hat mindestens ein Bild hinzugefügt"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "9": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "GRB-Thema ausschließen"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "name": "Zentrum der Änderungssätze",
 | 
				
			||||||
 | 
					                "tagRenderings": {
 | 
				
			||||||
 | 
					                    "contributor": {
 | 
				
			||||||
 | 
					                        "question": "Welcher Mitwirkende hat diese Änderung vorgenommen?",
 | 
				
			||||||
 | 
					                        "render": "Änderung vorgenommen von <a href='https://openstreetmap.org/user/{user}' target='_blank'>{user}</a>"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "host": {
 | 
				
			||||||
 | 
					                        "question": "Über welchen Host (Webseite) wurde diese Änderung vorgenommen?",
 | 
				
			||||||
 | 
					                        "render": "Änderung über <a href='{host}'>{host}</a>"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "locale": {
 | 
				
			||||||
 | 
					                        "question": "In welcher Benutzersprache wurde die Änderung vorgenommen?",
 | 
				
			||||||
 | 
					                        "render": "Benutzersprache {locale}"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "show_changeset_id": {
 | 
				
			||||||
 | 
					                        "render": "Änderungssatz <a href='https://openstreetmap.org/changeset/{id}' target='_blank'>{id}</a>"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "theme-id": {
 | 
				
			||||||
 | 
					                        "question": "Welches Thema wurde für die Änderung verwendet?",
 | 
				
			||||||
 | 
					                        "render": "Geändert mit Thema <a href='https://mapcomplete.osm.be/{theme}'>{theme}</a>"
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
 | 
					                    "version": {
 | 
				
			||||||
 | 
					                        "question": "Mit welcher MapComplete Version wurde die Änderung vorgenommen?",
 | 
				
			||||||
 | 
					                        "render": "Erstellt mit {editor}"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					                "title": {
 | 
				
			||||||
 | 
					                    "render": "Änderungssatz für {theme}"
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "1": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "tagRenderings+": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": "Weitere Statistiken gibt es <a href='https://github.com/pietervdvn/MapComplete/tree/develop/Docs/Tools/graphs' target='_blank'>hier</a>"
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					        "shortDescription": "Änderungen von MapComplete anzeigen",
 | 
				
			||||||
 | 
					        "title": "Änderungen mit MapComplete"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "maproulette": {
 | 
					    "maproulette": {
 | 
				
			||||||
        "description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.",
 | 
					        "description": "Thema mit MapRoulette-Aufgaben, die Sie suchen, filtern und beheben können.",
 | 
				
			||||||
        "title": "MapRoulette-Aufgaben"
 | 
					        "title": "MapRoulette-Aufgaben"
 | 
				
			||||||
| 
						 | 
					@ -1010,6 +1137,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
 | 
					        "description": "Auf dieser Karte können Sie öffentlich zugängliche Orte für Rollstuhlfahrer ansehen, bearbeiten oder hinzufügen",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistik"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Import"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Alle vorgeschlagenen Tags hinzufügen"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -1052,33 +1206,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Barrierefreie Parkplätze"
 | 
					                    "name": "Barrierefreie Parkplätze"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistik"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Import"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Alle vorgeschlagenen Tags hinzufügen"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Auf Rädern"
 | 
					        "title": "Auf Rädern"
 | 
				
			||||||
| 
						 | 
					@ -1320,10 +1447,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
 | 
					        "description": "Bahnhofsdetails ansehen, bearbeiten und hinzufügen",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Ebene mit Bahnhöfen",
 | 
					 | 
				
			||||||
                "name": "Bahnhöfe"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
 | 
					                "description": "Anzeigen der Züge, die von diesem Bahnhof abfahren",
 | 
				
			||||||
                "name": "Abfahrtstafeln",
 | 
					                "name": "Abfahrtstafeln",
 | 
				
			||||||
| 
						 | 
					@ -1355,6 +1478,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Abfahrtstafel"
 | 
					                    "render": "Abfahrtstafel"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Ebene mit Bahnhöfen",
 | 
				
			||||||
 | 
					                "name": "Bahnhöfe"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Bahnhöfe"
 | 
					        "title": "Bahnhöfe"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -676,7 +676,7 @@
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "5": {
 | 
					            "5": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "=name": "Toursistic places without etymology information"
 | 
					                    "=name": "Touristic places without etymology information"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            "6": {
 | 
					            "6": {
 | 
				
			||||||
| 
						 | 
					@ -995,6 +995,13 @@
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    },
 | 
					                    },
 | 
				
			||||||
 | 
					                    "10": {
 | 
				
			||||||
 | 
					                        "options": {
 | 
				
			||||||
 | 
					                            "0": {
 | 
				
			||||||
 | 
					                                "question": "Exclude etymology theme"
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    },
 | 
				
			||||||
                    "2": {
 | 
					                    "2": {
 | 
				
			||||||
                        "options": {
 | 
					                        "options": {
 | 
				
			||||||
                            "0": {
 | 
					                            "0": {
 | 
				
			||||||
| 
						 | 
					@ -1050,13 +1057,6 @@
 | 
				
			||||||
                                "question": "Exclude GRB theme"
 | 
					                                "question": "Exclude GRB theme"
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    },
 | 
					 | 
				
			||||||
                    "10": {
 | 
					 | 
				
			||||||
                        "options": {
 | 
					 | 
				
			||||||
                            "0": {
 | 
					 | 
				
			||||||
                                "question": "Exclude etymology theme"
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
                "name": "Changeset centers",
 | 
					                "name": "Changeset centers",
 | 
				
			||||||
| 
						 | 
					@ -1137,6 +1137,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "On this map, publicly weelchair accessible places are shown and can be easily added",
 | 
					        "description": "On this map, publicly weelchair accessible places are shown and can be easily added",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistics"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Import"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Add all the suggested tags"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -1179,33 +1206,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Disabled parking spaces"
 | 
					                    "name": "Disabled parking spaces"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistics"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Import"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Add all the suggested tags"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "OnWheels"
 | 
					        "title": "OnWheels"
 | 
				
			||||||
| 
						 | 
					@ -1447,10 +1447,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "View, edit and add details to a train station",
 | 
					        "description": "View, edit and add details to a train station",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Layer showing train stations",
 | 
					 | 
				
			||||||
                "name": "Train Stations"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Displays showing the trains that will leave from this station",
 | 
					                "description": "Displays showing the trains that will leave from this station",
 | 
				
			||||||
                "name": "Departures boards",
 | 
					                "name": "Departures boards",
 | 
				
			||||||
| 
						 | 
					@ -1482,6 +1478,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Departures board"
 | 
					                    "render": "Departures board"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Layer showing train stations",
 | 
				
			||||||
 | 
					                "name": "Train Stations"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Train Stations"
 | 
					        "title": "Train Stations"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -956,6 +956,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente",
 | 
					        "description": "En este mapa se muestran los lugares accesibles al público en silla de ruedas, que pueden añadirse fácilmente",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Estadísticas"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Importar"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Añadir todas las etiquetas sugeridas"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -998,33 +1025,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Plazas de aparcamiento para discapacitados"
 | 
					                    "name": "Plazas de aparcamiento para discapacitados"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Estadísticas"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Importar"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Añadir todas las etiquetas sugeridas"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Sobre ruedas"
 | 
					        "title": "Sobre ruedas"
 | 
				
			||||||
| 
						 | 
					@ -1240,10 +1240,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Ver, editar y añadir detalles a una estación de tren",
 | 
					        "description": "Ver, editar y añadir detalles a una estación de tren",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Capa que muestra las estaciones de tren",
 | 
					 | 
				
			||||||
                "name": "Estación de Tren"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Pantallas que muestran los trenes que saldrán de esta estación",
 | 
					                "description": "Pantallas que muestran los trenes que saldrán de esta estación",
 | 
				
			||||||
                "name": "Tableros de salidas",
 | 
					                "name": "Tableros de salidas",
 | 
				
			||||||
| 
						 | 
					@ -1275,6 +1271,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Tablero de salidas"
 | 
					                    "render": "Tablero de salidas"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Capa que muestra las estaciones de tren",
 | 
				
			||||||
 | 
					                "name": "Estación de Tren"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Estaciones de tren"
 | 
					        "title": "Estaciones de tren"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -93,6 +93,9 @@
 | 
				
			||||||
        "shortDescription": "Carte des bancs",
 | 
					        "shortDescription": "Carte des bancs",
 | 
				
			||||||
        "title": "Bancs"
 | 
					        "title": "Bancs"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 | 
					    "bicycle_parkings": {
 | 
				
			||||||
 | 
					        "title": "Stationnement vélo"
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
    "bicycle_rental": {
 | 
					    "bicycle_rental": {
 | 
				
			||||||
        "description": "Vous trouverez sur cette carte toutes les stations de location de vélo telles qu'elles sont référencées dans OpenStreetMap",
 | 
					        "description": "Vous trouverez sur cette carte toutes les stations de location de vélo telles qu'elles sont référencées dans OpenStreetMap",
 | 
				
			||||||
        "shortDescription": "Une carte avec des stations et magasins de location de vélos",
 | 
					        "shortDescription": "Une carte avec des stations et magasins de location de vélos",
 | 
				
			||||||
| 
						 | 
					@ -861,6 +864,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "Sur cette carte nous pouvons voir et ajouter les différents endroits publiques accessibles aux chaises roulantes",
 | 
					        "description": "Sur cette carte nous pouvons voir et ajouter les différents endroits publiques accessibles aux chaises roulantes",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistiques"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Importation"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Ajouter tous les attributs suggérés"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -903,33 +933,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Places de stationnement pour personnes handicapées"
 | 
					                    "name": "Places de stationnement pour personnes handicapées"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistiques"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Importation"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Ajouter tous les attributs suggérés"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "OnWheels"
 | 
					        "title": "OnWheels"
 | 
				
			||||||
| 
						 | 
					@ -1090,10 +1093,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Voir, modifier et ajouter des détails à une gare ferroviaire",
 | 
					        "description": "Voir, modifier et ajouter des détails à une gare ferroviaire",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Couche montrant les gares",
 | 
					 | 
				
			||||||
                "name": "Gares ferroviaires"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Panneau affichant les trains au départ depuis cette gare",
 | 
					                "description": "Panneau affichant les trains au départ depuis cette gare",
 | 
				
			||||||
                "name": "Panneaux des départs",
 | 
					                "name": "Panneaux des départs",
 | 
				
			||||||
| 
						 | 
					@ -1125,6 +1124,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Tableau des départs"
 | 
					                    "render": "Tableau des départs"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Couche montrant les gares",
 | 
				
			||||||
 | 
					                "name": "Gares ferroviaires"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Gares ferroviaires"
 | 
					        "title": "Gares ferroviaires"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -494,19 +494,6 @@
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "4": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "filter": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "options": {
 | 
					 | 
				
			||||||
                                "1": {
 | 
					 | 
				
			||||||
                                    "question": "Uten breddeinfo"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					            "19": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "=title": {
 | 
					                    "=title": {
 | 
				
			||||||
| 
						 | 
					@ -533,6 +520,19 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "4": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "filter": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "options": {
 | 
				
			||||||
 | 
					                                "1": {
 | 
				
			||||||
 | 
					                                    "question": "Uten breddeinfo"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "På hjul"
 | 
					        "title": "På hjul"
 | 
				
			||||||
| 
						 | 
					@ -626,10 +626,6 @@
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Lag som viser togstasjoner",
 | 
					 | 
				
			||||||
                "name": "Togstasjoner"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "tagRenderings": {
 | 
					                "tagRenderings": {
 | 
				
			||||||
                    "type": {
 | 
					                    "type": {
 | 
				
			||||||
| 
						 | 
					@ -640,6 +636,10 @@
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Lag som viser togstasjoner",
 | 
				
			||||||
 | 
					                "name": "Togstasjoner"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Togstasjoner"
 | 
					        "title": "Togstasjoner"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -908,6 +908,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "Op deze kaart kan je informatie rond rolstoeltoegankelijkheid zien, zoals toegangsdeuren met hun breedte en drempelhoogte, toiletten met toegankelijkheidsinformatie, recepties maar ook winkels, cafés en restaurants.",
 | 
					        "description": "Op deze kaart kan je informatie rond rolstoeltoegankelijkheid zien, zoals toegangsdeuren met hun breedte en drempelhoogte, toiletten met toegankelijkheidsinformatie, recepties maar ook winkels, cafés en restaurants.",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statistieken"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Importeren"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Voeg alle gesuggereerde tags toe"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -950,33 +977,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Parkeerplaatsen voor personen met een beperking"
 | 
					                    "name": "Parkeerplaatsen voor personen met een beperking"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statistieken"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Importeren"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Voeg alle gesuggereerde tags toe"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "OnWheels"
 | 
					        "title": "OnWheels"
 | 
				
			||||||
| 
						 | 
					@ -1183,10 +1183,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Bekijk, bewerk en voeg details to aan een treinstation",
 | 
					        "description": "Bekijk, bewerk en voeg details to aan een treinstation",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Laag met treinstations",
 | 
					 | 
				
			||||||
                "name": "Treinstations"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Schermen die treinen tonen die van dit station vertrekken",
 | 
					                "description": "Schermen die treinen tonen die van dit station vertrekken",
 | 
				
			||||||
                "name": "Vertrektijdenborden",
 | 
					                "name": "Vertrektijdenborden",
 | 
				
			||||||
| 
						 | 
					@ -1218,6 +1214,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Vertrektijdenbord"
 | 
					                    "render": "Vertrektijdenbord"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Laag met treinstations",
 | 
				
			||||||
 | 
					                "name": "Treinstations"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Treinstations"
 | 
					        "title": "Treinstations"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -875,6 +875,33 @@
 | 
				
			||||||
    "onwheels": {
 | 
					    "onwheels": {
 | 
				
			||||||
        "description": "Na tej mapie pokazane są miejsca publicznie dostępne dla wózków inwalidzkich, które można łatwo dodać",
 | 
					        "description": "Na tej mapie pokazane są miejsca publicznie dostępne dla wózków inwalidzkich, które można łatwo dodać",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
 | 
					            "19": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "=title": {
 | 
				
			||||||
 | 
					                        "render": "Statystyki"
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "20": {
 | 
				
			||||||
 | 
					                "override": {
 | 
				
			||||||
 | 
					                    "+tagRenderings": {
 | 
				
			||||||
 | 
					                        "0": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "text": "Import"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        },
 | 
				
			||||||
 | 
					                        "1": {
 | 
				
			||||||
 | 
					                            "render": {
 | 
				
			||||||
 | 
					                                "special": {
 | 
				
			||||||
 | 
					                                    "message": "Dodaj wszystkie sugerowane znaczniki"
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
 | 
					                            }
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
            "4": {
 | 
					            "4": {
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "filter": {
 | 
					                    "filter": {
 | 
				
			||||||
| 
						 | 
					@ -917,33 +944,6 @@
 | 
				
			||||||
                "override": {
 | 
					                "override": {
 | 
				
			||||||
                    "name": "Miejsca parkingowe dla niepełnosprawnych"
 | 
					                    "name": "Miejsca parkingowe dla niepełnosprawnych"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "19": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "=title": {
 | 
					 | 
				
			||||||
                        "render": "Statystyki"
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "20": {
 | 
					 | 
				
			||||||
                "override": {
 | 
					 | 
				
			||||||
                    "+tagRenderings": {
 | 
					 | 
				
			||||||
                        "0": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "text": "Import"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        },
 | 
					 | 
				
			||||||
                        "1": {
 | 
					 | 
				
			||||||
                            "render": {
 | 
					 | 
				
			||||||
                                "special": {
 | 
					 | 
				
			||||||
                                    "message": "Dodaj wszystkie sugerowane znaczniki"
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            }
 | 
					 | 
				
			||||||
                        }
 | 
					 | 
				
			||||||
                    }
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Na kółkach"
 | 
					        "title": "Na kółkach"
 | 
				
			||||||
| 
						 | 
					@ -1104,10 +1104,6 @@
 | 
				
			||||||
    "stations": {
 | 
					    "stations": {
 | 
				
			||||||
        "description": "Przeglądaj, edytuj i dodawaj szczegóły do stacji kolejowej",
 | 
					        "description": "Przeglądaj, edytuj i dodawaj szczegóły do stacji kolejowej",
 | 
				
			||||||
        "layers": {
 | 
					        "layers": {
 | 
				
			||||||
            "3": {
 | 
					 | 
				
			||||||
                "description": "Warstwa pokazująca stacje kolejowe",
 | 
					 | 
				
			||||||
                "name": "Stacje Kolejowe"
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            "16": {
 | 
					            "16": {
 | 
				
			||||||
                "description": "Ekrany wyświetlające pokazujące pociągi, które odjadą z tej stacji",
 | 
					                "description": "Ekrany wyświetlające pokazujące pociągi, które odjadą z tej stacji",
 | 
				
			||||||
                "name": "Tablice odjazdów",
 | 
					                "name": "Tablice odjazdów",
 | 
				
			||||||
| 
						 | 
					@ -1139,6 +1135,10 @@
 | 
				
			||||||
                "title": {
 | 
					                "title": {
 | 
				
			||||||
                    "render": "Tablica odjazdów"
 | 
					                    "render": "Tablica odjazdów"
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            "3": {
 | 
				
			||||||
 | 
					                "description": "Warstwa pokazująca stacje kolejowe",
 | 
				
			||||||
 | 
					                "name": "Stacje Kolejowe"
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        },
 | 
					        },
 | 
				
			||||||
        "title": "Stacje Kolejowe"
 | 
					        "title": "Stacje Kolejowe"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										3988
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
							
						
						
									
										3988
									
								
								package-lock.json
									
										
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -173,6 +173,7 @@
 | 
				
			||||||
    "marked": "^12.0.2",
 | 
					    "marked": "^12.0.2",
 | 
				
			||||||
    "monaco-editor": "^0.46.0",
 | 
					    "monaco-editor": "^0.46.0",
 | 
				
			||||||
    "name-suggestion-index": "^6.0.20240422",
 | 
					    "name-suggestion-index": "^6.0.20240422",
 | 
				
			||||||
 | 
					    "npm": "^10.7.0",
 | 
				
			||||||
    "opening_hours": "^3.6.0",
 | 
					    "opening_hours": "^3.6.0",
 | 
				
			||||||
    "osm-auth": "^2.2.0",
 | 
					    "osm-auth": "^2.2.0",
 | 
				
			||||||
    "osmtogeojson": "^3.0.0-beta.5",
 | 
					    "osmtogeojson": "^3.0.0-beta.5",
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -31,7 +31,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
::before,
 | 
					::before,
 | 
				
			||||||
::after {
 | 
					::after {
 | 
				
			||||||
  --tw-content: "";
 | 
					  --tw-content: '';
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -50,12 +50,10 @@ html {
 | 
				
			||||||
  /* 3 */
 | 
					  /* 3 */
 | 
				
			||||||
  tab-size: 4;
 | 
					  tab-size: 4;
 | 
				
			||||||
  /* 3 */
 | 
					  /* 3 */
 | 
				
			||||||
  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
 | 
					  font-family: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
 | 
				
			||||||
    "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
 | 
					 | 
				
			||||||
    "Segoe UI Symbol", "Noto Color Emoji";
 | 
					 | 
				
			||||||
  /* 4 */
 | 
					  /* 4 */
 | 
				
			||||||
  -webkit-font-feature-settings: normal;
 | 
					  -webkit-font-feature-settings: normal;
 | 
				
			||||||
  font-feature-settings: normal;
 | 
					          font-feature-settings: normal;
 | 
				
			||||||
  /* 5 */
 | 
					  /* 5 */
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -92,7 +90,7 @@ Add the correct text decoration in Chrome, Edge, and Safari.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
abbr:where([title]) {
 | 
					abbr:where([title]) {
 | 
				
			||||||
  -webkit-text-decoration: underline dotted;
 | 
					  -webkit-text-decoration: underline dotted;
 | 
				
			||||||
  text-decoration: underline dotted;
 | 
					          text-decoration: underline dotted;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
| 
						 | 
					@ -136,8 +134,7 @@ code,
 | 
				
			||||||
kbd,
 | 
					kbd,
 | 
				
			||||||
samp,
 | 
					samp,
 | 
				
			||||||
pre {
 | 
					pre {
 | 
				
			||||||
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
 | 
					  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
 | 
				
			||||||
    "Courier New", monospace;
 | 
					 | 
				
			||||||
  /* 1 */
 | 
					  /* 1 */
 | 
				
			||||||
  font-size: 1em;
 | 
					  font-size: 1em;
 | 
				
			||||||
  /* 2 */
 | 
					  /* 2 */
 | 
				
			||||||
| 
						 | 
					@ -228,9 +225,9 @@ select {
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button,
 | 
					button,
 | 
				
			||||||
[type="button"],
 | 
					[type='button'],
 | 
				
			||||||
[type="reset"],
 | 
					[type='reset'],
 | 
				
			||||||
[type="submit"] {
 | 
					[type='submit'] {
 | 
				
			||||||
  -webkit-appearance: button;
 | 
					  -webkit-appearance: button;
 | 
				
			||||||
  /* 1 */
 | 
					  /* 1 */
 | 
				
			||||||
  background-color: transparent;
 | 
					  background-color: transparent;
 | 
				
			||||||
| 
						 | 
					@ -277,7 +274,7 @@ Correct the cursor style of increment and decrement buttons in Safari.
 | 
				
			||||||
2. Correct the outline style in Safari.
 | 
					2. Correct the outline style in Safari.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[type="search"] {
 | 
					[type='search'] {
 | 
				
			||||||
  -webkit-appearance: textfield;
 | 
					  -webkit-appearance: textfield;
 | 
				
			||||||
  /* 1 */
 | 
					  /* 1 */
 | 
				
			||||||
  outline-offset: -2px;
 | 
					  outline-offset: -2px;
 | 
				
			||||||
| 
						 | 
					@ -362,8 +359,7 @@ textarea {
 | 
				
			||||||
2. Set the default placeholder color to the user's configured gray 400 color.
 | 
					2. Set the default placeholder color to the user's configured gray 400 color.
 | 
				
			||||||
*/
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input::-webkit-input-placeholder,
 | 
					input::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
 | 
				
			||||||
textarea::-webkit-input-placeholder {
 | 
					 | 
				
			||||||
  opacity: 1;
 | 
					  opacity: 1;
 | 
				
			||||||
  /* 1 */
 | 
					  /* 1 */
 | 
				
			||||||
  color: #9ca3af;
 | 
					  color: #9ca3af;
 | 
				
			||||||
| 
						 | 
					@ -431,9 +427,7 @@ video {
 | 
				
			||||||
  display: none;
 | 
					  display: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
*,
 | 
					*, ::before, ::after {
 | 
				
			||||||
::before,
 | 
					 | 
				
			||||||
::after {
 | 
					 | 
				
			||||||
  --tw-border-spacing-x: 0;
 | 
					  --tw-border-spacing-x: 0;
 | 
				
			||||||
  --tw-border-spacing-y: 0;
 | 
					  --tw-border-spacing-y: 0;
 | 
				
			||||||
  --tw-translate-x: 0;
 | 
					  --tw-translate-x: 0;
 | 
				
			||||||
| 
						 | 
					@ -443,16 +437,16 @@ video {
 | 
				
			||||||
  --tw-skew-y: 0;
 | 
					  --tw-skew-y: 0;
 | 
				
			||||||
  --tw-scale-x: 1;
 | 
					  --tw-scale-x: 1;
 | 
				
			||||||
  --tw-scale-y: 1;
 | 
					  --tw-scale-y: 1;
 | 
				
			||||||
  --tw-pan-x: ;
 | 
					  --tw-pan-x:  ;
 | 
				
			||||||
  --tw-pan-y: ;
 | 
					  --tw-pan-y:  ;
 | 
				
			||||||
  --tw-pinch-zoom: ;
 | 
					  --tw-pinch-zoom:  ;
 | 
				
			||||||
  --tw-scroll-snap-strictness: proximity;
 | 
					  --tw-scroll-snap-strictness: proximity;
 | 
				
			||||||
  --tw-ordinal: ;
 | 
					  --tw-ordinal:  ;
 | 
				
			||||||
  --tw-slashed-zero: ;
 | 
					  --tw-slashed-zero:  ;
 | 
				
			||||||
  --tw-numeric-figure: ;
 | 
					  --tw-numeric-figure:  ;
 | 
				
			||||||
  --tw-numeric-spacing: ;
 | 
					  --tw-numeric-spacing:  ;
 | 
				
			||||||
  --tw-numeric-fraction: ;
 | 
					  --tw-numeric-fraction:  ;
 | 
				
			||||||
  --tw-ring-inset: ;
 | 
					  --tw-ring-inset:  ;
 | 
				
			||||||
  --tw-ring-offset-width: 0px;
 | 
					  --tw-ring-offset-width: 0px;
 | 
				
			||||||
  --tw-ring-offset-color: #fff;
 | 
					  --tw-ring-offset-color: #fff;
 | 
				
			||||||
  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
					  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
				
			||||||
| 
						 | 
					@ -460,24 +454,24 @@ video {
 | 
				
			||||||
  --tw-ring-shadow: 0 0 #0000;
 | 
					  --tw-ring-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow: 0 0 #0000;
 | 
					  --tw-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow-colored: 0 0 #0000;
 | 
					  --tw-shadow-colored: 0 0 #0000;
 | 
				
			||||||
  --tw-blur: ;
 | 
					  --tw-blur:  ;
 | 
				
			||||||
  --tw-brightness: ;
 | 
					  --tw-brightness:  ;
 | 
				
			||||||
  --tw-contrast: ;
 | 
					  --tw-contrast:  ;
 | 
				
			||||||
  --tw-grayscale: ;
 | 
					  --tw-grayscale:  ;
 | 
				
			||||||
  --tw-hue-rotate: ;
 | 
					  --tw-hue-rotate:  ;
 | 
				
			||||||
  --tw-invert: ;
 | 
					  --tw-invert:  ;
 | 
				
			||||||
  --tw-saturate: ;
 | 
					  --tw-saturate:  ;
 | 
				
			||||||
  --tw-sepia: ;
 | 
					  --tw-sepia:  ;
 | 
				
			||||||
  --tw-drop-shadow: ;
 | 
					  --tw-drop-shadow:  ;
 | 
				
			||||||
  --tw-backdrop-blur: ;
 | 
					  --tw-backdrop-blur:  ;
 | 
				
			||||||
  --tw-backdrop-brightness: ;
 | 
					  --tw-backdrop-brightness:  ;
 | 
				
			||||||
  --tw-backdrop-contrast: ;
 | 
					  --tw-backdrop-contrast:  ;
 | 
				
			||||||
  --tw-backdrop-grayscale: ;
 | 
					  --tw-backdrop-grayscale:  ;
 | 
				
			||||||
  --tw-backdrop-hue-rotate: ;
 | 
					  --tw-backdrop-hue-rotate:  ;
 | 
				
			||||||
  --tw-backdrop-invert: ;
 | 
					  --tw-backdrop-invert:  ;
 | 
				
			||||||
  --tw-backdrop-opacity: ;
 | 
					  --tw-backdrop-opacity:  ;
 | 
				
			||||||
  --tw-backdrop-saturate: ;
 | 
					  --tw-backdrop-saturate:  ;
 | 
				
			||||||
  --tw-backdrop-sepia: ;
 | 
					  --tw-backdrop-sepia:  ;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
::-webkit-backdrop {
 | 
					::-webkit-backdrop {
 | 
				
			||||||
| 
						 | 
					@ -490,16 +484,16 @@ video {
 | 
				
			||||||
  --tw-skew-y: 0;
 | 
					  --tw-skew-y: 0;
 | 
				
			||||||
  --tw-scale-x: 1;
 | 
					  --tw-scale-x: 1;
 | 
				
			||||||
  --tw-scale-y: 1;
 | 
					  --tw-scale-y: 1;
 | 
				
			||||||
  --tw-pan-x: ;
 | 
					  --tw-pan-x:  ;
 | 
				
			||||||
  --tw-pan-y: ;
 | 
					  --tw-pan-y:  ;
 | 
				
			||||||
  --tw-pinch-zoom: ;
 | 
					  --tw-pinch-zoom:  ;
 | 
				
			||||||
  --tw-scroll-snap-strictness: proximity;
 | 
					  --tw-scroll-snap-strictness: proximity;
 | 
				
			||||||
  --tw-ordinal: ;
 | 
					  --tw-ordinal:  ;
 | 
				
			||||||
  --tw-slashed-zero: ;
 | 
					  --tw-slashed-zero:  ;
 | 
				
			||||||
  --tw-numeric-figure: ;
 | 
					  --tw-numeric-figure:  ;
 | 
				
			||||||
  --tw-numeric-spacing: ;
 | 
					  --tw-numeric-spacing:  ;
 | 
				
			||||||
  --tw-numeric-fraction: ;
 | 
					  --tw-numeric-fraction:  ;
 | 
				
			||||||
  --tw-ring-inset: ;
 | 
					  --tw-ring-inset:  ;
 | 
				
			||||||
  --tw-ring-offset-width: 0px;
 | 
					  --tw-ring-offset-width: 0px;
 | 
				
			||||||
  --tw-ring-offset-color: #fff;
 | 
					  --tw-ring-offset-color: #fff;
 | 
				
			||||||
  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
					  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
				
			||||||
| 
						 | 
					@ -507,24 +501,24 @@ video {
 | 
				
			||||||
  --tw-ring-shadow: 0 0 #0000;
 | 
					  --tw-ring-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow: 0 0 #0000;
 | 
					  --tw-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow-colored: 0 0 #0000;
 | 
					  --tw-shadow-colored: 0 0 #0000;
 | 
				
			||||||
  --tw-blur: ;
 | 
					  --tw-blur:  ;
 | 
				
			||||||
  --tw-brightness: ;
 | 
					  --tw-brightness:  ;
 | 
				
			||||||
  --tw-contrast: ;
 | 
					  --tw-contrast:  ;
 | 
				
			||||||
  --tw-grayscale: ;
 | 
					  --tw-grayscale:  ;
 | 
				
			||||||
  --tw-hue-rotate: ;
 | 
					  --tw-hue-rotate:  ;
 | 
				
			||||||
  --tw-invert: ;
 | 
					  --tw-invert:  ;
 | 
				
			||||||
  --tw-saturate: ;
 | 
					  --tw-saturate:  ;
 | 
				
			||||||
  --tw-sepia: ;
 | 
					  --tw-sepia:  ;
 | 
				
			||||||
  --tw-drop-shadow: ;
 | 
					  --tw-drop-shadow:  ;
 | 
				
			||||||
  --tw-backdrop-blur: ;
 | 
					  --tw-backdrop-blur:  ;
 | 
				
			||||||
  --tw-backdrop-brightness: ;
 | 
					  --tw-backdrop-brightness:  ;
 | 
				
			||||||
  --tw-backdrop-contrast: ;
 | 
					  --tw-backdrop-contrast:  ;
 | 
				
			||||||
  --tw-backdrop-grayscale: ;
 | 
					  --tw-backdrop-grayscale:  ;
 | 
				
			||||||
  --tw-backdrop-hue-rotate: ;
 | 
					  --tw-backdrop-hue-rotate:  ;
 | 
				
			||||||
  --tw-backdrop-invert: ;
 | 
					  --tw-backdrop-invert:  ;
 | 
				
			||||||
  --tw-backdrop-opacity: ;
 | 
					  --tw-backdrop-opacity:  ;
 | 
				
			||||||
  --tw-backdrop-saturate: ;
 | 
					  --tw-backdrop-saturate:  ;
 | 
				
			||||||
  --tw-backdrop-sepia: ;
 | 
					  --tw-backdrop-sepia:  ;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
::backdrop {
 | 
					::backdrop {
 | 
				
			||||||
| 
						 | 
					@ -537,16 +531,16 @@ video {
 | 
				
			||||||
  --tw-skew-y: 0;
 | 
					  --tw-skew-y: 0;
 | 
				
			||||||
  --tw-scale-x: 1;
 | 
					  --tw-scale-x: 1;
 | 
				
			||||||
  --tw-scale-y: 1;
 | 
					  --tw-scale-y: 1;
 | 
				
			||||||
  --tw-pan-x: ;
 | 
					  --tw-pan-x:  ;
 | 
				
			||||||
  --tw-pan-y: ;
 | 
					  --tw-pan-y:  ;
 | 
				
			||||||
  --tw-pinch-zoom: ;
 | 
					  --tw-pinch-zoom:  ;
 | 
				
			||||||
  --tw-scroll-snap-strictness: proximity;
 | 
					  --tw-scroll-snap-strictness: proximity;
 | 
				
			||||||
  --tw-ordinal: ;
 | 
					  --tw-ordinal:  ;
 | 
				
			||||||
  --tw-slashed-zero: ;
 | 
					  --tw-slashed-zero:  ;
 | 
				
			||||||
  --tw-numeric-figure: ;
 | 
					  --tw-numeric-figure:  ;
 | 
				
			||||||
  --tw-numeric-spacing: ;
 | 
					  --tw-numeric-spacing:  ;
 | 
				
			||||||
  --tw-numeric-fraction: ;
 | 
					  --tw-numeric-fraction:  ;
 | 
				
			||||||
  --tw-ring-inset: ;
 | 
					  --tw-ring-inset:  ;
 | 
				
			||||||
  --tw-ring-offset-width: 0px;
 | 
					  --tw-ring-offset-width: 0px;
 | 
				
			||||||
  --tw-ring-offset-color: #fff;
 | 
					  --tw-ring-offset-color: #fff;
 | 
				
			||||||
  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
					  --tw-ring-color: rgb(59 130 246 / 0.5);
 | 
				
			||||||
| 
						 | 
					@ -554,24 +548,24 @@ video {
 | 
				
			||||||
  --tw-ring-shadow: 0 0 #0000;
 | 
					  --tw-ring-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow: 0 0 #0000;
 | 
					  --tw-shadow: 0 0 #0000;
 | 
				
			||||||
  --tw-shadow-colored: 0 0 #0000;
 | 
					  --tw-shadow-colored: 0 0 #0000;
 | 
				
			||||||
  --tw-blur: ;
 | 
					  --tw-blur:  ;
 | 
				
			||||||
  --tw-brightness: ;
 | 
					  --tw-brightness:  ;
 | 
				
			||||||
  --tw-contrast: ;
 | 
					  --tw-contrast:  ;
 | 
				
			||||||
  --tw-grayscale: ;
 | 
					  --tw-grayscale:  ;
 | 
				
			||||||
  --tw-hue-rotate: ;
 | 
					  --tw-hue-rotate:  ;
 | 
				
			||||||
  --tw-invert: ;
 | 
					  --tw-invert:  ;
 | 
				
			||||||
  --tw-saturate: ;
 | 
					  --tw-saturate:  ;
 | 
				
			||||||
  --tw-sepia: ;
 | 
					  --tw-sepia:  ;
 | 
				
			||||||
  --tw-drop-shadow: ;
 | 
					  --tw-drop-shadow:  ;
 | 
				
			||||||
  --tw-backdrop-blur: ;
 | 
					  --tw-backdrop-blur:  ;
 | 
				
			||||||
  --tw-backdrop-brightness: ;
 | 
					  --tw-backdrop-brightness:  ;
 | 
				
			||||||
  --tw-backdrop-contrast: ;
 | 
					  --tw-backdrop-contrast:  ;
 | 
				
			||||||
  --tw-backdrop-grayscale: ;
 | 
					  --tw-backdrop-grayscale:  ;
 | 
				
			||||||
  --tw-backdrop-hue-rotate: ;
 | 
					  --tw-backdrop-hue-rotate:  ;
 | 
				
			||||||
  --tw-backdrop-invert: ;
 | 
					  --tw-backdrop-invert:  ;
 | 
				
			||||||
  --tw-backdrop-opacity: ;
 | 
					  --tw-backdrop-opacity:  ;
 | 
				
			||||||
  --tw-backdrop-saturate: ;
 | 
					  --tw-backdrop-saturate:  ;
 | 
				
			||||||
  --tw-backdrop-sepia: ;
 | 
					  --tw-backdrop-sepia:  ;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.container {
 | 
					.container {
 | 
				
			||||||
| 
						 | 
					@ -787,10 +781,6 @@ video {
 | 
				
			||||||
  float: left;
 | 
					  float: left;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.m-2 {
 | 
					 | 
				
			||||||
  margin: 0.5rem;
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
.m-4 {
 | 
					.m-4 {
 | 
				
			||||||
  margin: 1rem;
 | 
					  margin: 1rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -807,6 +797,10 @@ video {
 | 
				
			||||||
  margin: 2rem;
 | 
					  margin: 2rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.m-2 {
 | 
				
			||||||
 | 
					  margin: 0.5rem;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.m-1 {
 | 
					.m-1 {
 | 
				
			||||||
  margin: 0.25rem;
 | 
					  margin: 0.25rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1332,40 +1326,32 @@ video {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.transform {
 | 
					.transform {
 | 
				
			||||||
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y))
 | 
					  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
 | 
				
			||||||
    rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
 | 
					          transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
 | 
				
			||||||
    scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
 | 
					 | 
				
			||||||
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
 | 
					 | 
				
			||||||
    skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
 | 
					 | 
				
			||||||
    scaleY(var(--tw-scale-y));
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.\!transform {
 | 
					.\!transform {
 | 
				
			||||||
  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y))
 | 
					  -webkit-transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important;
 | 
				
			||||||
    rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y))
 | 
					          transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important;
 | 
				
			||||||
    scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y)) !important;
 | 
					 | 
				
			||||||
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate))
 | 
					 | 
				
			||||||
    skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x))
 | 
					 | 
				
			||||||
    scaleY(var(--tw-scale-y)) !important;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@-webkit-keyframes spin {
 | 
					@-webkit-keyframes spin {
 | 
				
			||||||
  to {
 | 
					  to {
 | 
				
			||||||
    -webkit-transform: rotate(360deg);
 | 
					    -webkit-transform: rotate(360deg);
 | 
				
			||||||
    transform: rotate(360deg);
 | 
					            transform: rotate(360deg);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@keyframes spin {
 | 
					@keyframes spin {
 | 
				
			||||||
  to {
 | 
					  to {
 | 
				
			||||||
    -webkit-transform: rotate(360deg);
 | 
					    -webkit-transform: rotate(360deg);
 | 
				
			||||||
    transform: rotate(360deg);
 | 
					            transform: rotate(360deg);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.animate-spin {
 | 
					.animate-spin {
 | 
				
			||||||
  -webkit-animation: spin 1s linear infinite;
 | 
					  -webkit-animation: spin 1s linear infinite;
 | 
				
			||||||
  animation: spin 1s linear infinite;
 | 
					          animation: spin 1s linear infinite;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.cursor-pointer {
 | 
					.cursor-pointer {
 | 
				
			||||||
| 
						 | 
					@ -1382,7 +1368,7 @@ video {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.appearance-none {
 | 
					.appearance-none {
 | 
				
			||||||
  -webkit-appearance: none;
 | 
					  -webkit-appearance: none;
 | 
				
			||||||
  appearance: none;
 | 
					          appearance: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.grid-cols-3 {
 | 
					.grid-cols-3 {
 | 
				
			||||||
| 
						 | 
					@ -1471,17 +1457,17 @@ video {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-x-4 {
 | 
					.gap-x-4 {
 | 
				
			||||||
  -webkit-column-gap: 1rem;
 | 
					  -webkit-column-gap: 1rem;
 | 
				
			||||||
  column-gap: 1rem;
 | 
					          column-gap: 1rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-x-0\.5 {
 | 
					.gap-x-0\.5 {
 | 
				
			||||||
  -webkit-column-gap: 0.125rem;
 | 
					  -webkit-column-gap: 0.125rem;
 | 
				
			||||||
  column-gap: 0.125rem;
 | 
					          column-gap: 0.125rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-x-0 {
 | 
					.gap-x-0 {
 | 
				
			||||||
  -webkit-column-gap: 0px;
 | 
					  -webkit-column-gap: 0px;
 | 
				
			||||||
  column-gap: 0px;
 | 
					          column-gap: 0px;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-y-2 {
 | 
					.gap-y-2 {
 | 
				
			||||||
| 
						 | 
					@ -1490,12 +1476,12 @@ video {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-x-1 {
 | 
					.gap-x-1 {
 | 
				
			||||||
  -webkit-column-gap: 0.25rem;
 | 
					  -webkit-column-gap: 0.25rem;
 | 
				
			||||||
  column-gap: 0.25rem;
 | 
					          column-gap: 0.25rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-x-2 {
 | 
					.gap-x-2 {
 | 
				
			||||||
  -webkit-column-gap: 0.5rem;
 | 
					  -webkit-column-gap: 0.5rem;
 | 
				
			||||||
  column-gap: 0.5rem;
 | 
					          column-gap: 0.5rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.gap-y-8 {
 | 
					.gap-y-8 {
 | 
				
			||||||
| 
						 | 
					@ -2044,44 +2030,37 @@ video {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.ordinal {
 | 
					.ordinal {
 | 
				
			||||||
  --tw-ordinal: ordinal;
 | 
					  --tw-ordinal: ordinal;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.slashed-zero {
 | 
					.slashed-zero {
 | 
				
			||||||
  --tw-slashed-zero: slashed-zero;
 | 
					  --tw-slashed-zero: slashed-zero;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.lining-nums {
 | 
					.lining-nums {
 | 
				
			||||||
  --tw-numeric-figure: lining-nums;
 | 
					  --tw-numeric-figure: lining-nums;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.oldstyle-nums {
 | 
					.oldstyle-nums {
 | 
				
			||||||
  --tw-numeric-figure: oldstyle-nums;
 | 
					  --tw-numeric-figure: oldstyle-nums;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.proportional-nums {
 | 
					.proportional-nums {
 | 
				
			||||||
  --tw-numeric-spacing: proportional-nums;
 | 
					  --tw-numeric-spacing: proportional-nums;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tabular-nums {
 | 
					.tabular-nums {
 | 
				
			||||||
  --tw-numeric-spacing: tabular-nums;
 | 
					  --tw-numeric-spacing: tabular-nums;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.diagonal-fractions {
 | 
					.diagonal-fractions {
 | 
				
			||||||
  --tw-numeric-fraction: diagonal-fractions;
 | 
					  --tw-numeric-fraction: diagonal-fractions;
 | 
				
			||||||
  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure)
 | 
					  font-variant-numeric: var(--tw-ordinal) var(--tw-slashed-zero) var(--tw-numeric-figure) var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
				
			||||||
    var(--tw-numeric-spacing) var(--tw-numeric-fraction);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.tracking-tight {
 | 
					.tracking-tight {
 | 
				
			||||||
| 
						 | 
					@ -2140,8 +2119,7 @@ video {
 | 
				
			||||||
.shadow {
 | 
					.shadow {
 | 
				
			||||||
  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
 | 
					  --tw-shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
 | 
				
			||||||
  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
 | 
					  --tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);
 | 
				
			||||||
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000),
 | 
					  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
 | 
				
			||||||
    var(--tw-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.outline-none {
 | 
					.outline-none {
 | 
				
			||||||
| 
						 | 
					@ -2154,10 +2132,8 @@ video {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.ring {
 | 
					.ring {
 | 
				
			||||||
  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width)
 | 
					  --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
 | 
				
			||||||
    var(--tw-ring-offset-color);
 | 
					  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color);
 | 
				
			||||||
  --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(3px + var(--tw-ring-offset-width))
 | 
					 | 
				
			||||||
    var(--tw-ring-color);
 | 
					 | 
				
			||||||
  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
 | 
					  box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2167,137 +2143,89 @@ video {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.blur {
 | 
					.blur {
 | 
				
			||||||
  --tw-blur: blur(8px);
 | 
					  --tw-blur: blur(8px);
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.drop-shadow-md {
 | 
					.drop-shadow-md {
 | 
				
			||||||
  --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07))
 | 
					  --tw-drop-shadow: drop-shadow(0 4px 3px rgb(0 0 0 / 0.07)) drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
 | 
				
			||||||
    drop-shadow(0 2px 2px rgb(0 0 0 / 0.06));
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.drop-shadow-2xl {
 | 
					.drop-shadow-2xl {
 | 
				
			||||||
  --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
 | 
					  --tw-drop-shadow: drop-shadow(0 25px 25px rgb(0 0 0 / 0.15));
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.drop-shadow {
 | 
					.drop-shadow {
 | 
				
			||||||
  --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
 | 
					  --tw-drop-shadow: drop-shadow(0 1px 2px rgb(0 0 0 / 0.1)) drop-shadow(0 1px 1px rgb(0 0 0 / 0.06));
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.grayscale {
 | 
					.grayscale {
 | 
				
			||||||
  --tw-grayscale: grayscale(100%);
 | 
					  --tw-grayscale: grayscale(100%);
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.invert {
 | 
					.invert {
 | 
				
			||||||
  --tw-invert: invert(100%);
 | 
					  --tw-invert: invert(100%);
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.sepia {
 | 
					.sepia {
 | 
				
			||||||
  --tw-sepia: sepia(100%);
 | 
					  --tw-sepia: sepia(100%);
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.filter {
 | 
					.filter {
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.\!filter {
 | 
					.\!filter {
 | 
				
			||||||
  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					  -webkit-filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
 | 
					          filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
 | 
				
			||||||
  filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale)
 | 
					 | 
				
			||||||
    var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow) !important;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.backdrop-blur {
 | 
					.backdrop-blur {
 | 
				
			||||||
  --tw-backdrop-blur: blur(8px);
 | 
					  --tw-backdrop-blur: blur(8px);
 | 
				
			||||||
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
 | 
					  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
 | 
					          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.backdrop-grayscale {
 | 
					.backdrop-grayscale {
 | 
				
			||||||
  --tw-backdrop-grayscale: grayscale(100%);
 | 
					  --tw-backdrop-grayscale: grayscale(100%);
 | 
				
			||||||
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
 | 
					  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
 | 
					          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.backdrop-invert {
 | 
					.backdrop-invert {
 | 
				
			||||||
  --tw-backdrop-invert: invert(100%);
 | 
					  --tw-backdrop-invert: invert(100%);
 | 
				
			||||||
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
 | 
					  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
 | 
					          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.backdrop-sepia {
 | 
					.backdrop-sepia {
 | 
				
			||||||
  --tw-backdrop-sepia: sepia(100%);
 | 
					  --tw-backdrop-sepia: sepia(100%);
 | 
				
			||||||
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
 | 
					  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
 | 
					          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.backdrop-filter {
 | 
					.backdrop-filter {
 | 
				
			||||||
  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness)
 | 
					  -webkit-backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate)
 | 
					          backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast) var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
				
			||||||
    var(--tw-backdrop-invert) var(--tw-backdrop-opacity) var(--tw-backdrop-saturate)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
  backdrop-filter: var(--tw-backdrop-blur) var(--tw-backdrop-brightness) var(--tw-backdrop-contrast)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-grayscale) var(--tw-backdrop-hue-rotate) var(--tw-backdrop-invert)
 | 
					 | 
				
			||||||
    var(--tw-backdrop-opacity) var(--tw-backdrop-saturate) var(--tw-backdrop-sepia);
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.transition {
 | 
					.transition {
 | 
				
			||||||
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
 | 
					  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
 | 
				
			||||||
    opacity, box-shadow, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
 | 
					  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
 | 
				
			||||||
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
 | 
					  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-transform, -webkit-filter, -webkit-backdrop-filter;
 | 
				
			||||||
    opacity, box-shadow, transform, filter, backdrop-filter;
 | 
					 | 
				
			||||||
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke,
 | 
					 | 
				
			||||||
    opacity, box-shadow, transform, filter, backdrop-filter, -webkit-transform, -webkit-filter,
 | 
					 | 
				
			||||||
    -webkit-backdrop-filter;
 | 
					 | 
				
			||||||
  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
 | 
					  transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
 | 
				
			||||||
  transition-duration: 150ms;
 | 
					  transition-duration: 150ms;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -2428,7 +2356,7 @@ input {
 | 
				
			||||||
  color: var(--foreground-color);
 | 
					  color: var(--foreground-color);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
input[type="text"] {
 | 
					input[type=text] {
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2451,12 +2379,12 @@ input[type="text"] {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.low-interaction {
 | 
					.low-interaction {
 | 
				
			||||||
  background: var(--low-interaction-background);
 | 
					  background: var(--low-interaction-background);
 | 
				
			||||||
  color: var(--low-interaction-foreground);
 | 
					  color: var(--low-interaction-foreground)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.interactive {
 | 
					.interactive {
 | 
				
			||||||
  background: var(--interactive-background);
 | 
					  background: var(--interactive-background);
 | 
				
			||||||
  color: var(--interactive-foreground);
 | 
					  color: var(--interactive-foreground)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.border-interactive {
 | 
					.border-interactive {
 | 
				
			||||||
| 
						 | 
					@ -2475,8 +2403,7 @@ input[type="text"] {
 | 
				
			||||||
 * This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
 | 
					 * This very important section defines what the various input elements look like within the 'low-interaction' and 'interactive'-blocks
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.small,
 | 
					button.small, .button.small {
 | 
				
			||||||
.button.small {
 | 
					 | 
				
			||||||
  line-height: 1rem;
 | 
					  line-height: 1rem;
 | 
				
			||||||
  margin: 0;
 | 
					  margin: 0;
 | 
				
			||||||
  margin-left: 0.5rem;
 | 
					  margin-left: 0.5rem;
 | 
				
			||||||
| 
						 | 
					@ -2497,8 +2424,7 @@ button.small,
 | 
				
			||||||
  color: var(--low-interaction-foreground);
 | 
					  color: var(--low-interaction-foreground);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button,
 | 
					button, .button {
 | 
				
			||||||
.button {
 | 
					 | 
				
			||||||
  align-items: center;
 | 
					  align-items: center;
 | 
				
			||||||
  display: inline-flex;
 | 
					  display: inline-flex;
 | 
				
			||||||
  line-height: 1.25rem;
 | 
					  line-height: 1.25rem;
 | 
				
			||||||
| 
						 | 
					@ -2521,72 +2447,60 @@ button,
 | 
				
			||||||
  box-shadow: 0 5px 10px #88888888;
 | 
					  box-shadow: 0 5px 10px #88888888;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.selected,
 | 
					button.selected, .button.selected {
 | 
				
			||||||
.button.selected {
 | 
					 | 
				
			||||||
  background-color: var(--catch-detail-color);
 | 
					  background-color: var(--catch-detail-color);
 | 
				
			||||||
  border-color: var(--catch-detail-color);
 | 
					  border-color: var(--catch-detail-color);
 | 
				
			||||||
  color: var(--catch-detail-foregroundcolor);
 | 
					  color: var(--catch-detail-foregroundcolor);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.selected svg path,
 | 
					button.selected svg path, .button.selected svg path {
 | 
				
			||||||
.button.selected svg path {
 | 
					 | 
				
			||||||
  fill: var(--catch-detail-foregroundcolor) !important;
 | 
					  fill: var(--catch-detail-foregroundcolor) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button:not(.no-image-background):not(.soft) svg path,
 | 
					button:not(.no-image-background):not(.soft) svg path, .button:not(.no-image-background):not(.soft) svg path {
 | 
				
			||||||
.button:not(.no-image-background):not(.soft) svg path {
 | 
					 | 
				
			||||||
  fill: var(--interactive-foreground) !important;
 | 
					  fill: var(--interactive-foreground) !important;
 | 
				
			||||||
  transition: all 250ms;
 | 
					  transition: all 250ms;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.interactive button,
 | 
					.interactive button, .interactive .button {
 | 
				
			||||||
.interactive .button {
 | 
					 | 
				
			||||||
  background: var(--interactive-background);
 | 
					  background: var(--interactive-background);
 | 
				
			||||||
  color: var(--interactive-foreground);
 | 
					  color: var(--interactive-foreground);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button:hover,
 | 
					button:hover, .button:hover {
 | 
				
			||||||
.button:hover {
 | 
					 | 
				
			||||||
  background-color: var(--catch-detail-color);
 | 
					  background-color: var(--catch-detail-color);
 | 
				
			||||||
  color: var(--catch-detail-foregroundcolor);
 | 
					  color: var(--catch-detail-foregroundcolor);
 | 
				
			||||||
  border: 2px solid var(--catch-detail-color-contrast);
 | 
					  border: 2px solid var(--catch-detail-color-contrast);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button:hover:not(.no-image-background) img,
 | 
					button:hover:not(.no-image-background) img, .button:hover:not(.no-image-background) img {
 | 
				
			||||||
.button:hover:not(.no-image-background) img {
 | 
					 | 
				
			||||||
  background: var(--low-interaction-background);
 | 
					  background: var(--low-interaction-background);
 | 
				
			||||||
  border-radius: 100rem;
 | 
					  border-radius: 100rem;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button:hover:not(.no-image-background) svg path,
 | 
					button:hover:not(.no-image-background) svg path, .button:hover:not(.no-image-background) svg path {
 | 
				
			||||||
.button:hover:not(.no-image-background) svg path {
 | 
					 | 
				
			||||||
  fill: var(--catch-detail-foregroundcolor) !important;
 | 
					  fill: var(--catch-detail-foregroundcolor) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.disabled:hover:not(.no-image-background) svg path,
 | 
					button.disabled:hover:not(.no-image-background) svg path, .button.disabled:hover:not(.no-image-background) svg path {
 | 
				
			||||||
.button.disabled:hover:not(.no-image-background) svg path {
 | 
					 | 
				
			||||||
  fill: var(--low-interaction-foreground) !important;
 | 
					  fill: var(--low-interaction-foreground) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.primary,
 | 
					button.primary, .button.primary {
 | 
				
			||||||
.button.primary {
 | 
					 | 
				
			||||||
  color: var(--button-foreground);
 | 
					  color: var(--button-foreground);
 | 
				
			||||||
  background: var(--button-background);
 | 
					  background: var(--button-background);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.primary:not(.no-image-background) svg path,
 | 
					button.primary:not(.no-image-background) svg path, .button.primary:not(.no-image-background) svg path {
 | 
				
			||||||
.button.primary:not(.no-image-background) svg path {
 | 
					 | 
				
			||||||
  fill: var(--button-foreground) !important;
 | 
					  fill: var(--button-foreground) !important;
 | 
				
			||||||
  transition: all 250ms;
 | 
					  transition: all 250ms;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.disabled.low-interaction,
 | 
					button.disabled.low-interaction, .button.disabled.low-interaction {
 | 
				
			||||||
.button.disabled.low-interaction {
 | 
					 | 
				
			||||||
  background-color: var(--low-interaction-background-50);
 | 
					  background-color: var(--low-interaction-background-50);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.disabled,
 | 
					button.disabled, .button.disabled {
 | 
				
			||||||
.button.disabled {
 | 
					 | 
				
			||||||
  cursor: default;
 | 
					  cursor: default;
 | 
				
			||||||
  border: 2px dashed var(--button-background);
 | 
					  border: 2px dashed var(--button-background);
 | 
				
			||||||
  background: unset;
 | 
					  background: unset;
 | 
				
			||||||
| 
						 | 
					@ -2594,8 +2508,7 @@ button.disabled,
 | 
				
			||||||
  box-shadow: none;
 | 
					  box-shadow: none;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.disabled:hover,
 | 
					button.disabled:hover, .button.disabled:hover {
 | 
				
			||||||
.button.disabled:hover {
 | 
					 | 
				
			||||||
  cursor: default;
 | 
					  cursor: default;
 | 
				
			||||||
  border: 2px dashed var(--button-background);
 | 
					  border: 2px dashed var(--button-background);
 | 
				
			||||||
  background: unset;
 | 
					  background: unset;
 | 
				
			||||||
| 
						 | 
					@ -2609,41 +2522,36 @@ button.link {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.link:hover {
 | 
					button.link:hover {
 | 
				
			||||||
  color: unset;
 | 
					  color:unset;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.interactive button.disabled svg path,
 | 
					.interactive button.disabled svg path, .interactive .button.disabled svg path {
 | 
				
			||||||
.interactive .button.disabled svg path {
 | 
					 | 
				
			||||||
  fill: var(--interactive-foreground) !important;
 | 
					  fill: var(--interactive-foreground) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.low-interaction button.disabled svg path,
 | 
					.low-interaction button.disabled svg path, .low-interaction .button.disabled svg path {
 | 
				
			||||||
.low-interaction .button.disabled svg path {
 | 
					 | 
				
			||||||
  fill: var(--low-interaction-foreground) !important;
 | 
					  fill: var(--low-interaction-foreground) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.normal-background button.disabled svg path,
 | 
					.normal-background button.disabled svg path, .normal-background .button.disabled svg path {
 | 
				
			||||||
.normal-background .button.disabled svg path {
 | 
					 | 
				
			||||||
  fill: var(--foreground-color) !important;
 | 
					  fill: var(--foreground-color) !important;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.links-w-full a:not(.weblate-link) {
 | 
					.links-w-full a:not(.weblate-link) {
 | 
				
			||||||
  display: flex;
 | 
					  display: flex;
 | 
				
			||||||
  -webkit-column-gap: 0.25rem;
 | 
					  -webkit-column-gap: 0.25rem;
 | 
				
			||||||
  column-gap: 0.25rem;
 | 
					          column-gap: 0.25rem;
 | 
				
			||||||
  padding-left: 0.5rem;
 | 
					  padding-left: 0.5rem;
 | 
				
			||||||
  padding-right: 0.5rem;
 | 
					  padding-right: 0.5rem;
 | 
				
			||||||
  width: 100%;
 | 
					  width: 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.soft,
 | 
					button.soft, .button.soft {
 | 
				
			||||||
.button.soft {
 | 
					 | 
				
			||||||
  border: 2px solid var(--interactive-background);
 | 
					  border: 2px solid var(--interactive-background);
 | 
				
			||||||
  margin: 0;
 | 
					  margin: 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.soft:hover,
 | 
					button.soft:hover, .button.soft:hover {
 | 
				
			||||||
.button.soft:hover {
 | 
					 | 
				
			||||||
  background-color: var(--interactive-background);
 | 
					  background-color: var(--interactive-background);
 | 
				
			||||||
  color: var(--interactive-foreground);
 | 
					  color: var(--interactive-foreground);
 | 
				
			||||||
  border: 2px solid var(--catch-detail-color-contrast);
 | 
					  border: 2px solid var(--catch-detail-color-contrast);
 | 
				
			||||||
| 
						 | 
					@ -2681,7 +2589,7 @@ select:hover {
 | 
				
			||||||
  border-color: var(--catch-detail-color-contrast);
 | 
					  border-color: var(--catch-detail-color-contrast);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.neutral-label {
 | 
					.neutral-label{
 | 
				
			||||||
  /** This label styles as normal text. It's power comes from the many :not(.neutral-label) entries.
 | 
					  /** This label styles as normal text. It's power comes from the many :not(.neutral-label) entries.
 | 
				
			||||||
     * Placed here for autocompletion
 | 
					     * Placed here for autocompletion
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
| 
						 | 
					@ -2709,7 +2617,7 @@ label.button {
 | 
				
			||||||
label:hover:not(.neutral-label) {
 | 
					label:hover:not(.neutral-label) {
 | 
				
			||||||
  background-color: var(--catch-detail-color);
 | 
					  background-color: var(--catch-detail-color);
 | 
				
			||||||
  color: var(--catch-detail-foregroundcolor);
 | 
					  color: var(--catch-detail-foregroundcolor);
 | 
				
			||||||
  border: 2px solid var(--interactive-contrast);
 | 
					  border: 2px solid var(--interactive-contrast)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
label:not(.no-image-background):not(.neutral-label) img {
 | 
					label:not(.no-image-background):not(.neutral-label) img {
 | 
				
			||||||
| 
						 | 
					@ -2813,12 +2721,11 @@ textarea {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.link-underline .subtle a {
 | 
					.link-underline .subtle a {
 | 
				
			||||||
  -webkit-text-decoration: underline 1px #7193bb88;
 | 
					  -webkit-text-decoration: underline 1px #7193bb88;
 | 
				
			||||||
  text-decoration: underline 1px #7193bb88;
 | 
					          text-decoration: underline 1px #7193bb88;
 | 
				
			||||||
  color: #7193bb;
 | 
					  color: #7193bb;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.literal-code,
 | 
					.literal-code, code {
 | 
				
			||||||
code {
 | 
					 | 
				
			||||||
  /* A codeblock */
 | 
					  /* A codeblock */
 | 
				
			||||||
  display: inline-block;
 | 
					  display: inline-block;
 | 
				
			||||||
  background-color: lightgray;
 | 
					  background-color: lightgray;
 | 
				
			||||||
| 
						 | 
					@ -2879,7 +2786,7 @@ code {
 | 
				
			||||||
  border: unset;
 | 
					  border: unset;
 | 
				
			||||||
  border-radius: 5rem;
 | 
					  border-radius: 5rem;
 | 
				
			||||||
  -webkit-backdrop-filter: var(--low-interaction-background);
 | 
					  -webkit-backdrop-filter: var(--low-interaction-background);
 | 
				
			||||||
  backdrop-filter: var(--low-interaction-background);
 | 
					          backdrop-filter: var(--low-interaction-background);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.no-weblate .weblate-link {
 | 
					.no-weblate .weblate-link {
 | 
				
			||||||
| 
						 | 
					@ -2888,12 +2795,12 @@ code {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.link-underline a {
 | 
					.link-underline a {
 | 
				
			||||||
  -webkit-text-decoration: underline 1px var(--foreground-color);
 | 
					  -webkit-text-decoration: underline 1px var(--foreground-color);
 | 
				
			||||||
  text-decoration: underline 1px var(--foreground-color);
 | 
					          text-decoration: underline 1px var(--foreground-color);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
a.link-underline {
 | 
					a.link-underline {
 | 
				
			||||||
  -webkit-text-decoration: underline 1px var(--foreground-color);
 | 
					  -webkit-text-decoration: underline 1px var(--foreground-color);
 | 
				
			||||||
  text-decoration: underline 1px var(--foreground-color);
 | 
					          text-decoration: underline 1px var(--foreground-color);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.link-no-underline a {
 | 
					.link-no-underline a {
 | 
				
			||||||
| 
						 | 
					@ -2941,30 +2848,30 @@ a.link-underline {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
svg.apply-fill path {
 | 
					svg.apply-fill path {
 | 
				
			||||||
  fill: var(--svg-color);
 | 
					  fill: var(--svg-color)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
.compass_arrow {
 | 
					.compass_arrow {
 | 
				
			||||||
  width: calc(2.5rem - 1px);
 | 
					  width: calc( 2.5rem - 1px ) ;
 | 
				
			||||||
  height: calc(2.5rem - 1px);
 | 
					  height: calc( 2.5rem - 1px )
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@media (min-width: 640px) {
 | 
					@media (min-width: 640px) {
 | 
				
			||||||
  .compass_arrow {
 | 
					  .compass_arrow {
 | 
				
			||||||
    width: calc(2.75rem - 1px);
 | 
					    width: calc( 2.75rem - 1px ) ;
 | 
				
			||||||
    height: calc(2.75rem - 1px);
 | 
					    height: calc( 2.75rem - 1px )
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@-webkit-keyframes glowing-drop-shadow {
 | 
					@-webkit-keyframes glowing-drop-shadow {
 | 
				
			||||||
  from {
 | 
					  from {
 | 
				
			||||||
    -webkit-filter: drop-shadow(5px 5px 60px rgb(128 128 128 / 0.6));
 | 
					    -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));
 | 
					            filter: drop-shadow(5px 5px 60px rgb(128 128 128 / 0.6));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  to {
 | 
					  to {
 | 
				
			||||||
    -webkit-filter: drop-shadow(5px 5px 80px rgb(0.5 0.5 0.5 / 0.8));
 | 
					    -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));
 | 
					            filter: drop-shadow(5px 5px 80px rgb(0.5 0.5 0.5 / 0.8));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2973,12 +2880,12 @@ svg.apply-fill path {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  from {
 | 
					  from {
 | 
				
			||||||
    -webkit-transform: translateX(0%);
 | 
					    -webkit-transform: translateX(0%);
 | 
				
			||||||
    transform: translateX(0%);
 | 
					            transform: translateX(0%);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  to {
 | 
					  to {
 | 
				
			||||||
    -webkit-transform: translateX(calc(-100% + 42px));
 | 
					    -webkit-transform: translateX(calc(-100% + 42px));
 | 
				
			||||||
    transform: translateX(calc(-100% + 42px));
 | 
					            transform: translateX(calc(-100% + 42px));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2987,12 +2894,12 @@ svg.apply-fill path {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  from {
 | 
					  from {
 | 
				
			||||||
    -webkit-transform: translateX(0%);
 | 
					    -webkit-transform: translateX(0%);
 | 
				
			||||||
    transform: translateX(0%);
 | 
					            transform: translateX(0%);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  to {
 | 
					  to {
 | 
				
			||||||
    -webkit-transform: translateX(calc(-100% + 42px));
 | 
					    -webkit-transform: translateX(calc(-100% + 42px));
 | 
				
			||||||
    transform: translateX(calc(-100% + 42px));
 | 
					            transform: translateX(calc(-100% + 42px));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -224,10 +224,12 @@ export default class ScriptUtils {
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        const timeoutPromise = new Promise<any>((resolve, reject) => {
 | 
					        const timeoutPromise = new Promise<any>((resolve, reject) => {
 | 
				
			||||||
            setTimeout(
 | 
					            setTimeout(
 | 
				
			||||||
                () =>
 | 
					                () => {
 | 
				
			||||||
                    timeoutSecs === undefined
 | 
					                    if(timeoutSecs === undefined){
 | 
				
			||||||
                        ? reject(new Error("Timout reached"))
 | 
					                        return // No resolve
 | 
				
			||||||
                        : resolve("timeout"),
 | 
					                    }
 | 
				
			||||||
 | 
					                   resolve("timeout")
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
                (timeoutSecs ?? 10) * 1000
 | 
					                (timeoutSecs ?? 10) * 1000
 | 
				
			||||||
            )
 | 
					            )
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,7 @@ class OsmPoiDatabase {
 | 
				
			||||||
        this._client = new Client(connectionString)
 | 
					        this._client = new Client(connectionString)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async getCount(
 | 
					    async getCount(
 | 
				
			||||||
        layer: string,
 | 
					        layer: string,
 | 
				
			||||||
        bbox: [[number, number], [number, number]] = undefined
 | 
					        bbox: [[number, number], [number, number]] = undefined
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -91,6 +91,12 @@ export class Server {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    const result = await handler.handle(path, url.searchParams)
 | 
					                    const result = await handler.handle(path, url.searchParams)
 | 
				
			||||||
 | 
					                    if(result === undefined){
 | 
				
			||||||
 | 
					                        res.writeHead(500)
 | 
				
			||||||
 | 
					                        res.write("Could not fetch this website, probably blocked by them")
 | 
				
			||||||
 | 
					                        res.end()
 | 
				
			||||||
 | 
					                        return
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    if (typeof result !== "string") {
 | 
					                    if (typeof result !== "string") {
 | 
				
			||||||
                        console.error(
 | 
					                        console.error(
 | 
				
			||||||
                            "Internal server error: handling",
 | 
					                            "Internal server error: handling",
 | 
				
			||||||
| 
						 | 
					@ -103,7 +109,7 @@ export class Server {
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                    const extraHeaders = handler.addHeaders ?? {}
 | 
					                    const extraHeaders = handler.addHeaders ?? {}
 | 
				
			||||||
                    res.writeHead(200, { "Content-Type": handler.mimetype, ...extraHeaders })
 | 
					                    res.writeHead(200, { "Content-Type": handler.mimetype, ...extraHeaders })
 | 
				
			||||||
                    res.write(result)
 | 
					                    res.write(""+result)
 | 
				
			||||||
                    res.end()
 | 
					                    res.end()
 | 
				
			||||||
                } catch (e) {
 | 
					                } catch (e) {
 | 
				
			||||||
                    console.error("Could not handle request:", e)
 | 
					                    console.error("Could not handle request:", e)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -4,26 +4,30 @@ import parse from "node-html-parser"
 | 
				
			||||||
import ScriptUtils from "./ScriptUtils"
 | 
					import ScriptUtils from "./ScriptUtils"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServerLdScrape extends Script {
 | 
					class ServerLdScrape extends Script {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor() {
 | 
					    constructor() {
 | 
				
			||||||
        super("Starts a server which fetches a webpage and returns embedded LD+JSON")
 | 
					        super("Starts a server which fetches a webpage and returns embedded LD+JSON")
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static async attemptDownload(url: string) {
 | 
					    private static async attemptDownload(url: string) {
 | 
				
			||||||
        const host = new URL(url).host
 | 
					        const host = new URL(url).host
 | 
				
			||||||
 | 
					        const random = Math.floor(Math.random()*100)
 | 
				
			||||||
 | 
					        const random1 = Math.floor(Math.random()*100)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const headers = [
 | 
					        const headers = [
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                "User-Agent":
 | 
					                "User-Agent":
 | 
				
			||||||
                    "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36",
 | 
					                    `Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.${random}.${random1} Safari/537.36`,
 | 
				
			||||||
                "accept": "application/html"
 | 
					                "accept": "application/html"
 | 
				
			||||||
            },
 | 
					            }
 | 
				
			||||||
            {
 | 
					           /* {
 | 
				
			||||||
                "User-Agent": "MapComplete/openstreetmap scraper; pietervdvn@posteo.net; https://github.com/pietervdvn/MapComplete",
 | 
					                "User-Agent": "MapComplete/openstreetmap scraper; pietervdvn@posteo.net; https://github.com/pietervdvn/MapComplete",
 | 
				
			||||||
                "accept": "application/html"
 | 
					                "accept": "application/html"
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                Host: host,
 | 
					                Host: host,
 | 
				
			||||||
                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:122.0) Gecko/20100101 Firefox/122.0",
 | 
					                "User-Agent": "Mozilla/5.0 (Windows NT 10.0; rv:122.0) Gecko/20100101 Firefox/122.0",
 | 
				
			||||||
                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8",
 | 
					                "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,* /*;q=0.8", TODO remove space in * /*
 | 
				
			||||||
                "Accept-Language": "en-US,en;q=0.5",
 | 
					                "Accept-Language": "en-US,en;q=0.5",
 | 
				
			||||||
                "Accept-Encoding": "gzip, deflate, br",
 | 
					                "Accept-Encoding": "gzip, deflate, br",
 | 
				
			||||||
                "Alt-Used": host,
 | 
					                "Alt-Used": host,
 | 
				
			||||||
| 
						 | 
					@ -36,7 +40,7 @@ class ServerLdScrape extends Script {
 | 
				
			||||||
                "Sec-Fetch-User":"?1",
 | 
					                "Sec-Fetch-User":"?1",
 | 
				
			||||||
                "TE": "trailers",
 | 
					                "TE": "trailers",
 | 
				
			||||||
                Connection: "keep-alive"
 | 
					                Connection: "keep-alive"
 | 
				
			||||||
            }
 | 
					            }*/
 | 
				
			||||||
        ]
 | 
					        ]
 | 
				
			||||||
        for (let i = 0; i < headers.length; i++) {
 | 
					        for (let i = 0; i < headers.length; i++) {
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
| 
						 | 
					@ -47,7 +51,7 @@ class ServerLdScrape extends Script {
 | 
				
			||||||
                    10
 | 
					                    10
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
            } catch (e) {
 | 
					            } catch (e) {
 | 
				
			||||||
                console.error("Could not download", url, "with headers", headers[i])
 | 
					                console.error("Could not download", url, "with headers", headers[i], "due to", e)
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -67,10 +71,9 @@ class ServerLdScrape extends Script {
 | 
				
			||||||
                    console.log("URL", url)
 | 
					                    console.log("URL", url)
 | 
				
			||||||
                    if (cache[url] !== undefined) {
 | 
					                    if (cache[url] !== undefined) {
 | 
				
			||||||
                        const { date, contents } = cache[url]
 | 
					                        const { date, contents } = cache[url]
 | 
				
			||||||
                        console.log(">>>", date, contents)
 | 
					 | 
				
			||||||
                        // In seconds
 | 
					                        // In seconds
 | 
				
			||||||
                        const tdiff = (new Date().getTime() - (date?.getTime() ?? 0)) / 1000
 | 
					                        const tdiff = (new Date().getTime() - (date?.getTime() ?? 0)) / 1000
 | 
				
			||||||
                        if (tdiff < 24 * 60 * 60) {
 | 
					                        if (tdiff < 31 * 24 * 60 * 60) {
 | 
				
			||||||
                            return JSON.stringify(contents)
 | 
					                            return JSON.stringify(contents)
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
| 
						 | 
					@ -83,6 +86,9 @@ class ServerLdScrape extends Script {
 | 
				
			||||||
                        if (dloaded === "timeout") {
 | 
					                        if (dloaded === "timeout") {
 | 
				
			||||||
                            return "{\"#\":\"timout reached\"}"
 | 
					                            return "{\"#\":\"timout reached\"}"
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					                        if(dloaded === undefined){
 | 
				
			||||||
 | 
					                            return undefined
 | 
				
			||||||
 | 
					                        }
 | 
				
			||||||
                    } while (dloaded["redirect"])
 | 
					                    } while (dloaded["redirect"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if (dloaded["content"].startsWith("{")) {
 | 
					                    if (dloaded["content"].startsWith("{")) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,10 +2,15 @@ import { ImmutableStore, Store, UIEventSource } from "../UIEventSource"
 | 
				
			||||||
import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
 | 
					import LayoutConfig from "../../Models/ThemeConfig/LayoutConfig"
 | 
				
			||||||
import { LocalStorageSource } from "../Web/LocalStorageSource"
 | 
					import { LocalStorageSource } from "../Web/LocalStorageSource"
 | 
				
			||||||
import { QueryParameters } from "../Web/QueryParameters"
 | 
					import { QueryParameters } from "../Web/QueryParameters"
 | 
				
			||||||
 | 
					import Hash from "../Web/Hash"
 | 
				
			||||||
 | 
					import OsmObjectDownloader from "../Osm/OsmObjectDownloader"
 | 
				
			||||||
 | 
					import { OsmObject } from "../Osm/OsmObject"
 | 
				
			||||||
 | 
					import Constants from "../../Models/Constants"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * This actor is responsible to set the map location.
 | 
					 * This actor is responsible to set the map location.
 | 
				
			||||||
 * It will attempt to
 | 
					 * It will attempt to
 | 
				
			||||||
 | 
					 * - Set the map to the position of the selected element
 | 
				
			||||||
 * - Set the map to the position as passed in by the query parameters (if available)
 | 
					 * - Set the map to the position as passed in by the query parameters (if available)
 | 
				
			||||||
 * - Set the map to the position remembered in LocalStorage (if available)
 | 
					 * - Set the map to the position remembered in LocalStorage (if available)
 | 
				
			||||||
 * - Set the map to the layout default
 | 
					 * - Set the map to the layout default
 | 
				
			||||||
| 
						 | 
					@ -16,6 +21,7 @@ export default class InitialMapPositioning {
 | 
				
			||||||
    public zoom: UIEventSource<number>
 | 
					    public zoom: UIEventSource<number>
 | 
				
			||||||
    public location: UIEventSource<{ lon: number; lat: number }>
 | 
					    public location: UIEventSource<{ lon: number; lat: number }>
 | 
				
			||||||
    public useTerrain: Store<boolean>
 | 
					    public useTerrain: Store<boolean>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(layoutToUse: LayoutConfig) {
 | 
					    constructor(layoutToUse: LayoutConfig) {
 | 
				
			||||||
        function localStorageSynced(
 | 
					        function localStorageSynced(
 | 
				
			||||||
            key: string,
 | 
					            key: string,
 | 
				
			||||||
| 
						 | 
					@ -38,6 +44,8 @@ export default class InitialMapPositioning {
 | 
				
			||||||
            return src
 | 
					            return src
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const initialHash = Hash.hash.data
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // -- Location control initialization
 | 
					        // -- Location control initialization
 | 
				
			||||||
        this.zoom = localStorageSynced(
 | 
					        this.zoom = localStorageSynced(
 | 
				
			||||||
            "z",
 | 
					            "z",
 | 
				
			||||||
| 
						 | 
					@ -62,5 +70,19 @@ export default class InitialMapPositioning {
 | 
				
			||||||
            lon.setData(loc.lon)
 | 
					            lon.setData(loc.lon)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
        this.useTerrain = new ImmutableStore<boolean>(layoutToUse.enableTerrain)
 | 
					        this.useTerrain = new ImmutableStore<boolean>(layoutToUse.enableTerrain)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (initialHash?.match(/^(node|way|relation)\/[0-9]+$/)) {
 | 
				
			||||||
 | 
					            const [type, id] = initialHash.split("/")
 | 
				
			||||||
 | 
					            OsmObjectDownloader.RawDownloadObjectAsync(type, Number(id), Constants.osmAuthConfig.url + "/").then(osmObject => {
 | 
				
			||||||
 | 
					                if (osmObject === "deleted") {
 | 
				
			||||||
 | 
					                    return
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                const targetLayer = layoutToUse.getMatchingLayer(osmObject.tags)
 | 
				
			||||||
 | 
					                this.zoom.setData(Math.max(this.zoom.data, targetLayer.minzoom))
 | 
				
			||||||
 | 
					                const [lat, lon] = osmObject.centerpoint()
 | 
				
			||||||
 | 
					                this.location.setData({ lon, lat })
 | 
				
			||||||
 | 
					            })
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -127,7 +127,9 @@ export abstract class OsmObject {
 | 
				
			||||||
        return result
 | 
					        return result
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // The centerpoint of the feature, as [lat, lon]
 | 
					    /** The centerpoint of the feature, as [lat, lon]
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public abstract centerpoint(): [number, number]
 | 
					    public abstract centerpoint(): [number, number]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public abstract asGeoJson(): any
 | 
					    public abstract asGeoJson(): any
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -62,7 +62,7 @@ export default class OsmObjectDownloader {
 | 
				
			||||||
        if (idN < 0) {
 | 
					        if (idN < 0) {
 | 
				
			||||||
            obj = this.constructObject(<"node" | "way" | "relation">type, idN)
 | 
					            obj = this.constructObject(<"node" | "way" | "relation">type, idN)
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            obj = await this.RawDownloadObjectAsync(type, idN, maxCacheAgeInSecs)
 | 
					            obj = await OsmObjectDownloader.RawDownloadObjectAsync(type, idN, this.backend, maxCacheAgeInSecs)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (obj === "deleted") {
 | 
					        if (obj === "deleted") {
 | 
				
			||||||
            return obj
 | 
					            return obj
 | 
				
			||||||
| 
						 | 
					@ -211,13 +211,22 @@ export default class OsmObjectDownloader {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private async RawDownloadObjectAsync(
 | 
					    /**
 | 
				
			||||||
 | 
					     * Only to be used in exceptional cases
 | 
				
			||||||
 | 
					     * @param type
 | 
				
			||||||
 | 
					     * @param idN
 | 
				
			||||||
 | 
					     * @param backend
 | 
				
			||||||
 | 
					     * @param maxCacheAgeInSecs
 | 
				
			||||||
 | 
					     * @constructor
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public static async RawDownloadObjectAsync(
 | 
				
			||||||
        type: string,
 | 
					        type: string,
 | 
				
			||||||
        idN: number,
 | 
					        idN: number,
 | 
				
			||||||
 | 
					        backend: string,
 | 
				
			||||||
        maxCacheAgeInSecs?: number
 | 
					        maxCacheAgeInSecs?: number
 | 
				
			||||||
    ): Promise<OsmObject | "deleted"> {
 | 
					    ): Promise<OsmObject | "deleted"> {
 | 
				
			||||||
        const full = type !== "node" ? "/full" : ""
 | 
					        const full = type !== "node" ? "/full" : ""
 | 
				
			||||||
        const url = `${this.backend}api/0.6/${type}/${idN}${full}`
 | 
					        const url = `${backend}api/0.6/${type}/${idN}${full}`
 | 
				
			||||||
        const rawData = await Utils.downloadJsonCachedAdvanced(
 | 
					        const rawData = await Utils.downloadJsonCachedAdvanced(
 | 
				
			||||||
            url,
 | 
					            url,
 | 
				
			||||||
            (maxCacheAgeInSecs ?? 10) * 1000
 | 
					            (maxCacheAgeInSecs ?? 10) * 1000
 | 
				
			||||||
| 
						 | 
					@ -227,7 +236,7 @@ export default class OsmObjectDownloader {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // A full query might contain more then just the requested object (e.g. nodes that are part of a way, where we only want the way)
 | 
					        // A full query might contain more then just the requested object (e.g. nodes that are part of a way, where we only want the way)
 | 
				
			||||||
        const parsed = OsmObject.ParseObjects(rawData["content"].elements)
 | 
					        const parsed = OsmObject.ParseObjects(rawData["content"].elements)
 | 
				
			||||||
        // Lets fetch the object we need
 | 
					        // Let us fetch the object we need
 | 
				
			||||||
        for (const osmObject of parsed) {
 | 
					        for (const osmObject of parsed) {
 | 
				
			||||||
            if (osmObject.type !== type) {
 | 
					            if (osmObject.type !== type) {
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -435,7 +435,7 @@ export default class SimpleMetaTaggers {
 | 
				
			||||||
                        () => feature.properties["_country"]
 | 
					                        () => feature.properties["_country"]
 | 
				
			||||||
                    )
 | 
					                    )
 | 
				
			||||||
                    let canonical =
 | 
					                    let canonical =
 | 
				
			||||||
                        denomination?.canonicalValue(value, defaultDenom == denomination) ??
 | 
					                        denomination?.canonicalValue(value, defaultDenom == denomination, unit.inverted) ??
 | 
				
			||||||
                        undefined
 | 
					                        undefined
 | 
				
			||||||
                    if (canonical === value) {
 | 
					                    if (canonical === value) {
 | 
				
			||||||
                        break
 | 
					                        break
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -331,6 +331,9 @@ export default class LinkedDataLoader {
 | 
				
			||||||
                return
 | 
					                return
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            output[key] = output[key].map((v) => applyF(v))
 | 
					            output[key] = output[key].map((v) => applyF(v))
 | 
				
			||||||
 | 
					            if(!output[key].some(v => v !== undefined)){
 | 
				
			||||||
 | 
					                delete output[key]
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function asBoolean(key: string, invert: boolean = false) {
 | 
					        function asBoolean(key: string, invert: boolean = false) {
 | 
				
			||||||
| 
						 | 
					@ -379,6 +382,7 @@ export default class LinkedDataLoader {
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            return "€" + Number(p)
 | 
					            return "€" + Number(p)
 | 
				
			||||||
        })
 | 
					        })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (output["charge"] && output["timeUnit"]) {
 | 
					        if (output["charge"] && output["timeUnit"]) {
 | 
				
			||||||
            const duration =
 | 
					            const duration =
 | 
				
			||||||
                Number(output["chargeEnd"] ?? "1") - Number(output["chargeStart"] ?? "0")
 | 
					                Number(output["chargeEnd"] ?? "1") - Number(output["chargeStart"] ?? "0")
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
import { Translation, TypedTranslation } from "../UI/i18n/Translation"
 | 
					import { Translation, TypedTranslation } from "../UI/i18n/Translation"
 | 
				
			||||||
import { DenominationConfigJson } from "./ThemeConfig/Json/UnitConfigJson"
 | 
					import { DenominationConfigJson } from "./ThemeConfig/Json/UnitConfigJson"
 | 
				
			||||||
import Translations from "../UI/i18n/Translations"
 | 
					import Translations from "../UI/i18n/Translations"
 | 
				
			||||||
 | 
					import { Validator } from "../UI/InputElement/Validator"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/**
 | 
					/**
 | 
				
			||||||
 * A 'denomination' is one way to write a certain quantity.
 | 
					 * A 'denomination' is one way to write a certain quantity.
 | 
				
			||||||
| 
						 | 
					@ -15,6 +16,7 @@ export class Denomination {
 | 
				
			||||||
    public readonly alternativeDenominations: string[]
 | 
					    public readonly alternativeDenominations: string[]
 | 
				
			||||||
    public readonly human: TypedTranslation<{ quantity: string }>
 | 
					    public readonly human: TypedTranslation<{ quantity: string }>
 | 
				
			||||||
    public readonly humanSingular?: Translation
 | 
					    public readonly humanSingular?: Translation
 | 
				
			||||||
 | 
					    private readonly _validator: Validator
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private constructor(
 | 
					    private constructor(
 | 
				
			||||||
        canonical: string,
 | 
					        canonical: string,
 | 
				
			||||||
| 
						 | 
					@ -24,7 +26,8 @@ export class Denomination {
 | 
				
			||||||
        addSpace: boolean,
 | 
					        addSpace: boolean,
 | 
				
			||||||
        alternativeDenominations: string[],
 | 
					        alternativeDenominations: string[],
 | 
				
			||||||
        _human: TypedTranslation<{ quantity: string }>,
 | 
					        _human: TypedTranslation<{ quantity: string }>,
 | 
				
			||||||
        _humanSingular?: Translation
 | 
					        _humanSingular: Translation,
 | 
				
			||||||
 | 
					        validator: Validator
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        this.canonical = canonical
 | 
					        this.canonical = canonical
 | 
				
			||||||
        this._canonicalSingular = _canonicalSingular
 | 
					        this._canonicalSingular = _canonicalSingular
 | 
				
			||||||
| 
						 | 
					@ -34,9 +37,10 @@ export class Denomination {
 | 
				
			||||||
        this.alternativeDenominations = alternativeDenominations
 | 
					        this.alternativeDenominations = alternativeDenominations
 | 
				
			||||||
        this.human = _human
 | 
					        this.human = _human
 | 
				
			||||||
        this.humanSingular = _humanSingular
 | 
					        this.humanSingular = _humanSingular
 | 
				
			||||||
 | 
					        this._validator = validator
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public static fromJson(json: DenominationConfigJson, context: string) {
 | 
					    public static fromJson(json: DenominationConfigJson, validator: Validator, context: string) {
 | 
				
			||||||
        context = `${context}.unit(${json.canonicalDenomination})`
 | 
					        context = `${context}.unit(${json.canonicalDenomination})`
 | 
				
			||||||
        const canonical = json.canonicalDenomination.trim()
 | 
					        const canonical = json.canonicalDenomination.trim()
 | 
				
			||||||
        if (canonical === undefined) {
 | 
					        if (canonical === undefined) {
 | 
				
			||||||
| 
						 | 
					@ -68,7 +72,8 @@ export class Denomination {
 | 
				
			||||||
            json.addSpace ?? false,
 | 
					            json.addSpace ?? false,
 | 
				
			||||||
            json.alternativeDenomination?.map((v) => v.trim()) ?? [],
 | 
					            json.alternativeDenomination?.map((v) => v.trim()) ?? [],
 | 
				
			||||||
            humanTexts,
 | 
					            humanTexts,
 | 
				
			||||||
            Translations.T(json.humanSingular, context + "humanSingular")
 | 
					            Translations.T(json.humanSingular, context + "humanSingular"),
 | 
				
			||||||
 | 
					            validator
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -81,7 +86,8 @@ export class Denomination {
 | 
				
			||||||
            this.addSpace,
 | 
					            this.addSpace,
 | 
				
			||||||
            this.alternativeDenominations,
 | 
					            this.alternativeDenominations,
 | 
				
			||||||
            this.human,
 | 
					            this.human,
 | 
				
			||||||
            this.humanSingular
 | 
					            this.humanSingular,
 | 
				
			||||||
 | 
					            this._validator
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -94,7 +100,8 @@ export class Denomination {
 | 
				
			||||||
            this.addSpace,
 | 
					            this.addSpace,
 | 
				
			||||||
            [this.canonical, ...this.alternativeDenominations],
 | 
					            [this.canonical, ...this.alternativeDenominations],
 | 
				
			||||||
            this.human,
 | 
					            this.human,
 | 
				
			||||||
            this.humanSingular
 | 
					            this.humanSingular,
 | 
				
			||||||
 | 
					            this._validator
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -103,19 +110,21 @@ export class Denomination {
 | 
				
			||||||
     * @param value the value from OSM
 | 
					     * @param value the value from OSM
 | 
				
			||||||
     * @param actAsDefault if set and the value can be parsed as number, will be parsed and trimmed
 | 
					     * @param actAsDefault if set and the value can be parsed as number, will be parsed and trimmed
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * import Validators from "../UI/InputElement/Validators"
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
     * const unit = Denomination.fromJson({
 | 
					     * const unit = Denomination.fromJson({
 | 
				
			||||||
     *               canonicalDenomination: "m",
 | 
					     *               canonicalDenomination: "m",
 | 
				
			||||||
     *               alternativeDenomination: ["meter"],
 | 
					     *               alternativeDenomination: ["meter"],
 | 
				
			||||||
     *               human: {
 | 
					     *               human: {
 | 
				
			||||||
     *                   en: "{quantity} meter"
 | 
					     *                   en: "{quantity} meter"
 | 
				
			||||||
     *               }
 | 
					     *               }
 | 
				
			||||||
     *           }, "test")
 | 
					     *           }, Validators.get("float"), "test")
 | 
				
			||||||
     * unit.canonicalValue("42m", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42m", true, false) // =>"42 m"
 | 
				
			||||||
     * unit.canonicalValue("42", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42", true, false) // =>"42 m"
 | 
				
			||||||
     * unit.canonicalValue("42 m", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42 m", true, false) // =>"42 m"
 | 
				
			||||||
     * unit.canonicalValue("42 meter", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42 meter", true, false) // =>"42 m"
 | 
				
			||||||
     * unit.canonicalValue("42m", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42m", true, false) // =>"42 m"
 | 
				
			||||||
     * unit.canonicalValue("42", true) // =>"42 m"
 | 
					     * unit.canonicalValue("42", true, false) // =>"42 m"
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * // Should be trimmed if canonical is empty
 | 
					     * // Should be trimmed if canonical is empty
 | 
				
			||||||
     * const unit = Denomination.fromJson({
 | 
					     * const unit = Denomination.fromJson({
 | 
				
			||||||
| 
						 | 
					@ -124,22 +133,26 @@ export class Denomination {
 | 
				
			||||||
     *               human: {
 | 
					     *               human: {
 | 
				
			||||||
     *                   en: "{quantity} meter"
 | 
					     *                   en: "{quantity} meter"
 | 
				
			||||||
     *               }
 | 
					     *               }
 | 
				
			||||||
     *           }, "test")
 | 
					     *           }, Validators.get("float"), "test")
 | 
				
			||||||
     * unit.canonicalValue("42m", true) // =>"42"
 | 
					     * unit.canonicalValue("42m", true, false) // =>"42"
 | 
				
			||||||
     * unit.canonicalValue("42", true) // =>"42"
 | 
					     * unit.canonicalValue("42", true, false) // =>"42"
 | 
				
			||||||
     * unit.canonicalValue("42 m", true) // =>"42"
 | 
					     * unit.canonicalValue("42 m", true, false) // =>"42"
 | 
				
			||||||
     * unit.canonicalValue("42 meter", true) // =>"42"
 | 
					     * unit.canonicalValue("42 meter", true, false) // =>"42"
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public canonicalValue(value: string, actAsDefault: boolean): string {
 | 
					    public canonicalValue(value: string, actAsDefault: boolean, inverted: boolean): string {
 | 
				
			||||||
        if (value === undefined) {
 | 
					        if (value === undefined) {
 | 
				
			||||||
            return undefined
 | 
					            return undefined
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const stripped = this.StrippedValue(value, actAsDefault)
 | 
					        const stripped = this.StrippedValue(value, actAsDefault, inverted)
 | 
				
			||||||
        if (stripped === null) {
 | 
					        if (stripped === null) {
 | 
				
			||||||
            return null
 | 
					            return null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        if(inverted){
 | 
				
			||||||
 | 
					            return (stripped + "/" + this.canonical).trim()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        if (stripped === "1" && this._canonicalSingular !== undefined) {
 | 
					        if (stripped === "1" && this._canonicalSingular !== undefined) {
 | 
				
			||||||
            return ("1 " + this._canonicalSingular).trim()
 | 
					            return ("1 " + this._canonicalSingular).trim()
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -153,8 +166,8 @@ export class Denomination {
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * Returns null if it doesn't match this unit
 | 
					     * Returns null if it doesn't match this unit
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    public StrippedValue(value: string, actAsDefault: boolean): string {
 | 
					    public StrippedValue(value: string, actAsDefault: boolean, inverted: boolean): string {
 | 
				
			||||||
        if (value === undefined) {
 | 
					        if (value === undefined || value === "") {
 | 
				
			||||||
            return undefined
 | 
					            return undefined
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -171,10 +184,16 @@ export class Denomination {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        function substr(key) {
 | 
					        function substr(key) {
 | 
				
			||||||
            if (self.prefix) {
 | 
					            if (self.prefix) {
 | 
				
			||||||
                return value.substr(key.length).trim()
 | 
					                return value.substring(key.length).trim()
 | 
				
			||||||
            } else {
 | 
					 | 
				
			||||||
                return value.substring(0, value.length - key.length).trim()
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					            let trimmed = value.substring(0, value.length - key.length).trim()
 | 
				
			||||||
 | 
					            if(!inverted){
 | 
				
			||||||
 | 
					                return trimmed
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            if(trimmed.endsWith("/")){
 | 
				
			||||||
 | 
					                trimmed = trimmed.substring(0, trimmed.length - 1).trim()
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            return trimmed
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (this.canonical !== "" && startsWith(this.canonical.toLowerCase())) {
 | 
					        if (this.canonical !== "" && startsWith(this.canonical.toLowerCase())) {
 | 
				
			||||||
| 
						 | 
					@ -199,11 +218,13 @@ export class Denomination {
 | 
				
			||||||
            return null
 | 
					            return null
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const parsed = Number(value.trim())
 | 
					        if(!this._validator.isValid(value.trim())){
 | 
				
			||||||
        if (!isNaN(parsed)) {
 | 
					            return null
 | 
				
			||||||
            return value.trim()
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					        return this._validator.reformat(value.trim())
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return null
 | 
					    withValidator(validator: Validator) {
 | 
				
			||||||
 | 
					        return new Denomination(this.canonical, this._canonicalSingular, this.useIfNoUnitGiven, this.prefix, this.addSpace, this.alternativeDenominations, this.human, this.humanSingular, validator)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -519,6 +519,7 @@ export interface LayerConfigJson {
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * Either a list with [{"key": "unitname", "key2": {"quantity": "unitname", "denominations": ["denom", "denom"]}}]
 | 
					     * Either a list with [{"key": "unitname", "key2": {"quantity": "unitname", "denominations": ["denom", "denom"]}}]
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
 | 
					     * Use `"inverted": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @see UnitConfigJson
 | 
					     * @see UnitConfigJson
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					@ -526,7 +527,7 @@ export interface LayerConfigJson {
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    units?: (
 | 
					    units?: (
 | 
				
			||||||
        | UnitConfigJson
 | 
					        | UnitConfigJson
 | 
				
			||||||
        | Record<string, string | { quantity: string; denominations: string[]; canonical?: string }>
 | 
					        | Record<string, string | { quantity: string; denominations: string[]; canonical?: string, inverted?: boolean }>
 | 
				
			||||||
    )[]
 | 
					    )[]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -229,6 +229,7 @@ export interface QuestionableTagRenderingConfigJson extends TagRenderingConfigJs
 | 
				
			||||||
         * A (translated) text that is shown (as gray text) within the textfield
 | 
					         * A (translated) text that is shown (as gray text) within the textfield
 | 
				
			||||||
         * type: translation
 | 
					         * type: translation
 | 
				
			||||||
         * group: expert
 | 
					         * group: expert
 | 
				
			||||||
 | 
					         * ifunset: No specific placeholder is set, show the type of the textfield
 | 
				
			||||||
         */
 | 
					         */
 | 
				
			||||||
        placeholder?: Translatable
 | 
					        placeholder?: Translatable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,7 +88,7 @@ export interface TagRenderingConfigJson {
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * question: When should this item be shown?
 | 
					     * question: When should this item be shown?
 | 
				
			||||||
     * type: tag
 | 
					     * type: tag
 | 
				
			||||||
     * ifunset: No specific condition set; always show this tagRendering or ask the question if unkown
 | 
					     * ifunset: No specific condition set; always show this tagRendering or show this question if unknown
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * Only show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.
 | 
					     * Only show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
| 
						 | 
					@ -132,9 +132,10 @@ export interface TagRenderingConfigJson {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /** question: When should this item be shown (including special conditions)?
 | 
					    /** question: When should this item be shown (including special conditions)?
 | 
				
			||||||
     * type: tag
 | 
					     * type: tag
 | 
				
			||||||
 | 
					     * ifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * If set, this tag will be evaluated agains the _usersettings/application state_ table.
 | 
					     * If set, this tag will be evaluated against the _usersettings/application state_ table.
 | 
				
			||||||
     * Enable 'show debug info' in user settings to see available options.
 | 
					     * Enable 'show debug info' in user settings to see available options (at the settings-tab).
 | 
				
			||||||
     * Note that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_
 | 
					     * Note that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    metacondition?: TagConfigJson
 | 
					    metacondition?: TagConfigJson
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -97,18 +97,6 @@ export default class LayerConfig extends WithContextLoader {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.allowSplit = json.allowSplit ?? false
 | 
					        this.allowSplit = json.allowSplit ?? false
 | 
				
			||||||
        this.name = Translations.T(json.name, translationContext + ".name")
 | 
					        this.name = Translations.T(json.name, translationContext + ".name")
 | 
				
			||||||
        if (json.units !== undefined && !Array.isArray(json.units)) {
 | 
					 | 
				
			||||||
            throw (
 | 
					 | 
				
			||||||
                "At " +
 | 
					 | 
				
			||||||
                context +
 | 
					 | 
				
			||||||
                ".units: the 'units'-section should be a list; you probably have an object there"
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        this.units = [].concat(
 | 
					 | 
				
			||||||
            ...(json.units ?? []).map((unitJson, i) =>
 | 
					 | 
				
			||||||
                Unit.fromJson(unitJson, `${context}.unit[${i}]`)
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (json.description !== undefined) {
 | 
					        if (json.description !== undefined) {
 | 
				
			||||||
            if (Object.keys(json.description).length === 0) {
 | 
					            if (Object.keys(json.description).length === 0) {
 | 
				
			||||||
| 
						 | 
					@ -280,6 +268,18 @@ export default class LayerConfig extends WithContextLoader {
 | 
				
			||||||
                    this.id + ".tagRenderings[" + i + "]"
 | 
					                    this.id + ".tagRenderings[" + i + "]"
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        if (json.units !== undefined && !Array.isArray(json.units)) {
 | 
				
			||||||
 | 
					            throw (
 | 
				
			||||||
 | 
					                "At " +
 | 
				
			||||||
 | 
					                context +
 | 
				
			||||||
 | 
					                ".units: the 'units'-section should be a list; you probably have an object there"
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        this.units = [].concat(
 | 
				
			||||||
 | 
					            ...(json.units ?? []).map((unitJson, i) =>
 | 
				
			||||||
 | 
					                Unit.fromJson(unitJson, this.tagRenderings,`${context}.unit[${i}]`)
 | 
				
			||||||
 | 
					            )
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        if (
 | 
				
			||||||
            json.filter !== undefined &&
 | 
					            json.filter !== undefined &&
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -2,6 +2,10 @@ import BaseUIElement from "../UI/BaseUIElement"
 | 
				
			||||||
import { Denomination } from "./Denomination"
 | 
					import { Denomination } from "./Denomination"
 | 
				
			||||||
import UnitConfigJson from "./ThemeConfig/Json/UnitConfigJson"
 | 
					import UnitConfigJson from "./ThemeConfig/Json/UnitConfigJson"
 | 
				
			||||||
import unit from "../../assets/layers/unit/unit.json"
 | 
					import unit from "../../assets/layers/unit/unit.json"
 | 
				
			||||||
 | 
					import { QuestionableTagRenderingConfigJson } from "./ThemeConfig/Json/QuestionableTagRenderingConfigJson"
 | 
				
			||||||
 | 
					import TagRenderingConfig from "./ThemeConfig/TagRenderingConfig"
 | 
				
			||||||
 | 
					import Validators, { ValidatorType } from "../UI/InputElement/Validators"
 | 
				
			||||||
 | 
					import { Validator } from "../UI/InputElement/Validator"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export class Unit {
 | 
					export class Unit {
 | 
				
			||||||
    private static allUnits = this.initUnits()
 | 
					    private static allUnits = this.initUnits()
 | 
				
			||||||
| 
						 | 
					@ -10,14 +14,20 @@ export class Unit {
 | 
				
			||||||
    public readonly denominationsSorted: Denomination[]
 | 
					    public readonly denominationsSorted: Denomination[]
 | 
				
			||||||
    public readonly eraseInvalid: boolean
 | 
					    public readonly eraseInvalid: boolean
 | 
				
			||||||
    public readonly quantity: string
 | 
					    public readonly quantity: string
 | 
				
			||||||
 | 
					    private readonly _validator: Validator
 | 
				
			||||||
 | 
					    public readonly inverted: boolean
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(
 | 
					    constructor(
 | 
				
			||||||
        quantity: string,
 | 
					        quantity: string,
 | 
				
			||||||
        appliesToKeys: string[],
 | 
					        appliesToKeys: string[],
 | 
				
			||||||
        applicableDenominations: Denomination[],
 | 
					        applicableDenominations: Denomination[],
 | 
				
			||||||
        eraseInvalid: boolean
 | 
					        eraseInvalid: boolean,
 | 
				
			||||||
 | 
					        validator: Validator,
 | 
				
			||||||
 | 
					        inverted: boolean = false
 | 
				
			||||||
    ) {
 | 
					    ) {
 | 
				
			||||||
        this.quantity = quantity
 | 
					        this.quantity = quantity
 | 
				
			||||||
 | 
					        this._validator = validator
 | 
				
			||||||
 | 
					        this.inverted = inverted
 | 
				
			||||||
        this.appliesToKeys = new Set(appliesToKeys)
 | 
					        this.appliesToKeys = new Set(appliesToKeys)
 | 
				
			||||||
        this.denominations = applicableDenominations
 | 
					        this.denominations = applicableDenominations
 | 
				
			||||||
        this.eraseInvalid = eraseInvalid
 | 
					        this.eraseInvalid = eraseInvalid
 | 
				
			||||||
| 
						 | 
					@ -66,13 +76,47 @@ export class Unit {
 | 
				
			||||||
    static fromJson(
 | 
					    static fromJson(
 | 
				
			||||||
        json:
 | 
					        json:
 | 
				
			||||||
            | UnitConfigJson
 | 
					            | UnitConfigJson
 | 
				
			||||||
            | Record<string, string | { quantity: string; denominations: string[] }>,
 | 
					            | Record<string, string | { quantity: string; denominations: string[], inverted?: boolean }>,
 | 
				
			||||||
 | 
					        tagRenderings: TagRenderingConfig[],
 | 
				
			||||||
        ctx: string
 | 
					        ctx: string
 | 
				
			||||||
    ): Unit[] {
 | 
					    ): Unit[] {
 | 
				
			||||||
        if (!json.appliesToKey && !json.quantity) {
 | 
					
 | 
				
			||||||
            return this.loadFromLibrary(<any>json, ctx)
 | 
					        let types: Record<string, ValidatorType> = {}
 | 
				
			||||||
 | 
					        for (const tagRendering of tagRenderings) {
 | 
				
			||||||
 | 
					            if (tagRendering.freeform?.type) {
 | 
				
			||||||
 | 
					                types[tagRendering.freeform.key] = tagRendering.freeform.type
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return [this.parse(<UnitConfigJson>json, ctx)]
 | 
					
 | 
				
			||||||
 | 
					        if (!json.appliesToKey && !json.quantity) {
 | 
				
			||||||
 | 
					            return this.loadFromLibrary(<any>json, types, ctx)
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return this.parse(<UnitConfigJson>json, types, ctx)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    private static parseDenomination(json: UnitConfigJson, validator: Validator, appliesToKey: string, ctx: string): Unit {
 | 
				
			||||||
 | 
					        const applicable = json.applicableUnits.map((u, i) =>
 | 
				
			||||||
 | 
					            Denomination.fromJson(u, validator, `${ctx}.units[${i}]`)
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if (
 | 
				
			||||||
 | 
					            json.defaultInput &&
 | 
				
			||||||
 | 
					            !applicable.some((denom) => denom.canonical.trim() === json.defaultInput)
 | 
				
			||||||
 | 
					        ) {
 | 
				
			||||||
 | 
					            throw `${ctx}: no denomination has the specified default denomination. The default denomination is '${
 | 
				
			||||||
 | 
					                json.defaultInput
 | 
				
			||||||
 | 
					            }', but the available denominations are ${applicable
 | 
				
			||||||
 | 
					                .map((denom) => denom.canonical)
 | 
				
			||||||
 | 
					                .join(", ")}`
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return new Unit(
 | 
				
			||||||
 | 
					            json.quantity ?? "",
 | 
				
			||||||
 | 
					            appliesToKey === undefined ? undefined : [appliesToKey],
 | 
				
			||||||
 | 
					            applicable,
 | 
				
			||||||
 | 
					            json.eraseInvalidValues ?? false,
 | 
				
			||||||
 | 
					            validator
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
| 
						 | 
					@ -113,7 +157,7 @@ export class Unit {
 | 
				
			||||||
     *     ]
 | 
					     *     ]
 | 
				
			||||||
     * }, "test")
 | 
					     * }, "test")
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    private static parse(json: UnitConfigJson, ctx: string): Unit {
 | 
					    private static parse(json: UnitConfigJson, types: Record<string, ValidatorType>, ctx: string): Unit[] {
 | 
				
			||||||
        const appliesTo = json.appliesToKey
 | 
					        const appliesTo = json.appliesToKey
 | 
				
			||||||
        for (let i = 0; i < (appliesTo ?? []).length; i++) {
 | 
					        for (let i = 0; i < (appliesTo ?? []).length; i++) {
 | 
				
			||||||
            let key = appliesTo[i]
 | 
					            let key = appliesTo[i]
 | 
				
			||||||
| 
						 | 
					@ -127,32 +171,22 @@ export class Unit {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // Some keys do have unit handling
 | 
					        // Some keys do have unit handling
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const applicable = json.applicableUnits.map((u, i) =>
 | 
					 | 
				
			||||||
            Denomination.fromJson(u, `${ctx}.units[${i}]`)
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if (
 | 
					        const units: Unit[] = []
 | 
				
			||||||
            json.defaultInput &&
 | 
					        if (appliesTo === undefined) {
 | 
				
			||||||
            !applicable.some((denom) => denom.canonical.trim() === json.defaultInput)
 | 
					            units.push(this.parseDenomination(json, Validators.get("float"), undefined, ctx))
 | 
				
			||||||
        ) {
 | 
					 | 
				
			||||||
            throw `${ctx}: no denomination has the specified default denomination. The default denomination is '${
 | 
					 | 
				
			||||||
                json.defaultInput
 | 
					 | 
				
			||||||
            }', but the available denominations are ${applicable
 | 
					 | 
				
			||||||
                .map((denom) => denom.canonical)
 | 
					 | 
				
			||||||
                .join(", ")}`
 | 
					 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return new Unit(
 | 
					        for (const key of appliesTo ?? []) {
 | 
				
			||||||
            json.quantity ?? "",
 | 
					            const validator = Validators.get(types[key] ?? "float")
 | 
				
			||||||
            appliesTo,
 | 
					            units.push(this.parseDenomination(json, validator, undefined, ctx))
 | 
				
			||||||
            applicable,
 | 
					        }
 | 
				
			||||||
            json.eraseInvalidValues ?? false
 | 
					        return units
 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    private static initUnits(): Map<string, Unit> {
 | 
					    private static initUnits(): Map<string, Unit> {
 | 
				
			||||||
        const m = new Map<string, Unit>()
 | 
					        const m = new Map<string, Unit>()
 | 
				
			||||||
        const units = (<UnitConfigJson[]>unit.units).map((json, i) =>
 | 
					        const units = (<UnitConfigJson[]>unit.units).flatMap((json, i) =>
 | 
				
			||||||
            this.parse(json, "unit.json.units." + i)
 | 
					            this.parse(json, {}, "unit.json.units." + i)
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        for (const unit of units) {
 | 
					        for (const unit of units) {
 | 
				
			||||||
| 
						 | 
					@ -179,17 +213,19 @@ export class Unit {
 | 
				
			||||||
    private static loadFromLibrary(
 | 
					    private static loadFromLibrary(
 | 
				
			||||||
        spec: Record<
 | 
					        spec: Record<
 | 
				
			||||||
            string,
 | 
					            string,
 | 
				
			||||||
            string | { quantity: string; denominations: string[]; canonical?: string }
 | 
					            string | { quantity: string; denominations: string[]; canonical?: string, inverted?: boolean }
 | 
				
			||||||
        >,
 | 
					        >,
 | 
				
			||||||
 | 
					        types: Record<string, ValidatorType>,
 | 
				
			||||||
        ctx: string
 | 
					        ctx: string
 | 
				
			||||||
    ): Unit[] {
 | 
					    ): Unit[] {
 | 
				
			||||||
        const units: Unit[] = []
 | 
					        const units: Unit[] = []
 | 
				
			||||||
        for (const key in spec) {
 | 
					        for (const key in spec) {
 | 
				
			||||||
            const toLoad = spec[key]
 | 
					            const toLoad = spec[key]
 | 
				
			||||||
 | 
					            const validator = Validators.get(types[key] ?? "float")
 | 
				
			||||||
            if (typeof toLoad === "string") {
 | 
					            if (typeof toLoad === "string") {
 | 
				
			||||||
                const loaded = this.getFromLibrary(toLoad, ctx)
 | 
					                const loaded = this.getFromLibrary(toLoad, ctx)
 | 
				
			||||||
                units.push(
 | 
					                units.push(
 | 
				
			||||||
                    new Unit(loaded.quantity, [key], loaded.denominations, loaded.eraseInvalid)
 | 
					                    new Unit(loaded.quantity, [key], loaded.denominations, loaded.eraseInvalid, validator, toLoad["inverted"])
 | 
				
			||||||
                )
 | 
					                )
 | 
				
			||||||
                continue
 | 
					                continue
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -213,12 +249,13 @@ export class Unit {
 | 
				
			||||||
            const denoms = toLoad.denominations
 | 
					            const denoms = toLoad.denominations
 | 
				
			||||||
                .map((d) => d.toLowerCase())
 | 
					                .map((d) => d.toLowerCase())
 | 
				
			||||||
                .map((d) => fetchDenom(d))
 | 
					                .map((d) => fetchDenom(d))
 | 
				
			||||||
 | 
					                .map(d => d.withValidator(validator))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (toLoad.canonical) {
 | 
					            if (toLoad.canonical) {
 | 
				
			||||||
                const canonical = fetchDenom(toLoad.canonical)
 | 
					                const canonical = fetchDenom(toLoad.canonical).withValidator(validator)
 | 
				
			||||||
                denoms.unshift(canonical.withBlankCanonical())
 | 
					                denoms.unshift(canonical.withBlankCanonical())
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            units.push(new Unit(loaded.quantity, [key], denoms, loaded.eraseInvalid))
 | 
					            units.push(new Unit(loaded.quantity, [key], denoms, loaded.eraseInvalid, validator, toLoad["inverted"]))
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return units
 | 
					        return units
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -240,7 +277,7 @@ export class Unit {
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const defaultDenom = this.getDefaultDenomination(country)
 | 
					        const defaultDenom = this.getDefaultDenomination(country)
 | 
				
			||||||
        for (const denomination of this.denominationsSorted) {
 | 
					        for (const denomination of this.denominationsSorted) {
 | 
				
			||||||
            const bare = denomination.StrippedValue(valueWithDenom, defaultDenom === denomination)
 | 
					            const bare = denomination.StrippedValue(valueWithDenom, defaultDenom === denomination, this.inverted)
 | 
				
			||||||
            if (bare !== null) {
 | 
					            if (bare !== null) {
 | 
				
			||||||
                return [bare, denomination]
 | 
					                return [bare, denomination]
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
| 
						 | 
					@ -253,10 +290,13 @@ export class Unit {
 | 
				
			||||||
            return undefined
 | 
					            return undefined
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const [stripped, denom] = this.findDenomination(value, country)
 | 
					        const [stripped, denom] = this.findDenomination(value, country)
 | 
				
			||||||
 | 
					        const human = denom?.human
 | 
				
			||||||
 | 
					        if(this.inverted ){
 | 
				
			||||||
 | 
					            return human.Subs({quantity: stripped+"/"})
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
        if (stripped === "1") {
 | 
					        if (stripped === "1") {
 | 
				
			||||||
            return denom?.humanSingular ?? stripped
 | 
					            return denom?.humanSingular ?? stripped
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        const human = denom?.human
 | 
					 | 
				
			||||||
        if (human === undefined) {
 | 
					        if (human === undefined) {
 | 
				
			||||||
            return stripped ?? value
 | 
					            return stripped ?? value
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
| 
						 | 
					@ -266,6 +306,10 @@ export class Unit {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public toOsm(value: string, denomination: string) {
 | 
					    public toOsm(value: string, denomination: string) {
 | 
				
			||||||
        const denom = this.denominations.find((d) => d.canonical === denomination)
 | 
					        const denom = this.denominations.find((d) => d.canonical === denomination)
 | 
				
			||||||
 | 
					        if(this.inverted){
 | 
				
			||||||
 | 
					            return value+"/"+denom._canonicalSingular
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const space = denom.addSpace ? " " : ""
 | 
					        const space = denom.addSpace ? " " : ""
 | 
				
			||||||
        if (denom.prefix) {
 | 
					        if (denom.prefix) {
 | 
				
			||||||
            return denom.canonical + space + value
 | 
					            return denom.canonical + space + value
 | 
				
			||||||
| 
						 | 
					@ -273,7 +317,7 @@ export class Unit {
 | 
				
			||||||
        return value + space + denom.canonical
 | 
					        return value + space + denom.canonical
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public getDefaultDenomination(country: () => string) {
 | 
					    public getDefaultDenomination(country: () => string): Denomination {
 | 
				
			||||||
        for (const denomination of this.denominations) {
 | 
					        for (const denomination of this.denominations) {
 | 
				
			||||||
            if (denomination.useIfNoUnitGiven === true) {
 | 
					            if (denomination.useIfNoUnitGiven === true) {
 | 
				
			||||||
                return denomination
 | 
					                return denomination
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										55
									
								
								src/UI/BigComponents/ExtraLinkButton.svelte
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										55
									
								
								src/UI/BigComponents/ExtraLinkButton.svelte
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,55 @@
 | 
				
			||||||
 | 
					<script lang="ts">
 | 
				
			||||||
 | 
					  import ExtraLinkConfig from "../../Models/ThemeConfig/ExtraLinkConfig"
 | 
				
			||||||
 | 
					  import Locale from "../i18n/Locale"
 | 
				
			||||||
 | 
					  import { Utils } from "../../Utils"
 | 
				
			||||||
 | 
					  import Translations from "../i18n/Translations"
 | 
				
			||||||
 | 
					  import type { SpecialVisualizationState } from "../SpecialVisualization"
 | 
				
			||||||
 | 
					  import Pop_out from "../../assets/svg/Pop_out.svelte"
 | 
				
			||||||
 | 
					  import Tr from "../Base/Tr.svelte"
 | 
				
			||||||
 | 
					  import Icon from "../Map/Icon.svelte"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  export let state: SpecialVisualizationState
 | 
				
			||||||
 | 
					  let theme = state.layout?.id ?? ""
 | 
				
			||||||
 | 
					  let config: ExtraLinkConfig = state.layout.extraLink
 | 
				
			||||||
 | 
					  const isIframe = window !== window.top
 | 
				
			||||||
 | 
					  let basepath = window.location.host
 | 
				
			||||||
 | 
					  let showWelcomeMessageSwitch = state.featureSwitches.featureSwitchWelcomeMessage
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  const t = Translations.t.general
 | 
				
			||||||
 | 
					  const href = state.mapProperties.location.map(
 | 
				
			||||||
 | 
					    (loc) => {
 | 
				
			||||||
 | 
					      const subs = {
 | 
				
			||||||
 | 
					        ...loc,
 | 
				
			||||||
 | 
					        theme: theme,
 | 
				
			||||||
 | 
					        basepath,
 | 
				
			||||||
 | 
					        language: Locale.language.data
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					      return Utils.SubstituteKeys(config.href, subs)
 | 
				
			||||||
 | 
					    },
 | 
				
			||||||
 | 
					    [state.mapProperties.zoom]
 | 
				
			||||||
 | 
					  )
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{#if config !== undefined &&
 | 
				
			||||||
 | 
					!(config.requirements.has("iframe") && !isIframe) &&
 | 
				
			||||||
 | 
					!(config.requirements.has("no-iframe") && isIframe) &&
 | 
				
			||||||
 | 
					!(config.requirements.has("welcome-message") && !$showWelcomeMessageSwitch) &&
 | 
				
			||||||
 | 
					!(config.requirements.has("no-welcome-message") && $showWelcomeMessageSwitch)}
 | 
				
			||||||
 | 
					<div class="links-as-button">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  <a href={$href} target={config.newTab ? "_blank" : ""} rel="noopener"
 | 
				
			||||||
 | 
					     class="flex pointer-events-auto rounded-full border-black">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <Icon icon={config.icon} clss="w-6 h-6 m-2"/>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    {#if config.text}
 | 
				
			||||||
 | 
					      <Tr t={config.text} />
 | 
				
			||||||
 | 
					    {:else}
 | 
				
			||||||
 | 
					      <Tr t={t.screenToSmall.Subs({theme: state.layout.title})} />
 | 
				
			||||||
 | 
					    {/if}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  </a>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					{/if}
 | 
				
			||||||
| 
						 | 
					@ -1,101 +0,0 @@
 | 
				
			||||||
import { UIElement } from "../UIElement"
 | 
					 | 
				
			||||||
import BaseUIElement from "../BaseUIElement"
 | 
					 | 
				
			||||||
import { Store } from "../../Logic/UIEventSource"
 | 
					 | 
				
			||||||
import ExtraLinkConfig from "../../Models/ThemeConfig/ExtraLinkConfig"
 | 
					 | 
				
			||||||
import Img from "../Base/Img"
 | 
					 | 
				
			||||||
import { SubtleButton } from "../Base/SubtleButton"
 | 
					 | 
				
			||||||
import Toggle from "../Input/Toggle"
 | 
					 | 
				
			||||||
import Locale from "../i18n/Locale"
 | 
					 | 
				
			||||||
import { Utils } from "../../Utils"
 | 
					 | 
				
			||||||
import Svg from "../../Svg"
 | 
					 | 
				
			||||||
import Translations from "../i18n/Translations"
 | 
					 | 
				
			||||||
import { Translation } from "../i18n/Translation"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
interface ExtraLinkButtonState {
 | 
					 | 
				
			||||||
    layout: { id: string; title: Translation }
 | 
					 | 
				
			||||||
    featureSwitches: { featureSwitchWelcomeMessage: Store<boolean> }
 | 
					 | 
				
			||||||
    mapProperties: {
 | 
					 | 
				
			||||||
        location: Store<{ lon: number; lat: number }>
 | 
					 | 
				
			||||||
        zoom: Store<number>
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
export default class ExtraLinkButton extends UIElement {
 | 
					 | 
				
			||||||
    private readonly _config: ExtraLinkConfig
 | 
					 | 
				
			||||||
    private readonly state: ExtraLinkButtonState
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    constructor(state: ExtraLinkButtonState, config: ExtraLinkConfig) {
 | 
					 | 
				
			||||||
        super()
 | 
					 | 
				
			||||||
        this.state = state
 | 
					 | 
				
			||||||
        this._config = config
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    protected InnerRender(): BaseUIElement {
 | 
					 | 
				
			||||||
        if (this._config === undefined) {
 | 
					 | 
				
			||||||
            return undefined
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const c = this._config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        const isIframe = window !== window.top
 | 
					 | 
				
			||||||
        if (c.requirements?.has("iframe") && !isIframe) {
 | 
					 | 
				
			||||||
            return undefined
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (c.requirements?.has("no-iframe") && isIframe) {
 | 
					 | 
				
			||||||
            return undefined
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let link: BaseUIElement
 | 
					 | 
				
			||||||
        const theme = this.state.layout?.id ?? ""
 | 
					 | 
				
			||||||
        const basepath = window.location.host
 | 
					 | 
				
			||||||
        const href = this.state.mapProperties.location.map(
 | 
					 | 
				
			||||||
            (loc) => {
 | 
					 | 
				
			||||||
                const subs = {
 | 
					 | 
				
			||||||
                    ...loc,
 | 
					 | 
				
			||||||
                    theme: theme,
 | 
					 | 
				
			||||||
                    basepath,
 | 
					 | 
				
			||||||
                    language: Locale.language.data,
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                return Utils.SubstituteKeys(c.href, subs)
 | 
					 | 
				
			||||||
            },
 | 
					 | 
				
			||||||
            [this.state.mapProperties.zoom]
 | 
					 | 
				
			||||||
        )
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let img: BaseUIElement = Svg.pop_out_svg()
 | 
					 | 
				
			||||||
        if (c.icon !== undefined) {
 | 
					 | 
				
			||||||
            img = new Img(c.icon).SetClass("h-6")
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        let text: Translation
 | 
					 | 
				
			||||||
        if (c.text === undefined) {
 | 
					 | 
				
			||||||
            text = Translations.t.general.screenToSmall.Subs({
 | 
					 | 
				
			||||||
                theme: this.state.layout.title,
 | 
					 | 
				
			||||||
            })
 | 
					 | 
				
			||||||
        } else {
 | 
					 | 
				
			||||||
            text = c.text.Clone()
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        link = new SubtleButton(img, text, {
 | 
					 | 
				
			||||||
            url: href,
 | 
					 | 
				
			||||||
            newTab: c.newTab,
 | 
					 | 
				
			||||||
        })
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (c.requirements?.has("no-welcome-message")) {
 | 
					 | 
				
			||||||
            link = new Toggle(
 | 
					 | 
				
			||||||
                undefined,
 | 
					 | 
				
			||||||
                link,
 | 
					 | 
				
			||||||
                this.state.featureSwitches.featureSwitchWelcomeMessage
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        if (c.requirements?.has("welcome-message")) {
 | 
					 | 
				
			||||||
            link = new Toggle(
 | 
					 | 
				
			||||||
                link,
 | 
					 | 
				
			||||||
                undefined,
 | 
					 | 
				
			||||||
                this.state.featureSwitches.featureSwitchWelcomeMessage
 | 
					 | 
				
			||||||
            )
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        return link
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
| 
						 | 
					@ -91,11 +91,6 @@
 | 
				
			||||||
      return
 | 
					      return
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (unit !== undefined && isNaN(Number(v))) {
 | 
					 | 
				
			||||||
      value.setData(undefined)
 | 
					 | 
				
			||||||
      return
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    feedback?.setData(undefined)
 | 
					    feedback?.setData(undefined)
 | 
				
			||||||
    if (selectedUnit.data) {
 | 
					    if (selectedUnit.data) {
 | 
				
			||||||
      value.setData(unit.toOsm(v, selectedUnit.data))
 | 
					      value.setData(unit.toOsm(v, selectedUnit.data))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,6 +34,7 @@
 | 
				
			||||||
  import { LinkIcon } from "@babeard/svelte-heroicons/mini"
 | 
					  import { LinkIcon } from "@babeard/svelte-heroicons/mini"
 | 
				
			||||||
  import Square_rounded from "../../assets/svg/Square_rounded.svelte"
 | 
					  import Square_rounded from "../../assets/svg/Square_rounded.svelte"
 | 
				
			||||||
  import Bug from "../../assets/svg/Bug.svelte"
 | 
					  import Bug from "../../assets/svg/Bug.svelte"
 | 
				
			||||||
 | 
					  import Pop_out from "../../assets/svg/Pop_out.svelte"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * Renders a single icon.
 | 
					   * Renders a single icon.
 | 
				
			||||||
| 
						 | 
					@ -123,6 +124,9 @@
 | 
				
			||||||
    <AddSmall {color} class={clss} />
 | 
					    <AddSmall {color} class={clss} />
 | 
				
			||||||
  {:else if icon === "link"}
 | 
					  {:else if icon === "link"}
 | 
				
			||||||
    <LinkIcon style="--svg-color: {color}" class={twMerge(clss, "apply-fill")} />
 | 
					    <LinkIcon style="--svg-color: {color}" class={twMerge(clss, "apply-fill")} />
 | 
				
			||||||
 | 
					  {:else if icon === "popout"}
 | 
				
			||||||
 | 
					    <LinkIcon style="--svg-color: {color}" />
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  {:else}
 | 
					  {:else}
 | 
				
			||||||
    <img class={clss ?? "h-full w-full"} src={icon} aria-hidden="true" alt="" />
 | 
					    <img class={clss ?? "h-full w-full"} src={icon} aria-hidden="true" alt="" />
 | 
				
			||||||
  {/if}
 | 
					  {/if}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -188,7 +188,7 @@ export default abstract class ImportFlow<ArgT extends ImportFlowArguments> {
 | 
				
			||||||
                    return { error: new Translation({ "*": e }) }
 | 
					                    return { error: new Translation({ "*": e }) }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if (state.mapProperties.zoom.data < 18) {
 | 
					                if (state.mapProperties.zoom.data < 16) {
 | 
				
			||||||
                    return { error: t.zoomInMore }
 | 
					                    return { error: t.zoomInMore }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -79,7 +79,7 @@
 | 
				
			||||||
    console.log("Applying questions to ask")
 | 
					    console.log("Applying questions to ask")
 | 
				
			||||||
    const qta = questionsToAsk.data
 | 
					    const qta = questionsToAsk.data
 | 
				
			||||||
    firstQuestion.setData(undefined)
 | 
					    firstQuestion.setData(undefined)
 | 
				
			||||||
    allQuestionsToAsk.setData([])
 | 
					    //allQuestionsToAsk.setData([])
 | 
				
			||||||
    await Utils.awaitAnimationFrame()
 | 
					    await Utils.awaitAnimationFrame()
 | 
				
			||||||
    firstQuestion.setData(qta[0])
 | 
					    firstQuestion.setData(qta[0])
 | 
				
			||||||
    allQuestionsToAsk.setData(qta)
 | 
					    allQuestionsToAsk.setData(qta)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -36,6 +36,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export let config: TagRenderingConfig
 | 
					  export let config: TagRenderingConfig
 | 
				
			||||||
  export let tags: UIEventSource<Record<string, string>>
 | 
					  export let tags: UIEventSource<Record<string, string>>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export let selectedElement: Feature
 | 
					  export let selectedElement: Feature
 | 
				
			||||||
  export let state: SpecialVisualizationState
 | 
					  export let state: SpecialVisualizationState
 | 
				
			||||||
  export let layer: LayerConfig | undefined
 | 
					  export let layer: LayerConfig | undefined
 | 
				
			||||||
| 
						 | 
					@ -71,6 +72,8 @@
 | 
				
			||||||
  /**
 | 
					  /**
 | 
				
			||||||
   * Prepares and fills the checkedMappings
 | 
					   * Prepares and fills the checkedMappings
 | 
				
			||||||
   */
 | 
					   */
 | 
				
			||||||
 | 
					  console.log("Initing ", config.id)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  function initialize(tgs: Record<string, string>, confg: TagRenderingConfig): void {
 | 
					  function initialize(tgs: Record<string, string>, confg: TagRenderingConfig): void {
 | 
				
			||||||
    mappings = confg.mappings?.filter((m) => {
 | 
					    mappings = confg.mappings?.filter((m) => {
 | 
				
			||||||
      if (typeof m.hideInAnswer === "boolean") {
 | 
					      if (typeof m.hideInAnswer === "boolean") {
 | 
				
			||||||
| 
						 | 
					@ -139,11 +142,33 @@
 | 
				
			||||||
    feedback.setData(undefined)
 | 
					    feedback.setData(undefined)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  $: {
 | 
					  let usedKeys: string[] = config.usedTags().flatMap((t) => t.usedKeys())
 | 
				
			||||||
    // Even though 'config' is not declared as a store, Svelte uses it as one to update the component
 | 
					  /**
 | 
				
			||||||
    // We want to (re)-initialize whenever the 'tags' or 'config' change - but not when 'checkedConfig' changes
 | 
					   * The 'minimalTags' is a subset of the tags of the feature, only containing the values relevant for this object.
 | 
				
			||||||
    initialize($tags, config)
 | 
					   * The main goal is to be stable and only 'ping' when an actual change is relevant
 | 
				
			||||||
  }
 | 
					   */
 | 
				
			||||||
 | 
					  let minimalTags = new UIEventSource<Record<string, string>>(undefined)
 | 
				
			||||||
 | 
					  tags.addCallbackAndRunD((tags) => {
 | 
				
			||||||
 | 
					    const previousMinimal = minimalTags.data
 | 
				
			||||||
 | 
					    const newMinimal: Record<string, string> = {}
 | 
				
			||||||
 | 
					    let somethingChanged = previousMinimal === undefined
 | 
				
			||||||
 | 
					    for (const key of usedKeys) {
 | 
				
			||||||
 | 
					      const newValue = tags[key]
 | 
				
			||||||
 | 
					      somethingChanged ||= previousMinimal?.[key] !== newValue
 | 
				
			||||||
 | 
					      if (newValue !== undefined && newValue !== null) {
 | 
				
			||||||
 | 
					        newMinimal[key] = newValue
 | 
				
			||||||
 | 
					      }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    if (somethingChanged) {
 | 
				
			||||||
 | 
					      console.log("Updating minimal tags to", newMinimal, "of", config.id)
 | 
				
			||||||
 | 
					      minimalTags.setData(newMinimal)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  minimalTags.addCallbackAndRunD((tgs) => {
 | 
				
			||||||
 | 
					    initialize(tgs, config)
 | 
				
			||||||
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onDestroy(
 | 
					  onDestroy(
 | 
				
			||||||
    freeformInput.subscribe((freeformValue) => {
 | 
					    freeformInput.subscribe((freeformValue) => {
 | 
				
			||||||
      if (!mappings || mappings?.length == 0 || config.freeform?.key === undefined) {
 | 
					      if (!mappings || mappings?.length == 0 || config.freeform?.key === undefined) {
 | 
				
			||||||
| 
						 | 
					@ -180,6 +205,19 @@
 | 
				
			||||||
          checkedMappings,
 | 
					          checkedMappings,
 | 
				
			||||||
          tags.data
 | 
					          tags.data
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					        if (state.featureSwitches.featureSwitchIsDebugging.data) {
 | 
				
			||||||
 | 
					          console.log(
 | 
				
			||||||
 | 
					            "Constructing change spec from",
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					              freeform: $freeformInput,
 | 
				
			||||||
 | 
					              selectedMapping,
 | 
				
			||||||
 | 
					              checkedMappings,
 | 
				
			||||||
 | 
					              currentTags: tags.data,
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            " --> ",
 | 
				
			||||||
 | 
					            selectedTags
 | 
				
			||||||
 | 
					          )
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
      } catch (e) {
 | 
					      } catch (e) {
 | 
				
			||||||
        console.error("Could not calculate changeSpecification:", e)
 | 
					        console.error("Could not calculate changeSpecification:", e)
 | 
				
			||||||
        selectedTags = undefined
 | 
					        selectedTags = undefined
 | 
				
			||||||
| 
						 | 
					@ -210,7 +248,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    if (layer === undefined || (layer?.source === null && layer.id !== "favourite")) {
 | 
					    if (layer === undefined || (layer?.source === null && layer.id !== "favourite")) {
 | 
				
			||||||
      /**
 | 
					      /**
 | 
				
			||||||
       * This is a special, priviliged layer.
 | 
					       * This is a special, privileged layer.
 | 
				
			||||||
       * We simply apply the tags onto the records
 | 
					       * We simply apply the tags onto the records
 | 
				
			||||||
       */
 | 
					       */
 | 
				
			||||||
      const kv = selectedTags.asChange(tags.data)
 | 
					      const kv = selectedTags.asChange(tags.data)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,10 +64,14 @@
 | 
				
			||||||
  )
 | 
					  )
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{#if unit.inverted}
 | 
				
			||||||
 | 
					  <div class="bold px-2">/</div>
 | 
				
			||||||
 | 
					{/if}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
<select bind:value={$selectedUnit}>
 | 
					<select bind:value={$selectedUnit}>
 | 
				
			||||||
  {#each unit.denominations as denom (denom.canonical)}
 | 
					  {#each unit.denominations as denom (denom.canonical)}
 | 
				
			||||||
    <option value={denom.canonical}>
 | 
					    <option value={denom.canonical}>
 | 
				
			||||||
      {#if $isSingle}
 | 
					      {#if $isSingle || unit.inverted}
 | 
				
			||||||
        <Tr t={denom.humanSingular} />
 | 
					        <Tr t={denom.humanSingular} />
 | 
				
			||||||
      {:else}
 | 
					      {:else}
 | 
				
			||||||
        <Tr t={denom.human.Subs({ quantity: "" })} />
 | 
					        <Tr t={denom.human.Subs({ quantity: "" })} />
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@
 | 
				
			||||||
  export let configs: ConfigMeta[]
 | 
					  export let configs: ConfigMeta[]
 | 
				
			||||||
  export let title: string | undefined = undefined
 | 
					  export let title: string | undefined = undefined
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export let path: (string | number)[] = []
 | 
					  export let path: readonly (string | number)[] = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  let expertMode = state.expertMode
 | 
					  let expertMode = state.expertMode
 | 
				
			||||||
  let configsNoHidden = configs.filter((schema) => schema.hints?.group !== "hidden")
 | 
					  let configsNoHidden = configs.filter((schema) => schema.hints?.group !== "hidden")
 | 
				
			||||||
| 
						 | 
					@ -21,9 +21,9 @@
 | 
				
			||||||
</script>
 | 
					</script>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{#if configs === undefined}
 | 
					{#if configs === undefined}
 | 
				
			||||||
  Bug: 'Region' received 'undefined'
 | 
					  Bug: 'Region' received 'undefined' at {path.join(".")}
 | 
				
			||||||
{:else if configs.length === 0}
 | 
					{:else if configs.length === 0}
 | 
				
			||||||
  Bug: Region received empty list as configuration
 | 
					  Bug: Region received empty list as configuration at {path.join(".")}
 | 
				
			||||||
{:else if title}
 | 
					{:else if title}
 | 
				
			||||||
  <div class="flex w-full flex-col">
 | 
					  <div class="flex w-full flex-col">
 | 
				
			||||||
    <h3>{title}</h3>
 | 
					    <h3>{title}</h3>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -7,7 +7,7 @@
 | 
				
			||||||
  import type { ConfigMeta } from "./configMeta"
 | 
					  import type { ConfigMeta } from "./configMeta"
 | 
				
			||||||
  import type {
 | 
					  import type {
 | 
				
			||||||
    MappingConfigJson,
 | 
					    MappingConfigJson,
 | 
				
			||||||
    QuestionableTagRenderingConfigJson,
 | 
					    QuestionableTagRenderingConfigJson
 | 
				
			||||||
  } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
 | 
					  } from "../../Models/ThemeConfig/Json/QuestionableTagRenderingConfigJson"
 | 
				
			||||||
  import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"
 | 
					  import TagRenderingConfig from "../../Models/ThemeConfig/TagRenderingConfig"
 | 
				
			||||||
  import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte"
 | 
					  import TagRenderingEditable from "../Popup/TagRendering/TagRenderingEditable.svelte"
 | 
				
			||||||
| 
						 | 
					@ -59,8 +59,8 @@
 | 
				
			||||||
          labelMapping = {
 | 
					          labelMapping = {
 | 
				
			||||||
            if: "value=" + label,
 | 
					            if: "value=" + label,
 | 
				
			||||||
            then: {
 | 
					            then: {
 | 
				
			||||||
              en: "Builtin collection <b>" + label + "</b>:",
 | 
					              en: "Builtin collection <b>" + label + "</b>:"
 | 
				
			||||||
            },
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
          perLabel[label] = labelMapping
 | 
					          perLabel[label] = labelMapping
 | 
				
			||||||
          mappingsBuiltin.push(labelMapping)
 | 
					          mappingsBuiltin.push(labelMapping)
 | 
				
			||||||
| 
						 | 
					@ -72,14 +72,14 @@
 | 
				
			||||||
    mappingsBuiltin.push({
 | 
					    mappingsBuiltin.push({
 | 
				
			||||||
      if: "value=" + tr["id"],
 | 
					      if: "value=" + tr["id"],
 | 
				
			||||||
      then: {
 | 
					      then: {
 | 
				
			||||||
        en: "Builtin <b>" + tr["id"] + "</b> <div class='subtle'>" + description + "</div>",
 | 
					        en: "Builtin <b>" + tr["id"] + "</b> <div class='subtle'>" + description + "</div>"
 | 
				
			||||||
      },
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const configBuiltin = new TagRenderingConfig(<QuestionableTagRenderingConfigJson>{
 | 
					  const configBuiltin = new TagRenderingConfig(<QuestionableTagRenderingConfigJson>{
 | 
				
			||||||
    question: "Which builtin element should be shown?",
 | 
					    question: "Which builtin element should be shown?",
 | 
				
			||||||
    mappings: mappingsBuiltin,
 | 
					    mappings: mappingsBuiltin
 | 
				
			||||||
  })
 | 
					  })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  const tags = new UIEventSource({ value })
 | 
					  const tags = new UIEventSource({ value })
 | 
				
			||||||
| 
						 | 
					@ -112,7 +112,7 @@
 | 
				
			||||||
    "condition",
 | 
					    "condition",
 | 
				
			||||||
    "metacondition",
 | 
					    "metacondition",
 | 
				
			||||||
    "mappings",
 | 
					    "mappings",
 | 
				
			||||||
    "icon",
 | 
					    "icon"
 | 
				
			||||||
  ])
 | 
					  ])
 | 
				
			||||||
  const ignored = new Set(["labels", "description", "classes"])
 | 
					  const ignored = new Set(["labels", "description", "classes"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -196,7 +196,10 @@
 | 
				
			||||||
    <h3>Text field and input element configuration</h3>
 | 
					    <h3>Text field and input element configuration</h3>
 | 
				
			||||||
    <div class="border-l border-dashed border-gray-800 pl-2">
 | 
					    <div class="border-l border-dashed border-gray-800 pl-2">
 | 
				
			||||||
      <SchemaBasedField {state} path={[...path, "render"]} schema={topLevelItems["render"]} />
 | 
					      <SchemaBasedField {state} path={[...path, "render"]} schema={topLevelItems["render"]} />
 | 
				
			||||||
      <Region {state} {path} configs={freeformSchema} />
 | 
					      {#if freeformSchema?.length > 0}
 | 
				
			||||||
 | 
					        <!-- In read-only cases, (e.g. popup title) there will be no freeform-schema to set and thus freeformSchema will be undefined -->
 | 
				
			||||||
 | 
					        <Region {state} {path} configs={freeformSchema} />
 | 
				
			||||||
 | 
					      {/if}
 | 
				
			||||||
      <SchemaBasedField {state} path={[...path, "icon"]} schema={topLevelItems["icon"]} />
 | 
					      <SchemaBasedField {state} path={[...path, "icon"]} schema={topLevelItems["icon"]} />
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,6 @@
 | 
				
			||||||
  import { Utils } from "../Utils"
 | 
					  import { Utils } from "../Utils"
 | 
				
			||||||
  import Hotkeys from "./Base/Hotkeys"
 | 
					  import Hotkeys from "./Base/Hotkeys"
 | 
				
			||||||
  import LevelSelector from "./BigComponents/LevelSelector.svelte"
 | 
					  import LevelSelector from "./BigComponents/LevelSelector.svelte"
 | 
				
			||||||
  import ExtraLinkButton from "./BigComponents/ExtraLinkButton"
 | 
					 | 
				
			||||||
  import SelectedElementTitle from "./BigComponents/SelectedElementTitle.svelte"
 | 
					  import SelectedElementTitle from "./BigComponents/SelectedElementTitle.svelte"
 | 
				
			||||||
  import ThemeIntroPanel from "./BigComponents/ThemeIntroPanel.svelte"
 | 
					  import ThemeIntroPanel from "./BigComponents/ThemeIntroPanel.svelte"
 | 
				
			||||||
  import type { RasterLayerPolygon } from "../Models/RasterLayers"
 | 
					  import type { RasterLayerPolygon } from "../Models/RasterLayers"
 | 
				
			||||||
| 
						 | 
					@ -73,6 +72,7 @@
 | 
				
			||||||
  import PrivacyPolicy from "./BigComponents/PrivacyPolicy.svelte"
 | 
					  import PrivacyPolicy from "./BigComponents/PrivacyPolicy.svelte"
 | 
				
			||||||
  import { BBox } from "../Logic/BBox"
 | 
					  import { BBox } from "../Logic/BBox"
 | 
				
			||||||
  import ReviewsOverview from "./Reviews/ReviewsOverview.svelte"
 | 
					  import ReviewsOverview from "./Reviews/ReviewsOverview.svelte"
 | 
				
			||||||
 | 
					  import ExtraLinkButton from "./BigComponents/ExtraLinkButton.svelte"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  export let state: ThemeViewState
 | 
					  export let state: ThemeViewState
 | 
				
			||||||
  let layout = state.layout
 | 
					  let layout = state.layout
 | 
				
			||||||
| 
						 | 
					@ -260,9 +260,7 @@
 | 
				
			||||||
        />
 | 
					        />
 | 
				
			||||||
      </MapControlButton>
 | 
					      </MapControlButton>
 | 
				
			||||||
    {/if}
 | 
					    {/if}
 | 
				
			||||||
    <ToSvelte
 | 
					    <ExtraLinkButton {state} />
 | 
				
			||||||
      construct={() => new ExtraLinkButton(state, layout.extraLink).SetClass("pointer-events-auto")}
 | 
					 | 
				
			||||||
    />
 | 
					 | 
				
			||||||
    <UploadingImageCounter featureId="*" showThankYou={false} {state} />
 | 
					    <UploadingImageCounter featureId="*" showThankYou={false} {state} />
 | 
				
			||||||
    <PendingChangesIndicator {state} />
 | 
					    <PendingChangesIndicator {state} />
 | 
				
			||||||
    <If condition={state.featureSwitchIsTesting}>
 | 
					    <If condition={state.featureSwitchIsTesting}>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										12
									
								
								src/Utils.ts
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								src/Utils.ts
									
										
									
									
									
								
							| 
						 | 
					@ -263,6 +263,9 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
 | 
				
			||||||
        return res
 | 
					        return res
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public static NoNull<T>(array: T[] | undefined): (T[] | undefined)
 | 
				
			||||||
 | 
					    public static NoNull<T>(array: undefined): undefined
 | 
				
			||||||
 | 
					    public static NoNull<T>(array: T[]): T[]
 | 
				
			||||||
    public static NoNull<T>(array: T[]): NonNullable<T>[] {
 | 
					    public static NoNull<T>(array: T[]): NonNullable<T>[] {
 | 
				
			||||||
        return <any>array?.filter((o) => o !== undefined && o !== null)
 | 
					        return <any>array?.filter((o) => o !== undefined && o !== null)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -1039,7 +1042,14 @@ In the case that MapComplete is pointed to the testing grounds, the edit will be
 | 
				
			||||||
        Utils._download_cache.set(url, { promise, timestamp: new Date().getTime() })
 | 
					        Utils._download_cache.set(url, { promise, timestamp: new Date().getTime() })
 | 
				
			||||||
        return await promise
 | 
					        return await promise
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    public static async downloadJson(
 | 
				
			||||||
 | 
					        url: string,
 | 
				
			||||||
 | 
					        headers?: Record<string, string>
 | 
				
			||||||
 | 
					    ): Promise<object | []>
 | 
				
			||||||
 | 
					    public static async downloadJson<T>(
 | 
				
			||||||
 | 
					        url: string,
 | 
				
			||||||
 | 
					        headers?: Record<string, string>
 | 
				
			||||||
 | 
					    ): Promise<T>
 | 
				
			||||||
    public static async downloadJson(
 | 
					    public static async downloadJson(
 | 
				
			||||||
        url: string,
 | 
					        url: string,
 | 
				
			||||||
        headers?: Record<string, string>
 | 
					        headers?: Record<string, string>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -445,7 +445,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -459,7 +459,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -672,7 +672,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -763,7 +763,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -776,7 +777,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -1225,7 +1226,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -1316,7 +1317,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -1329,7 +1331,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -2373,7 +2375,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -2387,7 +2389,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -2605,7 +2607,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -2699,7 +2701,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -2712,7 +2715,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -3074,7 +3077,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -3088,7 +3091,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -3306,7 +3309,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -3400,7 +3403,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -3413,7 +3417,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -3753,7 +3757,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -3767,7 +3771,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -3985,7 +3989,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -4079,7 +4083,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -4092,7 +4097,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -4434,7 +4439,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -4448,7 +4453,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -4666,7 +4671,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -4760,7 +4765,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -4773,7 +4779,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -5116,7 +5122,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -5130,7 +5136,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -5348,7 +5354,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -5442,7 +5448,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -5455,7 +5462,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -5803,7 +5810,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -5817,7 +5824,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -6035,7 +6042,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -6129,7 +6136,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -6142,7 +6150,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -6485,7 +6493,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -6499,7 +6507,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -6717,7 +6725,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -6811,7 +6819,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -6824,7 +6833,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -7167,7 +7176,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -7181,7 +7190,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -7399,7 +7408,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -7493,7 +7502,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -7506,7 +7516,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -7856,7 +7866,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -7870,7 +7880,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -8092,7 +8102,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -8186,7 +8196,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -8199,7 +8210,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -8550,7 +8561,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -8564,7 +8575,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -8786,7 +8797,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -8880,7 +8891,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -8893,7 +8905,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -9965,7 +9977,7 @@
 | 
				
			||||||
      "group": "presets"
 | 
					      "group": "presets"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": "array",
 | 
					    "type": "array",
 | 
				
			||||||
    "description": "<div class='flex'>\n    <div>\nPresets for this layer.\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<a class='block m-2 min-w-64' href='./Docs/Screenshots/AddNewItemScreencast.webm' target='_blank'> <video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/></a>\n</div>"
 | 
					    "description": "<div class='flex'>\n    <div>\nPresets for this layer.\nA preset consists of one or more attributes (tags), a title and optionally a description and optionally example images.\nWhen the contributor wishes to add a point to OpenStreetMap, they'll:\n1. Press the 'add new point'-button\n2. Choose a preset from the list of all presets\n3. Confirm the choice. In this step, the `description` (if set) and `exampleImages` (if given) will be shown\n4. Confirm the location\n5. A new point will be created with the attributes that were defined in the preset\nIf no presets are defined, the button which invites to add a new preset will not be shown.\n</div>\n<video controls autoplay muted src='./Docs/Screenshots/AddNewItemScreencast.webm' class='w-64'/>\n</div>"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -10724,7 +10736,7 @@
 | 
				
			||||||
                "type": "string"
 | 
					                "type": "string"
 | 
				
			||||||
              },
 | 
					              },
 | 
				
			||||||
              "placeholder": {
 | 
					              "placeholder": {
 | 
				
			||||||
                "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert",
 | 
					                "description": "question: What placeholder text should be shown in the input-element if there is no input?\nA (translated) text that is shown (as gray text) within the textfield\ntype: translation\ngroup: expert\nifunset: No specific placeholder is set, show the type of the textfield",
 | 
				
			||||||
                "anyOf": [
 | 
					                "anyOf": [
 | 
				
			||||||
                  {
 | 
					                  {
 | 
				
			||||||
                    "$ref": "#/definitions/Record<string,string>"
 | 
					                    "$ref": "#/definitions/Record<string,string>"
 | 
				
			||||||
| 
						 | 
					@ -10872,7 +10884,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "condition": {
 | 
					          "condition": {
 | 
				
			||||||
            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or ask the question if unkown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
					            "description": "question: When should this item be shown?\ntype: tag\nifunset: No specific condition set; always show this tagRendering or show this question if unknown\n\nOnly show this tagrendering (or ask the question) if the selected object also matches the tags specified as `condition`.\n\nThis is useful to ask a follow-up question.\nFor example, within toilets, asking _where_ the diaper changing table is is only useful _if_ there is one.\nThis can be done by adding `\"condition\": \"changing_table=yes\"`\n\nA full example would be:\n```json\n    {\n      \"question\": \"Where is the changing table located?\",\n      \"render\": \"The changing table is located at {changing_table:location}\",\n      \"condition\": \"changing_table=yes\",\n      \"freeform\": {\n        \"key\": \"changing_table:location\",\n        \"inline\": true\n      },\n      \"mappings\": [\n        {\n          \"then\": \"The changing table is in the toilet for women.\",\n          \"if\": \"changing_table:location=female_toilet\"\n        },\n        {\n          \"then\": \"The changing table is in the toilet for men.\",\n          \"if\": \"changing_table:location=male_toilet\"\n        },\n        {\n          \"if\": \"changing_table:location=wheelchair_toilet\",\n          \"then\": \"The changing table is in the toilet for wheelchair users.\",\n        },\n        {\n          \"if\": \"changing_table:location=dedicated_room\",\n          \"then\": \"The changing table is in a dedicated room. \",\n        }\n      ],\n      \"id\": \"toilet-changing_table:location\"\n    },\n```",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -10886,7 +10898,7 @@
 | 
				
			||||||
            ]
 | 
					            ]
 | 
				
			||||||
          },
 | 
					          },
 | 
				
			||||||
          "metacondition": {
 | 
					          "metacondition": {
 | 
				
			||||||
            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\n\nIf set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
					            "description": "question: When should this item be shown (including special conditions)?\ntype: tag\nifunset: No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown\n\nIf set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_",
 | 
				
			||||||
            "anyOf": [
 | 
					            "anyOf": [
 | 
				
			||||||
              {
 | 
					              {
 | 
				
			||||||
                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
					                "$ref": "#/definitions/{and:TagConfigJson[];}"
 | 
				
			||||||
| 
						 | 
					@ -11675,7 +11687,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -12020,7 +12033,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -12111,7 +12124,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -12124,7 +12138,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -12952,7 +12966,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -13313,7 +13328,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -13407,7 +13422,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -13420,7 +13436,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -14261,7 +14277,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -14622,7 +14639,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -14716,7 +14733,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -14729,7 +14747,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -15587,7 +15605,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -15964,7 +15983,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -16061,7 +16080,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -16074,7 +16094,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -16910,7 +16930,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -17271,7 +17292,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -17365,7 +17386,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -17378,7 +17400,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -18236,7 +18258,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -18613,7 +18636,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -18710,7 +18733,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -18723,7 +18747,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					@ -19442,10 +19466,10 @@
 | 
				
			||||||
        "additionalProperties": false
 | 
					        "additionalProperties": false
 | 
				
			||||||
      },
 | 
					      },
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
        "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;}>"
 | 
					        "$ref": "#/definitions/Record<string,string|{quantity:string;denominations:string[];canonical?:string|undefined;inverted?:boolean|undefined;}>"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]"
 | 
					    "description": "Either a list with [{\"key\": \"unitname\", \"key2\": {\"quantity\": \"unitname\", \"denominations\": [\"denom\", \"denom\"]}}]\nUse `\"inverted\": true` if the amount should be _divided_ by the denomination, e.g. for charge over time (`€5/day`)"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							| 
						 | 
					@ -683,7 +683,8 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "translation",
 | 
					      "typehint": "translation",
 | 
				
			||||||
      "group": "expert",
 | 
					      "group": "expert",
 | 
				
			||||||
      "question": "What placeholder text should be shown in the input-element if there is no input?"
 | 
					      "question": "What placeholder text should be shown in the input-element if there is no input?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific placeholder is set, show the type of the textfield"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -1012,7 +1013,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -1100,7 +1101,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -1113,7 +1115,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -115,7 +115,7 @@
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown?",
 | 
					      "question": "When should this item be shown?",
 | 
				
			||||||
      "ifunset": "No specific condition set; always show this tagRendering or ask the question if unkown"
 | 
					      "ifunset": "No specific condition set; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -203,7 +203,8 @@
 | 
				
			||||||
    "required": false,
 | 
					    "required": false,
 | 
				
			||||||
    "hints": {
 | 
					    "hints": {
 | 
				
			||||||
      "typehint": "tag",
 | 
					      "typehint": "tag",
 | 
				
			||||||
      "question": "When should this item be shown (including special conditions)?"
 | 
					      "question": "When should this item be shown (including special conditions)?",
 | 
				
			||||||
 | 
					      "ifunset": "No specific metacondition set which is evaluated against the <i>usersettings/application state</i>; always show this tagRendering or show this question if unknown"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "type": [
 | 
					    "type": [
 | 
				
			||||||
      {
 | 
					      {
 | 
				
			||||||
| 
						 | 
					@ -216,7 +217,7 @@
 | 
				
			||||||
        "type": "string"
 | 
					        "type": "string"
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "description": "If set, this tag will be evaluated agains the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options.\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
					    "description": "If set, this tag will be evaluated against the _usersettings/application state_ table.\nEnable 'show debug info' in user settings to see available options (at the settings-tab).\nNote that values with an underscore depicts _application state_ (including metainfo about the user) whereas values without an underscore depict _user settings_"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    "path": [
 | 
					    "path": [
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -30,8 +30,8 @@ async function getAvailableLayers(): Promise<Set<string>> {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        const host = new URL(Constants.VectorTileServer).host
 | 
					        const host = new URL(Constants.VectorTileServer).host
 | 
				
			||||||
        const status: { layers: string[] } = await Promise.any([
 | 
					        const status: { layers: string[] } = await Promise.any([
 | 
				
			||||||
            // Utils.downloadJson("https://" + host + "/summary/status.json"),
 | 
					            Utils.downloadJson<{layers}>("https://" + host + "/summary/status.json"),
 | 
				
			||||||
            timeout(0),
 | 
					            timeout(2500),
 | 
				
			||||||
        ])
 | 
					        ])
 | 
				
			||||||
        return new Set<string>(status.layers)
 | 
					        return new Set<string>(status.layers)
 | 
				
			||||||
    } catch (e) {
 | 
					    } catch (e) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,7 @@ async function getAvailableLayers(): Promise<Set<string>> {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        const host = new URL(Constants.VectorTileServer).host
 | 
					        const host = new URL(Constants.VectorTileServer).host
 | 
				
			||||||
        const status = await Promise.any([
 | 
					        const status = await Promise.any([
 | 
				
			||||||
                               //    Utils.downloadJson("https://" + host + "/summary/status.json"),
 | 
					                                   Utils.downloadJson("https://" + host + "/summary/status.json"),
 | 
				
			||||||
                                   timeout(0)
 | 
					                                   timeout(0)
 | 
				
			||||||
                               ])
 | 
					                               ])
 | 
				
			||||||
        return new Set<string>(status.layers)
 | 
					        return new Set<string>(status.layers)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,6 +1,7 @@
 | 
				
			||||||
import { Unit } from "../../src/Models/Unit"
 | 
					import { Unit } from "../../src/Models/Unit"
 | 
				
			||||||
import { Denomination } from "../../src/Models/Denomination"
 | 
					import { Denomination } from "../../src/Models/Denomination"
 | 
				
			||||||
import { describe, expect, it } from "vitest"
 | 
					import { describe, expect, it } from "vitest"
 | 
				
			||||||
 | 
					import Validators from "../../src/UI/InputElement/Validators"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
describe("Unit", () => {
 | 
					describe("Unit", () => {
 | 
				
			||||||
    it("should convert a value back and forth", () => {
 | 
					    it("should convert a value back and forth", () => {
 | 
				
			||||||
| 
						 | 
					@ -13,14 +14,36 @@ describe("Unit", () => {
 | 
				
			||||||
                    nl: "{quantity} megawatt",
 | 
					                    nl: "{quantity} megawatt",
 | 
				
			||||||
                },
 | 
					                },
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
 | 
					            Validators.get("float"),
 | 
				
			||||||
            "test"
 | 
					            "test"
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const canonical = denomintion.canonicalValue("5", true)
 | 
					        const canonical = denomintion.canonicalValue("5", true, false)
 | 
				
			||||||
        expect(canonical).toBe("5 MW")
 | 
					        expect(canonical).toBe("5 MW")
 | 
				
			||||||
        const units = new Unit("quantity", ["key"], [denomintion], false)
 | 
					        const units = new Unit("quantity", ["key"], [denomintion], false, Validators.get("float"))
 | 
				
			||||||
        const [detected, detectedDenom] = units.findDenomination("5 MW", () => "be")
 | 
					        const [detected, detectedDenom] = units.findDenomination("5 MW", () => "be")
 | 
				
			||||||
        expect(detected).toBe("5")
 | 
					        expect(detected).toBe("5")
 | 
				
			||||||
        expect(detectedDenom).toBe(denomintion)
 | 
					        expect(detectedDenom).toBe(denomintion)
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it("should convert an inverted value back and forth", () => {
 | 
				
			||||||
 | 
					        const denomintion = Denomination.fromJson(
 | 
				
			||||||
 | 
					            {
 | 
				
			||||||
 | 
					                canonicalDenomination: "year",
 | 
				
			||||||
 | 
					                human: {
 | 
				
			||||||
 | 
					                    en: "{quantity} year",
 | 
				
			||||||
 | 
					                    nl: "{quantity} year",
 | 
				
			||||||
 | 
					                },
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            Validators.get("float"),
 | 
				
			||||||
 | 
					            "test"
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        const canonical = denomintion.canonicalValue("5", true, true)
 | 
				
			||||||
 | 
					        expect(canonical).toBe("5/year")
 | 
				
			||||||
 | 
					        const unit = new Unit("quantity", ["key"], [denomintion], false, Validators.get("float"), true)
 | 
				
			||||||
 | 
					        const [detected, detectedDenom] = unit.findDenomination("5/year", () => "be")
 | 
				
			||||||
 | 
					        expect(detected).toBe("5")
 | 
				
			||||||
 | 
					        expect(detectedDenom).toBe(denomintion)
 | 
				
			||||||
 | 
					    })
 | 
				
			||||||
})
 | 
					})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue