Messdienstleistungen einfach gemacht – von der vorkonfigurierten
Hardware bis zum laufenden Betrieb.
diff --git a/v2/component-library/src/components/ui/switch.tsx b/v2/component-library/src/components/ui/switch.tsx
new file mode 100644
index 0000000..d407af6
--- /dev/null
+++ b/v2/component-library/src/components/ui/switch.tsx
@@ -0,0 +1,48 @@
+import * as React from "react"
+import * as SwitchPrimitive from "@radix-ui/react-switch"
+import { CheckIcon } from "lucide-react"
+
+import { cn } from "@/lib/utils"
+
+/**
+ * On/off switch. The lit track is the same teal glass as a primary button, at
+ * pill scale (`inset-shadow-glass-pill`); off it is a recessed navy pane. The
+ * thumb travels on the site's spring easing and carries the checkbox tick, so
+ * the state reads without relying on colour alone.
+ */
+function Switch({
+ className,
+ ...props
+}: React.ComponentProps) {
+ return (
+
+
+
+
+
+ )
+}
+
+export { Switch }
diff --git a/v2/component-library/src/pages/audiences/hauseigentuemer.tsx b/v2/component-library/src/pages/audiences/hauseigentuemer.tsx
index deeedfc..243631c 100644
--- a/v2/component-library/src/pages/audiences/hauseigentuemer.tsx
+++ b/v2/component-library/src/pages/audiences/hauseigentuemer.tsx
@@ -35,7 +35,7 @@ function HomeownerArt() {
diff --git a/v2/component-library/src/pages/configurator.tsx b/v2/component-library/src/pages/configurator.tsx
index 2719aae..5b9ed42 100644
--- a/v2/component-library/src/pages/configurator.tsx
+++ b/v2/component-library/src/pages/configurator.tsx
@@ -9,7 +9,7 @@ import { Input } from "@/components/ui/input"
import { Label } from "@/components/ui/label"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Separator } from "@/components/ui/separator"
-import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs"
+import { Switch } from "@/components/ui/switch"
import { Checklist } from "@/components/gebos/checklist"
import { IconBadge } from "@/components/gebos/icon-tile"
import { Container, Section, SectionHeading } from "@/components/gebos/section"
@@ -160,13 +160,12 @@ function ServiceOption({
* "Nicht enthalten" instead of merely dimmed.
*/
function PackageCard({
- assets,
+ render,
title,
items,
included,
}: {
- /** drawn side by side in the header, first one leading */
- assets: RenderAsset[]
+ render: RenderAsset
title: string
items: string[]
included: boolean
@@ -179,17 +178,12 @@ function PackageCard({
)}
>
- {install
- ? "GebOS organisiert die Montage – Geräte- und Monatspreise enthalten die Installation."
- : "Sie selbst, Ihr Hausmeister oder Ihr Fachbetrieb montiert die Geräte."}
-
+
+
+
+ {install
+ ? "GebOS organisiert die Montage – Geräte- und Monatspreise enthalten die Installation."
+ : "Sie selbst, Ihr Hausmeister oder Ihr Fachbetrieb montiert die Geräte."}
+
+
+
+
@@ -563,7 +565,7 @@ export default function ConfiguratorPage() {
/>
{solutions.map((s) => (
diff --git a/v2/component-library/src/styles/globals.css b/v2/component-library/src/styles/globals.css
index 5962fb0..7bb1f07 100644
--- a/v2/component-library/src/styles/globals.css
+++ b/v2/component-library/src/styles/globals.css
@@ -133,6 +133,10 @@
0 1px 2px rgb(19 41 60 / 0.05), 0 10px 22px -10px var(--glass-bloom);
--shadow-glass-lg:
0 2px 4px rgb(19 41 60 / 0.06), 0 18px 34px -12px var(--glass-bloom);
+ /* the same optics at control scale, for pills the size of a switch track */
+ --inset-shadow-glass-pill:
+ inset 0 1px 0 0 var(--glass-rim), inset 0 0 0 1px var(--glass-ring),
+ inset 0 -4px 6px -4px var(--glass-caustic);
/* the same optics at slab scale, for surfaces the size of the footer */
--inset-shadow-glass-slab:
inset 0 2px 0 0 var(--glass-rim), inset 0 0 0 1px var(--glass-ring),