From 3d4273f9fe42727048c6e2c8f23ce3367a6ac6fc Mon Sep 17 00:00:00 2001 From: vcoppe Date: Sun, 21 Apr 2024 16:40:28 +0200 Subject: [PATCH] toggle additional data on elevation profile --- gpx/src/gpx.ts | 16 + website/package-lock.json | 8 +- website/package.json | 2 +- .../lib/components/ElevationProfile.svelte | 306 +++++++++++++----- website/src/lib/components/GPXData.svelte | 18 +- website/src/lib/components/Menu.svelte | 2 - .../{GPXDataItem.svelte => Tooltip.svelte} | 4 +- .../lib/components/ui/toggle-group/index.ts | 23 ++ .../ui/toggle-group/toggle-group-item.svelte | 31 ++ .../ui/toggle-group/toggle-group.svelte | 30 ++ website/src/lib/components/ui/toggle/index.ts | 31 ++ .../lib/components/ui/toggle/toggle.svelte | 26 ++ 12 files changed, 405 insertions(+), 92 deletions(-) rename website/src/lib/components/{GPXDataItem.svelte => Tooltip.svelte} (72%) create mode 100644 website/src/lib/components/ui/toggle-group/index.ts create mode 100644 website/src/lib/components/ui/toggle-group/toggle-group-item.svelte create mode 100644 website/src/lib/components/ui/toggle-group/toggle-group.svelte create mode 100644 website/src/lib/components/ui/toggle/index.ts create mode 100644 website/src/lib/components/ui/toggle/toggle.svelte diff --git a/gpx/src/gpx.ts b/gpx/src/gpx.ts index 328a750c..32e373a4 100644 --- a/gpx/src/gpx.ts +++ b/gpx/src/gpx.ts @@ -397,6 +397,22 @@ export class TrackPoint { getCoordinates(): Coordinates { return this.attributes; } + + getHeartRate(): number { + return this.extensions && this.extensions['gpxtpx:TrackPointExtension'] && this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:hr'] ? this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:hr'] : undefined; + } + + getCadence(): number { + return this.extensions && this.extensions['gpxtpx:TrackPointExtension'] && this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:cad'] ? this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:cad'] : undefined; + } + + getTemperature(): number { + return this.extensions && this.extensions['gpxtpx:TrackPointExtension'] && this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:atemp'] ? this.extensions['gpxtpx:TrackPointExtension']['gpxtpx:atemp'] : undefined; + } + + getPower(): number { + return this.extensions && this.extensions["gpxpx:PowerExtension"] && this.extensions["gpxpx:PowerExtension"]["gpxpx:PowerInWatts"] ? this.extensions["gpxpx:PowerExtension"]["gpxpx:PowerInWatts"] : undefined; + } }; export class Waypoint { diff --git a/website/package-lock.json b/website/package-lock.json index d1835620..354865e8 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -9,7 +9,7 @@ "version": "0.0.1", "dependencies": { "@mapbox/mapbox-gl-geocoder": "^5.0.2", - "bits-ui": "^0.21.3", + "bits-ui": "^0.21.4", "chart.js": "^4.4.2", "clsx": "^2.1.0", "gpx": "file:../gpx", @@ -1828,9 +1828,9 @@ } }, "node_modules/bits-ui": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.21.3.tgz", - "integrity": "sha512-VMQVXwYIjYmDoudIRm2ZlS2guy97lUQk73DwSfTnaS0dhldImbDFMATNxjLSLsTDj8FqJ8Dv78wSctdxcloIbQ==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.21.4.tgz", + "integrity": "sha512-IL+7s19GW561jwkeYk23dwkTfQ9606I062qqv2AtjCdhhIdoOEJNVBX0kjP5xefSaS6ojL0HGG54att0aRTcAQ==", "dependencies": { "@internationalized/date": "^3.5.1", "@melt-ui/svelte": "0.76.2", diff --git a/website/package.json b/website/package.json index 14fd0817..f0b20529 100644 --- a/website/package.json +++ b/website/package.json @@ -42,7 +42,7 @@ "type": "module", "dependencies": { "@mapbox/mapbox-gl-geocoder": "^5.0.2", - "bits-ui": "^0.21.3", + "bits-ui": "^0.21.4", "chart.js": "^4.4.2", "clsx": "^2.1.0", "gpx": "file:../gpx", diff --git a/website/src/lib/components/ElevationProfile.svelte b/website/src/lib/components/ElevationProfile.svelte index 9774b614..725379c8 100644 --- a/website/src/lib/components/ElevationProfile.svelte +++ b/website/src/lib/components/ElevationProfile.svelte @@ -1,88 +1,127 @@ -
- +
+
+ +
+
+ + + + + Show slope + + + + + + Show surface + + + + + + + + + Show speed + + + + + + Show heart rate + + + + + + Show cadence + + + + + + Show temperature + + + + + + Show power + + + +
diff --git a/website/src/lib/components/GPXData.svelte b/website/src/lib/components/GPXData.svelte index 2d1e8ae9..71fbc588 100644 --- a/website/src/lib/components/GPXData.svelte +++ b/website/src/lib/components/GPXData.svelte @@ -1,6 +1,6 @@ - + diff --git a/website/src/lib/components/ui/toggle-group/index.ts b/website/src/lib/components/ui/toggle-group/index.ts new file mode 100644 index 00000000..053ebbc4 --- /dev/null +++ b/website/src/lib/components/ui/toggle-group/index.ts @@ -0,0 +1,23 @@ +import type { VariantProps } from "tailwind-variants"; +import { getContext, setContext } from "svelte"; +import Root from "./toggle-group.svelte"; +import Item from "./toggle-group-item.svelte"; +import type { toggleVariants } from "$lib/components/ui/toggle/index.js"; + +export type ToggleVariants = VariantProps; + +export function setToggleGroupCtx(props: ToggleVariants) { + setContext("toggleGroup", props); +} + +export function getToggleGroupCtx() { + return getContext("toggleGroup"); +} + +export { + Root, + Item, + // + Root as ToggleGroup, + Item as ToggleGroupItem, +}; diff --git a/website/src/lib/components/ui/toggle-group/toggle-group-item.svelte b/website/src/lib/components/ui/toggle-group/toggle-group-item.svelte new file mode 100644 index 00000000..1984884e --- /dev/null +++ b/website/src/lib/components/ui/toggle-group/toggle-group-item.svelte @@ -0,0 +1,31 @@ + + + + + diff --git a/website/src/lib/components/ui/toggle-group/toggle-group.svelte b/website/src/lib/components/ui/toggle-group/toggle-group.svelte new file mode 100644 index 00000000..4077c11f --- /dev/null +++ b/website/src/lib/components/ui/toggle-group/toggle-group.svelte @@ -0,0 +1,30 @@ + + + + + diff --git a/website/src/lib/components/ui/toggle/index.ts b/website/src/lib/components/ui/toggle/index.ts new file mode 100644 index 00000000..1ab27ca3 --- /dev/null +++ b/website/src/lib/components/ui/toggle/index.ts @@ -0,0 +1,31 @@ +import { type VariantProps, tv } from "tailwind-variants"; +import Root from "./toggle.svelte"; + +export const toggleVariants = tv({ + base: "inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors hover:bg-muted hover:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground", + variants: { + variant: { + default: "bg-transparent", + outline: + "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground", + }, + size: { + default: "h-10 px-3", + sm: "h-9 px-2.5", + lg: "h-11 px-5", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, +}); + +export type Variant = VariantProps["variant"]; +export type Size = VariantProps["size"]; + +export { + Root, + // + Root as Toggle, +}; diff --git a/website/src/lib/components/ui/toggle/toggle.svelte b/website/src/lib/components/ui/toggle/toggle.svelte new file mode 100644 index 00000000..2f27b43d --- /dev/null +++ b/website/src/lib/components/ui/toggle/toggle.svelte @@ -0,0 +1,26 @@ + + + + +