diff --git a/package-lock.json b/package-lock.json index f8d6e20..22f168e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "@eslint/js": "^9.29.0", "@inlang/paraglide-js": "2.3.2", "@internationalized/date": "^3.8.2", - "@lucide/svelte": "^0.542.0", + "@lucide/svelte": "^0.544.0", "@playwright/test": "^1.53.1", "@sveltejs/adapter-auto": "^6.1.0", "@sveltejs/kit": "^2.22.0", @@ -62,7 +62,7 @@ "svelte-sonner": "^1.0.5", "sveltekit-superforms": "^2.27.1", "tailwind-merge": "^3.3.1", - "tailwind-variants": "^1.0.0", + "tailwind-variants": "^3.1.1", "tailwindcss": "^4.1.10", "tw-animate-css": "^1.3.4", "typescript": "^5.8.3", @@ -1741,9 +1741,9 @@ "license": "Apache-2.0" }, "node_modules/@lucide/svelte": { - "version": "0.542.0", - "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.542.0.tgz", - "integrity": "sha512-NuWttxTVfMSURpOxcKiKvoCtma3JtEpcJWzF/0cO69saZfXlv6G8NYAvEEGLmk75YPl+I+ROe+F97WhddM8r2A==", + "version": "0.544.0", + "resolved": "https://registry.npmjs.org/@lucide/svelte/-/svelte-0.544.0.tgz", + "integrity": "sha512-9f9O6uxng2pLB01sxNySHduJN3HTl5p0HDu4H26VR51vhZfiMzyOMe9Mhof3XAk4l813eTtl+/DYRvGyoRR+yw==", "dev": true, "license": "ISC", "peerDependencies": { @@ -7342,31 +7342,23 @@ } }, "node_modules/tailwind-variants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-1.0.0.tgz", - "integrity": "sha512-2WSbv4ulEEyuBKomOunut65D8UZwxrHoRfYnxGcQNnHqlSCp2+B7Yz2W+yrNDrxRodOXtGD/1oCcKGNBnUqMqA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-3.1.1.tgz", + "integrity": "sha512-ftLXe3krnqkMHsuBTEmaVUXYovXtPyTK7ckEfDRXS8PBZx0bAUas+A0jYxuKA5b8qg++wvQ3d2MQ7l/xeZxbZQ==", "dev": true, "license": "MIT", - "dependencies": { - "tailwind-merge": "3.0.2" - }, "engines": { "node": ">=16.x", "pnpm": ">=7.x" }, "peerDependencies": { + "tailwind-merge": ">=3.0.0", "tailwindcss": "*" - } - }, - "node_modules/tailwind-variants/node_modules/tailwind-merge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.0.2.tgz", - "integrity": "sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/dcastil" + }, + "peerDependenciesMeta": { + "tailwind-merge": { + "optional": true + } } }, "node_modules/tailwindcss": { diff --git a/package.json b/package.json index 8bfd870..ceaaf19 100644 --- a/package.json +++ b/package.json @@ -42,7 +42,7 @@ "@eslint/js": "^9.29.0", "@inlang/paraglide-js": "2.3.2", "@internationalized/date": "^3.8.2", - "@lucide/svelte": "^0.542.0", + "@lucide/svelte": "^0.544.0", "@playwright/test": "^1.53.1", "@sveltejs/adapter-auto": "^6.1.0", "@sveltejs/kit": "^2.22.0", @@ -71,7 +71,7 @@ "svelte-sonner": "^1.0.5", "sveltekit-superforms": "^2.27.1", "tailwind-merge": "^3.3.1", - "tailwind-variants": "^1.0.0", + "tailwind-variants": "^3.1.1", "tailwindcss": "^4.1.10", "tw-animate-css": "^1.3.4", "typescript": "^5.8.3", diff --git a/project.inlang/messages/de.json b/project.inlang/messages/de.json index ded6413..0f5e0fb 100644 --- a/project.inlang/messages/de.json +++ b/project.inlang/messages/de.json @@ -196,11 +196,112 @@ "cancel": "Abbrechen", "apply": "Übernehmen" } + }, + "slotTemplate": { + "empty_weekdays": "Wochentage auswählen", + "weekdays_long": { + "monday": "Montag", + "tuesday": "Dienstag", + "wednesday": "Mittwoch", + "thursday": "Donnerstag", + "friday": "Freitag", + "saturday": "Samstag", + "sunday": "Sonntag" + }, + "weekdays_short": { + "monday": "Mo", + "tuesday": "Di", + "wednesday": "Mi", + "thursday": "Do", + "friday": "Fr", + "saturday": "Sa", + "sunday": "So" + }, + "times": { + "0500": "5:00 Uhr", + "0515": "5:15 Uhr", + "0530": "5:30 Uhr", + "0545": "5:45 Uhr", + "0600": "6:00 Uhr", + "0615": "6:15 Uhr", + "0630": "6:30 Uhr", + "0645": "6:45 Uhr", + "0700": "7:00 Uhr", + "0715": "7:15 Uhr", + "0730": "7:30 Uhr", + "0745": "7:45 Uhr", + "0800": "8:00 Uhr", + "0815": "8:15 Uhr", + "0830": "8:30 Uhr", + "0845": "8:45 Uhr", + "0900": "9:00 Uhr", + "0915": "9:15 Uhr", + "0930": "9:30 Uhr", + "0945": "9:45 Uhr", + "1000": "10:00 Uhr", + "1015": "10:15 Uhr", + "1030": "10:30 Uhr", + "1045": "10:45 Uhr", + "1100": "11:00 Uhr", + "1115": "11:15 Uhr", + "1130": "11:30 Uhr", + "1145": "11:45 Uhr", + "1200": "12:00 Uhr", + "1215": "12:15 Uhr", + "1230": "12:30 Uhr", + "1245": "12:45 Uhr", + "1300": "13:00 Uhr", + "1315": "13:15 Uhr", + "1330": "13:30 Uhr", + "1345": "13:45 Uhr", + "1400": "14:00 Uhr", + "1415": "14:15 Uhr", + "1430": "14:30 Uhr", + "1445": "14:45 Uhr", + "1500": "15:00 Uhr", + "1515": "15:15 Uhr", + "1530": "15:30 Uhr", + "1545": "15:45 Uhr", + "1600": "16:00 Uhr", + "1615": "16:15 Uhr", + "1630": "16:30 Uhr", + "1645": "16:45 Uhr", + "1700": "17:00 Uhr", + "1715": "17:15 Uhr", + "1730": "17:30 Uhr", + "1745": "17:45 Uhr", + "1800": "18:00 Uhr", + "1815": "18:15 Uhr", + "1830": "18:30 Uhr", + "1845": "18:45 Uhr", + "1900": "19:00 Uhr", + "1915": "19:15 Uhr", + "1930": "19:30 Uhr", + "1945": "19:45 Uhr", + "2000": "20:00 Uhr", + "2015": "20:15 Uhr", + "2030": "20:30 Uhr", + "2045": "20:45 Uhr", + "2100": "21:00 Uhr", + "2115": "21:15 Uhr", + "2130": "21:30 Uhr", + "2145": "21:45 Uhr", + "2200": "22:00 Uhr" + }, + "empty_duration": "Dauer auswählen", + "template": "Vorlage {no}", + "remove": "Vorlage {no} entfernen", + "from": "Von", + "to": "Bis", + "duration": "Dauer", + "every_n_minutes": "alle {minutes} Minuten", + "add_template": "Vorlage hinzufügen", + "weekdays": "Wochentage" } }, "actions": "Aktionen", "edit": "Editieren", - "pause": "Pausieren", + "pause": "Deaktivieren", "delete": "Löschen", "select": "Auswählen", "close": "Schließen", @@ -280,6 +381,96 @@ "en": "Englisch", "de": "Deutsch" }, + "staff": { + "title": "Personal", + "empty": { + "title": "Bisher kein Personal", + "description": "Personal sind die Personen, die Zugriff auf Ihre Termine haben." + } + }, + "channels": { + "title": "Kanäle", + "empty": { + "title": "Bisher keine Kanäle", + "description": "Kanäle sind Ihre Möglichkeit, verschiedene Arten von Terminen zu sammeln" + }, + "add": { + "title": "Kanal hinzufügen", + "description": "Kanäle sind Ihre Möglichkeit, verschiedene Arten von Terminen zu sammeln", + "fields": { + "name": { + "title": "Name", + "errors": { + "length": "Muss zwischen 1 und 100 Zeichen lang sein" + } + }, + "description": { + "title": "Beschreibung (optional)" + }, + "agents": { + "title": "Akteure", + "description": "Wähle die Akteure aus, die Termine in diesem Kanal entgegennehmen können.", + "placeholder": "Akteure auswählen" + }, + "isPublic": { + "title": "Öffentlich", + "label": "Dieser Kanal kann von Kunden direkt gebucht werden" + }, + "requiresConfirmation": { + "title": "Bestätigung erforderlich", + "label": "Termine müssen vom Personal bestätigt werden" + }, + "slotTemplates": { + "title": "Zeitvorlagen", + "description": "Termine werden basierend auf Ihrem Zeitplan erstellt." + } + }, + "action": "Kanal hinzufügen", + "success": "Kanal hinzugefügt", + "errors": { + "unknown": "Konnte Kanal nicht hinzufügen" + } + }, + "list": { + "empty": { + "title": "Bisher keine Kanäle", + "description": "Kanäle sind Ihre Möglichkeit, verschiedene Arten von Terminen zu sammeln" + }, + "badges": { + "paused": "deaktiviert" + } + }, + "delete": { + "title": "Kanal löschen", + "description": "Evtl. willst Du diesen Kanal deaktivieren, statt ihn zu löschen. Tippe {name} um den Kanal zu löschen.", + "action": "Kanal löschen", + "success": "Kanal gelöscht", + "error": "Konnte Kanal nicht löschen." + }, + "loading": "Lade Kanäle", + "edit": { + "title": "Kanal bearbeiten", + "description": "Aktualisiere die öffentlichen Informationen des Kanals.", + "success": "Kanal aktualisiert", + "error": "Konnte Kanal nicht aktualisieren.", + "action": "Übernehmen" + }, + "pause": { + "title": "Kanal deaktivieren", + "description": "Das Deaktivieren von {name} verhindert, dass Kunden neue Termine in diesem Kanal buchen.", + "action": "Kanal deaktivieren", + "success": "Kanal deaktiviert", + "error": "Konnte Kanal nicht deaktivieren." + }, + "unpause": { + "title": "Kanal reaktivieren", + "description": "Das Reaktivieren von {name} ermöglicht es Kunden, neue Termine in diesem Kanal zu buchen.", + "action": "Kanal reaktivieren", + "success": "Kanal reaktiviert", + "error": "Konnte Kanal nicht reaktivieren." + } + }, + "unpause": "Aktivieren", "errorPages": { "title": "Da ist was schiefgelaufen", "descriptions": { diff --git a/project.inlang/messages/en.json b/project.inlang/messages/en.json index 70b1536..b0224d0 100644 --- a/project.inlang/messages/en.json +++ b/project.inlang/messages/en.json @@ -204,12 +204,113 @@ "cancel": "Cancel", "apply": "Apply" } + }, + "slotTemplate": { + "empty_weekdays": "Select weekdays", + "weekdays_long": { + "monday": "Monday", + "tuesday": "Tuesday", + "wednesday": "Wednesday", + "thursday": "Thursday", + "friday": "Friday", + "saturday": "Saturday", + "sunday": "Sunday" + }, + "weekdays_short": { + "monday": "Mon", + "tuesday": "Tue", + "wednesday": "Wed", + "thursday": "Thu", + "friday": "Fri", + "saturday": "Sat", + "sunday": "Sun" + }, + "times": { + "0500": "5:00 AM", + "0515": "5:15 AM", + "0530": "5:30 AM", + "0545": "5:45 AM", + "0600": "6:00 AM", + "0615": "6:15 AM", + "0630": "6:30 AM", + "0645": "6:45 AM", + "0700": "7:00 AM", + "0715": "7:15 AM", + "0730": "7:30 AM", + "0745": "7:45 AM", + "0800": "8:00 AM", + "0815": "8:15 AM", + "0830": "8:30 AM", + "0845": "8:45 AM", + "0900": "9:00 AM", + "0915": "9:15 AM", + "0930": "9:30 AM", + "0945": "9:45 AM", + "1000": "10:00 AM", + "1015": "10:15 AM", + "1030": "10:30 AM", + "1045": "10:45 AM", + "1100": "11:00 AM", + "1115": "11:15 AM", + "1130": "11:30 AM", + "1145": "11:45 AM", + "1200": "12:00 PM", + "1215": "12:15 PM", + "1230": "12:30 PM", + "1245": "12:45 PM", + "1300": "1:00 PM", + "1315": "1:15 PM", + "1330": "1:30 PM", + "1345": "1:45 PM", + "1400": "2:00 PM", + "1415": "2:15 PM", + "1430": "2:30 PM", + "1445": "2:45 PM", + "1500": "3:00 PM", + "1515": "3:15 PM", + "1530": "3:30 PM", + "1545": "3:45 PM", + "1600": "4:00 PM", + "1615": "4:15 PM", + "1630": "4:30 PM", + "1645": "4:45 PM", + "1700": "5:00 PM", + "1715": "5:15 PM", + "1730": "5:30 PM", + "1745": "5:45 PM", + "1800": "6:00 PM", + "1815": "6:15 PM", + "1830": "6:30 PM", + "1845": "6:45 PM", + "1900": "7:00 PM", + "1915": "7:15 PM", + "1930": "7:30 PM", + "1945": "7:45 PM", + "2000": "8:00 PM", + "2015": "8:15 PM", + "2030": "8:30 PM", + "2045": "8:45 PM", + "2100": "9:00 PM", + "2115": "9:15 PM", + "2130": "9:30 PM", + "2145": "9:45 PM", + "2200": "10:00 PM" + }, + "empty_duration": "Select duration", + "template": "Template {no}", + "remove": "Remove teamplate {no}", + "from": "From", + "to": "To", + "duration": "Duration", + "every_n_minutes": "every {minutes} minutes", + "add_template": "Add Template", + "weekdays": "Weekdays" } }, "cancel": "Cancel", "actions": "Actions", "edit": "Edit", - "pause": "Pause", + "pause": "Deactivate", "delete": "Delete", "select": "Select", "dashboard": { @@ -289,6 +390,96 @@ "en": "English", "de": "German" }, + "staff": { + "title": "Staff", + "empty": { + "title": "No staff members yet", + "description": "Staff members manage your appointments" + } + }, + "channels": { + "title": "Channels", + "empty": { + "title": "No channels yet", + "description": "Channels are your way to collect different types of appointments" + }, + "add": { + "title": "Add Channel", + "description": "Channels are your way to collect different types of appointments", + "fields": { + "name": { + "title": "Name", + "errors": { + "length": "Must be between 1 and 100 characters" + } + }, + "description": { + "title": "Description (optional)" + }, + "agents": { + "title": "Agents", + "description": "Add agents and we will manage the calendar and availability of your agents.", + "placeholder": "Select agents" + }, + "isPublic": { + "title": "Public", + "label": "Anyone can book an appointment" + }, + "requiresConfirmation": { + "title": "Requires Confirmation", + "label": "Appointments will have to be manually confirmed by staff" + }, + "slotTemplates": { + "title": "Schedule", + "description": "Slots for appointments will be created based on your schedule." + } + }, + "action": "Add Channel", + "success": "Channel added", + "errors": { + "unknown": "Could not add channel" + } + }, + "list": { + "empty": { + "title": "No channels yet", + "description": "Channels are your way to collect different types of appointments" + }, + "badges": { + "paused": "deactivated" + } + }, + "delete": { + "title": "Delete Channel", + "description": "Consider deactivating the channel instead of deleting it. Type {name} to confirm.", + "action": "Delete Channel", + "success": "Channel deleted", + "error": "Could not delete channel." + }, + "loading": "Loading channels", + "edit": { + "title": "Edit Channel", + "description": "Update the channels public details.", + "success": "Channel updated", + "error": "Could not update channel.", + "action": "Edit Channel" + }, + "pause": { + "title": "Deactivate Channel", + "description": "Deactivating {name} will prevent clients from booking new appointments in this channel.", + "action": "Deactivate Channel", + "success": "Channel deactivated", + "error": "Could not deactivate channel." + }, + "unpause": { + "title": "Activate Channel", + "description": "Activating {name} will allow clients to book new appointments in this channel.", + "action": "Activate Channel", + "success": "Channel activated", + "error": "Could not activate channel." + } + }, + "unpause": "Activate", "errorPages": { "title": "Something went wrong", "descriptions": { diff --git a/src/lib/components/templates/list/list-item.svelte b/src/lib/components/templates/list/list-item.svelte index 690b2f7..6f1fa8d 100644 --- a/src/lib/components/templates/list/list-item.svelte +++ b/src/lib/components/templates/list/list-item.svelte @@ -1,5 +1,6 @@ + + + + + {@render children?.()} + diff --git a/src/lib/components/ui/badge/index.ts b/src/lib/components/ui/badge/index.ts new file mode 100644 index 0000000..64e0aa9 --- /dev/null +++ b/src/lib/components/ui/badge/index.ts @@ -0,0 +1,2 @@ +export { default as Badge } from "./badge.svelte"; +export { badgeVariants, type BadgeVariant } from "./badge.svelte"; diff --git a/src/lib/components/ui/checkbox-with-label/checkbox-with-label.svelte b/src/lib/components/ui/checkbox-with-label/checkbox-with-label.svelte index d4045ab..4258328 100644 --- a/src/lib/components/ui/checkbox-with-label/checkbox-with-label.svelte +++ b/src/lib/components/ui/checkbox-with-label/checkbox-with-label.svelte @@ -19,7 +19,13 @@ } = $props(); -