| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | <script lang="ts"> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |   import { EditThemeState } from "./EditLayerState" | 
					
						
							|  |  |  |   import type { ConfigMeta } from "./configMeta" | 
					
						
							|  |  |  |   import { ChevronRightIcon } from "@rgossiaux/svelte-heroicons/solid" | 
					
						
							|  |  |  |   import type { ConversionMessage } from "../../Models/ThemeConfig/Conversion/Conversion" | 
					
						
							|  |  |  |   import TabbedGroup from "../Base/TabbedGroup.svelte" | 
					
						
							|  |  |  |   import ShowConversionMessages from "./ShowConversionMessages.svelte" | 
					
						
							|  |  |  |   import Region from "./Region.svelte" | 
					
						
							| 
									
										
										
										
											2024-02-13 11:44:09 +01:00
										 |  |  |   import RawEditor from "./RawEditor.svelte" | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |   export let state: EditThemeState | 
					
						
							|  |  |  |   let schema: ConfigMeta[] = state.schema.filter((schema) => schema.path.length > 0) | 
					
						
							|  |  |  |   let config = state.configuration | 
					
						
							|  |  |  |   let messages = state.messages | 
					
						
							|  |  |  |   let hasErrors = messages.map( | 
					
						
							|  |  |  |     (m: ConversionMessage[]) => m.filter((m) => m.level === "error").length | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  |   let title = state.getStoreFor(["id"]) | 
					
						
							|  |  |  |   const wl = window.location | 
					
						
							|  |  |  |   const baseUrl = wl.protocol + "//" + wl.host + "/theme.html?userlayout=" | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |   const perRegion: Record<string, ConfigMeta[]> = {} | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  |   for (const schemaElement of schema) { | 
					
						
							| 
									
										
										
										
											2024-02-13 11:44:09 +01:00
										 |  |  |     if (schemaElement.path.length > 1 && schemaElement.path[0] === "layers") { | 
					
						
							| 
									
										
										
										
											2024-01-22 01:01:38 +01:00
										 |  |  |       continue | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |     const key = schemaElement.hints.group ?? "no-group" | 
					
						
							|  |  |  |     const list = perRegion[key] ?? (perRegion[key] = []) | 
					
						
							|  |  |  |     list.push(schemaElement) | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  |   } | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |   console.log({ perRegion, schema }) | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | </script> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | <div class="flex h-screen flex-col"> | 
					
						
							|  |  |  |   <div class="my-2 flex w-full justify-between"> | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |     <slot /> | 
					
						
							|  |  |  |     <h3>Editing theme {$title}</h3> | 
					
						
							|  |  |  |     {#if $hasErrors > 0} | 
					
						
							|  |  |  |       <div class="alert">{$hasErrors} errors detected</div> | 
					
						
							|  |  |  |     {:else} | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |       <a | 
					
						
							|  |  |  |         class="primary button" | 
					
						
							|  |  |  |         href={baseUrl + state.server.urlFor($title, "themes")} | 
					
						
							|  |  |  |         target="_blank" | 
					
						
							|  |  |  |         rel="noopener" | 
					
						
							|  |  |  |       > | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |         Try it out | 
					
						
							|  |  |  |         <ChevronRightIcon class="h-6 w-6 shrink-0" /> | 
					
						
							|  |  |  |       </a> | 
					
						
							|  |  |  |     {/if} | 
					
						
							|  |  |  |   </div> | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |   <div class="m4 h-full overflow-y-auto"> | 
					
						
							| 
									
										
										
										
											2024-02-22 03:05:50 +01:00
										 |  |  |     <!-- {Object.keys(perRegion).join(";")} --> | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |     <TabbedGroup> | 
					
						
							|  |  |  |       <div slot="title0">Basic properties</div> | 
					
						
							|  |  |  |       <div slot="content0"> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |         <Region configs={perRegion["basic"]} path={[]} {state} title="Basic properties" /> | 
					
						
							|  |  |  |         <Region configs={perRegion["start_location"]} path={[]} {state} title="Start location" /> | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |       <div slot="title1">Layers</div> | 
					
						
							|  |  |  |       <div slot="content1"> | 
					
						
							|  |  |  |         <Region configs={perRegion["layers"]} path={[]} {state} /> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |       <div slot="title2">Feature switches</div> | 
					
						
							|  |  |  |       <div slot="content2"> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |         <Region configs={perRegion["feature_switches"]} path={[]} {state} /> | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |       <div slot="title3">Advanced options</div> | 
					
						
							|  |  |  |       <div slot="content3"> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  |         <Region configs={perRegion["advanced"]} path={[]} {state} /> | 
					
						
							| 
									
										
										
										
											2023-10-26 13:58:45 +02:00
										 |  |  |       </div> | 
					
						
							| 
									
										
										
										
											2023-11-09 16:30:26 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |       <div slot="title4">Configuration file</div> | 
					
						
							| 
									
										
										
										
											2024-02-22 03:05:50 +01:00
										 |  |  |       <div slot="content4" class="flex h-full flex-col"> | 
					
						
							| 
									
										
										
										
											2024-02-13 11:44:09 +01:00
										 |  |  |         <div> | 
					
						
							|  |  |  |           Below, you'll find the raw configuration file in `.json`-format. This is mostly for | 
					
						
							|  |  |  |           debugging purposes, but you can also edit the file directly if you want. | 
					
						
							|  |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2024-02-22 03:05:50 +01:00
										 |  |  |         <ShowConversionMessages messages={$messages} /> | 
					
						
							| 
									
										
										
										
											2024-02-13 11:44:09 +01:00
										 |  |  |         <div class="literal-code h-full w-full"> | 
					
						
							|  |  |  |           <RawEditor {state} /> | 
					
						
							| 
									
										
										
										
											2023-10-30 13:45:44 +01:00
										 |  |  |         </div> | 
					
						
							|  |  |  |       </div> | 
					
						
							|  |  |  |     </TabbedGroup> | 
					
						
							|  |  |  |   </div> | 
					
						
							|  |  |  | </div> |