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 @@ + + + + +