Compare commits
	
		
			22 Commits
		
	
	
		
			1.11.0
			...
			feature/an
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 8c56aa3c46 | |||
| 1505080afd | |||
| f642849dbb | |||
| 7ac92ae6ca | |||
| 95af9f9914 | |||
| 1004aee16c | |||
| 0baf2fc460 | |||
| 09b59175ee | |||
| a21f61f3f3 | |||
| 8cb6093f0b | |||
| 7a92adcd3a | |||
| 27396e17f2 | |||
| fefd5c8237 | |||
| f9993c60f5 | |||
| 8e314f8676 | |||
| 98a3b07237 | |||
| efad6fdf2e | |||
| bce6d484a9 | |||
| 2dea19df89 | |||
| 6c986467d3 | |||
| 3cedbebe40 | |||
| dc986e4fe5 | 
| @@ -14,7 +14,7 @@ jobs: | ||||
|         uses: actions/setup-node@v4 | ||||
|         with: | ||||
|           node-version: 19 | ||||
|       - run: npm i -g pnpm@10.7 && pnpm i | ||||
|       - run: npm i -g pnpm@10.8 && pnpm i | ||||
|       - run: pnpm licenses:export | ||||
|       - name: Login to registry | ||||
|         uses: docker/login-action@v3 | ||||
|   | ||||
							
								
								
									
										37
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										37
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,8 +2,44 @@ | ||||
|  | ||||
| All notable changes to this project will be documented in this file. Dates are displayed in UTC. | ||||
|  | ||||
| #### [1.11.5](https://git.odit.services/lfk/frontend/compare/1.11.4...1.11.5) | ||||
|  | ||||
| - fix(cards): Update table for edit events [`27396e1`](https://git.odit.services/lfk/frontend/commit/27396e17f2cd8be72c9c8100afe6ec75ac66dceb) | ||||
|  | ||||
| #### [1.11.4](https://git.odit.services/lfk/frontend/compare/1.11.3...1.11.4) | ||||
|  | ||||
| > 25 April 2025 | ||||
|  | ||||
| - feat(CardAssign): styled buttons [`f9993c6`](https://git.odit.services/lfk/frontend/commit/f9993c60f565d7270b3a269e934b42b945c24b99) | ||||
| - chore(release): 1.11.4 [`fefd5c8`](https://git.odit.services/lfk/frontend/commit/fefd5c8237b91ac7fd7ecf467a6feb1100f84811) | ||||
| - feat(CardAssignment): support EAN13 [`8e314f8`](https://git.odit.services/lfk/frontend/commit/8e314f8676e5c189c09a33c9a382a8b984af5e30) | ||||
|  | ||||
| #### [1.11.3](https://git.odit.services/lfk/frontend/compare/1.11.2...1.11.3) | ||||
|  | ||||
| > 25 April 2025 | ||||
|  | ||||
| - chore(deps): Updated lock [`bce6d48`](https://git.odit.services/lfk/frontend/commit/bce6d484a9b1d7c40d4575a64ad528da2cc8fb3c) | ||||
| - chore(release): 1.11.3 [`98a3b07`](https://git.odit.services/lfk/frontend/commit/98a3b072370f029f82f79a75b8f809bc1b41d82f) | ||||
| - fix(cards): Z-Index for bulk card modal [`efad6fd`](https://git.odit.services/lfk/frontend/commit/efad6fdf2eae12c904575727b61fc61ed8a27d14) | ||||
|  | ||||
| #### [1.11.2](https://git.odit.services/lfk/frontend/compare/1.11.1...1.11.2) | ||||
|  | ||||
| > 23 April 2025 | ||||
|  | ||||
| - chore(release): 1.11.2 [`2dea19d`](https://git.odit.services/lfk/frontend/commit/2dea19df8990b34a56a345fef05487684ecec8c4) | ||||
| - fix(cardassignment): handle card not found [`6c98646`](https://git.odit.services/lfk/frontend/commit/6c986467d39344a32e598b834a115932ab8c9a1f) | ||||
|  | ||||
| #### [1.11.1](https://git.odit.services/lfk/frontend/compare/1.11.0...1.11.1) | ||||
|  | ||||
| > 22 April 2025 | ||||
|  | ||||
| - chore(release): 1.11.1 [`3cedbeb`](https://git.odit.services/lfk/frontend/commit/3cedbebe40b7699e39edc133e4bcbc16f4e7eb56) | ||||
| - ci: fix build [`dc986e4`](https://git.odit.services/lfk/frontend/commit/dc986e4fe5d462909e34b8bbf9a3c10accb2a00b) | ||||
|  | ||||
| #### [1.11.0](https://git.odit.services/lfk/frontend/compare/1.10.6...1.11.0) | ||||
|  | ||||
| > 22 April 2025 | ||||
|  | ||||
| - chore: move to tailwind v4 [`81a8ce0`](https://git.odit.services/lfk/frontend/commit/81a8ce002cd5a470f5ac4f064360c09bcf815ac8) | ||||
| - chore(deps): bump [`244be47`](https://git.odit.services/lfk/frontend/commit/244be471f07a6ab77768fb599cc2381a319e4e22) | ||||
| - chore: move privacy & imprint to website links [`3288ffb`](https://git.odit.services/lfk/frontend/commit/3288ffb3cc52bcfbb2b94c373932e9d614fba80f) | ||||
| @@ -11,6 +47,7 @@ All notable changes to this project will be documented in this file. Dates are d | ||||
| - chore: tailwind class cleanup [`80ab4e0`](https://git.odit.services/lfk/frontend/commit/80ab4e037e44edf1f076d4a365ef36c614e7cb0a) | ||||
| - fix(cardassignment): debounce w/ immediate start [`1d6ed99`](https://git.odit.services/lfk/frontend/commit/1d6ed990736c6156b67f0715ee1f86aeb2be0390) | ||||
| - fix(RunnerDetail): move to standard html select for groups [`e1bf435`](https://git.odit.services/lfk/frontend/commit/e1bf435080a3845a4a29f9b8bce7aba3e9220cf9) | ||||
| - chore(release): 1.11.0 [`cae6be6`](https://git.odit.services/lfk/frontend/commit/cae6be6f867aece8997799e90f783a7b5f9b7602) | ||||
| - feat(ImportRunnerModal): sort groups by name [`3124574`](https://git.odit.services/lfk/frontend/commit/312457494cb0da805df5ec2811604ea45a09963d) | ||||
| - feat(cards): badge style for runner links [`1605b0f`](https://git.odit.services/lfk/frontend/commit/1605b0f7b2c12d2b247f40aefc03d2d053fea60d) | ||||
|  | ||||
|   | ||||
| @@ -2,8 +2,8 @@ FROM registry.odit.services/hub/library/node:23.10.0-alpine3.21 AS build | ||||
| ARG NPM_REGISTRY_URL=https://registry.npmjs.org | ||||
| WORKDIR /app | ||||
|  | ||||
| COPY package.json pnpm-lock.yaml vite.config.js tailwind.config.cjs postcss.config.cjs index.html ./ | ||||
| RUN npm config set registry $NPM_REGISTRY_URL && npm i -g pnpm@10.7 | ||||
| COPY package.json pnpm-lock.yaml vite.config.js index.html ./ | ||||
| RUN npm config set registry $NPM_REGISTRY_URL && npm i -g pnpm@10.8 | ||||
| RUN mkdir /pnpm && pnpm config set store-dir /pnpm && pnpm i | ||||
|  | ||||
| COPY src ./src | ||||
|   | ||||
| @@ -13,7 +13,7 @@ | ||||
|  | ||||
|   <body> | ||||
|     <span style="display: none; visibility: hidden" id="buildinfo" | ||||
|       >RELEASE_INFO-1.11.0-RELEASE_INFO</span | ||||
|       >RELEASE_INFO-1.11.5-RELEASE_INFO</span | ||||
|     > | ||||
|     <noscript>You need to enable JavaScript to run this app.</noscript> | ||||
|     <script src="/env.js"></script> | ||||
|   | ||||
| @@ -1,6 +1,6 @@ | ||||
| { | ||||
|   "name": "@odit/lfk-frontend", | ||||
|   "version": "1.11.0", | ||||
|   "version": "1.11.5", | ||||
|   "type": "module", | ||||
|   "scripts": { | ||||
|     "i18n-order": "node order.js", | ||||
|   | ||||
							
								
								
									
										675
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										675
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| @@ -111,7 +111,7 @@ | ||||
|         aria-hidden="true">​</span | ||||
|       > | ||||
|       <div | ||||
|         class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full" | ||||
|         class="inline-block align-bottom bg-white rounded-lg text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-2xl sm:w-full relative z-10" | ||||
|         role="dialog" | ||||
|         aria-modal="true" | ||||
|         aria-labelledby="modal-headline" | ||||
| @@ -122,7 +122,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -115,7 +115,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -109,7 +109,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
| @@ -162,7 +162,7 @@ | ||||
|                       name="enabled" | ||||
|                       type="checkbox" | ||||
|                       checked={editable.enabled} | ||||
|                       class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
|                     /> | ||||
|                     {$_("this-card-is")} | ||||
|                     {#if editable.enabled} | ||||
|   | ||||
| @@ -180,11 +180,9 @@ | ||||
|     bind:runner | ||||
|     bind:editable | ||||
|     bind:original_data | ||||
|     on:dataUpdated={(event) => { | ||||
|       current_cards[ | ||||
|         current_cards.findIndex((c) => c.id === event.detail.card.id) | ||||
|       ] = event.detail.card; | ||||
|       current_cards = current_cards; | ||||
|     on:dataUpdated={(editevent) => { | ||||
|       console.log(editevent.detail.card) | ||||
|       current_cards = current_cards.filter((c) => c.id !== editevent.detail.card.id).concat([editevent.detail.card]).sort((a, b) => a.code - b.code); | ||||
|       options.update((options) => ({ | ||||
|         ...options, | ||||
|         data: current_cards, | ||||
|   | ||||
| @@ -65,7 +65,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -167,7 +167,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
| @@ -345,7 +345,7 @@ | ||||
|                       id="comments" | ||||
|                       name="comments" | ||||
|                       type="checkbox" | ||||
|                       class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
|                     /> | ||||
|                   </div> | ||||
|                   <div class="ml-3 text-sm"> | ||||
|   | ||||
| @@ -300,7 +300,7 @@ | ||||
| 					id="comments" | ||||
| 					name="comments" | ||||
| 					type="checkbox" | ||||
| 					class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 					class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 				/> | ||||
| 			</div> | ||||
| 			<div class="ml-3 text-sm"> | ||||
|   | ||||
| @@ -1,340 +1,384 @@ | ||||
| <script> | ||||
|   import { _ } from "svelte-i18n"; | ||||
|   import { clickOutside } from "../base/outsideclick"; | ||||
| 	import { _ } from "svelte-i18n"; | ||||
| 	import { clickOutside } from "../base/outsideclick"; | ||||
|  | ||||
|   import { | ||||
|     DonationService, | ||||
|     DonorService, | ||||
|     RunnerService, | ||||
|   } from "@odit/lfk-client-js"; | ||||
|   import Select from "svelte-select"; | ||||
|   import { createEventDispatcher, onMount } from "svelte"; | ||||
|   import toast from "svelte-french-toast"; | ||||
|   export let modal_open; | ||||
|   const dispatch = createEventDispatcher(); | ||||
|   const getDonorLabel = (option) => | ||||
|     option.firstname + " " + (option.middlename || "") + " " + option.lastname; | ||||
|   const filterDonors = (label, filterText, option) => | ||||
|     label.toLowerCase().includes(filterText.toLowerCase()) || | ||||
|     option.value.id.toString().startsWith(filterText.toLowerCase()); | ||||
|   $: donor = 0; | ||||
|   $: runner = 0; | ||||
|   $: donors = []; | ||||
|   $: runners = []; | ||||
|   $: is_fixed = false; | ||||
|   $: is_paid = false; | ||||
|   $: amount_input = 0; | ||||
|   $: processed_last_submit = true; | ||||
|   $: is_amount_valid = amount_input > 0; | ||||
|   $: createbtnenabled = is_amount_valid; | ||||
|   (() => { | ||||
|     document.onkeydown = (e) => { | ||||
|       e = e || window.event; | ||||
|       if (e.key === "Escape") { | ||||
|         modal_open = false; | ||||
|       } | ||||
|       if (e.keyCode === 13) { | ||||
|         if (createbtnenabled === true) { | ||||
|           createbtnenabled = false; | ||||
|           submit(); | ||||
|         } | ||||
|       } | ||||
|     }; | ||||
|   })(); | ||||
|   function submit() { | ||||
|     if (processed_last_submit === true) { | ||||
|       let amount_cent = Math.floor(amount_input * 100); | ||||
|       processed_last_submit = false; | ||||
|       toast.loading($_("adding-donation")); | ||||
|       if (is_fixed) { | ||||
|         let postdata = { | ||||
|           donor, | ||||
|           amount: amount_cent, | ||||
|           paidAmount: 0, | ||||
|         }; | ||||
|         if (is_paid) { | ||||
|           postdata.paidAmount = amount_cent; | ||||
|         } | ||||
|         DonationService.donationControllerPostFixed(postdata) | ||||
|           .then((result) => { | ||||
|             donor = donors[0].id || 0; | ||||
|             runner = runners[0].id || 0; | ||||
|             amount_input = 0; | ||||
|             modal_open = false; | ||||
|             // | ||||
|             toast.dismiss(); | ||||
|             toast.success($_("donation_added")); | ||||
|             dispatch("created", { donations: [result] }); | ||||
|           }) | ||||
|           .catch((err) => { | ||||
|             // | ||||
|           }) | ||||
|           .finally(() => { | ||||
|             processed_last_submit = true; | ||||
|           }); | ||||
|       } else { | ||||
|         let postdata = { | ||||
|           donor, | ||||
|           runner, | ||||
|           amountPerDistance: amount_cent, | ||||
|         }; | ||||
|         DonationService.donationControllerPostDistance(postdata) | ||||
|           .then((result) => { | ||||
|             donor = donors[0].id || 0; | ||||
|             runner = runners[0].id || 0; | ||||
|             amount_input = 0; | ||||
|             modal_open = false; | ||||
|             // | ||||
|             toast.dismiss(); | ||||
|             toast.success($_("donation_added")); | ||||
|             dispatch("created", { donations: [result] }); | ||||
|           }) | ||||
|           .catch((err) => { | ||||
|             // | ||||
|           }) | ||||
|           .finally(() => { | ||||
|             processed_last_submit = true; | ||||
|           }); | ||||
|       } | ||||
|     } | ||||
|   } | ||||
| 	import { | ||||
| 		DonationService, | ||||
| 		DonorService, | ||||
| 		RunnerService, | ||||
| 	} from "@odit/lfk-client-js"; | ||||
| 	import Select from "svelte-select"; | ||||
| 	import { createEventDispatcher, onMount } from "svelte"; | ||||
| 	import toast from "svelte-french-toast"; | ||||
| 	export let modal_open; | ||||
| 	const dispatch = createEventDispatcher(); | ||||
| 	const getDonorLabel = (option) => | ||||
| 		option.firstname + " " + (option.middlename || "") + " " + option.lastname; | ||||
| 	const filterDonors = (label, filterText, option) => | ||||
| 		label.toLowerCase().includes(filterText.toLowerCase()) || | ||||
| 		option.value.id.toString().startsWith(filterText.toLowerCase()); | ||||
| 	$: donor = 0; | ||||
| 	$: runner = 0; | ||||
| 	$: donors = []; | ||||
| 	$: runners = []; | ||||
| 	$: type = "distance"; | ||||
| 	$: is_paid = false; | ||||
| 	$: amount_input = 0; | ||||
| 	$: processed_last_submit = true; | ||||
| 	$: is_amount_valid = amount_input > 0; | ||||
| 	$: createbtnenabled = is_amount_valid; | ||||
| 	(() => { | ||||
| 		document.onkeydown = (e) => { | ||||
| 			e = e || window.event; | ||||
| 			if (e.key === "Escape") { | ||||
| 				modal_open = false; | ||||
| 			} | ||||
| 			if (e.keyCode === 13) { | ||||
| 				if (createbtnenabled === true) { | ||||
| 					createbtnenabled = false; | ||||
| 					submit(); | ||||
| 				} | ||||
| 			} | ||||
| 		}; | ||||
| 	})(); | ||||
| 	function submit() { | ||||
| 		if (processed_last_submit === true) { | ||||
| 			let amount_cent = Math.floor(amount_input * 100); | ||||
| 			processed_last_submit = false; | ||||
| 			toast.loading($_("adding-donation")); | ||||
| 			if (type === "fixed") { | ||||
| 				let postdata = { | ||||
| 					donor, | ||||
| 					amount: amount_cent, | ||||
| 					paidAmount: 0, | ||||
| 				}; | ||||
| 				if (is_paid) { | ||||
| 					postdata.paidAmount = amount_cent; | ||||
| 				} | ||||
| 				DonationService.donationControllerPostFixed(postdata) | ||||
| 					.then((result) => { | ||||
| 						donor = donors[0].id || 0; | ||||
| 						runner = runners[0].id || 0; | ||||
| 						amount_input = 0; | ||||
| 						modal_open = false; | ||||
| 						// | ||||
| 						toast.dismiss(); | ||||
| 						toast.success($_("donation_added")); | ||||
| 						dispatch("created", { donations: [result] }); | ||||
| 					}) | ||||
| 					.catch((err) => { | ||||
| 						// | ||||
| 					}) | ||||
| 					.finally(() => { | ||||
| 						processed_last_submit = true; | ||||
| 					}); | ||||
| 			} else if (type === "anonymous") { | ||||
| 				let postdata = { | ||||
| 					amount: amount_cent, | ||||
| 					paidAmount: 0, | ||||
| 				}; | ||||
| 				if (is_paid) { | ||||
| 					postdata.paidAmount = amount_cent; | ||||
| 				} | ||||
| 				DonationService.donationControllerPostFixed(postdata) | ||||
| 					.then((result) => { | ||||
| 						amount_input = 0; | ||||
| 						modal_open = false; | ||||
| 						// | ||||
| 						toast.dismiss(); | ||||
| 						toast.success($_("donation_added")); | ||||
| 						dispatch("created", { donations: [result] }); | ||||
| 					}) | ||||
| 					.catch((err) => { | ||||
| 						// | ||||
| 					}) | ||||
| 					.finally(() => { | ||||
| 						processed_last_submit = true; | ||||
| 					}); | ||||
| 			} else if (type === "distance") { | ||||
| 				let postdata = { | ||||
| 					donor, | ||||
| 					runner, | ||||
| 					amountPerDistance: amount_cent, | ||||
| 				}; | ||||
| 				DonationService.donationControllerPostDistance(postdata) | ||||
| 					.then((result) => { | ||||
| 						donor = donors[0].id || 0; | ||||
| 						runner = runners[0].id || 0; | ||||
| 						amount_input = 0; | ||||
| 						modal_open = false; | ||||
| 						// | ||||
| 						toast.dismiss(); | ||||
| 						toast.success($_("donation_added")); | ||||
| 						dispatch("created", { donations: [result] }); | ||||
| 					}) | ||||
| 					.catch((err) => { | ||||
| 						// | ||||
| 					}) | ||||
| 					.finally(() => { | ||||
| 						processed_last_submit = true; | ||||
| 					}); | ||||
| 			} | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   onMount(async () => { | ||||
|     donors = (await DonorService.donorControllerGetAll()).map( | ||||
|       (r) => { | ||||
|         return { label: getDonorLabel(r), value: r }; | ||||
|       } | ||||
|     ); | ||||
|     runners = (await RunnerService.runnerControllerGetAll()).map( | ||||
|       (r) => { | ||||
|         return { label: getDonorLabel(r), value: r }; | ||||
|       } | ||||
|     ); | ||||
|   }); | ||||
| 	onMount(async () => { | ||||
| 		donors = (await DonorService.donorControllerGetAll()).map((r) => { | ||||
| 			return { label: getDonorLabel(r), value: r }; | ||||
| 		}); | ||||
| 		runners = (await RunnerService.runnerControllerGetAll()).map((r) => { | ||||
| 			return { label: getDonorLabel(r), value: r }; | ||||
| 		}); | ||||
| 	}); | ||||
| </script> | ||||
|  | ||||
| {#if modal_open} | ||||
|   <div | ||||
|     class="fixed z-10 inset-0 overflow-y-hidden" | ||||
|     use:clickOutside | ||||
|     on:click_outside={() => { | ||||
|       modal_open = false; | ||||
|     }} | ||||
|   > | ||||
|     <div | ||||
|       class="flex items-end justify-center h-screen text-center sm:block p-0 lg:p-4" | ||||
|     > | ||||
|       <div class="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||
|         <div | ||||
|           class="absolute inset-0 bg-gray-500 opacity-75" | ||||
|           data-id="modal_backdrop" | ||||
|         /> | ||||
|       </div> | ||||
|       <span | ||||
|         class="hidden sm:inline-block sm:align-middle sm:h-screen" | ||||
|         aria-hidden="true">​</span | ||||
|       > | ||||
|       <div | ||||
|         class="inline-block align-bottom text-left shadow-xl transform transition-all sm:align-middle w-full lg:w-auto min-w-auto lg:min-w-[35vw] relative z-10" | ||||
|         role="dialog" | ||||
|         aria-modal="true" | ||||
|         aria-labelledby="modal-headline" | ||||
|       > | ||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||
|           <div class=""> | ||||
|             <div | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|                 ><path fill="none" d="M0 0h24v24H0z" /> | ||||
|                 <path | ||||
|                   d="M14 2a8 8 0 013.3 15.3A8 8 0 116.7 6.7 8 8 0 0114 2zm-3 7H9v1a2.5 2.5 0 00-.16 5h2.25a.5.5 0 010 1H7v2h2v1h2v-1a2.5 2.5 0 00.16-5H8.91a.5.5 0 010-1H13v-2h-2V9zm3-5a5.99 5.99 0 00-4.48 2.01 8 8 0 018.47 8.47A6 6 0 0014 4z" | ||||
|                 /></svg | ||||
|               > | ||||
|             </div> | ||||
|             <div class="mt-3"> | ||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||
|                 {#if is_fixed} | ||||
|                   {$_("create-a-new-fixed-donation")} | ||||
|                 {:else}{$_("create-a-new-distance-donation")}{/if} | ||||
| 	<div | ||||
| 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||
| 		use:clickOutside | ||||
| 		on:click_outside={() => { | ||||
| 			modal_open = false; | ||||
| 		}} | ||||
| 	> | ||||
| 		<div | ||||
| 			class="flex items-end justify-center h-screen text-center sm:block p-0 lg:p-4" | ||||
| 		> | ||||
| 			<div class="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||
| 				<div | ||||
| 					class="absolute inset-0 bg-neutral-500 opacity-75" | ||||
| 					data-id="modal_backdrop" | ||||
| 				/> | ||||
| 			</div> | ||||
| 			<span | ||||
| 				class="hidden sm:inline-block sm:align-middle sm:h-screen" | ||||
| 				aria-hidden="true">​</span | ||||
| 			> | ||||
| 			<div | ||||
| 				class="inline-block align-bottom text-left shadow-xl transform transition-all sm:align-middle w-full lg:w-auto min-w-auto lg:min-w-[35vw] relative z-10" | ||||
| 				role="dialog" | ||||
| 				aria-modal="true" | ||||
| 				aria-labelledby="modal-headline" | ||||
| 			> | ||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||
| 					<div class=""> | ||||
| 						<div | ||||
| 							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
| 						> | ||||
| 							<svg | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
| 								width="24" | ||||
| 								height="24" | ||||
| 								><path fill="none" d="M0 0h24v24H0z" /> | ||||
| 								<path | ||||
| 									d="M14 2a8 8 0 013.3 15.3A8 8 0 116.7 6.7 8 8 0 0114 2zm-3 7H9v1a2.5 2.5 0 00-.16 5h2.25a.5.5 0 010 1H7v2h2v1h2v-1a2.5 2.5 0 00.16-5H8.91a.5.5 0 010-1H13v-2h-2V9zm3-5a5.99 5.99 0 00-4.48 2.01 8 8 0 018.47 8.47A6 6 0 0014 4z" | ||||
| 								/></svg | ||||
| 							> | ||||
| 						</div> | ||||
| 						<div class="mt-3"> | ||||
|               <h3 class="text-xl leading-6 font-medium text-neutral-900"> | ||||
|                 Sponsoring erstellen | ||||
|               </h3> | ||||
|               <label class="content-center align-middle object-center"> | ||||
|                 <span class="text-base" class:text-gray-300={is_fixed} | ||||
|                   >{$_("distance-donation")}</span | ||||
|                 > | ||||
|                 <input | ||||
|                   class="toggle relative w-10 h-5 transition-all duration-200 ease-in-out bg-gray-400 rounded-full shadow-inner outline-none appearance-none align-middle" | ||||
|                   type="checkbox" | ||||
|                   bind:checked={is_fixed} | ||||
|                 /> | ||||
|                 <span class="ml-2 text-base" class:text-gray-300={!is_fixed} | ||||
|                   >{$_("fixed-donation")}</span | ||||
|                 > | ||||
|               </label> | ||||
|               <div class="mb-6"> | ||||
|                 <p class="text-sm text-gray-500"> | ||||
|                   {$_( | ||||
|                     "please-provide-the-nessecary-information-to-create-a-new-donation" | ||||
|                   )} | ||||
|                 </p> | ||||
|               </div> | ||||
|               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||
|                 <div class="col-span-6"> | ||||
|                   <label | ||||
|                     for="donor" | ||||
|                     class="block text-sm font-medium text-gray-700" | ||||
|                     >{$_("donor")}</label | ||||
|                   > | ||||
|                   <Select | ||||
|                     containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | ||||
|                     itemFilter={(label, filterText, option) => | ||||
|                       filterDonors(label, filterText, option)} | ||||
|                     items={donors} | ||||
|                     showChevron={true} | ||||
|                     placeholder={$_("search-for-donor-name-or-id")} | ||||
|                     noOptionsMessage={$_("no-donors-found")} | ||||
|                     on:select={(selectedValue) => | ||||
|                       (donor = selectedValue.detail.value.id)} | ||||
|                     on:clear={() => (donors = null)} | ||||
|                   /> | ||||
|                 </div> | ||||
|                 {#if !is_fixed} | ||||
|                   <div class="col-span-6"> | ||||
|                     <label | ||||
|                       for="donor" | ||||
|                       class="block text-sm font-medium text-gray-700" | ||||
|                       >{$_("runner")}</label | ||||
|                     > | ||||
|                     <Select | ||||
|                       containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | ||||
|                       itemFilter={(label, filterText, option) => | ||||
|                         filterDonors(label, filterText, option)} | ||||
|                       items={runners} | ||||
|                       showChevron={true} | ||||
|                       placeholder={$_("search-for-runner-by-name-or-id")} | ||||
|                       noOptionsMessage={$_("no-runners-found")} | ||||
|                       on:select={(selectedValue) => | ||||
|                         (runner = selectedValue.detail.value.id)} | ||||
|                       on:clear={() => (runner = null)} | ||||
|                     /> | ||||
|                   </div> | ||||
|                 {/if} | ||||
|                 <div class="col-span-6"> | ||||
|                   <label | ||||
|                     for="donation_amount_eur" | ||||
|                     class="block text-sm font-medium text-gray-700" | ||||
|                   > | ||||
|                     {#if !is_fixed} | ||||
|                       {$_("amount-per-kilometer")} | ||||
|                     {:else}{$_("donation-amount")}{/if}</label | ||||
|                   > | ||||
|                   <div class="mt-1 flex rounded-md shadow-sm"> | ||||
|                     <input | ||||
|                       autocomplete="off" | ||||
|                       class:border-red-500={!is_amount_valid} | ||||
|                       class:focus:border-red-500={!is_amount_valid} | ||||
|                       class:focus:ring-red-500={!is_amount_valid} | ||||
|                       bind:value={amount_input} | ||||
|                       type="number" | ||||
|                       step="0.01" | ||||
|                       name="donation_amount_eur" | ||||
|                       class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 p-2" | ||||
|                       placeholder="2.00" | ||||
|                     /> | ||||
|                     <span | ||||
|                       class="inline-flex items-center px-3 rounded-r-md border border-gray-300 bg-gray-50 text-gray-500 text-sm" | ||||
|                       >€</span | ||||
|                     > | ||||
|                   </div> | ||||
|                   {#if !is_amount_valid} | ||||
|                     <span | ||||
|                       class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1" | ||||
|                     > | ||||
|                       {$_("donation-amount-must-be-greater-that-0-00eur")} | ||||
|                     </span> | ||||
|                   {/if} | ||||
|                 </div> | ||||
|                 {#if is_fixed} | ||||
|                   <div class="col-span-6"> | ||||
|                     <label | ||||
|                       for="paid" | ||||
|                       class="block text-sm font-medium text-gray-700" | ||||
|                       >{$_("already-paid")}</label | ||||
|                     > | ||||
|                     <p class="text-gray-500"> | ||||
|                       <input | ||||
|                         id="paid" | ||||
|                         bind:checked={is_paid} | ||||
|                         name="paid" | ||||
|                         type="checkbox" | ||||
|                         class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       /> | ||||
|                       <span class="align-text-bottom"> | ||||
|                         {#if is_paid} | ||||
|                           {$_("paid")} | ||||
|                         {:else} | ||||
|                           {$_("open")} | ||||
|                         {/if} | ||||
|                       </span> | ||||
|                     </p> | ||||
|                   </div> | ||||
|                 {/if} | ||||
|               </div> | ||||
|             </div> | ||||
|           </div> | ||||
|         </div> | ||||
|         <div class="bg-gray-50 px-4 lg:py-3 sm:px-6 grid gap-2 lg:rounded-b-xl pt-3 pb-10"> | ||||
|           <button | ||||
|             disabled={!createbtnenabled} | ||||
|             class:opacity-50={!createbtnenabled} | ||||
|             on:click={submit} | ||||
|             type="button" | ||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" | ||||
|           > | ||||
|             {$_("create")} | ||||
|           </button> | ||||
|           <button | ||||
|             on:click={() => { | ||||
|               modal_open = false; | ||||
|             }} | ||||
|             type="button" | ||||
|             class="w-full justify-center rounded-md border border-gray-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 hidden lg:block" | ||||
|           > | ||||
|             {$_("cancel")} | ||||
|           </button> | ||||
|         </div> | ||||
|       </div> | ||||
|     </div> | ||||
|   </div> | ||||
| 							<nav | ||||
| 								class="relative z-0 flex border border-neutral-200 rounded-xl overflow-hidden mb-2" | ||||
| 							> | ||||
| 								<button | ||||
| 									on:click={() => { | ||||
| 										type = "distance"; | ||||
| 									}} | ||||
| 									type="button" | ||||
| 									id="bar-with-underline-item-1" | ||||
| 									class:donation_active_tab={type === "distance"} | ||||
| 									class:donation_inactive_tab={type !== "distance"} | ||||
| 									aria-selected={type === "distance"} | ||||
| 									role="tab" | ||||
| 								> | ||||
| 									{$_("spende_pro_km")} | ||||
| 								</button> | ||||
| 								<button | ||||
| 									on:click={() => { | ||||
| 										type = "fixed"; | ||||
| 									}} | ||||
| 									type="button" | ||||
| 									id="bar-with-underline-item-2" | ||||
| 									class:donation_active_tab={type === "fixed"} | ||||
| 									class:donation_inactive_tab={type !== "fixed"} | ||||
| 									aria-selected={type === "fixed"} | ||||
| 									role="tab" | ||||
| 								> | ||||
| 									{$_("festbetrag")} | ||||
| 								</button> | ||||
| 								<button | ||||
| 									on:click={() => { | ||||
| 										type = "anonymous"; | ||||
| 									}} | ||||
| 									type="button" | ||||
| 									id="bar-with-underline-item-3" | ||||
| 									class:donation_active_tab={type === "anonymous"} | ||||
| 									class:donation_inactive_tab={type !== "anonymous"} | ||||
| 									aria-selected={type === "anonymous"} | ||||
| 									role="tab" | ||||
| 								> | ||||
| 									{$_("anonyme_spende")} | ||||
| 								</button> | ||||
| 							</nav> | ||||
|  | ||||
| 							<div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||
| 								{#if type === "anonymous"} | ||||
| 									<div class="col-span-6"> | ||||
| 										<label | ||||
| 											for="donation_amount_eur" | ||||
| 											class="block text-sm font-medium text-neutral-900" | ||||
| 										> | ||||
| 											{$_("donation-amount")}</label | ||||
| 										> | ||||
| 										<div class="mt-1 flex rounded-md shadow-sm"> | ||||
| 											<input | ||||
| 												autocomplete="off" | ||||
| 												class:border-red-500={!is_amount_valid} | ||||
| 												class:focus:border-red-500={!is_amount_valid} | ||||
| 												class:focus:ring-red-500={!is_amount_valid} | ||||
| 												bind:value={amount_input} | ||||
| 												type="number" | ||||
| 												step="0.01" | ||||
| 												name="donation_amount_eur" | ||||
| 												class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 p-2" | ||||
| 												placeholder="2.00" | ||||
| 											/> | ||||
| 											<span | ||||
| 												class="inline-flex items-center px-3 rounded-r-md border border-neutral-300 bg-neutral-50 text-neutral-500 text-sm" | ||||
| 												>€</span | ||||
| 											> | ||||
| 										</div> | ||||
| 										{#if !is_amount_valid} | ||||
| 											<span | ||||
| 												class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1" | ||||
| 											> | ||||
| 												{$_("donation-amount-must-be-greater-that-0-00eur")} | ||||
| 											</span> | ||||
| 										{/if} | ||||
| 									</div> | ||||
| 								{:else} | ||||
| 									<div class="col-span-6"> | ||||
| 										<label | ||||
| 											for="donor" | ||||
| 											class="block text-sm font-medium text-neutral-900" | ||||
| 											>{$_("donor")}</label | ||||
| 										> | ||||
| 										<Select | ||||
| 											containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 rounded-md p-2" | ||||
| 											itemFilter={(label, filterText, option) => | ||||
| 												filterDonors(label, filterText, option)} | ||||
| 											items={donors} | ||||
| 											showChevron={true} | ||||
| 											placeholder={$_("search-for-donor-name-or-id")} | ||||
| 											noOptionsMessage={$_("no-donors-found")} | ||||
| 											on:select={(selectedValue) => | ||||
| 												(donor = selectedValue.detail.value.id)} | ||||
| 											on:clear={() => (donors = null)} | ||||
| 										/> | ||||
| 									</div> | ||||
| 									{#if type === "distance"} | ||||
| 										<div class="col-span-6"> | ||||
| 											<label | ||||
| 												for="donor" | ||||
| 												class="block text-sm font-medium text-neutral-900" | ||||
| 												>{$_("runner")}</label | ||||
| 											> | ||||
| 											<Select | ||||
| 												containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 rounded-md p-2" | ||||
| 												itemFilter={(label, filterText, option) => | ||||
| 													filterDonors(label, filterText, option)} | ||||
| 												items={runners} | ||||
| 												showChevron={true} | ||||
| 												placeholder={$_("search-for-runner-by-name-or-id")} | ||||
| 												noOptionsMessage={$_("no-runners-found")} | ||||
| 												on:select={(selectedValue) => | ||||
| 													(runner = selectedValue.detail.value.id)} | ||||
| 												on:clear={() => (runner = null)} | ||||
| 											/> | ||||
| 										</div> | ||||
| 									{/if} | ||||
| 									<div class="col-span-6"> | ||||
| 										<label | ||||
| 											for="donation_amount_eur" | ||||
| 											class="block text-sm font-medium text-neutral-900" | ||||
| 										> | ||||
| 											{#if type === "fixed"} | ||||
| 												{$_("donation-amount")} | ||||
| 											{:else}{$_("amount-per-kilometer")}{/if}</label | ||||
| 										> | ||||
| 										<div class="mt-1 flex rounded-md shadow-sm"> | ||||
| 											<input | ||||
| 												autocomplete="off" | ||||
| 												class:border-red-500={!is_amount_valid} | ||||
| 												class:focus:border-red-500={!is_amount_valid} | ||||
| 												class:focus:ring-red-500={!is_amount_valid} | ||||
| 												bind:value={amount_input} | ||||
| 												type="number" | ||||
| 												step="0.01" | ||||
| 												name="donation_amount_eur" | ||||
| 												class="focus:ring-indigo-500 focus:border-indigo-500 flex-1 block w-full rounded-none rounded-l-md sm:text-sm border-neutral-300 border bg-neutral-50 text-neutral-800 p-2" | ||||
| 												placeholder="2.00" | ||||
| 											/> | ||||
| 											<span | ||||
| 												class="inline-flex items-center px-3 rounded-r-md border border-neutral-300 bg-neutral-50 text-neutral-500 text-sm" | ||||
| 												>€</span | ||||
| 											> | ||||
| 										</div> | ||||
| 										{#if !is_amount_valid} | ||||
| 											<span | ||||
| 												class="flex items-center font-medium tracking-wide text-red-500 text-xs mt-1 ml-1" | ||||
| 											> | ||||
| 												{$_("donation-amount-must-be-greater-that-0-00eur")} | ||||
| 											</span> | ||||
| 										{/if} | ||||
| 									</div> | ||||
| 								{/if} | ||||
| 								{#if type === "fixed" || type === "anonymous"} | ||||
| 									<div class="flex"> | ||||
| 										<input | ||||
| 											bind:checked={is_paid} | ||||
| 											type="checkbox" | ||||
| 											class="shrink-0 mt-0.5 border-neutral-200 rounded-sm text-blue-600 focus:ring-blue-500 checked:border-blue-500 disabled:opacity-50 disabled:pointer-events-none" | ||||
| 											id="hs-default-checkbox" | ||||
| 										/> | ||||
| 										<label | ||||
| 											for="hs-default-checkbox" | ||||
| 											class="text-base text-neutral-900 ms-2 font-medium" | ||||
| 											>{$_("already-paid")}</label | ||||
| 										> | ||||
| 									</div> | ||||
| 								{/if} | ||||
| 							</div> | ||||
| 						</div> | ||||
| 					</div> | ||||
| 				</div> | ||||
| 				<div | ||||
| 					class="bg-neutral-50 px-4 lg:py-3 sm:px-6 grid gap-2 lg:rounded-b-xl pt-3 pb-10" | ||||
| 				> | ||||
| 					<button | ||||
| 						disabled={!createbtnenabled} | ||||
| 						class:opacity-50={!createbtnenabled} | ||||
| 						on:click={submit} | ||||
| 						type="button" | ||||
| 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-blue-600 text-base font-medium text-white hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" | ||||
| 					> | ||||
| 						{$_("create")} | ||||
| 					</button> | ||||
| 					<button | ||||
| 						on:click={() => { | ||||
| 							modal_open = false; | ||||
| 						}} | ||||
| 						type="button" | ||||
| 						class="w-full justify-center rounded-md border border-neutral-300 shadow-sm px-4 py-2 bg-white text-base font-medium text-neutral-900 hover:bg-neutral-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 hidden lg:block" | ||||
| 					> | ||||
| 						{$_("cancel")} | ||||
| 					</button> | ||||
| 				</div> | ||||
| 			</div> | ||||
| 		</div> | ||||
| 	</div> | ||||
| {/if} | ||||
|  | ||||
| <style> | ||||
|   .toggle:before { | ||||
|     content: ""; | ||||
|     position: absolute; | ||||
|     width: 1.25rem; | ||||
|     height: 1.25rem; | ||||
|     border-radius: 50%; | ||||
|     top: 0; | ||||
|     left: 0; | ||||
|     transform: scale(1.1); | ||||
|     box-shadow: 0 0.125rem 0.5rem rgba(0, 0, 0, 0.2); | ||||
|     background-color: white; | ||||
|     transition: 0.2s ease-in-out; | ||||
|   } | ||||
|  | ||||
|   .toggle:checked { | ||||
|     /* @apply: bg-indigo-400; */ | ||||
|     background-color: #7f9cf5; | ||||
|   } | ||||
|  | ||||
|   .toggle:checked:before { | ||||
|     left: 1.25rem; | ||||
|   } | ||||
| </style> | ||||
|   | ||||
| @@ -107,7 +107,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -68,7 +68,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -1,18 +1,21 @@ | ||||
| <script> | ||||
|   import { _ } from "svelte-i18n"; | ||||
|   export let donor; | ||||
| 	import { _ } from "svelte-i18n"; | ||||
| 	export let donor; | ||||
| </script> | ||||
|  | ||||
| {#if !donor || donor.firstname == 0} | ||||
|   {$_("donor-has-no-associated-donations")} | ||||
| 	<span | ||||
| 		class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800 border border-current" | ||||
| 		>{$_('anonymer_sponsor')}</span | ||||
| 	> | ||||
| {:else} | ||||
|   <div class="flex items-center"> | ||||
|     <a | ||||
|       href="../donors/{donor.id}" | ||||
|       class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800 border border-current" | ||||
|       >{donor.firstname} | ||||
|       {#if donor.middlename}{donor.middlename}{/if} | ||||
|       {donor.lastname}</a | ||||
|     > | ||||
|   </div> | ||||
| 	<div class="flex items-center"> | ||||
| 		<a | ||||
| 			href="../donors/{donor.id}" | ||||
| 			class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full bg-gray-100 text-gray-800 border border-current" | ||||
| 			>{donor.firstname} | ||||
| 			{#if donor.middlename}{donor.middlename}{/if} | ||||
| 			{donor.lastname}</a | ||||
| 		> | ||||
| 	</div> | ||||
| {/if} | ||||
|   | ||||
| @@ -155,7 +155,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
| @@ -309,7 +309,7 @@ | ||||
|                       id="comments" | ||||
|                       name="comments" | ||||
|                       type="checkbox" | ||||
|                       class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
|                     /> | ||||
|                   </div> | ||||
|                   <div class="ml-3 text-sm"> | ||||
|   | ||||
| @@ -45,7 +45,7 @@ | ||||
| 							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
| 						> | ||||
| 							<svg | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -314,7 +314,7 @@ | ||||
| 					id="comments" | ||||
| 					name="comments" | ||||
| 					type="checkbox" | ||||
| 					class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 					class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 				/> | ||||
| 			</div> | ||||
| 			<div class="ml-3"> | ||||
|   | ||||
| @@ -56,7 +56,7 @@ | ||||
| 						> | ||||
| 							<svg | ||||
| 								fill="currentColor" | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
| 								width="24" | ||||
|   | ||||
| @@ -389,6 +389,12 @@ | ||||
| 				:paused={!scannerActive} | ||||
| 				on:detect={(e) => { | ||||
| 					if (scannerActive) { | ||||
| 						if (`${e.detail.decodedText}`.length === 13) { | ||||
| 							e.detail.decodedText = e.detail.decodedText.substring( | ||||
| 								0, | ||||
| 								e.detail.decodedText.length - 1 | ||||
| 							); | ||||
| 						} | ||||
| 						scannerActive = false; | ||||
| 						console.log({ type: "DETECT", code: e.detail.decodedText }); | ||||
| 						if (runnerinfo.id === 0) { | ||||
| @@ -433,7 +439,7 @@ | ||||
| 								state = "assigning"; | ||||
| 								RunnerCardService.runnerCardControllerGetAll() | ||||
| 									.then((cards) => { | ||||
| 										console.log(cards); | ||||
| 										// console.log(cards); | ||||
| 										const card = cards.find((c) => c.code === cardCode); | ||||
| 										if (card) { | ||||
| 											console.log("card found", card); | ||||
| @@ -450,7 +456,10 @@ | ||||
| 													scannerActive = false; | ||||
| 												}); | ||||
| 										} else { | ||||
| 											scannerActive = true; | ||||
| 											console.log("card not found"); | ||||
| 											// scannerActive = true; | ||||
| 											state = "error_card"; | ||||
| 											scannerActive = false; | ||||
| 										} | ||||
| 									}) | ||||
| 									.catch(() => { | ||||
|   | ||||
| @@ -1,103 +0,0 @@ | ||||
| <script> | ||||
|   let open = false; | ||||
| </script> | ||||
|  | ||||
| <div class="md:flex flex-col md:flex-row h-screen w-full"> | ||||
|   <div | ||||
|     class="flex flex-col w-full md:w-64 text-gray-700 bg-white dark-mode:text-gray-200 dark-mode:bg-gray-800 flex-shrink-0" | ||||
|   > | ||||
|     <div | ||||
|       class="flex-shrink-0 px-8 py-4 flex flex-row items-center justify-between" | ||||
|     > | ||||
|       <a | ||||
|         href="/#/test" | ||||
|         class="text-lg font-semibold tracking-widest text-gray-900 uppercase rounded-lg dark-mode:text-white focus:outline-none focus:shadow-outline" | ||||
|         >Sidebar</a | ||||
|       > | ||||
|       <button | ||||
|         class="rounded-lg md:hidden focus:outline-none focus:shadow-outline" | ||||
|       > | ||||
|         <svg fill="currentColor" viewBox="0 0 20 20" class="w-6 h-6"> | ||||
|           {#if open} | ||||
|             <path | ||||
|               fill-rule="evenodd" | ||||
|               d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" | ||||
|               clip-rule="evenodd" | ||||
|             /> | ||||
|           {/if} | ||||
|           {#if !open} | ||||
|             <path | ||||
|               fill-rule="evenodd" | ||||
|               d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM9 15a1 1 0 011-1h6a1 1 0 110 2h-6a1 1 0 01-1-1z" | ||||
|               clip-rule="evenodd" | ||||
|             /> | ||||
|           {/if} | ||||
|         </svg> | ||||
|       </button> | ||||
|     </div> | ||||
|     <nav | ||||
|       :class:block={open} | ||||
|       :class:hidden={!open} | ||||
|       class="flex-grow md:block px-4 pb-4 md:pb-0 md:overflow-y-auto" | ||||
|     > | ||||
|       <a | ||||
|         class="block px-4 py-2 mt-2 text-sm font-semibold text-gray-900 bg-gray-200 rounded-lg dark-mode:bg-gray-700 dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|         href="#">Blog</a | ||||
|       > | ||||
|       <a | ||||
|         class="block px-4 py-2 mt-2 text-sm font-semibold text-gray-900 bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|         href="#">Portfolio</a | ||||
|       > | ||||
|       <a | ||||
|         class="block px-4 py-2 mt-2 text-sm font-semibold text-gray-900 bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|         href="#">About</a | ||||
|       > | ||||
|       <a | ||||
|         class="block px-4 py-2 mt-2 text-sm font-semibold text-gray-900 bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|         href="#">Contact</a | ||||
|       > | ||||
|       <div class="relative"> | ||||
|         <button | ||||
|           on:click={() => { | ||||
|             open = !open; | ||||
|           }} | ||||
|           class="flex flex-row items-center w-full px-4 py-2 mt-2 text-sm font-semibold text-left bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:focus:bg-gray-600 dark-mode:hover:bg-gray-600 md:block hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|         > | ||||
|           <span>Dropdown</span> | ||||
|           <svg | ||||
|             fill="currentColor" | ||||
|             viewBox="0 0 20 20" | ||||
|             class="inline w-4 h-4 mt-1 ml-1 transition-transform duration-200 transform md:-mt-1" | ||||
|             ><path | ||||
|               fill-rule="evenodd" | ||||
|               d="M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z" | ||||
|               clip-rule="evenodd" | ||||
|             /></svg | ||||
|           > | ||||
|         </button> | ||||
|         <div | ||||
|           class:block={open} | ||||
|           class:hidden={!open} | ||||
|           class="absolute right-0 w-full mt-2 origin-top-right rounded-md shadow-lg" | ||||
|         > | ||||
|           <div | ||||
|             class="px-2 py-2 bg-white rounded-md shadow dark-mode:bg-gray-800" | ||||
|           > | ||||
|             <a | ||||
|               class="block px-4 py-2 mt-2 text-sm font-semibold bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 md:mt-0 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|               href="#">Link #1</a | ||||
|             > | ||||
|             <a | ||||
|               class="block px-4 py-2 mt-2 text-sm font-semibold bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 md:mt-0 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|               href="#">Link #2</a | ||||
|             > | ||||
|             <a | ||||
|               class="block px-4 py-2 mt-2 text-sm font-semibold bg-transparent rounded-lg dark-mode:bg-transparent dark-mode:hover:bg-gray-600 dark-mode:focus:bg-gray-600 dark-mode:focus:text-white dark-mode:hover:text-white dark-mode:text-gray-200 md:mt-0 hover:text-gray-900 focus:text-gray-900 hover:bg-gray-200 focus:bg-gray-200 focus:outline-none focus:shadow-outline" | ||||
|               href="#">Link #3</a | ||||
|             > | ||||
|           </div> | ||||
|         </div> | ||||
|       </div> | ||||
|     </nav> | ||||
|   </div> | ||||
| </div> | ||||
| @@ -92,7 +92,7 @@ | ||||
|               <svg | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 640 512" | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -113,7 +113,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
| @@ -170,7 +170,7 @@ | ||||
|                       id="comments" | ||||
|                       name="comments" | ||||
|                       type="checkbox" | ||||
|                       class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
|                     /> | ||||
|                   </div> | ||||
|                   <div class="ml-3 text-sm"> | ||||
|   | ||||
| @@ -56,7 +56,7 @@ | ||||
| 							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
| 						> | ||||
| 							<svg | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								width="24" | ||||
| 								height="24" | ||||
|   | ||||
| @@ -246,7 +246,7 @@ | ||||
| 						id="toggle_selfservice_feature" | ||||
| 						name="toggle_selfservice_feature" | ||||
| 						type="checkbox" | ||||
| 						class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 						class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 					/> | ||||
| 				</div> | ||||
| 				<div class="ml-3 text-sm"> | ||||
| @@ -303,7 +303,7 @@ | ||||
| 								id="toggle_address_checkbox" | ||||
| 								name="toggle_address_checkbox" | ||||
| 								type="checkbox" | ||||
| 								class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 								class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 							/> | ||||
| 						</div> | ||||
| 						<div class="ml-3 text-sm"> | ||||
|   | ||||
| @@ -159,7 +159,7 @@ | ||||
| 											<input | ||||
| 												bind:checked={o.is_selected} | ||||
| 												type="checkbox" | ||||
| 												class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 												class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 											/> | ||||
| 										</td> | ||||
| 										<td class="px-6 py-4 whitespace-nowrap"> | ||||
|   | ||||
| @@ -55,7 +55,7 @@ | ||||
| 							<svg | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								width="24" | ||||
| 								height="24" | ||||
|   | ||||
| @@ -150,7 +150,7 @@ | ||||
|               <svg | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -64,7 +64,7 @@ | ||||
|               <svg | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -225,7 +225,7 @@ | ||||
| 							<svg | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								width="24" | ||||
| 								height="24" | ||||
|   | ||||
| @@ -99,7 +99,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -66,7 +66,7 @@ | ||||
|               <svg | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -103,7 +103,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
| @@ -178,7 +178,7 @@ | ||||
|                       name="enabled" | ||||
|                       type="checkbox" | ||||
|                       checked={enabled} | ||||
|                       class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
|                       class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
|                     /> | ||||
|                     {$_("this-scanstation-is")} | ||||
|                     {#if enabled}{$_("enabled")}{:else}{$_("disabled")}{/if} | ||||
|   | ||||
| @@ -53,7 +53,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -86,7 +86,7 @@ | ||||
| 							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
| 						> | ||||
| 							<svg | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								xmlns="http://www.w3.org/2000/svg" | ||||
| 								viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -178,7 +178,7 @@ | ||||
| 					name="enabled" | ||||
| 					type="checkbox" | ||||
| 					checked={editable.enabled} | ||||
| 					class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 					class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 				/> | ||||
| 				{$_("this-scanstation-is")} | ||||
| 				{#if editable.enabled}{$_("enabled")}{:else}{$_("disabled")}{/if} | ||||
|   | ||||
| @@ -54,7 +54,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -89,7 +89,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -52,7 +52,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -63,7 +63,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 xmlns="http://www.w3.org/2000/svg" | ||||
|                 viewBox="0 0 24 24" | ||||
|   | ||||
| @@ -100,7 +100,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -55,7 +55,7 @@ | ||||
| 							class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
| 						> | ||||
| 							<svg | ||||
| 								class="h-6 w-6 text-blue-600" | ||||
| 								class="size-6 text-blue-600" | ||||
| 								fill="currentColor" | ||||
| 								width="24" | ||||
| 								height="24" | ||||
|   | ||||
| @@ -144,7 +144,7 @@ | ||||
| 											<input | ||||
| 												bind:checked={t.is_selected} | ||||
| 												type="checkbox" | ||||
| 												class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 												class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 											/> | ||||
| 										</td> | ||||
| 										<td class="px-6 py-4 whitespace-nowrap"> | ||||
|   | ||||
| @@ -98,7 +98,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="none" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -115,7 +115,7 @@ | ||||
|               class="flex-shrink-0 flex items-center justify-center size-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | ||||
|             > | ||||
|               <svg | ||||
|                 class="h-6 w-6 text-blue-600" | ||||
|                 class="size-6 text-blue-600" | ||||
|                 fill="currentColor" | ||||
|                 width="24" | ||||
|                 height="24" | ||||
|   | ||||
| @@ -192,7 +192,7 @@ | ||||
| 					name="enabled" | ||||
| 					type="checkbox" | ||||
| 					checked={editable_userdata.enabled} | ||||
| 					class="focus:ring-indigo-500 h-4 w-4 text-indigo-600 border-gray-300 rounded" | ||||
| 					class="focus:ring-indigo-500 size-4 text-indigo-600 border-gray-300 rounded" | ||||
| 				/> | ||||
| 				{$_("set-the-user-active-inactive")} | ||||
| 			</p> | ||||
|   | ||||
| @@ -41,6 +41,8 @@ | ||||
|     "already-paid": "Bereits bezahlt", | ||||
|     "amount": "Anzahl", | ||||
|     "amount-per-kilometer": "Betrag pro Kilometer", | ||||
|     "anonyme_spende": "Anonyme Spende", | ||||
|     "anonymer_sponsor": "👻 Anonymer Sponsor", | ||||
|     "apartment-suite-etc": "Apartment, Wohnung, etc.", | ||||
|     "api-endpoint": "API-Endpunkt", | ||||
|     "application_name": "Lauf für Kaya! - Admin", | ||||
| @@ -224,6 +226,7 @@ | ||||
|     "error_on_login": "😢Fehler beim Login", | ||||
|     "everything-concerning-your-profile": "Alles zu deinem Profil", | ||||
|     "faq": "FAQ", | ||||
|     "festbetrag": "Festbetrag", | ||||
|     "filename_sponsoringquittungsliste": "SponsoringQuittungsListe", | ||||
|     "filter-by-organization-team": "Filtern nach Organisation / Team", | ||||
|     "first-name": "Vorname", | ||||
| @@ -418,6 +421,7 @@ | ||||
|     "settings": "Einstellungen", | ||||
|     "settings-for-your-profile": "Die Einstellungen deines Accounts", | ||||
|     "something-about-the-group": "Infos zur Gruppe", | ||||
|     "spende_pro_km": "Spende pro km", | ||||
|     "sponsoring-quittungs-liste_herunterladen": "Sponsoring-Quittungs-Liste herunterladen", | ||||
|     "sponsorings": "Sponsoringerklaerungen", | ||||
|     "station-deleted": "Scannerstation gelöscht", | ||||
|   | ||||
| @@ -41,6 +41,8 @@ | ||||
|     "already-paid": "Already paid", | ||||
|     "amount": "Amount", | ||||
|     "amount-per-kilometer": "Amount per kilometer", | ||||
|     "anonyme_spende": "Anonymous Donation", | ||||
|     "anonymer_sponsor": "👻 Anonymous Donor", | ||||
|     "apartment-suite-etc": "Apartment, suite, etc.", | ||||
|     "api-endpoint": "API-Endpoint", | ||||
|     "application_name": "Lauf für Kaya! - Admin", | ||||
| @@ -224,6 +226,7 @@ | ||||
|     "error_on_login": "Error on login", | ||||
|     "everything-concerning-your-profile": "Everything concerning your profile", | ||||
|     "faq": "FAQ", | ||||
|     "festbetrag": "Fixed Donation", | ||||
|     "filename_sponsoringquittungsliste": "DonorReceiptList", | ||||
|     "filter-by-organization-team": "Filter by Organization/ Team", | ||||
|     "first-name": "First name", | ||||
| @@ -418,6 +421,7 @@ | ||||
|     "settings": "Settings", | ||||
|     "settings-for-your-profile": "Settings for your profile", | ||||
|     "something-about-the-group": "Something about the group...", | ||||
|     "spende_pro_km": "donation per km", | ||||
|     "sponsoring-quittungs-liste_herunterladen": "Download donor receipt list", | ||||
|     "sponsorings": "Sponsorings", | ||||
|     "station-deleted": "station deleted", | ||||
|   | ||||
| @@ -7,3 +7,27 @@ | ||||
| * { | ||||
| 	font-family: Athiti; | ||||
| } | ||||
| .html5-qrcode-element { | ||||
| 	@apply block; | ||||
| 	@apply w-full; | ||||
| 	@apply p-4; | ||||
| } | ||||
| #qr-scanner__dashboard_section_csr { | ||||
| 	/* padding-right: 20px; */ | ||||
| 	padding: 1rem; | ||||
| } | ||||
| #html5-qrcode-select-camera { | ||||
| 	@apply px-2 py-2 inline-flex text-lg leading-5 font-semibold rounded-md border border-current bg-neutral-100 text-neutral-800 mb-2; | ||||
| } | ||||
| #html5-qrcode-button-camera-start { | ||||
| 	@apply px-2 inline-flex text-lg leading-5 font-semibold rounded-md border border-current bg-green-100 text-green-800 mb-2 cursor-pointer; | ||||
| } | ||||
| #html5-qrcode-button-camera-stop { | ||||
| 	@apply px-2 inline-flex text-lg leading-5 font-semibold rounded-md border border-current bg-red-100 text-red-800 mb-2 cursor-pointer; | ||||
| } | ||||
| .donation_inactive_tab { | ||||
| 	@apply min-w-0 flex-1 bg-white first:border-s-0 border-s border-b-2 border-neutral-200 py-4 px-4 text-neutral-800 hover:text-neutral-700 text-sm font-medium text-center overflow-hidden hover:bg-neutral-200 cursor-pointer focus:z-10 focus:outline-hidden focus:bg-neutral-200 disabled:opacity-50 disabled:pointer-events-none; | ||||
| } | ||||
| .donation_active_tab { | ||||
| 	@apply min-w-0 flex-1 bg-blue-400 text-white first:border-s-0 border-s border-b-2 border-neutral-200 py-4 px-4 text-sm font-medium text-center overflow-hidden cursor-pointer focus:outline-hidden; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user