mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-09-01 08:12:32 +00:00
layer settings in accordion
This commit is contained in:
@@ -1,12 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import CustomControl from '$lib/components/custom-control/CustomControl.svelte';
|
|
||||||
import LayerTree from './LayerTree.svelte';
|
import LayerTree from './LayerTree.svelte';
|
||||||
|
|
||||||
import { Button } from '$lib/components/ui/button';
|
import { Button } from '$lib/components/ui/button';
|
||||||
import Label from '$lib/components/ui/label/label.svelte';
|
|
||||||
import { Separator } from '$lib/components/ui/separator';
|
import { Separator } from '$lib/components/ui/separator';
|
||||||
import { ScrollArea } from '$lib/components/ui/scroll-area/index.js';
|
import { ScrollArea } from '$lib/components/ui/scroll-area/index.js';
|
||||||
import * as Sheet from '$lib/components/ui/sheet';
|
import * as Sheet from '$lib/components/ui/sheet';
|
||||||
|
import * as Accordion from '$lib/components/ui/accordion';
|
||||||
|
|
||||||
import Fa from 'svelte-fa';
|
import Fa from 'svelte-fa';
|
||||||
import { faGear } from '@fortawesome/free-solid-svg-icons';
|
import { faGear } from '@fortawesome/free-solid-svg-icons';
|
||||||
@@ -34,35 +33,50 @@
|
|||||||
<Sheet.Description>
|
<Sheet.Description>
|
||||||
Select the map layers you want to show in the interface and adjust their settings.
|
Select the map layers you want to show in the interface and adjust their settings.
|
||||||
</Sheet.Description>
|
</Sheet.Description>
|
||||||
<ScrollArea class="pr-4">
|
<Accordion.Root class="flex flex-col overflow-hidden">
|
||||||
<div>
|
<Accordion.Item value="item-1" class="flex flex-col overflow-hidden">
|
||||||
<LayerTree
|
<Accordion.Trigger>Layer selection</Accordion.Trigger>
|
||||||
layerTree={basemapTree}
|
<Accordion.Content class="grow flex flex-col">
|
||||||
label="Basemaps"
|
<ScrollArea class="pr-4">
|
||||||
name="basemapSettings"
|
<LayerTree
|
||||||
multiple={true}
|
layerTree={basemapTree}
|
||||||
onValueChange={(id) => {
|
label="Basemaps"
|
||||||
// TODO
|
name="basemapSettings"
|
||||||
}}
|
multiple={true}
|
||||||
/>
|
onValueChange={(id) => {
|
||||||
</div>
|
// TODO
|
||||||
</ScrollArea>
|
}}
|
||||||
<Separator class="my-2" />
|
/>
|
||||||
<ScrollArea class="pr-4">
|
</ScrollArea>
|
||||||
<div>
|
<Separator class="my-2" />
|
||||||
<LayerTree
|
<ScrollArea class="pr-4">
|
||||||
layerTree={overlayTree}
|
<LayerTree
|
||||||
label="Overlays"
|
layerTree={overlayTree}
|
||||||
name="overlaySettings"
|
label="Overlays"
|
||||||
multiple={true}
|
name="overlaySettings"
|
||||||
onValueChange={(id, checked) => {
|
multiple={true}
|
||||||
// TODO
|
onValueChange={(id, checked) => {
|
||||||
}}
|
// TODO
|
||||||
/>
|
}}
|
||||||
</div>
|
/>
|
||||||
</ScrollArea>
|
</ScrollArea>
|
||||||
<Separator class="my-2" />
|
</Accordion.Content>
|
||||||
<Button variant="secondary" class="w-full px-1 py-1.5">Add custom layer</Button>
|
</Accordion.Item>
|
||||||
|
<Accordion.Item value="item-2">
|
||||||
|
<Accordion.Trigger>Custom layer</Accordion.Trigger>
|
||||||
|
<Accordion.Content>
|
||||||
|
<ScrollArea>TODO custom layer form</ScrollArea>
|
||||||
|
</Accordion.Content>
|
||||||
|
</Accordion.Item>
|
||||||
|
<Accordion.Item value="item-3">
|
||||||
|
<Accordion.Trigger>Heatmap settings</Accordion.Trigger>
|
||||||
|
<Accordion.Content></Accordion.Content>
|
||||||
|
</Accordion.Item>
|
||||||
|
<Accordion.Item value="item-4">
|
||||||
|
<Accordion.Trigger>POIs settings</Accordion.Trigger>
|
||||||
|
<Accordion.Content></Accordion.Content>
|
||||||
|
</Accordion.Item>
|
||||||
|
</Accordion.Root>
|
||||||
</Sheet.Header>
|
</Sheet.Header>
|
||||||
</Sheet.Content>
|
</Sheet.Content>
|
||||||
</Sheet.Root>
|
</Sheet.Root>
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
import * as Collapsible from '$lib/components/ui/collapsible';
|
import * as Collapsible from '$lib/components/ui/collapsible';
|
||||||
|
|
||||||
import Fa from 'svelte-fa';
|
import Fa from 'svelte-fa';
|
||||||
import { faChevronDown, faChevronLeft } from '@fortawesome/free-solid-svg-icons';
|
import { faChevronDown, faChevronUp } from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
import { type LayerTreeType } from '$lib/assets/layers';
|
import { type LayerTreeType } from '$lib/assets/layers';
|
||||||
|
|
||||||
@@ -71,9 +71,9 @@
|
|||||||
>
|
>
|
||||||
<span class="mr-2">{id}</span>
|
<span class="mr-2">{id}</span>
|
||||||
{#if open[id]}
|
{#if open[id]}
|
||||||
<Fa icon={faChevronDown} size="xs" />
|
<Fa icon={faChevronUp} size="xs" />
|
||||||
{:else}
|
{:else}
|
||||||
<Fa icon={faChevronLeft} size="xs" />
|
<Fa icon={faChevronDown} size="xs" />
|
||||||
{/if}
|
{/if}
|
||||||
</Button></Collapsible.Trigger
|
</Button></Collapsible.Trigger
|
||||||
>
|
>
|
||||||
|
@@ -0,0 +1,23 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { Accordion as AccordionPrimitive } from 'bits-ui';
|
||||||
|
import { slide } from 'svelte/transition';
|
||||||
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
|
type $$Props = AccordionPrimitive.ContentProps;
|
||||||
|
|
||||||
|
let className: $$Props['class'] = undefined;
|
||||||
|
export let transition: $$Props['transition'] = slide;
|
||||||
|
export let transitionConfig: $$Props['transitionConfig'] = {
|
||||||
|
duration: 200
|
||||||
|
};
|
||||||
|
export { className as class };
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<AccordionPrimitive.Content
|
||||||
|
class={cn('overflow-hidden text-sm transition-all pb-4', className)}
|
||||||
|
{transition}
|
||||||
|
{transitionConfig}
|
||||||
|
{...$$restProps}
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
</AccordionPrimitive.Content>
|
@@ -0,0 +1,14 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { Accordion as AccordionPrimitive } from 'bits-ui';
|
||||||
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
|
type $$Props = AccordionPrimitive.ItemProps;
|
||||||
|
|
||||||
|
let className: $$Props['class'] = undefined;
|
||||||
|
export let value: $$Props['value'];
|
||||||
|
export { className as class };
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<AccordionPrimitive.Item {value} class={cn('border-b', className)} {...$$restProps}>
|
||||||
|
<slot />
|
||||||
|
</AccordionPrimitive.Item>
|
@@ -0,0 +1,26 @@
|
|||||||
|
<script lang="ts">
|
||||||
|
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||||
|
import ChevronDown from "lucide-svelte/icons/chevron-down";
|
||||||
|
import { cn } from "$lib/utils.js";
|
||||||
|
|
||||||
|
type $$Props = AccordionPrimitive.TriggerProps;
|
||||||
|
type $$Events = AccordionPrimitive.TriggerEvents;
|
||||||
|
|
||||||
|
let className: $$Props["class"] = undefined;
|
||||||
|
export let level: AccordionPrimitive.HeaderProps["level"] = 3;
|
||||||
|
export { className as class };
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<AccordionPrimitive.Header {level} class="flex">
|
||||||
|
<AccordionPrimitive.Trigger
|
||||||
|
class={cn(
|
||||||
|
"flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",
|
||||||
|
className
|
||||||
|
)}
|
||||||
|
{...$$restProps}
|
||||||
|
on:click
|
||||||
|
>
|
||||||
|
<slot />
|
||||||
|
<ChevronDown class="h-4 w-4 transition-transform duration-200" />
|
||||||
|
</AccordionPrimitive.Trigger>
|
||||||
|
</AccordionPrimitive.Header>
|
17
website/src/lib/components/ui/accordion/index.ts
Normal file
17
website/src/lib/components/ui/accordion/index.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import { Accordion as AccordionPrimitive } from "bits-ui";
|
||||||
|
import Content from "./accordion-content.svelte";
|
||||||
|
import Item from "./accordion-item.svelte";
|
||||||
|
import Trigger from "./accordion-trigger.svelte";
|
||||||
|
const Root = AccordionPrimitive.Root;
|
||||||
|
|
||||||
|
export {
|
||||||
|
Root,
|
||||||
|
Content,
|
||||||
|
Item,
|
||||||
|
Trigger,
|
||||||
|
//
|
||||||
|
Root as Accordion,
|
||||||
|
Content as AccordionContent,
|
||||||
|
Item as AccordionItem,
|
||||||
|
Trigger as AccordionTrigger,
|
||||||
|
};
|
@@ -1,13 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
type $$Props = HTMLAttributes<HTMLDivElement>;
|
type $$Props = HTMLAttributes<HTMLDivElement>;
|
||||||
|
|
||||||
let className: $$Props["class"] = undefined;
|
let className: $$Props['class'] = undefined;
|
||||||
export { className as class };
|
export { className as class };
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div class={cn("flex flex-col space-y-2 text-center sm:text-left", className)} {...$$restProps}>
|
<div class={cn('flex flex-col space-y-2 sm:text-left', className)} {...$$restProps}>
|
||||||
<slot />
|
<slot />
|
||||||
</div>
|
</div>
|
||||||
|
Reference in New Issue
Block a user