Various style tweaks

This commit is contained in:
Pieter Vander Vennet 2024-07-11 19:01:32 +02:00
parent d5430891bf
commit ed9e59109e
12 changed files with 128 additions and 112 deletions

View file

@ -1,8 +1,8 @@
<script lang="ts"> <script lang="ts">
import { createEventDispatcher } from "svelte" import { createEventDispatcher } from "svelte"
import { XCircleIcon } from "@rgossiaux/svelte-heroicons/solid"
import { ariaLabel } from "../../Utils/ariaLabel" import { ariaLabel } from "../../Utils/ariaLabel"
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import { XCircleIcon } from "@babeard/svelte-heroicons/solid"
/** /**
* The slotted element will be shown on top, with a lower-opacity border * The slotted element will be shown on top, with a lower-opacity border
@ -37,13 +37,14 @@
</div> </div>
<slot name="close-button"> <slot name="close-button">
<!-- The close button is placed _after_ the default slot in order to always paint it on top --> <!-- The close button is placed _after_ the default slot in order to always paint it on top -->
<button <div
class="absolute right-10 top-10 h-8 w-8 cursor-pointer rounded-full border-none bg-white p-0" class="absolute right-10 top-10 cursor-pointer border-none p-0 m-0 bg-white rounded-full border-0"
style="margin: -0.25rem"
on:click={() => dispatch("close")} on:click={() => dispatch("close")}
use:ariaLabel={Translations.t.general.backToMap} use:ariaLabel={Translations.t.general.backToMap}
> >
<XCircleIcon /> <XCircleIcon class="w-8 h-8" />
</button> </div>
</slot> </slot>
</div> </div>
</div> </div>

View file

@ -0,0 +1,14 @@
<script lang="ts">
import Translations from "../i18n/Translations"
</script>
<div class="flex h-full flex-col">
<h2 class="low-interaction m-0 flex items-center p-4 drop-shadow-md">
<slot name="title" />
</h2>
<div class="flex h-full flex-col overflow-auto border-b-2 p-4">
<slot />
</div>
</div>

View file

@ -9,6 +9,7 @@
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import Filter from "../../assets/svg/Filter.svelte" import Filter from "../../assets/svg/Filter.svelte"
import TitledPanel from "../Base/TitledPanel.svelte"
export let state: ThemeViewState export let state: ThemeViewState
let layout = state.layout let layout = state.layout
@ -46,12 +47,12 @@
} }
</script> </script>
<div class="flex h-full flex-col"> <TitledPanel>
<h2 class="low-interaction m-0 flex items-center p-4 drop-shadow-md"> <div class="flex" slot="title">
<Filter class="h-6 w-6 pr-2" /> <Filter class="h-6 w-6 pr-2" />
<Tr t={Translations.t.general.menu.filter} /> <Tr t={Translations.t.general.menu.filter} />
</h2> </div>
<div class="flex h-full flex-col overflow-auto border-b-2 p-4">
{#each layout.layers as layer} {#each layout.layers as layer}
<Filterview <Filterview
zoomlevel={state.mapProperties.zoom} zoomlevel={state.mapProperties.zoom}
@ -76,5 +77,7 @@
zoomlevel={state.mapProperties.zoom} zoomlevel={state.mapProperties.zoom}
/> />
{/each} {/each}
</div>
</div> </TitledPanel>

View file

@ -72,14 +72,14 @@
{/if} {/if}
</div> </div>
<slot name="close-button"> <slot name="close-button">
<button <div
class="mt-2 h-fit shrink-0 rounded-full border-none p-0" class="mt-2 h-fit shrink-0 rounded-full border-none p-0 cursor-pointer"
on:click={() => state.selectedElement.setData(undefined)} on:click={() => state.selectedElement.setData(undefined)}
style="border: 0 !important; padding: 0 !important;" style="border: 0 !important; padding: 0 !important;"
use:ariaLabel={Translations.t.general.backToMap} use:ariaLabel={Translations.t.general.backToMap}
> >
<XCircleIcon aria-hidden={true} class="h-8 w-8" /> <XCircleIcon aria-hidden={true} class="h-8 w-8" />
</button> </div>
</slot> </slot>
</div> </div>

View file

@ -22,6 +22,8 @@
selectedElement.properties.id selectedElement.properties.id
) )
let isAddNew = tags.mapD(t => t.id.startsWith(LastClickFeatureSource.newPointElementId))
function getLayer(properties: Record<string, string>) { function getLayer(properties: Record<string, string>) {
if (properties.id === "settings") { if (properties.id === "settings") {
return UserRelatedState.usersettingsConfig return UserRelatedState.usersettingsConfig
@ -76,7 +78,10 @@
</div> </div>
{:else} {:else}
<div <div
class="selected-element-view flex h-full w-full flex-col gap-y-1 overflow-y-auto p-1 px-4" class="selected-element-view flex h-full w-full flex-col gap-y-1 overflow-y-auto"
class:p1={!$isAddNew}
class:px-4={!$isAddNew}
tabindex="-1" tabindex="-1"
> >
{#each $knownTagRenderings as config (config.id)} {#each $knownTagRenderings as config (config.id)}

View file

@ -11,6 +11,7 @@
import UserRelatedState from "../../Logic/State/UserRelatedState" import UserRelatedState from "../../Logic/State/UserRelatedState"
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import TitledPanel from "../Base/TitledPanel.svelte"
export let availableLayers: Store<RasterLayerPolygon[]> export let availableLayers: Store<RasterLayerPolygon[]>
export let mapproperties: MapProperties export let mapproperties: MapProperties
@ -50,12 +51,8 @@
} }
</script> </script>
<div class="flex h-full flex-col"> <TitledPanel>
<slot name="title"> <Tr slot="title" t={Translations.t.general.backgroundMap} />
<h2>
<Tr t={Translations.t.general.backgroundMap} />
</h2>
</slot>
<div class="grid h-full w-full grid-cols-1 gap-2 md:grid-cols-2"> <div class="grid h-full w-full grid-cols-1 gap-2 md:grid-cols-2">
<RasterLayerPicker <RasterLayerPicker
@ -91,4 +88,4 @@
{visible} {visible}
/> />
</div> </div>
</div> </TitledPanel>

View file

@ -77,7 +77,7 @@
{#if hasLayers} {#if hasLayers}
<form class="flex h-full w-full flex-col" on:submit|preventDefault={() => {}}> <form class="flex h-full w-full flex-col" on:submit|preventDefault={() => {}}>
<button tabindex="-1" on:click={() => apply()} class="m-0 h-full w-full cursor-pointer p-1"> <button tabindex="-1" on:click={() => apply()} class="m-0 p-0 rounded-none h-full w-full cursor-pointer border-none">
<span class="pointer-events-none relative h-full w-full"> <span class="pointer-events-none relative h-full w-full">
<OverlayMap <OverlayMap
interactive={false} interactive={false}

View file

@ -36,6 +36,7 @@
import { Translation } from "../../i18n/Translation" import { Translation } from "../../i18n/Translation"
import ToSvelte from "../../Base/ToSvelte.svelte" import ToSvelte from "../../Base/ToSvelte.svelte"
import BaseUIElement from "../../BaseUIElement" import BaseUIElement from "../../BaseUIElement"
import TitledPanel from "../../Base/TitledPanel.svelte"
export let coordinate: { lon: number; lat: number } export let coordinate: { lon: number; lat: number }
export let state: SpecialVisualizationState export let state: SpecialVisualizationState
@ -116,7 +117,7 @@
theme: state.layout?.id ?? "unkown", theme: state.layout?.id ?? "unkown",
changeType: "create", changeType: "create",
snapOnto: snapToWay, snapOnto: snapToWay,
reusePointWithinMeters: 1, reusePointWithinMeters: 1
}) })
await state.changes.applyAction(newElementAction) await state.changes.applyAction(newElementAction)
state.newFeatures.features.ping() state.newFeatures.features.ping()
@ -186,6 +187,10 @@
/> />
{:else if !$layerIsDisplayed} {:else if !$layerIsDisplayed}
<!-- Check that the layer is enabled, so that we don't add a duplicate --> <!-- Check that the layer is enabled, so that we don't add a duplicate -->
<TitledPanel>
<Tr slot="title" t={Translations.t.general.add.intro} />
<div class="alert flex items-center justify-center"> <div class="alert flex items-center justify-center">
<EyeOffIcon class="w-8" /> <EyeOffIcon class="w-8" />
<Tr <Tr
@ -218,7 +223,13 @@
/> />
</button> </button>
</div> </div>
</TitledPanel>
{:else if $layerHasFilters} {:else if $layerHasFilters}
<TitledPanel>
<Tr slot="title" t={Translations.t.general.add.intro} />
<!-- Some filters are enabled. The feature to add might already be mapped, but hidden --> <!-- Some filters are enabled. The feature to add might already be mapped, but hidden -->
<div class="alert flex items-center justify-center"> <div class="alert flex items-center justify-center">
<EyeOffIcon class="w-8" /> <EyeOffIcon class="w-8" />
@ -246,13 +257,14 @@
<Tr t={Translations.t.general.add.openLayerControl} /> <Tr t={Translations.t.general.add.openLayerControl} />
</button> </button>
</div> </div>
</TitledPanel>
{:else if !confirmedCategory} {:else if !confirmedCategory}
<!-- Second, confirm the category --> <!-- Second, confirm the category -->
<h2 class="mr-12"> <TitledPanel>
<Tr
<Tr slot="title"
t={Translations.t.general.add.confirmTitle.Subs({ title: selectedPreset.preset.title })} t={Translations.t.general.add.confirmTitle.Subs({ title: selectedPreset.preset.title })}
/> />
</h2>
{#if selectedPreset.preset.description} {#if selectedPreset.preset.description}
<Tr t={selectedPreset.preset.description} /> <Tr t={selectedPreset.preset.description} />
@ -293,6 +305,8 @@
</div> </div>
</NextButton> </NextButton>
</div> </div>
</TitledPanel>
{:else if _globalFilter?.length > 0 && _globalFilter?.length > checkedOfGlobalFilters} {:else if _globalFilter?.length > 0 && _globalFilter?.length > checkedOfGlobalFilters}
<Tr t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.safetyCheck} cls="mx-12" /> <Tr t={_globalFilter[checkedOfGlobalFilters].onNewPoint?.safetyCheck} cls="mx-12" />
<SubtleButton <SubtleButton
@ -366,7 +380,9 @@
</div> </div>
</div> </div>
{:else} {:else}
<Loading><Tr t={Translations.t.general.add.creating} /></Loading> <Loading>
<Tr t={Translations.t.general.add.creating} />
</Loading>
{/if} {/if}
</div> </div>
</LoginToggle> </LoginToggle>

View file

@ -13,6 +13,7 @@
import ToSvelte from "../../Base/ToSvelte.svelte" import ToSvelte from "../../Base/ToSvelte.svelte"
import BaseUIElement from "../../BaseUIElement" import BaseUIElement from "../../BaseUIElement"
import Combine from "../../Base/Combine" import Combine from "../../Base/Combine"
import TitledPanel from "../../Base/TitledPanel.svelte"
/** /**
* This component lists all the presets and allows the user to select one * This component lists all the presets and allows the user to select one
@ -79,7 +80,7 @@
text: Translations.t.general.add.addNew.Subs( text: Translations.t.general.add.addNew.Subs(
{ category: preset.title }, { category: preset.title },
preset.title["context"] preset.title["context"]
), )
} }
presets.push(simplified) presets.push(simplified)
} }
@ -96,11 +97,9 @@
}>() }>()
</script> </script>
<div class="flex w-full flex-col"> <TitledPanel>
<h2 class="mr-12"> <Tr slot="title" t={Translations.t.general.add.intro} />
<!-- The title gets a big right margin to give place to the 'close'-button, see https://github.com/pietervdvn/MapComplete/issues/1445 -->
<Tr t={Translations.t.general.add.intro} />
</h2>
{#each presets as preset} {#each presets as preset}
<NextButton on:click={() => dispatch("select", preset)}> <NextButton on:click={() => dispatch("select", preset)}>
@ -115,4 +114,4 @@
</div> </div>
</NextButton> </NextButton>
{/each} {/each}
</div> </TitledPanel>

View file

@ -472,13 +472,6 @@
<If condition={state.previewedImage.map((i) => i !== undefined)}> <If condition={state.previewedImage.map((i) => i !== undefined)}>
<FloatOver on:close={() => state.previewedImage.setData(undefined)}> <FloatOver on:close={() => state.previewedImage.setData(undefined)}>
<button
class="absolute right-4 top-4 h-8 w-8 rounded-full p-0"
on:click={() => previewedImage.setData(undefined)}
slot="close-button"
>
<XCircleIcon />
</button>
<ImageOperations image={$previewedImage} /> <ImageOperations image={$previewedImage} />
</FloatOver> </FloatOver>
</If> </If>
@ -550,7 +543,6 @@
state.guistate.backgroundLayerSelectionIsOpened.setData(false) state.guistate.backgroundLayerSelectionIsOpened.setData(false)
}} }}
> >
<div class="h-full p-2">
<RasterLayerOverview <RasterLayerOverview
{availableLayers} {availableLayers}
map={state.map} map={state.map}
@ -558,7 +550,6 @@
userstate={state.userRelatedState} userstate={state.userRelatedState}
visible={state.guistate.backgroundLayerSelectionIsOpened} visible={state.guistate.backgroundLayerSelectionIsOpened}
/> />
</div>
</FloatOver> </FloatOver>
</IfHidden> </IfHidden>

View file

@ -15,15 +15,15 @@
</script> </script>
<div class="flex w-full p-2"> <div class="flex w-full p-2 flex-wrap">
{#if imageUrl} {#if imageUrl}
<img src={imageUrl} style={imageStyle} class="mr-2" /> <img src={imageUrl} style={imageStyle} class="mr-2" />
{/if} {/if}
<div class="flex flex-col w-full"> <div class="flex flex-col flex-grow">
<div class="flex w-full justify-between"> <div class="flex w-full justify-between flex-wrap">
<Tr cls="font-bold" t={ Translation.fromMap(wikidata.labels) } /> <Tr cls="font-bold" t={ Translation.fromMap(wikidata.labels) } />
<a href={Wikidata.IdToArticle(wikidata.id)} target="_blank" class="flex must-link items-center"> <a href={Wikidata.IdToArticle(wikidata.id)} target="_blank" class="flex must-link items-center">
<Wikidata_icon class="w-10" /> {wikidata.id} <Wikidata_icon class="w-10" /> {wikidata.id}

View file

@ -3,14 +3,11 @@
import { Store } from "../../Logic/UIEventSource" import { Store } from "../../Logic/UIEventSource"
import FromHtml from "../Base/FromHtml.svelte" import FromHtml from "../Base/FromHtml.svelte"
import Loading from "../Base/Loading.svelte" import Loading from "../Base/Loading.svelte"
import { Disclosure, DisclosureButton, DisclosurePanel } from "@rgossiaux/svelte-headlessui"
import { ChevronRightIcon } from "@rgossiaux/svelte-heroicons/solid"
import ToSvelte from "../Base/ToSvelte.svelte"
import WikidataPreviewBox from "./WikidataPreviewBox"
import Tr from "../Base/Tr.svelte" import Tr from "../Base/Tr.svelte"
import Translations from "../i18n/Translations" import Translations from "../i18n/Translations"
import Wikipedia from "../../assets/svg/Wikipedia.svelte" import Wikipedia from "../../assets/svg/Wikipedia.svelte"
import Wikidatapreview from "./Wikidatapreview.svelte" import Wikidatapreview from "./Wikidatapreview.svelte"
import AccordionSingle from "../Flowbite/AccordionSingle.svelte"
/** /**
* Shows a wikipedia-article + wikidata preview for the given item * Shows a wikipedia-article + wikidata preview for the given item
@ -21,15 +18,11 @@
) )
</script> </script>
<div class="low-interaction border-gray-300 border-dashed rounded-xl p-2 flex flex-col">
{#if $titleOnly} {#if $titleOnly}
<Loading>{$wikipediaDetails.title}</Loading> <Loading>{$wikipediaDetails.title}</Loading>
{/if} {/if}
{#if $wikipediaDetails.articleUrl}
<a class="flex" href={$wikipediaDetails.articleUrl} rel="noreferrer" target="_blank">
<Wikipedia class="h-6 w-6" />
<Tr t={Translations.t.general.wikipedia.fromWikipedia} />
</a>
{/if}
{#if $wikipediaDetails.wikidata} {#if $wikipediaDetails.wikidata}
<Wikidatapreview wikidata={$wikipediaDetails.wikidata} /> <Wikidatapreview wikidata={$wikipediaDetails.wikidata} />
@ -42,19 +35,16 @@
</Loading> </Loading>
{:else} {:else}
<FromHtml clss="wikipedia-article" src={$wikipediaDetails.firstParagraph} /> <FromHtml clss="wikipedia-article" src={$wikipediaDetails.firstParagraph} />
<Disclosure let:open> {#if $wikipediaDetails.articleUrl}
<DisclosureButton> <a class="flex self-end my-2" href={$wikipediaDetails.articleUrl} rel="noreferrer" target="_blank">
<span class="flex"> <Wikipedia class="h-6 w-6" />
<ChevronRightIcon <Tr t={Translations.t.general.wikipedia.fromWikipedia} />
style={(open ? "transform: rotate(90deg); " : "") + </a>
" transition: all .25s linear; width: 1.5rem; height: 1.5rem"} {/if}
/> <AccordionSingle>
<Tr t={Translations.t.general.wikipedia.readMore} /> <Tr slot="header" t={Translations.t.general.wikipedia.readMore} />
</span>
</DisclosureButton>
<DisclosurePanel>
<FromHtml clss="wikipedia-article" src={$wikipediaDetails.restOfArticle} /> <FromHtml clss="wikipedia-article" src={$wikipediaDetails.restOfArticle} />
</DisclosurePanel> </AccordionSingle>
</Disclosure>
{/if} {/if}
{/if} {/if}
</div>