mirror of
https://github.com/gpxstudio/gpx.studio.git
synced 2025-08-30 23:30:04 +00:00
menubar
This commit is contained in:
14
website/components.json
Normal file
14
website/components.json
Normal file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"$schema": "https://shadcn-svelte.com/schema.json",
|
||||
"style": "default",
|
||||
"tailwind": {
|
||||
"config": "tailwind.config.js",
|
||||
"css": "src/app.css",
|
||||
"baseColor": "slate"
|
||||
},
|
||||
"aliases": {
|
||||
"components": "$lib/components",
|
||||
"utils": "$lib/utils"
|
||||
},
|
||||
"typescript": true
|
||||
}
|
354
website/package-lock.json
generated
354
website/package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@@ -38,7 +38,12 @@
|
||||
"type": "module",
|
||||
"dependencies": {
|
||||
"@maplibre/maplibre-gl-geocoder": "^1.5.0",
|
||||
"bits-ui": "^0.21.2",
|
||||
"clsx": "^2.1.0",
|
||||
"gpx": "file:../gpx",
|
||||
"maplibre-gl": "^4.1.2"
|
||||
"lucide-svelte": "^0.365.0",
|
||||
"maplibre-gl": "^4.1.2",
|
||||
"tailwind-merge": "^2.2.2",
|
||||
"tailwind-variants": "^0.2.1"
|
||||
}
|
||||
}
|
||||
|
@@ -1,3 +0,0 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
78
website/src/app.pcss
Normal file
78
website/src/app.pcss
Normal file
@@ -0,0 +1,78 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
|
||||
@layer base {
|
||||
:root {
|
||||
--background: 0 0% 100%;
|
||||
--foreground: 222.2 84% 4.9%;
|
||||
|
||||
--muted: 210 40% 96.1%;
|
||||
--muted-foreground: 215.4 16.3% 46.9%;
|
||||
|
||||
--popover: 0 0% 100%;
|
||||
--popover-foreground: 222.2 84% 4.9%;
|
||||
|
||||
--card: 0 0% 100%;
|
||||
--card-foreground: 222.2 84% 4.9%;
|
||||
|
||||
--border: 214.3 31.8% 91.4%;
|
||||
--input: 214.3 31.8% 91.4%;
|
||||
|
||||
--primary: 222.2 47.4% 11.2%;
|
||||
--primary-foreground: 210 40% 98%;
|
||||
|
||||
--secondary: 210 40% 96.1%;
|
||||
--secondary-foreground: 222.2 47.4% 11.2%;
|
||||
|
||||
--accent: 210 40% 96.1%;
|
||||
--accent-foreground: 222.2 47.4% 11.2%;
|
||||
|
||||
--destructive: 0 72.2% 50.6%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
|
||||
--ring: 222.2 84% 4.9%;
|
||||
|
||||
--radius: 0.5rem;
|
||||
}
|
||||
|
||||
.dark {
|
||||
--background: 222.2 84% 4.9%;
|
||||
--foreground: 210 40% 98%;
|
||||
|
||||
--muted: 217.2 32.6% 17.5%;
|
||||
--muted-foreground: 215 20.2% 65.1%;
|
||||
|
||||
--popover: 222.2 84% 4.9%;
|
||||
--popover-foreground: 210 40% 98%;
|
||||
|
||||
--card: 222.2 84% 4.9%;
|
||||
--card-foreground: 210 40% 98%;
|
||||
|
||||
--border: 217.2 32.6% 17.5%;
|
||||
--input: 217.2 32.6% 17.5%;
|
||||
|
||||
--primary: 210 40% 98%;
|
||||
--primary-foreground: 222.2 47.4% 11.2%;
|
||||
|
||||
--secondary: 217.2 32.6% 17.5%;
|
||||
--secondary-foreground: 210 40% 98%;
|
||||
|
||||
--accent: 217.2 32.6% 17.5%;
|
||||
--accent-foreground: 210 40% 98%;
|
||||
|
||||
--destructive: 0 62.8% 30.6%;
|
||||
--destructive-foreground: 210 40% 98%;
|
||||
|
||||
--ring: hsl(212.7,26.8%,83.9);
|
||||
}
|
||||
}
|
||||
|
||||
@layer base {
|
||||
* {
|
||||
@apply border-border;
|
||||
}
|
||||
body {
|
||||
@apply bg-background text-foreground;
|
||||
}
|
||||
}
|
5
website/src/lib/components/Logo.svelte
Normal file
5
website/src/lib/components/Logo.svelte
Normal file
@@ -0,0 +1,5 @@
|
||||
<script lang="ts">
|
||||
import { base } from '$app/paths';
|
||||
</script>
|
||||
|
||||
<img src="{base}/logo.svg" alt="Logo of gpx.studio." {...$$restProps} />
|
@@ -72,8 +72,6 @@
|
||||
collapsed: true
|
||||
})
|
||||
);
|
||||
|
||||
console.log(map);
|
||||
});
|
||||
|
||||
onDestroy(() => {
|
||||
|
95
website/src/lib/components/Menu.svelte
Normal file
95
website/src/lib/components/Menu.svelte
Normal file
@@ -0,0 +1,95 @@
|
||||
<script lang="ts">
|
||||
import * as Menubar from '$lib/components/ui/menubar/index.js';
|
||||
import { Button } from '$lib/components/ui/button';
|
||||
import Logo from './Logo.svelte';
|
||||
|
||||
let distanceUnits = 'metric';
|
||||
let velocityUnits = 'speed';
|
||||
let showDistanceMarkers = false;
|
||||
let showDirectionMarkers = false;
|
||||
</script>
|
||||
|
||||
<div class="h-fit flex flex-row items-center mx-1">
|
||||
<Logo class="h-5 mt-1 mx-2" />
|
||||
<Menubar.Root class="border-none">
|
||||
<Menubar.Menu>
|
||||
<Menubar.Trigger>File</Menubar.Trigger>
|
||||
<Menubar.Content>
|
||||
<Menubar.Item>
|
||||
New GPX file <Menubar.Shortcut>⌘N</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Item>
|
||||
Load GPX file(s)... <Menubar.Shortcut>⌘O</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Separator />
|
||||
<Menubar.Item>
|
||||
Export... <Menubar.Shortcut>⌘S</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Item>
|
||||
Export all... <Menubar.Shortcut>⇧⌘S</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
</Menubar.Content>
|
||||
</Menubar.Menu>
|
||||
<Menubar.Menu>
|
||||
<Menubar.Trigger>Edit</Menubar.Trigger>
|
||||
<Menubar.Content>
|
||||
<Menubar.Item>
|
||||
Undo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Item>
|
||||
Redo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Separator />
|
||||
<Menubar.Item>Delete <Menubar.Shortcut>⌘D</Menubar.Shortcut></Menubar.Item>
|
||||
<Menubar.Item>Delete all<Menubar.Shortcut>⇧⌘D</Menubar.Shortcut></Menubar.Item>
|
||||
</Menubar.Content>
|
||||
</Menubar.Menu>
|
||||
<Menubar.Menu>
|
||||
<Menubar.Trigger>Help</Menubar.Trigger>
|
||||
<Menubar.Content>
|
||||
<Menubar.Item>
|
||||
Quick help <Menubar.Shortcut>⌘H</Menubar.Shortcut>
|
||||
</Menubar.Item>
|
||||
<Menubar.Item>User guide</Menubar.Item>
|
||||
</Menubar.Content>
|
||||
</Menubar.Menu>
|
||||
<Menubar.Menu>
|
||||
<Menubar.Trigger>Settings</Menubar.Trigger>
|
||||
<Menubar.Content
|
||||
><Menubar.Sub>
|
||||
<Menubar.SubTrigger inset>Distance units</Menubar.SubTrigger>
|
||||
<Menubar.SubContent>
|
||||
<Menubar.RadioGroup bind:value={distanceUnits}>
|
||||
<Menubar.RadioItem value="metric">Metric</Menubar.RadioItem>
|
||||
<Menubar.RadioItem value="imperial">Imperial</Menubar.RadioItem>
|
||||
</Menubar.RadioGroup>
|
||||
</Menubar.SubContent>
|
||||
</Menubar.Sub>
|
||||
<Menubar.Sub>
|
||||
<Menubar.SubTrigger inset>Velocity units</Menubar.SubTrigger>
|
||||
<Menubar.SubContent>
|
||||
<Menubar.RadioGroup bind:value={velocityUnits}>
|
||||
<Menubar.RadioItem value="speed">Speed</Menubar.RadioItem>
|
||||
<Menubar.RadioItem value="pace">Pace</Menubar.RadioItem>
|
||||
</Menubar.RadioGroup>
|
||||
</Menubar.SubContent>
|
||||
</Menubar.Sub>
|
||||
<Menubar.Separator />
|
||||
<Menubar.CheckboxItem bind:checked={showDistanceMarkers}>
|
||||
Show distance markers
|
||||
</Menubar.CheckboxItem>
|
||||
<Menubar.CheckboxItem bind:checked={showDirectionMarkers}>
|
||||
Show direction markers
|
||||
</Menubar.CheckboxItem>
|
||||
</Menubar.Content>
|
||||
</Menubar.Menu>
|
||||
</Menubar.Root>
|
||||
<div class="py-1 h-10">
|
||||
<Button
|
||||
variant="ghost"
|
||||
href="/about"
|
||||
target="_blank"
|
||||
class="cursor-default py-1.5 px-3 h-fit rounded-sm">About</Button
|
||||
>
|
||||
</div>
|
||||
</div>
|
25
website/src/lib/components/ui/button/button.svelte
Normal file
25
website/src/lib/components/ui/button/button.svelte
Normal file
@@ -0,0 +1,25 @@
|
||||
<script lang="ts">
|
||||
import { Button as ButtonPrimitive } from "bits-ui";
|
||||
import { type Events, type Props, buttonVariants } from "./index.js";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = Props;
|
||||
type $$Events = Events;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let variant: $$Props["variant"] = "default";
|
||||
export let size: $$Props["size"] = "default";
|
||||
export let builders: $$Props["builders"] = [];
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<ButtonPrimitive.Root
|
||||
{builders}
|
||||
class={cn(buttonVariants({ variant, size, className }))}
|
||||
type="button"
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
>
|
||||
<slot />
|
||||
</ButtonPrimitive.Root>
|
49
website/src/lib/components/ui/button/index.ts
Normal file
49
website/src/lib/components/ui/button/index.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import { type VariantProps, tv } from "tailwind-variants";
|
||||
import type { Button as ButtonPrimitive } from "bits-ui";
|
||||
import Root from "./button.svelte";
|
||||
|
||||
const buttonVariants = tv({
|
||||
base: "inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50",
|
||||
variants: {
|
||||
variant: {
|
||||
default: "bg-primary text-primary-foreground hover:bg-primary/90",
|
||||
destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90",
|
||||
outline:
|
||||
"border border-input bg-background hover:bg-accent hover:text-accent-foreground",
|
||||
secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80",
|
||||
ghost: "hover:bg-accent hover:text-accent-foreground",
|
||||
link: "text-primary underline-offset-4 hover:underline",
|
||||
},
|
||||
size: {
|
||||
default: "h-10 px-4 py-2",
|
||||
sm: "h-9 rounded-md px-3",
|
||||
lg: "h-11 rounded-md px-8",
|
||||
icon: "h-10 w-10",
|
||||
},
|
||||
},
|
||||
defaultVariants: {
|
||||
variant: "default",
|
||||
size: "default",
|
||||
},
|
||||
});
|
||||
|
||||
type Variant = VariantProps<typeof buttonVariants>["variant"];
|
||||
type Size = VariantProps<typeof buttonVariants>["size"];
|
||||
|
||||
type Props = ButtonPrimitive.Props & {
|
||||
variant?: Variant;
|
||||
size?: Size;
|
||||
};
|
||||
|
||||
type Events = ButtonPrimitive.Events;
|
||||
|
||||
export {
|
||||
Root,
|
||||
type Props,
|
||||
type Events,
|
||||
//
|
||||
Root as Button,
|
||||
type Props as ButtonProps,
|
||||
type Events as ButtonEvents,
|
||||
buttonVariants,
|
||||
};
|
@@ -0,0 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import Check from "lucide-svelte/icons/check";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.CheckboxItemProps;
|
||||
type $$Events = DropdownMenuPrimitive.CheckboxItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let checked: $$Props["checked"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.CheckboxItem
|
||||
bind:checked
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerdown
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
>
|
||||
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
||||
<DropdownMenuPrimitive.CheckboxIndicator>
|
||||
<Check class="h-4 w-4" />
|
||||
</DropdownMenuPrimitive.CheckboxIndicator>
|
||||
</span>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.CheckboxItem>
|
@@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn, flyAndScale } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.ContentProps;
|
||||
type $$Events = DropdownMenuPrimitive.ContentEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let sideOffset: $$Props["sideOffset"] = 4;
|
||||
export let transition: $$Props["transition"] = flyAndScale;
|
||||
export let transitionConfig: $$Props["transitionConfig"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Content
|
||||
{transition}
|
||||
{transitionConfig}
|
||||
{sideOffset}
|
||||
class={cn(
|
||||
"z-50 min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md focus:outline-none",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:keydown
|
||||
>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.Content>
|
@@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.ItemProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
type $$Events = DropdownMenuPrimitive.ItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Item
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
inset && "pl-8",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerdown
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.Item>
|
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.LabelProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Label
|
||||
class={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
|
||||
{...$$restProps}
|
||||
>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.Label>
|
@@ -0,0 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.RadioGroupProps;
|
||||
|
||||
export let value: $$Props["value"] = undefined;
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.RadioGroup {...$$restProps} bind:value>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.RadioGroup>
|
@@ -0,0 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import Circle from "lucide-svelte/icons/circle";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.RadioItemProps;
|
||||
type $$Events = DropdownMenuPrimitive.RadioItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let value: $$Props["value"];
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.RadioItem
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
className
|
||||
)}
|
||||
{value}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerdown
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
>
|
||||
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
||||
<DropdownMenuPrimitive.RadioIndicator>
|
||||
<Circle class="h-2 w-2 fill-current" />
|
||||
</DropdownMenuPrimitive.RadioIndicator>
|
||||
</span>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.RadioItem>
|
@@ -0,0 +1,14 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.SeparatorProps;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.Separator
|
||||
class={cn("-mx-1 my-1 h-px bg-muted", className)}
|
||||
{...$$restProps}
|
||||
/>
|
@@ -0,0 +1,13 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = HTMLAttributes<HTMLSpanElement>;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<span class={cn("ml-auto text-xs tracking-widest opacity-60", className)} {...$$restProps}>
|
||||
<slot />
|
||||
</span>
|
@@ -0,0 +1,30 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import { cn, flyAndScale } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.SubContentProps;
|
||||
type $$Events = DropdownMenuPrimitive.SubContentEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let transition: $$Props["transition"] = flyAndScale;
|
||||
export let transitionConfig: $$Props["transitionConfig"] = {
|
||||
x: -10,
|
||||
y: 0,
|
||||
};
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.SubContent
|
||||
{transition}
|
||||
{transitionConfig}
|
||||
class={cn(
|
||||
"z-50 min-w-[8rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-lg focus:outline-none",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:keydown
|
||||
on:focusout
|
||||
on:pointermove
|
||||
>
|
||||
<slot />
|
||||
</DropdownMenuPrimitive.SubContent>
|
@@ -0,0 +1,32 @@
|
||||
<script lang="ts">
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import ChevronRight from "lucide-svelte/icons/chevron-right";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = DropdownMenuPrimitive.SubTriggerProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
type $$Events = DropdownMenuPrimitive.SubTriggerEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<DropdownMenuPrimitive.SubTrigger
|
||||
class={cn(
|
||||
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground",
|
||||
inset && "pl-8",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
>
|
||||
<slot />
|
||||
<ChevronRight class="ml-auto h-4 w-4" />
|
||||
</DropdownMenuPrimitive.SubTrigger>
|
48
website/src/lib/components/ui/dropdown-menu/index.ts
Normal file
48
website/src/lib/components/ui/dropdown-menu/index.ts
Normal file
@@ -0,0 +1,48 @@
|
||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
||||
import Item from "./dropdown-menu-item.svelte";
|
||||
import Label from "./dropdown-menu-label.svelte";
|
||||
import Content from "./dropdown-menu-content.svelte";
|
||||
import Shortcut from "./dropdown-menu-shortcut.svelte";
|
||||
import RadioItem from "./dropdown-menu-radio-item.svelte";
|
||||
import Separator from "./dropdown-menu-separator.svelte";
|
||||
import RadioGroup from "./dropdown-menu-radio-group.svelte";
|
||||
import SubContent from "./dropdown-menu-sub-content.svelte";
|
||||
import SubTrigger from "./dropdown-menu-sub-trigger.svelte";
|
||||
import CheckboxItem from "./dropdown-menu-checkbox-item.svelte";
|
||||
|
||||
const Sub = DropdownMenuPrimitive.Sub;
|
||||
const Root = DropdownMenuPrimitive.Root;
|
||||
const Trigger = DropdownMenuPrimitive.Trigger;
|
||||
const Group = DropdownMenuPrimitive.Group;
|
||||
|
||||
export {
|
||||
Sub,
|
||||
Root,
|
||||
Item,
|
||||
Label,
|
||||
Group,
|
||||
Trigger,
|
||||
Content,
|
||||
Shortcut,
|
||||
Separator,
|
||||
RadioItem,
|
||||
SubContent,
|
||||
SubTrigger,
|
||||
RadioGroup,
|
||||
CheckboxItem,
|
||||
//
|
||||
Root as DropdownMenu,
|
||||
Sub as DropdownMenuSub,
|
||||
Item as DropdownMenuItem,
|
||||
Label as DropdownMenuLabel,
|
||||
Group as DropdownMenuGroup,
|
||||
Content as DropdownMenuContent,
|
||||
Trigger as DropdownMenuTrigger,
|
||||
Shortcut as DropdownMenuShortcut,
|
||||
RadioItem as DropdownMenuRadioItem,
|
||||
Separator as DropdownMenuSeparator,
|
||||
RadioGroup as DropdownMenuRadioGroup,
|
||||
SubContent as DropdownMenuSubContent,
|
||||
SubTrigger as DropdownMenuSubTrigger,
|
||||
CheckboxItem as DropdownMenuCheckboxItem,
|
||||
};
|
52
website/src/lib/components/ui/menubar/index.ts
Normal file
52
website/src/lib/components/ui/menubar/index.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
|
||||
import Root from "./menubar.svelte";
|
||||
import CheckboxItem from "./menubar-checkbox-item.svelte";
|
||||
import Content from "./menubar-content.svelte";
|
||||
import Item from "./menubar-item.svelte";
|
||||
import Label from "./menubar-label.svelte";
|
||||
import RadioItem from "./menubar-radio-item.svelte";
|
||||
import Separator from "./menubar-separator.svelte";
|
||||
import Shortcut from "./menubar-shortcut.svelte";
|
||||
import SubContent from "./menubar-sub-content.svelte";
|
||||
import SubTrigger from "./menubar-sub-trigger.svelte";
|
||||
import Trigger from "./menubar-trigger.svelte";
|
||||
|
||||
const Menu = MenubarPrimitive.Menu;
|
||||
const Group = MenubarPrimitive.Group;
|
||||
const Sub = MenubarPrimitive.Sub;
|
||||
const RadioGroup = MenubarPrimitive.RadioGroup;
|
||||
|
||||
export {
|
||||
Root,
|
||||
CheckboxItem,
|
||||
Content,
|
||||
Item,
|
||||
Label,
|
||||
RadioItem,
|
||||
Separator,
|
||||
Shortcut,
|
||||
SubContent,
|
||||
SubTrigger,
|
||||
Trigger,
|
||||
Menu,
|
||||
Group,
|
||||
Sub,
|
||||
RadioGroup,
|
||||
//
|
||||
Root as Menubar,
|
||||
CheckboxItem as MenubarCheckboxItem,
|
||||
Content as MenubarContent,
|
||||
Item as MenubarItem,
|
||||
Label as MenubarLabel,
|
||||
RadioItem as MenubarRadioItem,
|
||||
Separator as MenubarSeparator,
|
||||
Shortcut as MenubarShortcut,
|
||||
SubContent as MenubarSubContent,
|
||||
SubTrigger as MenubarSubTrigger,
|
||||
Trigger as MenubarTrigger,
|
||||
Menu as MenubarMenu,
|
||||
Group as MenubarGroup,
|
||||
Sub as MenubarSub,
|
||||
RadioGroup as MenubarRadioGroup,
|
||||
};
|
@@ -0,0 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import Check from "lucide-svelte/icons/check";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.CheckboxItemProps;
|
||||
type $$Events = MenubarPrimitive.CheckboxItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let checked: $$Props["checked"] = false;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.CheckboxItem
|
||||
bind:checked
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
className
|
||||
)}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
on:pointerdown
|
||||
{...$$restProps}
|
||||
>
|
||||
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
||||
<MenubarPrimitive.CheckboxIndicator>
|
||||
<Check class="h-4 w-4" />
|
||||
</MenubarPrimitive.CheckboxIndicator>
|
||||
</span>
|
||||
<slot />
|
||||
</MenubarPrimitive.CheckboxItem>
|
33
website/src/lib/components/ui/menubar/menubar-content.svelte
Normal file
33
website/src/lib/components/ui/menubar/menubar-content.svelte
Normal file
@@ -0,0 +1,33 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn, flyAndScale } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.ContentProps;
|
||||
type $$Events = MenubarPrimitive.ContentEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let sideOffset: $$Props["sideOffset"] = 8;
|
||||
export let alignOffset: $$Props["alignOffset"] = -4;
|
||||
export let align: $$Props["align"] = "start";
|
||||
export let side: $$Props["side"] = "bottom";
|
||||
export let transition: $$Props["transition"] = flyAndScale;
|
||||
export let transitionConfig: $$Props["transitionConfig"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Content
|
||||
{transition}
|
||||
{transitionConfig}
|
||||
{sideOffset}
|
||||
{align}
|
||||
{alignOffset}
|
||||
{side}
|
||||
class={cn(
|
||||
"z-50 min-w-[12rem] rounded-md border bg-popover p-1 text-popover-foreground shadow-md focus:outline-none",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:keydown
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.Content>
|
31
website/src/lib/components/ui/menubar/menubar-item.svelte
Normal file
31
website/src/lib/components/ui/menubar/menubar-item.svelte
Normal file
@@ -0,0 +1,31 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.ItemProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
type $$Events = MenubarPrimitive.ItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Item
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
inset && "pl-8",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
on:pointerdown
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.Item>
|
19
website/src/lib/components/ui/menubar/menubar-label.svelte
Normal file
19
website/src/lib/components/ui/menubar/menubar-label.svelte
Normal file
@@ -0,0 +1,19 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.LabelProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Label
|
||||
class={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
|
||||
{...$$restProps}
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.Label>
|
@@ -0,0 +1,35 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import Circle from "lucide-svelte/icons/circle";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.RadioItemProps;
|
||||
type $$Events = MenubarPrimitive.RadioItemEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let value: $$Props["value"];
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.RadioItem
|
||||
{value}
|
||||
class={cn(
|
||||
"relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[highlighted]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:click
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
on:pointerdown
|
||||
>
|
||||
<span class="absolute left-2 flex h-3.5 w-3.5 items-center justify-center">
|
||||
<MenubarPrimitive.RadioIndicator>
|
||||
<Circle class="h-2 w-2 fill-current" />
|
||||
</MenubarPrimitive.RadioIndicator>
|
||||
</span>
|
||||
<slot />
|
||||
</MenubarPrimitive.RadioItem>
|
@@ -0,0 +1,11 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.SeparatorProps;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Separator class={cn("-mx-1 my-1 h-px bg-muted", className)} {...$$restProps} />
|
@@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import type { HTMLAttributes } from "svelte/elements";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = HTMLAttributes<HTMLSpanElement>;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<span
|
||||
class={cn("ml-auto text-xs tracking-widest text-muted-foreground", className)}
|
||||
{...$$restProps}
|
||||
>
|
||||
<slot />
|
||||
</span>
|
@@ -0,0 +1,27 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn, flyAndScale } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.SubContentProps;
|
||||
type $$Events = MenubarPrimitive.SubContentEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let transition: $$Props["transition"] = flyAndScale;
|
||||
export let transitionConfig: $$Props["transitionConfig"] = { x: -10, y: 0 };
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.SubContent
|
||||
{transition}
|
||||
{transitionConfig}
|
||||
class={cn(
|
||||
"z-50 min-w-max rounded-md border bg-popover p-1 text-popover-foreground focus:outline-none",
|
||||
className
|
||||
)}
|
||||
{...$$restProps}
|
||||
on:focusout
|
||||
on:pointermove
|
||||
on:keydown
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.SubContent>
|
@@ -0,0 +1,32 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import ChevronRight from "lucide-svelte/icons/chevron-right";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.SubTriggerProps & {
|
||||
inset?: boolean;
|
||||
};
|
||||
type $$Events = MenubarPrimitive.SubTriggerEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export let inset: $$Props["inset"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.SubTrigger
|
||||
class={cn(
|
||||
"flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm outline-none data-[disabled]:pointer-events-none data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground data-[disabled]:opacity-50",
|
||||
inset && "pl-8",
|
||||
className
|
||||
)}
|
||||
on:click
|
||||
{...$$restProps}
|
||||
on:keydown
|
||||
on:focusin
|
||||
on:focusout
|
||||
on:pointerleave
|
||||
on:pointermove
|
||||
>
|
||||
<slot />
|
||||
<ChevronRight class="ml-auto h-4 w-4" />
|
||||
</MenubarPrimitive.SubTrigger>
|
23
website/src/lib/components/ui/menubar/menubar-trigger.svelte
Normal file
23
website/src/lib/components/ui/menubar/menubar-trigger.svelte
Normal file
@@ -0,0 +1,23 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.TriggerProps;
|
||||
type $$Events = MenubarPrimitive.TriggerEvents;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Trigger
|
||||
class={cn(
|
||||
"flex cursor-default select-none items-center rounded-sm px-3 py-1.5 text-sm font-medium outline-none data-[highlighted]:bg-accent data-[state=open]:bg-accent data-[highlighted]:text-accent-foreground data-[state=open]:text-accent-foreground",
|
||||
className
|
||||
)}
|
||||
on:click
|
||||
on:keydown
|
||||
on:pointerenter
|
||||
{...$$restProps}
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.Trigger>
|
16
website/src/lib/components/ui/menubar/menubar.svelte
Normal file
16
website/src/lib/components/ui/menubar/menubar.svelte
Normal file
@@ -0,0 +1,16 @@
|
||||
<script lang="ts">
|
||||
import { Menubar as MenubarPrimitive } from "bits-ui";
|
||||
import { cn } from "$lib/utils.js";
|
||||
|
||||
type $$Props = MenubarPrimitive.Props;
|
||||
|
||||
let className: $$Props["class"] = undefined;
|
||||
export { className as class };
|
||||
</script>
|
||||
|
||||
<MenubarPrimitive.Root
|
||||
class={cn("flex h-10 items-center space-x-1 rounded-md border bg-background p-1", className)}
|
||||
{...$$restProps}
|
||||
>
|
||||
<slot />
|
||||
</MenubarPrimitive.Root>
|
62
website/src/lib/utils.ts
Normal file
62
website/src/lib/utils.ts
Normal file
@@ -0,0 +1,62 @@
|
||||
import { type ClassValue, clsx } from "clsx";
|
||||
import { twMerge } from "tailwind-merge";
|
||||
import { cubicOut } from "svelte/easing";
|
||||
import type { TransitionConfig } from "svelte/transition";
|
||||
|
||||
export function cn(...inputs: ClassValue[]) {
|
||||
return twMerge(clsx(inputs));
|
||||
}
|
||||
|
||||
type FlyAndScaleParams = {
|
||||
y?: number;
|
||||
x?: number;
|
||||
start?: number;
|
||||
duration?: number;
|
||||
};
|
||||
|
||||
export const flyAndScale = (
|
||||
node: Element,
|
||||
params: FlyAndScaleParams = { y: -8, x: 0, start: 0.95, duration: 150 }
|
||||
): TransitionConfig => {
|
||||
const style = getComputedStyle(node);
|
||||
const transform = style.transform === "none" ? "" : style.transform;
|
||||
|
||||
const scaleConversion = (
|
||||
valueA: number,
|
||||
scaleA: [number, number],
|
||||
scaleB: [number, number]
|
||||
) => {
|
||||
const [minA, maxA] = scaleA;
|
||||
const [minB, maxB] = scaleB;
|
||||
|
||||
const percentage = (valueA - minA) / (maxA - minA);
|
||||
const valueB = percentage * (maxB - minB) + minB;
|
||||
|
||||
return valueB;
|
||||
};
|
||||
|
||||
const styleToString = (
|
||||
style: Record<string, number | string | undefined>
|
||||
): string => {
|
||||
return Object.keys(style).reduce((str, key) => {
|
||||
if (style[key] === undefined) return str;
|
||||
return str + `${key}:${style[key]};`;
|
||||
}, "");
|
||||
};
|
||||
|
||||
return {
|
||||
duration: params.duration ?? 200,
|
||||
delay: 0,
|
||||
css: (t) => {
|
||||
const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]);
|
||||
const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]);
|
||||
const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]);
|
||||
|
||||
return styleToString({
|
||||
transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`,
|
||||
opacity: t
|
||||
});
|
||||
},
|
||||
easing: cubicOut
|
||||
};
|
||||
};
|
@@ -1,5 +1,5 @@
|
||||
<script>
|
||||
import '../app.css';
|
||||
import '../app.pcss';
|
||||
</script>
|
||||
|
||||
<slot />
|
||||
|
@@ -1,8 +1,10 @@
|
||||
<script lang="ts">
|
||||
import Map from '$lib/components/Map.svelte';
|
||||
import Menu from '$lib/components/Menu.svelte';
|
||||
</script>
|
||||
|
||||
<div class="flex flex-col w-screen h-screen">
|
||||
<Menu />
|
||||
<Map class="grow" />
|
||||
<div class="h-1/3">Test</div>
|
||||
</div>
|
||||
|
239
website/static/logo.svg
Normal file
239
website/static/logo.svg
Normal file
@@ -0,0 +1,239 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
version="1.1"
|
||||
id="svg2"
|
||||
width="1181.2769"
|
||||
height="247.79251"
|
||||
viewBox="0 0 1181.2769 247.79251"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<defs
|
||||
id="defs6">
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath16">
|
||||
<path
|
||||
d="M 0,630 H 1200 V 0 H 0 Z"
|
||||
id="path14" />
|
||||
</clipPath>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath96">
|
||||
<path
|
||||
d="M 410.129,207.977 H 624.177 V 422.024 H 410.129 Z"
|
||||
id="path94" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
id="g8"
|
||||
transform="matrix(1.3333333,0,0,-1.3333333,-209.36172,543.79306)">
|
||||
<g
|
||||
id="g10">
|
||||
<g
|
||||
id="g12"
|
||||
clip-path="url(#clipPath16)">
|
||||
<g
|
||||
id="g18"
|
||||
transform="translate(224.4053,313.6836)">
|
||||
<path
|
||||
d="m 0,0 c 0,22.193 -11.968,30.28 -23.375,30.28 -14.959,0 -23.749,-11.871 -23.749,-29.075 0,-19.269 11.594,-27.699 23.001,-27.699 C -12.155,-26.494 0,-17.893 0,0 m 15.006,43.871 c 1.833,0 3.32,-1.486 3.32,-3.32 v -76.508 c 0,-28.387 -20.196,-38.602 -44.319,-38.602 -10.021,0 -21.107,1.47 -30.145,5.366 -0.433,0.186 -0.709,0.618 -0.709,1.089 l 2,14.243 c 0,0.884 0.936,1.458 1.718,1.043 7.85,-4.171 16.044,-6.257 25.266,-6.257 17.391,0 27.863,5.398 27.863,23.291 0,2.866 -3.378,4.372 -5.524,2.471 -5.548,-4.914 -12.87,-7.633 -21.965,-7.633 -19.822,0 -38.895,13.763 -38.895,41.806 0,25.29 15.147,44.215 38.895,44.215 9.531,0 16.72,-2.931 21.964,-7.818 C -3.429,35.304 0,36.87 0,39.734 v 0.817 c 0,1.834 1.486,3.32 3.319,3.32 z"
|
||||
style="display:inline;fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path20" />
|
||||
</g>
|
||||
<g
|
||||
id="g22"
|
||||
transform="translate(224.4053,313.6836)">
|
||||
<path
|
||||
d="m 0,0 c 0,22.193 -11.968,30.28 -23.375,30.28 -14.959,0 -23.749,-11.871 -23.749,-29.075 0,-19.269 11.594,-27.699 23.001,-27.699 C -12.155,-26.494 0,-17.893 0,0 Z m 15.006,43.871 c 1.833,0 3.32,-1.486 3.32,-3.32 v -76.508 c 0,-28.387 -20.196,-38.602 -44.319,-38.602 -10.021,0 -21.107,1.47 -30.145,5.366 -0.433,0.186 -0.709,0.618 -0.709,1.089 l 2,14.243 c 0,0.884 0.936,1.458 1.718,1.043 7.85,-4.171 16.044,-6.257 25.266,-6.257 17.391,0 27.863,5.398 27.863,23.291 0,2.866 -3.378,4.372 -5.524,2.471 -5.548,-4.914 -12.87,-7.633 -21.965,-7.633 -19.822,0 -38.895,13.763 -38.895,41.806 0,25.29 15.147,44.215 38.895,44.215 9.531,0 16.72,-2.931 21.964,-7.818 C -3.429,35.304 0,36.87 0,39.734 v 0.817 c 0,1.834 1.486,3.32 3.319,3.32 z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path24" />
|
||||
</g>
|
||||
<g
|
||||
id="g26"
|
||||
transform="translate(325.7568,314.3716)">
|
||||
<path
|
||||
d="m 0,0 c 0,18.581 -10.659,29.592 -24.497,29.592 -12.341,0 -26.179,-7.399 -26.179,-29.764 0,-22.021 14.025,-30.279 25.432,-30.279 C -11.033,-30.451 0,-19.957 0,0 m -50.676,38.597 c 0,-2.85 3.367,-4.388 5.499,-2.495 5.86,5.202 13.751,8.285 23.673,8.285 25.431,0 40.391,-19.097 40.391,-44.215 0,-25.978 -15.708,-45.419 -40.765,-45.419 -9.372,0 -17.28,2.888 -23.33,8.232 -2.121,1.873 -5.468,0.301 -5.468,-2.528 v -34.556 c 0,-1.833 -1.486,-3.319 -3.32,-3.319 h -11.686 c -1.834,0 -3.319,1.486 -3.319,3.319 V 39.863 c 0,1.834 1.485,3.32 3.319,3.32 h 11.686 c 1.834,0 3.32,-1.486 3.32,-3.32 z"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path28" />
|
||||
</g>
|
||||
<g
|
||||
id="g30"
|
||||
transform="translate(325.7568,314.3716)">
|
||||
<path
|
||||
d="m 0,0 c 0,18.581 -10.659,29.592 -24.497,29.592 -12.341,0 -26.179,-7.399 -26.179,-29.764 0,-22.021 14.025,-30.279 25.432,-30.279 C -11.033,-30.451 0,-19.957 0,0 Z m -50.676,38.597 c 0,-2.85 3.367,-4.388 5.499,-2.495 5.86,5.202 13.751,8.285 23.673,8.285 25.431,0 40.391,-19.097 40.391,-44.215 0,-25.978 -15.708,-45.419 -40.765,-45.419 -9.372,0 -17.28,2.888 -23.33,8.232 -2.121,1.873 -5.468,0.301 -5.468,-2.528 v -34.556 c 0,-1.833 -1.486,-3.319 -3.32,-3.319 h -11.686 c -1.834,0 -3.319,1.486 -3.319,3.319 V 39.863 c 0,1.834 1.485,3.32 3.319,3.32 h 11.686 c 1.834,0 3.32,-1.486 3.32,-3.32 z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path32" />
|
||||
</g>
|
||||
<g
|
||||
id="g34"
|
||||
transform="translate(422.8999,270.3291)">
|
||||
<path
|
||||
d="m 0,0 h -12.5 c -1.125,0 -2.173,0.569 -2.785,1.513 l -17.064,26.305 c -1.289,1.989 -4.187,2.024 -5.525,0.068 L -55.951,1.445 C -56.569,0.541 -57.595,0 -58.691,0 h -11.917 c -2.715,0 -4.282,3.08 -2.683,5.274 l 27.106,37.191 c 0.837,1.148 0.85,2.703 0.031,3.866 l -25.24,35.836 c -1.549,2.199 0.024,5.23 2.714,5.23 h 12.548 c 1.128,0 2.18,-0.573 2.791,-1.522 l 16.089,-24.997 c 1.297,-2.015 4.236,-2.033 5.559,-0.035 l 16.591,25.067 c 0.615,0.929 1.655,1.487 2.769,1.487 H -0.09 c 2.717,0 4.283,-3.086 2.678,-5.279 l -26.32,-35.966 c -0.846,-1.156 -0.855,-2.725 -0.022,-3.89 L 2.7,5.249 C 4.271,3.053 2.7,0 0,0"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path36" />
|
||||
</g>
|
||||
<g
|
||||
id="g38"
|
||||
transform="translate(422.8999,270.3291)">
|
||||
<path
|
||||
d="m 0,0 h -12.5 c -1.125,0 -2.173,0.569 -2.785,1.513 l -17.064,26.305 c -1.289,1.989 -4.187,2.024 -5.525,0.068 L -55.951,1.445 C -56.569,0.541 -57.595,0 -58.691,0 h -11.917 c -2.715,0 -4.282,3.08 -2.683,5.274 l 27.106,37.191 c 0.837,1.148 0.85,2.703 0.031,3.866 l -25.24,35.836 c -1.549,2.199 0.024,5.23 2.714,5.23 h 12.548 c 1.128,0 2.18,-0.573 2.791,-1.522 l 16.089,-24.997 c 1.297,-2.015 4.236,-2.033 5.559,-0.035 l 16.591,25.067 c 0.615,0.929 1.655,1.487 2.769,1.487 H -0.09 c 2.717,0 4.283,-3.086 2.678,-5.279 l -26.32,-35.966 c -0.846,-1.156 -0.855,-2.725 -0.022,-3.89 L 2.7,5.249 C 4.271,3.053 2.7,0 0,0 Z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path40" />
|
||||
</g>
|
||||
<g
|
||||
id="g42"
|
||||
transform="translate(653.999,347.6792)">
|
||||
<path
|
||||
d="m 0,0 c 0,-1.817 -1.458,-3.296 -3.274,-3.318 -4.091,-0.051 -11.165,-0.129 -16.198,-0.129 -7.328,0 -11.601,-4.129 -11.601,-9.979 0,-7.742 7.785,-10.839 15.877,-14.968 9.923,-4.989 19.235,-11.354 19.235,-24.945 0,-15.828 -10.686,-24.947 -27.174,-24.947 -8.079,0 -15.698,0.308 -20.764,2.186 -1.293,0.479 -2.136,1.728 -2.136,3.107 v 8.33 c 0,2.353 2.387,3.979 4.558,3.075 5.266,-2.194 11.511,-2.934 17.579,-2.934 8.243,0 12.518,4.129 12.518,9.979 0,7.914 -7.176,11.182 -16.946,15.828 -8.855,4.129 -18.167,10.665 -18.167,24.773 0,15.828 12.06,24.602 26.716,24.602 7.286,0 10.416,-0.255 16.672,-0.663 C -1.36,9.883 0,8.434 0,6.685 Z"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path44" />
|
||||
</g>
|
||||
<g
|
||||
id="g46"
|
||||
transform="translate(653.999,347.6792)">
|
||||
<path
|
||||
d="m 0,0 c 0,-1.817 -1.458,-3.296 -3.274,-3.318 -4.091,-0.051 -11.165,-0.129 -16.198,-0.129 -7.328,0 -11.601,-4.129 -11.601,-9.979 0,-7.742 7.785,-10.839 15.877,-14.968 9.923,-4.989 19.235,-11.354 19.235,-24.945 0,-15.828 -10.686,-24.947 -27.174,-24.947 -8.079,0 -15.698,0.308 -20.764,2.186 -1.293,0.479 -2.136,1.728 -2.136,3.107 v 8.33 c 0,2.353 2.387,3.979 4.558,3.075 5.266,-2.194 11.511,-2.934 17.579,-2.934 8.243,0 12.518,4.129 12.518,9.979 0,7.914 -7.176,11.182 -16.946,15.828 -8.855,4.129 -18.167,10.665 -18.167,24.773 0,15.828 12.06,24.602 26.716,24.602 7.286,0 10.416,-0.255 16.672,-0.663 C -1.36,9.883 0,8.434 0,6.685 Z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path48" />
|
||||
</g>
|
||||
<g
|
||||
id="g50"
|
||||
transform="translate(695.2998,296.4043)">
|
||||
<path
|
||||
d="m 0,0 c 0,-8.258 4.488,-12.559 13.09,-12.559 2.787,0 5.79,0.531 8.472,1.51 2.156,0.786 4.43,-0.83 4.43,-3.124 v -7.54 c 0,-1.396 -0.868,-2.652 -2.183,-3.123 -4.047,-1.45 -9.36,-2.175 -12.963,-2.175 -20.383,0 -29.359,9.979 -29.359,27.355 V 44.68 c 0,1.834 -1.486,3.32 -3.319,3.32 h -5.134 c -1.833,0 -3.319,1.486 -3.319,3.319 v 6.436 c 0,1.834 1.486,3.32 3.319,3.32 h 5.134 c 1.833,0 3.319,1.486 3.319,3.319 v 14.694 c 0,1.834 1.487,3.32 3.32,3.32 H -3.319 C -1.486,82.408 0,80.922 0,79.088 V 64.394 c 0,-1.833 1.486,-3.319 3.319,-3.319 h 18.232 c 1.833,0 3.319,-1.486 3.319,-3.32 V 51.319 C 24.87,49.486 23.384,48 21.551,48 H 3.319 C 1.486,48 0,46.514 0,44.68 Z"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path52" />
|
||||
</g>
|
||||
<g
|
||||
id="g54"
|
||||
transform="translate(695.2998,296.4043)">
|
||||
<path
|
||||
d="m 0,0 c 0,-8.258 4.488,-12.559 13.09,-12.559 2.787,0 5.79,0.531 8.472,1.51 2.156,0.786 4.43,-0.83 4.43,-3.124 v -7.54 c 0,-1.396 -0.868,-2.652 -2.183,-3.123 -4.047,-1.45 -9.36,-2.175 -12.963,-2.175 -20.383,0 -29.359,9.979 -29.359,27.355 V 44.68 c 0,1.834 -1.486,3.32 -3.319,3.32 h -5.134 c -1.833,0 -3.319,1.486 -3.319,3.319 v 6.436 c 0,1.834 1.486,3.32 3.319,3.32 h 5.134 c 1.833,0 3.319,1.486 3.319,3.319 v 14.694 c 0,1.834 1.487,3.32 3.32,3.32 H -3.319 C -1.486,82.408 0,80.922 0,79.088 V 64.394 c 0,-1.833 1.486,-3.319 3.319,-3.319 h 18.232 c 1.833,0 3.319,-1.486 3.319,-3.32 V 51.319 C 24.87,49.486 23.384,48 21.551,48 H 3.319 C 1.486,48 0,46.514 0,44.68 Z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path56" />
|
||||
</g>
|
||||
<g
|
||||
id="g58"
|
||||
transform="translate(809.0576,354.1597)">
|
||||
<path
|
||||
d="m 0,0 v -80.586 c 0,-1.833 -1.486,-3.32 -3.319,-3.32 h -11.687 c -1.833,0 -3.319,1.487 -3.319,3.32 v 1.383 c 0,2.956 -3.523,4.385 -5.664,2.348 -5.663,-5.389 -13.782,-8.083 -23.882,-8.083 -18.699,0 -30.48,10.667 -30.48,28.731 V 0 c 0,1.833 1.487,3.319 3.32,3.319 h 11.873 c 1.833,0 3.319,-1.486 3.319,-3.319 v -52.078 c 0,-12.214 7.107,-18.409 17.952,-18.409 14.025,0 23.562,9.291 23.562,26.323 V 0 c 0,1.833 1.486,3.319 3.319,3.319 H -3.319 C -1.486,3.319 0,1.833 0,0"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path60" />
|
||||
</g>
|
||||
<g
|
||||
id="g62"
|
||||
transform="translate(809.0576,354.1597)">
|
||||
<path
|
||||
d="m 0,0 v -80.586 c 0,-1.833 -1.486,-3.32 -3.319,-3.32 h -11.687 c -1.833,0 -3.319,1.487 -3.319,3.32 v 1.383 c 0,2.956 -3.523,4.385 -5.664,2.348 -5.663,-5.389 -13.782,-8.083 -23.882,-8.083 -18.699,0 -30.48,10.667 -30.48,28.731 V 0 c 0,1.833 1.487,3.319 3.32,3.319 h 11.873 c 1.833,0 3.319,-1.486 3.319,-3.319 v -52.078 c 0,-12.214 7.107,-18.409 17.952,-18.409 14.025,0 23.562,9.291 23.562,26.323 V 0 c 0,1.833 1.486,3.319 3.319,3.319 H -3.319 C -1.486,3.319 0,1.833 0,0 Z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path64" />
|
||||
</g>
|
||||
<g
|
||||
id="g66"
|
||||
transform="translate(888.3457,314.4683)">
|
||||
<path
|
||||
d="m 0,0 c 0,22.021 -14.586,29.42 -25.245,29.42 -13.838,0 -25.244,-10.151 -25.244,-30.795 0,-17.549 10.658,-29.248 24.683,-29.248 C -12.716,-30.623 0,-22.193 0,0 M 18.513,74.101 V -40.895 c 0,-1.833 -1.487,-3.319 -3.32,-3.319 H 3.319 C 1.486,-44.214 0,-42.728 0,-40.895 v 1.189 c 0,2.843 -3.357,4.391 -5.486,2.509 -5.883,-5.202 -13.665,-8.221 -23.499,-8.221 -26.179,0 -40.391,21.161 -40.391,44.386 0,27.699 17.203,45.247 40.765,45.247 9.109,0 17.063,-2.995 23.154,-8.335 C -3.335,34.02 0,35.597 0,38.419 v 35.682 c 0,1.833 1.486,3.319 3.319,3.319 h 11.874 c 1.833,0 3.32,-1.486 3.32,-3.319"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path68" />
|
||||
</g>
|
||||
<g
|
||||
id="g70"
|
||||
transform="translate(888.3457,314.4683)">
|
||||
<path
|
||||
d="m 0,0 c 0,22.021 -14.586,29.42 -25.245,29.42 -13.838,0 -25.244,-10.151 -25.244,-30.795 0,-17.549 10.658,-29.248 24.683,-29.248 C -12.716,-30.623 0,-22.193 0,0 Z M 18.513,74.101 V -40.895 c 0,-1.833 -1.487,-3.319 -3.32,-3.319 H 3.319 C 1.486,-44.214 0,-42.728 0,-40.895 v 1.189 c 0,2.843 -3.357,4.391 -5.486,2.509 -5.883,-5.202 -13.665,-8.221 -23.499,-8.221 -26.179,0 -40.391,21.161 -40.391,44.386 0,27.699 17.203,45.247 40.765,45.247 9.109,0 17.063,-2.995 23.154,-8.335 C -3.335,34.02 0,35.597 0,38.419 v 35.682 c 0,1.833 1.486,3.319 3.319,3.319 h 11.874 c 1.833,0 3.32,-1.486 3.32,-3.319 z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path72" />
|
||||
</g>
|
||||
<g
|
||||
id="g74"
|
||||
transform="translate(941.9541,376.2642)">
|
||||
<path
|
||||
d="m 0,0 c 0,-5.522 -4.478,-10 -10,-10 -5.523,0 -10,4.478 -10,10 0,5.523 4.477,10 10,10 C -4.478,10 0,5.523 0,0 m -15.883,-18.785 h 11.874 c 1.833,0 3.32,-1.486 3.32,-3.319 v -80.587 c 0,-1.833 -1.487,-3.319 -3.32,-3.319 h -11.874 c -1.833,0 -3.319,1.486 -3.319,3.319 v 80.587 c 0,1.833 1.486,3.319 3.319,3.319"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path76" />
|
||||
</g>
|
||||
<g
|
||||
id="g78"
|
||||
transform="translate(941.9541,376.2642)">
|
||||
<path
|
||||
d="m 0,0 c 0,-5.522 -4.478,-10 -10,-10 -5.523,0 -10,4.478 -10,10 0,5.523 4.477,10 10,10 C -4.478,10 0,5.523 0,0 Z m -15.883,-18.785 h 11.874 c 1.833,0 3.32,-1.486 3.32,-3.319 v -80.587 c 0,-1.833 -1.487,-3.319 -3.32,-3.319 h -11.874 c -1.833,0 -3.319,1.486 -3.319,3.319 v 80.587 c 0,1.833 1.486,3.319 3.319,3.319 z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path80" />
|
||||
</g>
|
||||
<g
|
||||
id="g82"
|
||||
transform="translate(971.041,313.6084)">
|
||||
<path
|
||||
d="m 0,0 c 0,-16.516 9.334,-30.623 25.762,-30.623 17.734,0 25.948,13.936 25.948,30.451 0,16.516 -7.094,30.967 -26.135,30.967 C 8.588,30.795 0,16.344 0,0 m -19.041,-0.516 c 0,25.634 17.361,45.591 44.803,45.591 29.869,0 45.176,-19.957 45.176,-44.903 0,-25.118 -16.054,-45.075 -45.176,-45.075 -28.935,0 -44.803,19.785 -44.803,44.387"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path84" />
|
||||
</g>
|
||||
<g
|
||||
id="g86"
|
||||
transform="translate(971.041,313.6084)">
|
||||
<path
|
||||
d="m 0,0 c 0,-16.516 9.334,-30.623 25.762,-30.623 17.734,0 25.948,13.936 25.948,30.451 0,16.516 -7.094,30.967 -26.135,30.967 C 8.588,30.795 0,16.344 0,0 Z m -19.041,-0.516 c 0,25.634 17.361,45.591 44.803,45.591 29.869,0 45.176,-19.957 45.176,-44.903 0,-25.118 -16.054,-45.075 -45.176,-45.075 -28.935,0 -44.803,19.785 -44.803,44.387 z"
|
||||
style="fill:none;stroke:#3b3735;stroke-width:2;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
|
||||
id="path88" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g90">
|
||||
<g
|
||||
id="g92"
|
||||
clip-path="url(#clipPath96)">
|
||||
<g
|
||||
id="g98"
|
||||
transform="translate(517.0752,358.501)">
|
||||
<path
|
||||
d="m 0,0 c -24.068,0 -43.579,-19.511 -43.579,-43.579 0,-24.067 19.511,-43.578 43.579,-43.578 24.068,0 43.579,19.511 43.579,43.578 C 43.579,-19.511 24.068,0 0,0 m 58.863,-49.872 c -0.325,-3.089 1.209,-6.078 3.896,-7.631 l 6.286,-3.633 c 3.769,-2.177 5.06,-6.997 2.886,-10.767 L 60.44,-91.823 c -2.177,-3.776 -7.004,-5.069 -10.777,-2.888 l -6.265,3.62 c -2.69,1.555 -6.05,1.399 -8.559,-0.432 -3.365,-2.457 -7.001,-4.568 -10.852,-6.28 -2.833,-1.259 -4.645,-4.086 -4.645,-7.188 v -7.252 c 0,-4.356 -3.531,-7.887 -7.886,-7.887 h -22.971 c -4.355,0 -7.885,3.531 -7.885,7.886 v 7.253 c 0,3.102 -1.813,5.929 -4.645,7.188 -3.851,1.712 -7.487,3.823 -10.853,6.28 -2.509,1.831 -5.869,1.987 -8.559,0.432 l -6.277,-3.628 c -3.767,-2.177 -8.584,-0.885 -10.759,2.886 l -11.495,19.928 c -2.175,3.77 -0.885,8.592 2.883,10.768 l 6.287,3.634 c 2.688,1.553 4.222,4.542 3.896,7.631 -0.217,2.059 -0.329,4.148 -0.329,6.264 0,2.116 0.112,4.206 0.329,6.264 0.326,3.089 -1.208,6.078 -3.896,7.631 l -6.285,3.632 c -3.77,2.178 -5.061,6.998 -2.886,10.769 l 11.496,19.929 c 2.175,3.77 6.992,5.062 10.759,2.885 l 6.286,-3.632 c 2.691,-1.555 6.048,-1.389 8.558,0.443 3.364,2.455 6.996,4.563 10.845,6.273 2.832,1.26 4.645,4.086 4.645,7.189 v 7.252 c 0,4.356 3.53,7.887 7.886,7.887 h 22.97 c 4.355,0 7.886,-3.531 7.886,-7.886 v -7.253 c 0,-3.103 1.812,-5.929 4.645,-7.189 3.848,-1.71 7.481,-3.818 10.845,-6.273 2.51,-1.832 5.867,-1.998 8.557,-0.443 l 6.287,3.632 C 53.443,9.679 58.26,8.387 60.435,4.617 L 71.93,-15.312 c 2.175,-3.771 0.884,-8.591 -2.885,-10.769 l -6.286,-3.632 c -2.687,-1.553 -4.221,-4.542 -3.896,-7.631 0.218,-2.058 0.33,-4.148 0.33,-6.264 0,-2.116 -0.112,-4.205 -0.33,-6.264"
|
||||
style="fill:#d5d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path100" />
|
||||
</g>
|
||||
<g
|
||||
id="g102"
|
||||
transform="translate(564.8286,389.3633)">
|
||||
<path
|
||||
d="m 0,0 -21.424,9.99 -37.041,-79.436 21.423,-9.991 z"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path104" />
|
||||
</g>
|
||||
<g
|
||||
id="g106"
|
||||
transform="translate(543.2061,399.4458)">
|
||||
<path
|
||||
d="m 0,0 17.2,8.399 4.621,-18.574 z"
|
||||
style="fill:#3b3735;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path108" />
|
||||
</g>
|
||||
<g
|
||||
id="g110"
|
||||
transform="translate(469.3218,240.4814)">
|
||||
<path
|
||||
d="M 0,0 21.423,-9.99 58.465,69.445 37.042,79.436 Z"
|
||||
style="fill:#e62d2d;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path112" />
|
||||
</g>
|
||||
<g
|
||||
id="g114"
|
||||
transform="translate(490.9443,230.3984)">
|
||||
<path
|
||||
d="m 0,0 -17.2,-8.398 -4.622,18.574 z"
|
||||
style="fill:#e62d2d;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path116" />
|
||||
</g>
|
||||
<g
|
||||
id="g118"
|
||||
transform="translate(533.7656,314.9224)">
|
||||
<path
|
||||
d="m 0,0 c 0,-9.218 -7.473,-16.691 -16.69,-16.691 -9.218,0 -16.691,7.473 -16.691,16.691 0,9.218 7.473,16.69 16.691,16.69 C -7.473,16.69 0,9.218 0,0"
|
||||
style="fill:#d5d4d4;fill-opacity:1;fill-rule:nonzero;stroke:none"
|
||||
id="path120" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 19 KiB |
@@ -1,9 +1,64 @@
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
export default {
|
||||
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||
theme: {
|
||||
extend: {},
|
||||
},
|
||||
plugins: [],
|
||||
}
|
||||
import { fontFamily } from "tailwindcss/defaultTheme";
|
||||
|
||||
/** @type {import('tailwindcss').Config} */
|
||||
const config = {
|
||||
darkMode: ["class"],
|
||||
content: ["./src/**/*.{html,js,svelte,ts}"],
|
||||
safelist: ["dark"],
|
||||
theme: {
|
||||
container: {
|
||||
center: true,
|
||||
padding: "2rem",
|
||||
screens: {
|
||||
"2xl": "1400px"
|
||||
}
|
||||
},
|
||||
extend: {
|
||||
colors: {
|
||||
border: "hsl(var(--border) / <alpha-value>)",
|
||||
input: "hsl(var(--input) / <alpha-value>)",
|
||||
ring: "hsl(var(--ring) / <alpha-value>)",
|
||||
background: "hsl(var(--background) / <alpha-value>)",
|
||||
foreground: "hsl(var(--foreground) / <alpha-value>)",
|
||||
primary: {
|
||||
DEFAULT: "hsl(var(--primary) / <alpha-value>)",
|
||||
foreground: "hsl(var(--primary-foreground) / <alpha-value>)"
|
||||
},
|
||||
secondary: {
|
||||
DEFAULT: "hsl(var(--secondary) / <alpha-value>)",
|
||||
foreground: "hsl(var(--secondary-foreground) / <alpha-value>)"
|
||||
},
|
||||
destructive: {
|
||||
DEFAULT: "hsl(var(--destructive) / <alpha-value>)",
|
||||
foreground: "hsl(var(--destructive-foreground) / <alpha-value>)"
|
||||
},
|
||||
muted: {
|
||||
DEFAULT: "hsl(var(--muted) / <alpha-value>)",
|
||||
foreground: "hsl(var(--muted-foreground) / <alpha-value>)"
|
||||
},
|
||||
accent: {
|
||||
DEFAULT: "hsl(var(--accent) / <alpha-value>)",
|
||||
foreground: "hsl(var(--accent-foreground) / <alpha-value>)"
|
||||
},
|
||||
popover: {
|
||||
DEFAULT: "hsl(var(--popover) / <alpha-value>)",
|
||||
foreground: "hsl(var(--popover-foreground) / <alpha-value>)"
|
||||
},
|
||||
card: {
|
||||
DEFAULT: "hsl(var(--card) / <alpha-value>)",
|
||||
foreground: "hsl(var(--card-foreground) / <alpha-value>)"
|
||||
}
|
||||
},
|
||||
borderRadius: {
|
||||
lg: "var(--radius)",
|
||||
md: "calc(var(--radius) - 2px)",
|
||||
sm: "calc(var(--radius) - 4px)"
|
||||
},
|
||||
fontFamily: {
|
||||
sans: [...fontFamily.sans]
|
||||
}
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
export default config;
|
||||
|
Reference in New Issue
Block a user