Compare commits
	
		
			34 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| aa720f2460 | |||
| ac4ef8fb6d | |||
| eae0afda23 | |||
| 5291f8a4d1 | |||
| e2d7de1e9e | |||
| d7c9c27ec7 | |||
| 153b1b3c2b | |||
| ec63c7c1c5 | |||
| 05c2535698 | |||
| e261d5e345 | |||
| c00497d776 | |||
| 766eeab49f | |||
| 3c9b404234 | |||
| 9c56b3883e | |||
| 3d506db975 | |||
| d7e84a79a8 | |||
| 102471eaaa | |||
| 90b0fec236 | |||
| 4883e179e7 | |||
| 13c6e96292 | |||
| f547c0cc81 | |||
| fbe38eede9 | |||
| 22551c379f | |||
| a102af5a78 | |||
| e9dffcea83 | |||
| b9563d75dd | |||
| 3a569422ad | |||
| 0ee43f80a6 | |||
| f4542adf3b | |||
| 9f0623d194 | |||
| 5bab95a942 | |||
| 831f36946d | |||
| a4fbabaf9a | |||
| 04897c7d2e | 
| @@ -1,5 +0,0 @@ | |||||||
| FROM mcr.microsoft.com/vscode/devcontainers/base:alpine-3.12 |  | ||||||
| RUN apk update |  | ||||||
| RUN apk add --upgrade nodejs-current npm |  | ||||||
| RUN npm i -g pnpm rimraf |  | ||||||
| RUN rimraf node_modules |  | ||||||
| @@ -1,20 +0,0 @@ | |||||||
| { |  | ||||||
|   "name": "Node.js", |  | ||||||
|   "build": { |  | ||||||
|     "dockerfile": "Dockerfile" |  | ||||||
|   }, |  | ||||||
|   "settings": { |  | ||||||
|     "terminal.integrated.shell.linux": "/bin/sh" |  | ||||||
|   }, |  | ||||||
|   "extensions": [ |  | ||||||
|     "dbaeumer.vscode-eslint", |  | ||||||
|     "2gua.rainbow-brackets", |  | ||||||
|     "christian-kohler.npm-intellisense", |  | ||||||
|     "remimarsal.prettier-now", |  | ||||||
|     "svelte.svelte-vscode", |  | ||||||
|     "lokalise.i18n-ally", |  | ||||||
|     "fivethree.vscode-svelte-snippets", |  | ||||||
|     "voorjaar.windicss-intellisense" |  | ||||||
|   ], |  | ||||||
|   "postCreateCommand": "yarn && yarn dev --open" |  | ||||||
| } |  | ||||||
| @@ -1,34 +0,0 @@ | |||||||
| name: Build Latest and dev images |  | ||||||
| on: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - dev |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   build-container: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - name: Checkout |  | ||||||
|         uses: actions/checkout@v4 |  | ||||||
|       - name: Set up Node.js |  | ||||||
|         uses: actions/setup-node@v4 |  | ||||||
|         with: |  | ||||||
|           node-version: 19 |  | ||||||
|       - run: npm i -g pnpm@8 && pnpm i |  | ||||||
|       - run: pnpm licenses:export |  | ||||||
|       - name: Login to registry |  | ||||||
|         uses: docker/login-action@v3 |  | ||||||
|         with: |  | ||||||
|           registry: registry.odit.services |  | ||||||
|           username: ${{ vars.REGISTRY_USERNAME }} |  | ||||||
|           password: ${{ secrets.REGISTRY_PASSWORD }} |  | ||||||
|       - name: Set up Docker Buildx |  | ||||||
|         uses: docker/setup-buildx-action@v3 |  | ||||||
|       - name: Build and push |  | ||||||
|         uses: docker/build-push-action@v6 |  | ||||||
|         with: |  | ||||||
|           push: true |  | ||||||
|           tags: | |  | ||||||
|             ${{ vars.REGISTRY }}/lfk/frontend:dev |  | ||||||
|             ${{ vars.REGISTRY }}/lfk/frontend:latest |  | ||||||
|           platforms: linux/amd64,linux/arm64 |  | ||||||
| @@ -14,7 +14,7 @@ jobs: | |||||||
|         uses: actions/setup-node@v4 |         uses: actions/setup-node@v4 | ||||||
|         with: |         with: | ||||||
|           node-version: 19 |           node-version: 19 | ||||||
|       - run: npm i -g pnpm@8 && pnpm i |       - run: npm i -g pnpm@10.7 && pnpm i | ||||||
|       - run: pnpm licenses:export |       - run: pnpm licenses:export | ||||||
|       - name: Login to registry |       - name: Login to registry | ||||||
|         uses: docker/login-action@v3 |         uses: docker/login-action@v3 | ||||||
|   | |||||||
							
								
								
									
										94
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										94
									
								
								CHANGELOG.md
									
									
									
									
									
								
							| @@ -2,14 +2,108 @@ | |||||||
|  |  | ||||||
| All notable changes to this project will be documented in this file. Dates are displayed in UTC. | All notable changes to this project will be documented in this file. Dates are displayed in UTC. | ||||||
|  |  | ||||||
|  | #### [1.10.0](https://git.odit.services/lfk/frontend/compare/1.9.11...1.10.0) | ||||||
|  |  | ||||||
|  | - feat: working CardAssignment [`ac4ef8f`](https://git.odit.services/lfk/frontend/commit/ac4ef8fb6ded5c5d5678a651420e356b3ef45399) | ||||||
|  |  | ||||||
|  | #### [1.9.11](https://git.odit.services/lfk/frontend/compare/1.9.10...1.9.11) | ||||||
|  |  | ||||||
|  | > 8 April 2025 | ||||||
|  |  | ||||||
|  | - feat(dash): add runnersViaKiosk [`5291f8a`](https://git.odit.services/lfk/frontend/commit/5291f8a4d1721cd0c745191ebc85f221c34a23c8) | ||||||
|  | - chore(release): 1.9.11 [`eae0afd`](https://git.odit.services/lfk/frontend/commit/eae0afda23a54020e25821c0188d8cbec3139593) | ||||||
|  |  | ||||||
|  | #### [1.9.10](https://git.odit.services/lfk/frontend/compare/1.9.9...1.9.10) | ||||||
|  |  | ||||||
|  | > 8 April 2025 | ||||||
|  |  | ||||||
|  | - feat: add experimental ui for mobile card assignment [`d7c9c27`](https://git.odit.services/lfk/frontend/commit/d7c9c27ec7a1fea1cbaf26914843d044bbae32fe) | ||||||
|  | - chore(release): 1.9.10 [`e2d7de1`](https://git.odit.services/lfk/frontend/commit/e2d7de1e9e1fd134f54876fa80f19f94fbea3672) | ||||||
|  |  | ||||||
|  | #### [1.9.9](https://git.odit.services/lfk/frontend/compare/1.9.8...1.9.9) | ||||||
|  |  | ||||||
|  | > 4 April 2025 | ||||||
|  |  | ||||||
|  | - chore(release): 1.9.9 [`153b1b3`](https://git.odit.services/lfk/frontend/commit/153b1b3c2badee4826be614c3dbaafc10e1fbfea) | ||||||
|  | - fix(CopyScanStationTokenModal): code sizes [`ec63c7c`](https://git.odit.services/lfk/frontend/commit/ec63c7c1c51ccaf25bdd1eacffda66c820003a4c) | ||||||
|  |  | ||||||
|  | #### [1.9.8](https://git.odit.services/lfk/frontend/compare/1.9.7...1.9.8) | ||||||
|  |  | ||||||
|  | > 2 April 2025 | ||||||
|  |  | ||||||
|  | - feat(GenerateSponsoringContracts): show download progress [`e261d5e`](https://git.odit.services/lfk/frontend/commit/e261d5e345f3175672bf86646ed838dd23400e50) | ||||||
|  | - chore(release): 1.9.8 [`05c2535`](https://git.odit.services/lfk/frontend/commit/05c253569877a45f3c4759262255ca70aa9ee4a3) | ||||||
|  |  | ||||||
|  | #### [1.9.7](https://git.odit.services/lfk/frontend/compare/1.9.6...1.9.7) | ||||||
|  |  | ||||||
|  | > 2 April 2025 | ||||||
|  |  | ||||||
|  | - fix: ImportRunnerModal scrolling & team select [`766eeab`](https://git.odit.services/lfk/frontend/commit/766eeab49fb3ca5715c19dbf9bc53cb71124d3df) | ||||||
|  | - chore(release): 1.9.7 [`c00497d`](https://git.odit.services/lfk/frontend/commit/c00497d7760a935965cc83213f72f35999a3c168) | ||||||
|  |  | ||||||
|  | #### [1.9.6](https://git.odit.services/lfk/frontend/compare/1.9.5...1.9.6) | ||||||
|  |  | ||||||
|  | > 29 March 2025 | ||||||
|  |  | ||||||
|  | - chore(release): 1.9.6 [`3c9b404`](https://git.odit.services/lfk/frontend/commit/3c9b404234c7d7d2f0c48256be2130a0ed8ae047) | ||||||
|  | - pnpm allow builds [`9c56b38`](https://git.odit.services/lfk/frontend/commit/9c56b3883eeab9e1a5e1c4921bfb6528c230e0d4) | ||||||
|  |  | ||||||
|  | #### [1.9.5](https://git.odit.services/lfk/frontend/compare/1.9.4...1.9.5) | ||||||
|  |  | ||||||
|  | > 29 March 2025 | ||||||
|  |  | ||||||
|  | - feat: modal improvements [`d7e84a7`](https://git.odit.services/lfk/frontend/commit/d7e84a79a892294d532cc93aa3391c14a7a5ce99) | ||||||
|  | - chore(release): 1.9.5 [`3d506db`](https://git.odit.services/lfk/frontend/commit/3d506db97502399e8b381b4cf38af2f07a584aec) | ||||||
|  |  | ||||||
|  | #### [1.9.4](https://git.odit.services/lfk/frontend/compare/1.9.3...1.9.4) | ||||||
|  |  | ||||||
|  | > 29 March 2025 | ||||||
|  |  | ||||||
|  | - feat: improve modals [`90b0fec`](https://git.odit.services/lfk/frontend/commit/90b0fec2366b608d163decdcd8798e879cf8218d) | ||||||
|  | - chore(release): 1.9.4 [`102471e`](https://git.odit.services/lfk/frontend/commit/102471eaaae390d3ef815afde9ac4081be7d5dbc) | ||||||
|  |  | ||||||
|  | #### [1.9.3](https://git.odit.services/lfk/frontend/compare/1.9.2...1.9.3) | ||||||
|  |  | ||||||
|  | > 29 March 2025 | ||||||
|  |  | ||||||
|  | - feat: modal improvements [`fbe38ee`](https://git.odit.services/lfk/frontend/commit/fbe38eede95813e163a390b693790d78ce75c215) | ||||||
|  | - feat: modal improvements [`22551c3`](https://git.odit.services/lfk/frontend/commit/22551c379f704b0d9c28c499f7d3f5a37f1533ca) | ||||||
|  | - ci: only tagged runs for now [`e9dffce`](https://git.odit.services/lfk/frontend/commit/e9dffcea835cbcd6b5eb4ed1cc3feb62a9e831db) | ||||||
|  | - chore(release): 1.9.3 [`4883e17`](https://git.odit.services/lfk/frontend/commit/4883e179e7090cf90783dcdecd5df8a422880188) | ||||||
|  | - feat: modal improvements [`13c6e96`](https://git.odit.services/lfk/frontend/commit/13c6e96292613d9619f779f2557201cf0b938753) | ||||||
|  | - feat(OrgDetail): improve selfservice link copy [`f547c0c`](https://git.odit.services/lfk/frontend/commit/f547c0cc817d7db0c70df4059dad753e9b16c1c9) | ||||||
|  | - chore(deps): pnpm@10.7 [`b9563d7`](https://git.odit.services/lfk/frontend/commit/b9563d75dd15519d9ec5d425d628d232e7609913) | ||||||
|  | - fix: sidebar [`a102af5`](https://git.odit.services/lfk/frontend/commit/a102af5a78c83cd54b4981bff2f6c8d54cf8c74c) | ||||||
|  |  | ||||||
|  | #### [1.9.2](https://git.odit.services/lfk/frontend/compare/1.9.1...1.9.2) | ||||||
|  |  | ||||||
|  | > 28 March 2025 | ||||||
|  |  | ||||||
|  | - chore: update lfk client [`f4542ad`](https://git.odit.services/lfk/frontend/commit/f4542adf3b7c757d907c979b989450b64553d750) | ||||||
|  | - feat(dashboard): show runners via selfservice count [`0ee43f8`](https://git.odit.services/lfk/frontend/commit/0ee43f80a65bb5b83d51d6c098bd203bc09e2f1f) | ||||||
|  | - chore(release): 1.9.2 [`3a56942`](https://git.odit.services/lfk/frontend/commit/3a569422ad7d68d0009fa73229dd73ee00be87a9) | ||||||
|  | - refactor: change release message [`9f0623d`](https://git.odit.services/lfk/frontend/commit/9f0623d194a7784d4ede3cb6a6cd10d0aea4a180) | ||||||
|  |  | ||||||
|  | #### [1.9.1](https://git.odit.services/lfk/frontend/compare/1.9.0...1.9.1) | ||||||
|  |  | ||||||
|  | > 28 March 2025 | ||||||
|  |  | ||||||
|  | - refactor: project cleanup [`04897c7`](https://git.odit.services/lfk/frontend/commit/04897c7d2e89cb7e834815907409698ad6758637) | ||||||
|  | - 🚀RELEASE v1.9.1 [`5bab95a`](https://git.odit.services/lfk/frontend/commit/5bab95a9423d9da8c17165732b988ca868f950a5) | ||||||
|  | - feat(RunnerDetail): show created_via [`a4fbaba`](https://git.odit.services/lfk/frontend/commit/a4fbabaf9a0a9a26b6c6782056f11b8a646b8f16) | ||||||
|  | - feat(ConfirmTeamDeletionModal): success toast [`831f369`](https://git.odit.services/lfk/frontend/commit/831f36946d5db777ca77855161f653f861cbd56e) | ||||||
|  |  | ||||||
| #### [1.9.0](https://git.odit.services/lfk/frontend/compare/1.8.2...1.9.0) | #### [1.9.0](https://git.odit.services/lfk/frontend/compare/1.8.2...1.9.0) | ||||||
|  |  | ||||||
|  | > 28 March 2025 | ||||||
|  |  | ||||||
| - feat: improved ConfirmOrgDeletionModal [`fecf3b5`](https://git.odit.services/lfk/frontend/commit/fecf3b59a320afafee52c95b361edec644c5cbff) | - feat: improved ConfirmOrgDeletionModal [`fecf3b5`](https://git.odit.services/lfk/frontend/commit/fecf3b59a320afafee52c95b361edec644c5cbff) | ||||||
| - feat: modal improvements [`f5a46aa`](https://git.odit.services/lfk/frontend/commit/f5a46aa203ca2adf2e4e6fe4863629ca80f1becb) | - feat: modal improvements [`f5a46aa`](https://git.odit.services/lfk/frontend/commit/f5a46aa203ca2adf2e4e6fe4863629ca80f1becb) | ||||||
| - feat: improve ConfirmTeamDeletionModal [`a2cd54f`](https://git.odit.services/lfk/frontend/commit/a2cd54fba4a987f7f7dbab22cc958f9aea2817ff) | - feat: improve ConfirmTeamDeletionModal [`a2cd54f`](https://git.odit.services/lfk/frontend/commit/a2cd54fba4a987f7f7dbab22cc958f9aea2817ff) | ||||||
| - feat: improve modals [`443371e`](https://git.odit.services/lfk/frontend/commit/443371e2fdc42506e6e87379bd65facbd8f22d7d) | - feat: improve modals [`443371e`](https://git.odit.services/lfk/frontend/commit/443371e2fdc42506e6e87379bd65facbd8f22d7d) | ||||||
| - feat: improve toasts [`481f6b6`](https://git.odit.services/lfk/frontend/commit/481f6b686e77ffa36ee08b62f653d626dd9124c9) | - feat: improve toasts [`481f6b6`](https://git.odit.services/lfk/frontend/commit/481f6b686e77ffa36ee08b62f653d626dd9124c9) | ||||||
| - feat: improve modals [`e7a69eb`](https://git.odit.services/lfk/frontend/commit/e7a69ebdca668a5d78b52d092aa1bca6259aa19b) | - feat: improve modals [`e7a69eb`](https://git.odit.services/lfk/frontend/commit/e7a69ebdca668a5d78b52d092aa1bca6259aa19b) | ||||||
|  | - 🚀RELEASE v1.9.0 [`b7e6fda`](https://git.odit.services/lfk/frontend/commit/b7e6fdaeacf17a7cc77109460b5e2c6d3775ef7b) | ||||||
| - feat: improve translations [`d7ab924`](https://git.odit.services/lfk/frontend/commit/d7ab9247cd2eab4f7269b23de5fada76a99ac8bc) | - feat: improve translations [`d7ab924`](https://git.odit.services/lfk/frontend/commit/d7ab9247cd2eab4f7269b23de5fada76a99ac8bc) | ||||||
| - feat: improved translations [`18a4623`](https://git.odit.services/lfk/frontend/commit/18a4623e71dfd942f2268203ce713030acfb2d9d) | - feat: improved translations [`18a4623`](https://git.odit.services/lfk/frontend/commit/18a4623e71dfd942f2268203ce713030acfb2d9d) | ||||||
| - feat: improve translations [`9048f3d`](https://git.odit.services/lfk/frontend/commit/9048f3df774df233705a41b08012193447eab803) | - feat: improve translations [`9048f3d`](https://git.odit.services/lfk/frontend/commit/9048f3df774df233705a41b08012193447eab803) | ||||||
|   | |||||||
| @@ -3,7 +3,7 @@ ARG NPM_REGISTRY_URL=https://registry.npmjs.org | |||||||
| WORKDIR /app | WORKDIR /app | ||||||
|  |  | ||||||
| COPY package.json pnpm-lock.yaml vite.config.js tailwind.config.cjs postcss.config.cjs index.html ./ | 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@9 | RUN npm config set registry $NPM_REGISTRY_URL && npm i -g pnpm@10.7 | ||||||
| RUN mkdir /pnpm && pnpm config set store-dir /pnpm && pnpm i | RUN mkdir /pnpm && pnpm config set store-dir /pnpm && pnpm i | ||||||
|  |  | ||||||
| COPY src ./src | COPY src ./src | ||||||
|   | |||||||
| @@ -13,7 +13,7 @@ | |||||||
|  |  | ||||||
|   <body> |   <body> | ||||||
|     <span style="display: none; visibility: hidden" id="buildinfo" |     <span style="display: none; visibility: hidden" id="buildinfo" | ||||||
|       >RELEASE_INFO-1.9.0-RELEASE_INFO</span |       >RELEASE_INFO-1.10.0-RELEASE_INFO</span | ||||||
|     > |     > | ||||||
|     <noscript>You need to enable JavaScript to run this app.</noscript> |     <noscript>You need to enable JavaScript to run this app.</noscript> | ||||||
|     <script src="/env.js"></script> |     <script src="/env.js"></script> | ||||||
|   | |||||||
							
								
								
									
										11
									
								
								package.json
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								package.json
									
									
									
									
									
								
							| @@ -1,6 +1,6 @@ | |||||||
| { | { | ||||||
|   "name": "@odit/lfk-frontend", |   "name": "@odit/lfk-frontend", | ||||||
|   "version": "1.9.0", |   "version": "1.10.0", | ||||||
|   "type": "module", |   "type": "module", | ||||||
|   "scripts": { |   "scripts": { | ||||||
|     "i18n-order": "node order.js", |     "i18n-order": "node order.js", | ||||||
| @@ -28,11 +28,11 @@ | |||||||
|     "git": { |     "git": { | ||||||
|       "commit": true, |       "commit": true, | ||||||
|       "requireCleanWorkingDir": false, |       "requireCleanWorkingDir": false, | ||||||
|       "commitMessage": "🚀RELEASE v${version}", |       "commitMessage": "chore(release): ${version}", | ||||||
|       "push": true, |       "push": true, | ||||||
|       "tag": true, |       "tag": true, | ||||||
|       "tagName": null, |       "tagName": "${version}", | ||||||
|       "tagAnnotation": "v${version}" |       "tagAnnotation": "${version}" | ||||||
|     }, |     }, | ||||||
|     "npm": { |     "npm": { | ||||||
|       "publish": false |       "publish": false | ||||||
| @@ -43,12 +43,13 @@ | |||||||
|   }, |   }, | ||||||
|   "dependencies": { |   "dependencies": { | ||||||
|     "@fontsource/athiti": "^5.2.5", |     "@fontsource/athiti": "^5.2.5", | ||||||
|     "@odit/lfk-client-js": "1.1.3", |     "@odit/lfk-client-js": "1.2.2", | ||||||
|     "@paralleldrive/cuid2": "2.2.2", |     "@paralleldrive/cuid2": "2.2.2", | ||||||
|     "@tanstack/svelte-table": "8.9.1", |     "@tanstack/svelte-table": "8.9.1", | ||||||
|     "bwip-js": "3.4.0", |     "bwip-js": "3.4.0", | ||||||
|     "check-password-strength": "2.0.10", |     "check-password-strength": "2.0.10", | ||||||
|     "csvtojson": "2.0.10", |     "csvtojson": "2.0.10", | ||||||
|  |     "html5-qrcode": "^2.3.8", | ||||||
|     "localforage": "1.10.0", |     "localforage": "1.10.0", | ||||||
|     "marked": "4.3.0", |     "marked": "4.3.0", | ||||||
|     "svelte": "3.58.0", |     "svelte": "3.58.0", | ||||||
|   | |||||||
							
								
								
									
										3428
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										3428
									
								
								pnpm-lock.yaml
									
									
									
										generated
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3
									
								
								pnpm-workspace.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pnpm-workspace.yaml
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | onlyBuiltDependencies: | ||||||
|  |   - es5-ext | ||||||
|  |   - esbuild | ||||||
							
								
								
									
										
											BIN
										
									
								
								public/beep.mp3
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								public/beep.mp3
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| @@ -1,4 +0,0 @@ | |||||||
| <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 98.1 118"> |  | ||||||
|   <path fill="#ff3e00" d="M91.8 15.6C80.9-.1 59.2-4.7 43.6 5.2L16.1 22.8A31.25 31.25 0 001.9 43.9c-1.3 7.3-.2 14.8 3.3 21.3-2.4 3.6-4 7.6-4.7 11.8-1.6 8.9.5 18.1 5.7 25.4 11 15.7 32.6 20.3 48.2 10.4l27.5-17.5c7.5-4.7 12.7-12.4 14.2-21.1 1.3-7.3.2-14.8-3.3-21.3 2.4-3.6 4-7.6 4.7-11.8 1.7-9-.4-18.2-5.7-25.5"/> |  | ||||||
|   <path fill="#fff" d="M40.9 103.9a21.8 21.8 0 01-23.4-8.7c-3.2-4.4-4.4-9.9-3.5-15.3l.6-2.6.5-1.6 1.4 1c3.3 2.4 6.9 4.2 10.8 5.4l1 .3-.1 1c-.1 1.4.3 2.9 1.1 4.1a6.62 6.62 0 008.8 2L65.5 72c1.4-.9 2.3-2.2 2.6-3.8.3-1.6-.1-3.3-1-4.6a6.56 6.56 0 00-8.8-1.9l-10.5 6.7a18.6 18.6 0 01-5.6 2.4 21.8 21.8 0 01-23.4-8.7 20.2 20.2 0 01-3.4-15.3c.9-5.2 4.1-9.9 8.6-12.7l27.5-17.5c1.7-1.1 3.6-1.9 5.6-2.5a21.8 21.8 0 0123.4 8.7c3.2 4.4 4.4 9.9 3.5 15.3-.2.9-.4 1.7-.7 2.6l-.5 1.6-1.4-1c-3.3-2.4-6.9-4.2-10.8-5.4l-1-.3.1-1c.1-1.4-.3-2.9-1.1-4.1a6.56 6.56 0 00-8.8-1.9L32.4 46.1c-1.4.9-2.3 2.2-2.6 3.8s.1 3.3 1 4.6a6.56 6.56 0 008.8 1.9l10.5-6.7c1.7-1.1 3.6-1.9 5.6-2.5a21.8 21.8 0 0123.4 8.7c3.2 4.4 4.4 9.9 3.5 15.3-.9 5.2-4.1 9.9-8.6 12.7l-27.5 17.5c-1.7 1.1-3.6 1.9-5.6 2.5"/> |  | ||||||
| </svg> |  | ||||||
| Before Width: | Height: | Size: 1.1 KiB | 
| @@ -41,6 +41,7 @@ | |||||||
|   import Settings from "./components/settings/Settings.svelte"; |   import Settings from "./components/settings/Settings.svelte"; | ||||||
|   import Transition from "./components/base/Transition.svelte"; |   import Transition from "./components/base/Transition.svelte"; | ||||||
|   import Orgs from "./components/orgs/Orgs.svelte"; |   import Orgs from "./components/orgs/Orgs.svelte"; | ||||||
|  |   import CardAssignment from "./components/general/CardAssignment.svelte"; | ||||||
|   import Runners from "./components/runners/Runners.svelte"; |   import Runners from "./components/runners/Runners.svelte"; | ||||||
|   import Footer from "./components/general/Footer.svelte"; |   import Footer from "./components/general/Footer.svelte"; | ||||||
|   import TracksOverview from "./components/tracks/TracksOverview.svelte"; |   import TracksOverview from "./components/tracks/TracksOverview.svelte"; | ||||||
| @@ -141,6 +142,11 @@ | |||||||
|             <RunnerDetail {params} /> |             <RunnerDetail {params} /> | ||||||
|           </Route> |           </Route> | ||||||
|         </Route> |         </Route> | ||||||
|  |         <Route path="/cardassignment/*"> | ||||||
|  |           <Route path="/"> | ||||||
|  |             <CardAssignment /> | ||||||
|  |           </Route> | ||||||
|  |         </Route> | ||||||
|         <Route path="/teams/*"> |         <Route path="/teams/*"> | ||||||
|           <Route path="/"> |           <Route path="/"> | ||||||
|             <Teams /> |             <Teams /> | ||||||
|   | |||||||
| @@ -91,14 +91,14 @@ | |||||||
|  |  | ||||||
| {#if bulk_modal_open} | {#if bulk_modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       bulk_modal_open = false; |       bulk_modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -116,10 +116,10 @@ | |||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w- rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -135,18 +135,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:mt-0"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-bulk-blanco-cards")} |                 {$_("create-bulk-blanco-cards")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "just-enter-how-many-you-want-and-the-system-will-create-them" |                     "just-enter-how-many-you-want-and-the-system-will-create-them" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="amount" |                     for="amount" | ||||||
| @@ -183,13 +183,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit_with_print} |             on:click={submit_with_print} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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-and-generate-pdf")} |             {$_("create-and-generate-pdf")} | ||||||
|           </button> |           </button> | ||||||
| @@ -198,7 +198,7 @@ | |||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit_without_print} |             on:click={submit_without_print} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-400 text-base font-medium text-white hover:bg-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-gray-400 text-base font-medium text-white hover:bg-gray-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500" | ||||||
|           > |           > | ||||||
|             {$_("create-without-pdf")} |             {$_("create-without-pdf")} | ||||||
|           </button> |           </button> | ||||||
| @@ -207,7 +207,7 @@ | |||||||
|               bulk_modal_open = false; |               bulk_modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mr-auto mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             class="mr-auto w-full inline-flex 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" | ||||||
|           > |           > | ||||||
|             {$_("cancel")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -84,14 +84,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -104,15 +104,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -128,11 +128,11 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:mt-0"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-card")} |                 {$_("create-a-new-card")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_("you-can-provide-a-runner-but-you-dont-have-to")} |                   {$_("you-can-provide-a-runner-but-you-dont-have-to")} | ||||||
|                   {$_( |                   {$_( | ||||||
| @@ -140,7 +140,7 @@ | |||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="donor" |                     for="donor" | ||||||
| @@ -165,13 +165,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -180,7 +180,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -78,14 +78,14 @@ | |||||||
|  |  | ||||||
| {#if edit_modal_open} | {#if edit_modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       edit_modal_open = false; |       edit_modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -98,15 +98,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -122,16 +122,16 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("edit-a-card")} |                 {$_("edit-a-card")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_("you-can-provide-a-runner-but-you-dont-have-to")} |                   {$_("you-can-provide-a-runner-but-you-dont-have-to")} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="runner" |                     for="runner" | ||||||
| @@ -174,13 +174,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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" | ||||||
|           > |           > | ||||||
|             {$_("save-changes")} |             {$_("save-changes")} | ||||||
|           </button> |           </button> | ||||||
| @@ -189,7 +189,7 @@ | |||||||
|               edit_modal_open = false; |               edit_modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -34,14 +34,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -54,15 +54,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -78,7 +78,7 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("please-confirm-the-deletion-of-card")} |                 {$_("please-confirm-the-deletion-of-card")} | ||||||
|               </h3> |               </h3> | ||||||
| @@ -99,11 +99,11 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("delete")} |             {$_("delete")} | ||||||
|           </button> |           </button> | ||||||
| @@ -112,7 +112,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -43,7 +43,7 @@ | |||||||
|   $: address_zipcode_value = ""; |   $: address_zipcode_value = ""; | ||||||
|   $: address_city_value = ""; |   $: address_city_value = ""; | ||||||
|   $: processed_last_submit = true; |   $: processed_last_submit = true; | ||||||
|   $: address_checked = true; |   $: address_checked = false; | ||||||
|   $: isPhoneValidOrEmpty = |   $: isPhoneValidOrEmpty = | ||||||
|     (phone_input_value.includes("+") && |     (phone_input_value.includes("+") && | ||||||
|       isMobilePhone( |       isMobilePhone( | ||||||
| @@ -136,14 +136,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -156,15 +156,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -179,18 +179,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-contact")} |                 {$_("create-a-new-contact")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-contact" |                     "please-provide-the-required-information-to-add-a-new-contact" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -454,13 +454,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -469,7 +469,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -16,7 +16,7 @@ | |||||||
| <section class="min-h-screen bg-gray-50"> | <section class="min-h-screen bg-gray-50"> | ||||||
| 	<div | 	<div | ||||||
| 		class:collapsed_navigation={!navOpen} | 		class:collapsed_navigation={!navOpen} | ||||||
| 		style="z-index:2;" | 		style="z-index:11;" | ||||||
| 		class="select-none fixed top-0 left-0 h-full pb-10 overflow-x-hidden overflow-y-auto transition origin-left transform border-r w-60 bg-gray-50" | 		class="select-none fixed top-0 left-0 h-full pb-10 overflow-x-hidden overflow-y-auto transition origin-left transform border-r w-60 bg-gray-50" | ||||||
| 	> | 	> | ||||||
| 		<a href="/" class="flex items-center px-4 py-5"> | 		<a href="/" class="flex items-center px-4 py-5"> | ||||||
| @@ -41,7 +41,27 @@ | |||||||
| 				</svg> | 				</svg> | ||||||
| 				<span>{$_("dashboard-title")}</span> | 				<span>{$_("dashboard-title")}</span> | ||||||
| 			</a> | 			</a> | ||||||
| 			{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET")} | 			{#if store.state.jwtinfo.userdetails.permissions.includes("RUNNER:GET") && store.state.jwtinfo.userdetails.permissions.includes("CARD:GET")} | ||||||
|  | 				<a | ||||||
|  | 					class:activenav={$router.path.includes("/cardassignment/")} | ||||||
|  | 					class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold" | ||||||
|  | 					href="/cardassignment/" | ||||||
|  | 				> | ||||||
|  | 					<svg | ||||||
|  | 						xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 						viewBox="0 0 24 24" | ||||||
|  | 						fill="currentColor" | ||||||
|  | 						class="flex-shrink-0 w-5 h-5 mr-2 transition group-hover:text-gray-600" | ||||||
|  | 					> | ||||||
|  | 						<path | ||||||
|  | 							fill-rule="evenodd" | ||||||
|  | 							d="M14.615 1.595a.75.75 0 0 1 .359.852L12.982 9.75h7.268a.75.75 0 0 1 .548 1.262l-10.5 11.25a.75.75 0 0 1-1.272-.71l1.992-7.302H3.75a.75.75 0 0 1-.548-1.262l10.5-11.25a.75.75 0 0 1 .913-.143Z" | ||||||
|  | 							clip-rule="evenodd" | ||||||
|  | 						/> | ||||||
|  | 					</svg> | ||||||
|  |  | ||||||
|  | 					<span>Card Assignment</span> | ||||||
|  | 				</a> | ||||||
| 				<a | 				<a | ||||||
| 					class:activenav={$router.path.includes("/runners/")} | 					class:activenav={$router.path.includes("/runners/")} | ||||||
| 					class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold" | 					class="flex items-center px-4 py-3 transition cursor-pointer group hover:bg-gray-200 hover:text-gray-900 w-full font-semibold" | ||||||
|   | |||||||
| @@ -1,228 +1,263 @@ | |||||||
| <script> | <script> | ||||||
|   import { _ } from "svelte-i18n"; | 	import { _ } from "svelte-i18n"; | ||||||
|   import { StatsService } from "@odit/lfk-client-js"; | 	import { StatsService } from "@odit/lfk-client-js"; | ||||||
|   import store from "../../store"; | 	import store from "../../store"; | ||||||
|   import StatCard from "./StatCard.svelte"; | 	import StatCard from "./StatCard.svelte"; | ||||||
|   const stats_promise = StatsService.statsControllerGet(); | 	const stats_promise = StatsService.statsControllerGet(); | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| <div class="p-2 md:p-5 overflow-x-hidden"> | <div class="p-2 md:p-5 overflow-x-hidden"> | ||||||
|   <h4 class="mb-1 text-3xl font-extrabold leading-tight"> | 	<h4 class="mb-1 text-3xl font-extrabold leading-tight"> | ||||||
|     {$_("dashboard-greeting")} <span class="text-blue-500" | 		{$_("dashboard-greeting")} | ||||||
|       >{store.state.jwtinfo.userdetails.firstname} | 		<span class="text-blue-500" | ||||||
|       {store.state.jwtinfo.userdetails.lastname}</span | 			>{store.state.jwtinfo.userdetails.firstname} | ||||||
|     > | 			{store.state.jwtinfo.userdetails.lastname}</span | ||||||
|   </h4> | 		> | ||||||
|   {#await stats_promise} | 	</h4> | ||||||
|     <div | 	{#await stats_promise} | ||||||
|       class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2" | 		<div | ||||||
|       role="alert" | 			class="bg-teal-lightest border-t-4 border-teal rounded-b text-teal-darkest px-4 py-3 shadow-md my-2" | ||||||
|     > | 			role="alert" | ||||||
|       <p class="font-bold">{$_("stats-are-being-loaded")}</p> | 		> | ||||||
|       <p class="text-sm">{$_("this-might-take-a-moment")}</p> | 			<p class="font-bold">{$_("stats-are-being-loaded")}</p> | ||||||
|     </div> | 			<p class="text-sm">{$_("this-might-take-a-moment")}</p> | ||||||
|   {:then stats} | 		</div> | ||||||
|     <div | 	{:then stats} | ||||||
|       class="grid gap-1 grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 2xl:grid-cols-6 sm:gap-4" | 		<div | ||||||
|     > | 			class="grid gap-1 grid-cols-2 lg:grid-cols-3 xl:grid-cols-5 2xl:grid-cols-6 sm:gap-4" | ||||||
|       <StatCard | 		> | ||||||
|         title={$_("runners")} | 			<StatCard | ||||||
|         value={stats.total_runners} | 				title={$_("runners")} | ||||||
|         href="/runners/" | 				value={stats.total_runners} | ||||||
|       > | 				href="/runners/" | ||||||
|         <svg | 			> | ||||||
|           height="24" | 				<svg | ||||||
|           width="24" | 					height="24" | ||||||
|           fill="currentColor" | 					width="24" | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					fill="currentColor" | ||||||
|           viewBox="0 0 24 24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           ><path d="M0 0h24v24H0z" fill="none" /> | 					viewBox="0 0 24 24" | ||||||
|           <path | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|             d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z" | 					<path | ||||||
|           /></svg | 						d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("total-scans")} | 			<StatCard | ||||||
|         value={stats.total_scans} | 				title={$_("total-scans")} | ||||||
|         href="/scans/" | 				value={stats.total_scans} | ||||||
|       > | 				href="/scans/" | ||||||
|         <svg | 			> | ||||||
|           fill="currentColor" | 				<svg | ||||||
|           width="24" | 					fill="currentColor" | ||||||
|           height="24" | 					width="24" | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					height="24" | ||||||
|           viewBox="0 0 24 24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           ><path fill="none" d="M0 0h24v24H0z" /> | 					viewBox="0 0 24 24" | ||||||
|           <path | 					><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|             fill="currentColor" | 					<path | ||||||
|             d="M2 4h2v16H2V4zm4 0h1v16H6V4zm2 0h2v16H8V4zm3 0h2v16h-2V4zm3 0h2v16h-2V4zm3 0h1v16h-1V4zm2 0h3v16h-3V4z" | 						fill="currentColor" | ||||||
|           /></svg | 						d="M2 4h2v16H2V4zm4 0h1v16H6V4zm2 0h2v16H8V4zm3 0h2v16h-2V4zm3 0h2v16h-2V4zm3 0h1v16h-1V4zm2 0h3v16h-3V4z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("total-donors")} | 			<StatCard | ||||||
|         value={stats.total_donors} | 				title={$_("total-donors")} | ||||||
|         href="/donors/" | 				value={stats.total_donors} | ||||||
|       > | 				href="/donors/" | ||||||
|         <svg | 			> | ||||||
|           fill="currentColor" | 				<svg | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					fill="currentColor" | ||||||
|           viewBox="0 0 24 24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           width="24" | 					viewBox="0 0 24 24" | ||||||
|           height="24" | 					width="24" | ||||||
|           ><path fill="none" d="M0 0h24v24H0z" /> | 					height="24" | ||||||
|           <path | 					><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|             d="M9.33 11.5h2.17A4.5 4.5 0 0 1 16 16H8.999L9 17h8v-1a5.578 5.578 0 0 0-.886-3H19a5 5 0 0 1 4.516 2.851C21.151 18.972 17.322 21 13 21c-2.761 0-5.1-.59-7-1.625L6 10.071A6.967 6.967 0 0 1 9.33 11.5zM5 19a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v9zM18 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm-7-3a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" | 					<path | ||||||
|           /></svg | 						d="M9.33 11.5h2.17A4.5 4.5 0 0 1 16 16H8.999L9 17h8v-1a5.578 5.578 0 0 0-.886-3H19a5 5 0 0 1 4.516 2.851C21.151 18.972 17.322 21 13 21c-2.761 0-5.1-.59-7-1.625L6 10.071A6.967 6.967 0 0 1 9.33 11.5zM5 19a1 1 0 0 1-1 1H2a1 1 0 0 1-1-1v-9a1 1 0 0 1 1-1h2a1 1 0 0 1 1 1v9zM18 5a3 3 0 1 1 0 6 3 3 0 0 1 0-6zm-7-3a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("total-donation-count")} | 			<StatCard | ||||||
|         value={stats.total_donations} | 				title={$_("total-donation-count")} | ||||||
|         href="/donations/" | 				value={stats.total_donations} | ||||||
|       > | 				href="/donations/" | ||||||
|         <svg | 			> | ||||||
|           fill="currentColor" | 				<svg | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					fill="currentColor" | ||||||
|           viewBox="0 0 24 24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           width="24" | 					viewBox="0 0 24 24" | ||||||
|           height="24" | 					width="24" | ||||||
|           ><path fill="none" d="M0 0h24v24H0z" /> | 					height="24" | ||||||
|           <path | 					><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|             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" | 					<path | ||||||
|           /></svg | 						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 | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("average-donation")} | 			<StatCard | ||||||
|         value={`${parseFloat(stats.average_donation / 100).toLocaleString( | 				title={$_("average-donation")} | ||||||
|           undefined, | 				value={`${parseFloat(stats.average_donation / 100).toLocaleString( | ||||||
|           { | 					undefined, | ||||||
|             minimumFractionDigits: 2, | 					{ | ||||||
|             maximumFractionDigits: 2, | 						minimumFractionDigits: 2, | ||||||
|           } | 						maximumFractionDigits: 2, | ||||||
|         )}`} | 					} | ||||||
|         href="/donations/" | 				)}`} | ||||||
|       > | 				href="/donations/" | ||||||
|         <svg | 			> | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 				<svg | ||||||
|           height="24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           fill="currentColor" | 					height="24" | ||||||
|           width="24" | 					fill="currentColor" | ||||||
|           ><path d="M0 0h24v24H0z" fill="none" /> | 					width="24" | ||||||
|           <path | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|             d="M15 18.5A6.48 6.48 0 019.24 15H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24A6.491 6.491 0 0115 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3A8.955 8.955 0 0015 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06a8.262 8.262 0 000 2H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z" | 					<path | ||||||
|           /></svg | 						d="M15 18.5A6.48 6.48 0 019.24 15H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24A6.491 6.491 0 0115 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3A8.955 8.955 0 0015 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06a8.262 8.262 0 000 2H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("total-donations")} | 			<StatCard | ||||||
|         value={`${parseFloat(stats.total_donation / 100).toLocaleString( | 				title={$_("total-donations")} | ||||||
|           undefined, | 				value={`${parseFloat(stats.total_donation / 100).toLocaleString( | ||||||
|           { | 					undefined, | ||||||
|             minimumFractionDigits: 2, | 					{ | ||||||
|             maximumFractionDigits: 2, | 						minimumFractionDigits: 2, | ||||||
|           } | 						maximumFractionDigits: 2, | ||||||
|         )}`} | 					} | ||||||
|         href="/donations/" | 				)}`} | ||||||
|       > | 				href="/donations/" | ||||||
|         <svg | 			> | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 				<svg | ||||||
|           height="24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           fill="currentColor" | 					height="24" | ||||||
|           width="24" | 					fill="currentColor" | ||||||
|           ><path d="M0 0h24v24H0z" fill="none" /> | 					width="24" | ||||||
|           <path | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|             d="M15 18.5A6.48 6.48 0 019.24 15H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24A6.491 6.491 0 0115 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3A8.955 8.955 0 0015 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06a8.262 8.262 0 000 2H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z" | 					<path | ||||||
|           /></svg | 						d="M15 18.5A6.48 6.48 0 019.24 15H15v-2H8.58c-.05-.33-.08-.66-.08-1s.03-.67.08-1H15V9H9.24A6.491 6.491 0 0115 5.5c1.61 0 3.09.59 4.23 1.57L21 5.3A8.955 8.955 0 0015 3c-3.92 0-7.24 2.51-8.48 6H3v2h3.06a8.262 8.262 0 000 2H3v2h3.52c1.24 3.49 4.56 6 8.48 6 2.31 0 4.41-.87 6-2.3l-1.78-1.77c-1.13.98-2.6 1.57-4.22 1.57z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("total-distance")} | 			<StatCard | ||||||
|         value={`${stats.total_distance / 1000}km`} | 				title={$_("total-distance")} | ||||||
|         href="/scans/" | 				value={`${stats.total_distance / 1000}km`} | ||||||
|       > | 				href="/scans/" | ||||||
|         <svg | 			> | ||||||
|           fill="currentColor" | 				<svg | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					fill="currentColor" | ||||||
|           height="24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           width="24" | 					height="24" | ||||||
|           ><path d="M0 0h24v24H0z" fill="none" /> | 					width="24" | ||||||
|           <path | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|             d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z" | 					<path | ||||||
|           /></svg | 						d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("average-distance")} | 			<StatCard | ||||||
|         value={`${parseFloat(stats.average_distance / 1000).toLocaleString( | 				title={$_("average-distance")} | ||||||
|           undefined, | 				value={`${parseFloat(stats.average_distance / 1000).toLocaleString( | ||||||
|           { | 					undefined, | ||||||
|             minimumFractionDigits: 2, | 					{ | ||||||
|             maximumFractionDigits: 2, | 						minimumFractionDigits: 2, | ||||||
|           } | 						maximumFractionDigits: 2, | ||||||
|         )}km`} | 					} | ||||||
|         href="/scans/" | 				)}km`} | ||||||
|       > | 				href="/scans/" | ||||||
|         <svg | 			> | ||||||
|           fill="currentColor" | 				<svg | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					fill="currentColor" | ||||||
|           height="24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           width="24" | 					height="24" | ||||||
|           ><path d="M0 0h24v24H0z" fill="none" /> | 					width="24" | ||||||
|           <path | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|             d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z" | 					<path | ||||||
|           /></svg | 						d="M21 6H3c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h18c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H3V8h2v4h2V8h2v4h2V8h2v4h2V8h2v4h2V8h2v8z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("count_teams")} | 			<StatCard | ||||||
|         value={stats.total_teams} | 				title={$_("count_teams")} | ||||||
|         href="/teams/" | 				value={stats.total_teams} | ||||||
|       > | 				href="/teams/" | ||||||
|         <svg | 			> | ||||||
|           stroke="currentColor" | 				<svg | ||||||
|           fill="none" | 					stroke="currentColor" | ||||||
|           stroke-width="2" | 					fill="none" | ||||||
|           viewBox="0 0 24 24" | 					stroke-width="2" | ||||||
|           stroke-linecap="round" | 					viewBox="0 0 24 24" | ||||||
|           stroke-linejoin="round" | 					stroke-linecap="round" | ||||||
|           size="24" | 					stroke-linejoin="round" | ||||||
|           class="stroke-current text-grey-500" | 					size="24" | ||||||
|           height="24" | 					class="stroke-current text-grey-500" | ||||||
|           width="24" | 					height="24" | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					width="24" | ||||||
|           ><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" /> | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           <circle cx="9" cy="7" r="4" /> | 					><path d="M17 21v-2a4 4 0 0 0-4-4H5a4 4 0 0 0-4 4v2" /> | ||||||
|           <path d="M23 21v-2a4 4 0 0 0-3-3.87" /> | 					<circle cx="9" cy="7" r="4" /> | ||||||
|           <path d="M16 3.13a4 4 0 0 1 0 7.75" /></svg | 					<path d="M23 21v-2a4 4 0 0 0-3-3.87" /> | ||||||
|         > | 					<path d="M16 3.13a4 4 0 0 1 0 7.75" /></svg | ||||||
|       </StatCard> | 				> | ||||||
|       <StatCard | 			</StatCard> | ||||||
|         title={$_("count_organizations")} | 			<StatCard | ||||||
|         value={stats.total_orgs} | 				title={$_("count_organizations")} | ||||||
|         href="/orgs/" | 				value={stats.total_orgs} | ||||||
|       > | 				href="/orgs/" | ||||||
|         <svg | 			> | ||||||
|           height="24" | 				<svg | ||||||
|           fill="currentColor" | 					height="24" | ||||||
|           width="24" | 					fill="currentColor" | ||||||
|           xmlns="http://www.w3.org/2000/svg" | 					width="24" | ||||||
|           viewBox="0 0 24 24" | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|           ><path fill="none" d="M0 0h24v24H0z" /> | 					viewBox="0 0 24 24" | ||||||
|           <path | 					><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|             d="M17 11V3H7v4H3v14h8v-4h2v4h8V11h-4zM7 19H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm4 4H9v-2h2v2zm0-4H9V9h2v2zm0-4H9V5h2v2zm4 8h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm4 12h-2v-2h2v2zm0-4h-2v-2h2v2z" | 					<path | ||||||
|           /></svg | 						d="M17 11V3H7v4H3v14h8v-4h2v4h8V11h-4zM7 19H5v-2h2v2zm0-4H5v-2h2v2zm0-4H5V9h2v2zm4 4H9v-2h2v2zm0-4H9V9h2v2zm0-4H9V5h2v2zm4 8h-2v-2h2v2zm0-4h-2V9h2v2zm0-4h-2V5h2v2zm4 12h-2v-2h2v2zm0-4h-2v-2h2v2z" | ||||||
|         > | 					/></svg | ||||||
|       </StatCard> | 				> | ||||||
|     </div> | 			</StatCard> | ||||||
|   {:catch error} | 			<StatCard | ||||||
|     <div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500"> | 				title={$_("runner_via_selfservice")} | ||||||
|       <span class="inline-block align-middle mr-8"> | 				value={stats.runnersViaSelfservice} | ||||||
|         <b class="capitalize">{$_("general_promise_error")}</b> | 				href="/runners/" | ||||||
|         {error} | 			> | ||||||
|       </span> | 				<svg | ||||||
|     </div> | 					height="24" | ||||||
|   {/await} | 					width="24" | ||||||
|  | 					fill="currentColor" | ||||||
|  | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 					viewBox="0 0 24 24" | ||||||
|  | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|  | 					<path | ||||||
|  | 						d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z" | ||||||
|  | 					/></svg | ||||||
|  | 				> | ||||||
|  | 			</StatCard> | ||||||
|  | 			<StatCard | ||||||
|  | 				title={$_('runners_via_kiosk')} | ||||||
|  | 				value={stats.runnersViaKiosk} | ||||||
|  | 				href="/runners/" | ||||||
|  | 			> | ||||||
|  | 				<svg | ||||||
|  | 					height="24" | ||||||
|  | 					width="24" | ||||||
|  | 					fill="currentColor" | ||||||
|  | 					xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 					viewBox="0 0 24 24" | ||||||
|  | 					><path d="M0 0h24v24H0z" fill="none" /> | ||||||
|  | 					<path | ||||||
|  | 						d="M13.49 5.48c1.1 0 2-.9 2-2s-.9-2-2-2-2 .9-2 2 .9 2 2 2zm-3.6 13.9l1-4.4 2.1 2v6h2v-7.5l-2.1-2 .6-3c1.3 1.5 3.3 2.5 5.5 2.5v-2c-1.9 0-3.5-1-4.3-2.4l-1-1.6c-.4-.6-1-1-1.7-1-.3 0-.5.1-.8.1l-5.2 2.2v4.7h2v-3.4l1.8-.7-1.6 8.1-4.9-1-.4 2 7 1.4z" | ||||||
|  | 					/></svg | ||||||
|  | 				> | ||||||
|  | 			</StatCard> | ||||||
|  | 		</div> | ||||||
|  | 	{:catch error} | ||||||
|  | 		<div class="text-white px-6 py-4 border-0 rounded relative mb-4 bg-red-500"> | ||||||
|  | 			<span class="inline-block align-middle mr-8"> | ||||||
|  | 				<b class="capitalize">{$_("general_promise_error")}</b> | ||||||
|  | 				{error} | ||||||
|  | 			</span> | ||||||
|  | 		</div> | ||||||
|  | 	{/await} | ||||||
| </div> | </div> | ||||||
|   | |||||||
| @@ -115,14 +115,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -135,15 +135,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -158,14 +158,14 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {#if is_fixed} |                 {#if is_fixed} | ||||||
|                   {$_("create-a-new-fixed-donation")} |                   {$_("create-a-new-fixed-donation")} | ||||||
|                 {:else}{$_("create-a-new-distance-donation")}{/if} |                 {:else}{$_("create-a-new-distance-donation")}{/if} | ||||||
|               </h3> |               </h3> | ||||||
|               <label class="content-center align-middle object-center"> |               <label class="content-center align-middle object-center"> | ||||||
|                 <span class="ml-2 text-base" class:text-gray-300={is_fixed} |                 <span class="text-base" class:text-gray-300={is_fixed} | ||||||
|                   >{$_("distance-donation")}</span |                   >{$_("distance-donation")}</span | ||||||
|                 > |                 > | ||||||
|                 <input |                 <input | ||||||
| @@ -177,14 +177,14 @@ | |||||||
|                   >{$_("fixed-donation")}</span |                   >{$_("fixed-donation")}</span | ||||||
|                 > |                 > | ||||||
|               </label> |               </label> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-nessecary-information-to-create-a-new-donation" |                     "please-provide-the-nessecary-information-to-create-a-new-donation" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="donor" |                     for="donor" | ||||||
| @@ -289,13 +289,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -304,7 +304,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -76,14 +76,14 @@ | |||||||
|  |  | ||||||
| {#if payment_modal_open} | {#if payment_modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       payment_modal_open = false; |       payment_modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -96,15 +96,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -120,18 +120,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 text-left"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("enter-payment")} |                 {$_("enter-payment")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount" |                     "you-can-enter-the-donations-paid-amount-manually-or-use-the-max-button-to-use-the-donations-exact-amount" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols gap-6"> |               <div class="grid grid-cols gap-2 lg:gap-6"> | ||||||
|                 <div class="w-full"> |                 <div class="w-full"> | ||||||
|                   <label |                   <label | ||||||
|                     for="token" |                     for="token" | ||||||
| @@ -179,13 +179,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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" | ||||||
|           > |           > | ||||||
|             {$_("save-changes")} |             {$_("save-changes")} | ||||||
|           </button> |           </button> | ||||||
| @@ -194,7 +194,7 @@ | |||||||
|               payment_modal_open = false; |               payment_modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -37,14 +37,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -57,15 +57,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -80,7 +80,7 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("please-confirm-the-deletion-of-donation")} |                 {$_("please-confirm-the-deletion-of-donation")} | ||||||
|               </h3> |               </h3> | ||||||
| @@ -93,11 +93,11 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("delete")} |             {$_("delete")} | ||||||
|           </button> |           </button> | ||||||
| @@ -106,7 +106,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -124,14 +124,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -144,15 +144,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -167,18 +167,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-donor")} |                 {$_("create-a-new-donor")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-nessecary-information-to-add-a-new-donor" |                     "please-provide-the-nessecary-information-to-add-a-new-donor" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -418,13 +418,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -433,7 +433,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -16,12 +16,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
| 	<div | 	<div | ||||||
| 		class="fixed z-10 inset-0 overflow-y-auto" | 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
| 		use:clickOutside | 		use:clickOutside | ||||||
| 		on:click_outside={cancelDelete} | 		on:click_outside={cancelDelete} | ||||||
| 	> | 	> | ||||||
| 		<div | 		<div | ||||||
| 			class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" | 			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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
| 				<div | 				<div | ||||||
| @@ -34,15 +34,15 @@ | |||||||
| 				aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
| 			> | 			> | ||||||
| 			<div | 			<div | ||||||
| 				class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" | 				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]" | ||||||
| 				role="dialog" | 				role="dialog" | ||||||
| 				aria-modal="true" | 				aria-modal="true" | ||||||
| 				aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
| 			> | 			> | ||||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
| 					<div class="sm:flex sm:items-start"> | 					<div class=""> | ||||||
| 						<div | 						<div | ||||||
| 							class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 							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 | 							<svg | ||||||
| 								class="h-6 w-6 text-blue-600" | 								class="h-6 w-6 text-blue-600" | ||||||
| @@ -54,13 +54,13 @@ | |||||||
| 								/></svg | 								/></svg | ||||||
| 							> | 							> | ||||||
| 						</div> | 						</div> | ||||||
| 						<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | 						<div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
| 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
| 								{$_( | 								{$_( | ||||||
| 									"do-you-want-to-delete-this-donor-with-all-related-donations" | 									"do-you-want-to-delete-this-donor-with-all-related-donations" | ||||||
| 								)} | 								)} | ||||||
| 							</h3> | 							</h3> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500"> | 								<p class="text-sm text-gray-500"> | ||||||
| 									{$_("all-associated-donations-will-get-deleted-as-well")} | 									{$_("all-associated-donations-will-get-deleted-as-well")} | ||||||
| 								</p> | 								</p> | ||||||
| @@ -68,18 +68,18 @@ | |||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> | 				<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 | 					<button | ||||||
| 						on:click={deleteDonor} | 						on:click={deleteDonor} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" | 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
| 					> | 					> | ||||||
| 						{$_("confirm-delete-donor-with-all-donations")} | 						{$_("confirm-delete-donor-with-all-donations")} | ||||||
| 					</button> | 					</button> | ||||||
| 					<button | 					<button | ||||||
| 						on:click={cancelDelete} | 						on:click={cancelDelete} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" | 						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-keep-donor")} | 						{$_("cancel-keep-donor")} | ||||||
| 					</button> | 					</button> | ||||||
|   | |||||||
| @@ -24,7 +24,7 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
| 	<div | 	<div | ||||||
| 		class="fixed z-10 inset-0 overflow-y-auto" | 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
| 		use:clickOutside | 		use:clickOutside | ||||||
| 		on:click_outside={() => { | 		on:click_outside={() => { | ||||||
| 			modal_open = false; | 			modal_open = false; | ||||||
| @@ -44,15 +44,15 @@ | |||||||
| 				aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
| 			> | 			> | ||||||
| 			<div | 			<div | ||||||
| 				class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" | 				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]" | ||||||
| 				role="dialog" | 				role="dialog" | ||||||
| 				aria-modal="true" | 				aria-modal="true" | ||||||
| 				aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
| 			> | 			> | ||||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
| 					<div class="sm:flex sm:items-start"> | 					<div class=""> | ||||||
| 						<div | 						<div | ||||||
| 							class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 							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 | 							<svg | ||||||
| 								fill="currentColor" | 								fill="currentColor" | ||||||
| @@ -71,16 +71,16 @@ | |||||||
| 							<h3 class="text-lg leading-6 font-medium"> | 							<h3 class="text-lg leading-6 font-medium"> | ||||||
| 								{$_("read-license")} | 								{$_("read-license")} | ||||||
| 							</h3> | 							</h3> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500">{currentlicense}</p> | 								<p class="text-sm text-gray-500">{currentlicense}</p> | ||||||
| 							</div> | 							</div> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500">{licensetext}</p> | 								<p class="text-sm text-gray-500">{licensetext}</p> | ||||||
| 							</div> | 							</div> | ||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> | 				<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 | 					<button | ||||||
| 						on:click={() => { | 						on:click={() => { | ||||||
| 							modal_open = false; | 							modal_open = false; | ||||||
|   | |||||||
							
								
								
									
										123
									
								
								src/components/general/CardAssignment.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										123
									
								
								src/components/general/CardAssignment.svelte
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,123 @@ | |||||||
|  | <script> | ||||||
|  | 	import { RunnerCardService, RunnerService } from "@odit/lfk-client-js"; | ||||||
|  | 	import QrCodeScanner from "./QrCodeScanner.svelte"; | ||||||
|  | 	let state = "scan_runner"; | ||||||
|  | 	let runnerinfo = { id: 0, firstname: "", lastname: "" }; | ||||||
|  | 	let cardCode = ""; | ||||||
|  | 	$: scannerActive = state.includes("scan"); | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <div class="p-4"> | ||||||
|  | 	<h3 class="text-3xl font-bold">Card Assignment for Mobile</h3> | ||||||
|  | 	<!-- <p>state</p> | ||||||
|  | 	<p>{state}</p> | ||||||
|  | 	<p>scannerActive</p> | ||||||
|  | 	<p>{scannerActive}</p> --> | ||||||
|  | 	{#if state.includes("scan_")} | ||||||
|  | 		<!--  --> | ||||||
|  | 		{#if state === "scan_runner"} | ||||||
|  | 			<h3 class="text-xl font-bold">Scan Runner (Selfservice QR)</h3> | ||||||
|  | 		{/if} | ||||||
|  | 		{#if state === "scan_card"} | ||||||
|  | 			<h3 class="text-xl font-bold">Runner Scanned</h3> | ||||||
|  | 			<p>{runnerinfo.firstname} {runnerinfo.lastname} [#{runnerinfo.id}]</p> | ||||||
|  | 			<h3 class="text-xl font-bold">Scan Card (Code 128 Barcode)</h3> | ||||||
|  | 		{/if} | ||||||
|  | 		<QrCodeScanner | ||||||
|  | 			paused={!scannerActive} | ||||||
|  | 			on:detect={(e) => { | ||||||
|  | 				console.log({ type: "DETECT", code: e.detail.decodedText }); | ||||||
|  | 				if (state === "scan_runner") { | ||||||
|  | 					if ( | ||||||
|  | 						e.detail.decodedText.includes( | ||||||
|  | 							"https://portal.lauf-fuer-kaya.de/profile/" | ||||||
|  | 						) | ||||||
|  | 					) { | ||||||
|  | 						const runnerID = JSON.parse( | ||||||
|  | 							atob( | ||||||
|  | 								e.detail.decodedText | ||||||
|  | 									.replace("https://portal.lauf-fuer-kaya.de/profile/", "") | ||||||
|  | 									.split(".")[1] | ||||||
|  | 							) | ||||||
|  | 						).id; | ||||||
|  | 						new Audio("/beep.mp3").play(); | ||||||
|  | 						RunnerService.runnerControllerGetOne(runnerID).then((runner) => { | ||||||
|  | 							console.log(runner); | ||||||
|  | 							runnerinfo = runner; | ||||||
|  | 						}); | ||||||
|  | 						state = "scan_card"; | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 				if (state === "scan_card") { | ||||||
|  | 					if ( | ||||||
|  | 						!e.detail.decodedText.includes( | ||||||
|  | 							"https://portal.lauf-fuer-kaya.de/profile/" | ||||||
|  | 						) | ||||||
|  | 					) { | ||||||
|  | 						cardCode = e.detail.decodedText; | ||||||
|  | 						new Audio("/beep.mp3").play(); | ||||||
|  | 						state = "assigning"; | ||||||
|  | 						RunnerCardService.runnerCardControllerGetAll().then((cards) => { | ||||||
|  | 							console.log(cards); | ||||||
|  | 							const card = cards.find((c) => c.code === cardCode); | ||||||
|  | 							if (card) { | ||||||
|  | 								console.log("card found", card); | ||||||
|  | 								RunnerCardService.runnerCardControllerPut(card.id, { | ||||||
|  | 									enabled: true, | ||||||
|  | 									id: card.id, | ||||||
|  | 									runner: runnerinfo.id, | ||||||
|  | 								}).then(() => { | ||||||
|  | 									state = "done"; | ||||||
|  | 								}); | ||||||
|  | 							} else { | ||||||
|  | 								state = "error_card_404"; | ||||||
|  | 							} | ||||||
|  | 						}); | ||||||
|  | 					} | ||||||
|  | 				} | ||||||
|  | 			}} | ||||||
|  | 			width={320} | ||||||
|  | 			height={320} | ||||||
|  | 			class="w-full max-w-sm bg-neutral-300 rounded-lg overflow-hidden" | ||||||
|  | 		/> | ||||||
|  | 		{#if state === "scan_card"} | ||||||
|  | 			<button | ||||||
|  | 				on:click={() => { | ||||||
|  | 					state = "scan_runner"; | ||||||
|  | 					runnerinfo = { id: 0, firstname: "", lastname: "" }; | ||||||
|  | 					cardCode = ""; | ||||||
|  | 				}} | ||||||
|  | 				type="button" | ||||||
|  | 				class="py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-red-100 text-red-800 hover:bg-red-200 focus:outline-hidden focus:bg-red-200 disabled:opacity-50 disabled:pointer-events-none dark:text-red-500 dark:bg-red-800/30 dark:hover:bg-red-800/20 dark:focus:bg-red-800/20 w-full mt-2" | ||||||
|  | 			> | ||||||
|  | 				Cancel | ||||||
|  | 			</button> | ||||||
|  | 		{/if} | ||||||
|  | 		<!--  --> | ||||||
|  | 	{:else} | ||||||
|  | 		<!--  --> | ||||||
|  | 		{#if state === "assigning"} | ||||||
|  | 			<p>Assigning Card {cardCode} ⌛</p> | ||||||
|  | 			<p>Please wait a moment while we assign the card...</p> | ||||||
|  | 		{/if} | ||||||
|  | 		{#if state === "done"} | ||||||
|  | 			<p> | ||||||
|  | 				Assigned Card {cardCode} to {runnerinfo.firstname} | ||||||
|  | 				{runnerinfo.lastname} [#{runnerinfo.id}] ✅ | ||||||
|  | 			</p> | ||||||
|  | 			<button | ||||||
|  | 				on:click={() => { | ||||||
|  | 					// state = "scan_runner"; | ||||||
|  | 					// runnerinfo = { id: 0, firstname: "", lastname: "" }; | ||||||
|  | 					// cardCode = ""; | ||||||
|  | 					location.reload(); | ||||||
|  | 				}} | ||||||
|  | 				type="button" | ||||||
|  | 				class="py-3 px-4 inline-flex items-center gap-x-2 text-sm font-medium rounded-lg border border-transparent bg-blue-100 text-blue-800 hover:bg-blue-200 focus:outline-hidden focus:bg-blue-200 disabled:opacity-50 disabled:pointer-events-none dark:text-blue-500 dark:bg-blue-800/30 dark:hover:bg-blue-800/20 dark:focus:bg-blue-800/20 w-full mt-2" | ||||||
|  | 			> | ||||||
|  | 				Done | ||||||
|  | 			</button> | ||||||
|  | 		{/if} | ||||||
|  | 		<!--  --> | ||||||
|  | 	{/if} | ||||||
|  | </div> | ||||||
							
								
								
									
										84
									
								
								src/components/general/QrCodeScanner.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								src/components/general/QrCodeScanner.svelte
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,84 @@ | |||||||
|  | <script> | ||||||
|  | 	import { onMount, createEventDispatcher } from "svelte"; | ||||||
|  | 	import { | ||||||
|  | 		Html5QrcodeScanner, | ||||||
|  | 		Html5QrcodeScanType, | ||||||
|  | 		Html5QrcodeSupportedFormats, | ||||||
|  | 		Html5QrcodeScannerState, | ||||||
|  | 	} from "html5-qrcode"; | ||||||
|  |  | ||||||
|  | 	export let width; | ||||||
|  | 	export let height; | ||||||
|  | 	export let paused = false; | ||||||
|  |  | ||||||
|  | 	const dispatch = createEventDispatcher(); | ||||||
|  |  | ||||||
|  | 	function onScanSuccess(decodedText, decodedResult) { | ||||||
|  | 		if (!paused) { | ||||||
|  | 			dispatch("detect", { decodedText }); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	// usually better to ignore and keep scanning | ||||||
|  | 	function onScanFailure(message) { | ||||||
|  | 		if (!paused) { | ||||||
|  | 			dispatch("error", { message }); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	let scanner; | ||||||
|  | 	onMount(() => { | ||||||
|  | 		scanner = new Html5QrcodeScanner( | ||||||
|  | 			"qr-scanner", | ||||||
|  | 			{ | ||||||
|  | 				fps: 10, | ||||||
|  | 				rememberLastUsedCamera: true, | ||||||
|  | 				qrbox: { width, height }, | ||||||
|  | 				aspectRatio: 1, | ||||||
|  | 				supportedScanTypes: [Html5QrcodeScanType.SCAN_TYPE_CAMERA], | ||||||
|  | 				formatsToSupport: [ | ||||||
|  | 					Html5QrcodeSupportedFormats.CODE_39, | ||||||
|  | 					Html5QrcodeSupportedFormats.EAN_8, | ||||||
|  | 					Html5QrcodeSupportedFormats.EAN_13, | ||||||
|  | 					Html5QrcodeSupportedFormats.QR_CODE, | ||||||
|  | 					Html5QrcodeSupportedFormats.CODE_128, | ||||||
|  | 				], | ||||||
|  | 			}, | ||||||
|  | 			false // non-verbose | ||||||
|  | 		); | ||||||
|  | 		scanner.render(onScanSuccess, onScanFailure); | ||||||
|  | 	}); | ||||||
|  |  | ||||||
|  | 	// pause/resume scanner to avoid unintended scans | ||||||
|  | 	$: togglePause(paused); | ||||||
|  | 	function togglePause(paused) { | ||||||
|  | 		if (paused && scanner?.getState() === Html5QrcodeScannerState.SCANNING) { | ||||||
|  | 			scanner?.pause(); | ||||||
|  | 		} else if (scanner?.getState() === Html5QrcodeScannerState.PAUSED) { | ||||||
|  | 			scanner?.resume(); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | </script> | ||||||
|  |  | ||||||
|  | <div id="qr-scanner" class={$$props.class} /> | ||||||
|  |  | ||||||
|  | <style> | ||||||
|  | 	/* Hide unwanted icons */ | ||||||
|  | 	#qr-scanner :global(img[alt="Info icon"]), | ||||||
|  | 	#qr-scanner :global(img[alt="Camera based scan"]) { | ||||||
|  | 		display: none; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	/* Change camera permission button text */ | ||||||
|  | 	#qr-scanner :global(#html5-qrcode-button-camera-permission) { | ||||||
|  | 		visibility: hidden; | ||||||
|  | 	} | ||||||
|  | 	#qr-scanner :global(#html5-qrcode-button-camera-permission::after) { | ||||||
|  | 		position: absolute; | ||||||
|  | 		inset: auto 0 0; | ||||||
|  | 		display: block; | ||||||
|  | 		content: "Allow camera access"; | ||||||
|  | 		visibility: visible; | ||||||
|  | 		padding: 10px 0; | ||||||
|  | 	} | ||||||
|  | </style> | ||||||
| @@ -59,14 +59,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -79,15 +79,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 xmlns="http://www.w3.org/2000/svg" |                 xmlns="http://www.w3.org/2000/svg" | ||||||
| @@ -102,18 +102,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-user-group")} |                 {$_("create-a-new-user-group")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-for-creating-a-new-user-group" |                     "please-provide-the-required-information-for-creating-a-new-user-group" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -159,13 +159,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -174,7 +174,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ | |||||||
|   $: address_input2_value = ""; |   $: address_input2_value = ""; | ||||||
|   $: address_zipcode_value = ""; |   $: address_zipcode_value = ""; | ||||||
|   $: address_city_value = ""; |   $: address_city_value = ""; | ||||||
|   $: address_checked = true; |   $: address_checked = false; | ||||||
|  |  | ||||||
|   let address_input1; |   let address_input1; | ||||||
|   let address_input2; |   let address_input2; | ||||||
| @@ -82,14 +82,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -102,15 +102,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -124,18 +124,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-organization")} |                 {$_("create-a-new-organization")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-organization" |                     "please-provide-the-required-information-to-add-a-new-organization" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -222,7 +222,7 @@ | |||||||
|                       class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" |                       class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | ||||||
|                     /> |                     /> | ||||||
|                   </div> |                   </div> | ||||||
|                   <div class="col-span-6"> |                   <div class="col-span-2"> | ||||||
|                     <label |                     <label | ||||||
|                       for="zipcode" |                       for="zipcode" | ||||||
|                       class="block text-sm font-medium text-gray-700" |                       class="block text-sm font-medium text-gray-700" | ||||||
| @@ -248,7 +248,7 @@ | |||||||
|                       </span> |                       </span> | ||||||
|                     {/if} |                     {/if} | ||||||
|                   </div> |                   </div> | ||||||
|                   <div class="col-span-6"> |                   <div class="col-span-4"> | ||||||
|                     <label |                     <label | ||||||
|                       for="city" |                       for="city" | ||||||
|                       class="block text-sm font-medium text-gray-700" |                       class="block text-sm font-medium text-gray-700" | ||||||
| @@ -279,13 +279,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -294,7 +294,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -27,12 +27,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
| 	<div | 	<div | ||||||
| 		class="fixed z-10 inset-0 overflow-y-auto" | 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
| 		use:clickOutside | 		use:clickOutside | ||||||
| 		on:click_outside={cancelDelete} | 		on:click_outside={cancelDelete} | ||||||
| 	> | 	> | ||||||
| 		<div | 		<div | ||||||
| 			class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" | 			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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
| 				<div | 				<div | ||||||
| @@ -45,15 +45,15 @@ | |||||||
| 				aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
| 			> | 			> | ||||||
| 			<div | 			<div | ||||||
| 				class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" | 				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]" | ||||||
| 				role="dialog" | 				role="dialog" | ||||||
| 				aria-modal="true" | 				aria-modal="true" | ||||||
| 				aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
| 			> | 			> | ||||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
| 					<div class="sm:flex sm:items-start"> | 					<div class=""> | ||||||
| 						<div | 						<div | ||||||
| 							class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 							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 | 							<svg | ||||||
| 								class="h-6 w-6 text-blue-600" | 								class="h-6 w-6 text-blue-600" | ||||||
| @@ -68,13 +68,13 @@ | |||||||
| 								/></svg | 								/></svg | ||||||
| 							> | 							> | ||||||
| 						</div> | 						</div> | ||||||
| 						<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | 						<div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
| 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
| 								{$_("do-you-want-to-delete-the-organization-delete_org-name", { | 								{$_("do-you-want-to-delete-the-organization-delete_org-name", { | ||||||
| 									values: { orgname: delete_org.name }, | 									values: { orgname: delete_org.name }, | ||||||
| 								})} | 								})} | ||||||
| 							</h3> | 							</h3> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500"> | 								<p class="text-sm text-gray-500"> | ||||||
| 									{$_("all-associated-teams-and-runners-will-be-deleted-too")} | 									{$_("all-associated-teams-and-runners-will-be-deleted-too")} | ||||||
| 								</p> | 								</p> | ||||||
| @@ -82,18 +82,18 @@ | |||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> | 				<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 | 					<button | ||||||
| 						on:click={deleteOrg} | 						on:click={deleteOrg} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" | 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
| 					> | 					> | ||||||
| 						{$_("confirm-delete-organization-and-associated-teams-runners")} | 						{$_("confirm-delete-organization-and-associated-teams-runners")} | ||||||
| 					</button> | 					</button> | ||||||
| 					<button | 					<button | ||||||
| 						on:click={cancelDelete} | 						on:click={cancelDelete} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" | 						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-keep-organization")} | 						{$_("cancel-keep-organization")} | ||||||
| 					</button> | 					</button> | ||||||
|   | |||||||
| @@ -263,7 +263,7 @@ | |||||||
| 						<button on:click={copy} class="inline-flex w-full"> | 						<button on:click={copy} class="inline-flex w-full"> | ||||||
| 							<p | 							<p | ||||||
| 								name="token" | 								name="token" | ||||||
| 								class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 p-2" | 								class="focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 p-2 break-all font-mono text-left" | ||||||
| 							> | 							> | ||||||
| 								{#if editable.registrationKey} | 								{#if editable.registrationKey} | ||||||
| 									{registrationLink} | 									{registrationLink} | ||||||
| @@ -272,7 +272,7 @@ | |||||||
| 								{/if} | 								{/if} | ||||||
| 							</p> | 							</p> | ||||||
| 							<div | 							<div | ||||||
| 								class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 mt-1 cursor-pointer" | 								class="bg-gray-200 border-gray-300 border-t border-b border-r text-black rounded-r-md sm:text-sm p-2 cursor-pointer flex items-center justify-center" | ||||||
| 							> | 							> | ||||||
| 								<svg | 								<svg | ||||||
| 									xmlns="http://www.w3.org/2000/svg" | 									xmlns="http://www.w3.org/2000/svg" | ||||||
|   | |||||||
							
								
								
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										81
									
								
								src/components/pdf_generation/DownloadProgressModal.svelte
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,81 @@ | |||||||
|  | <script> | ||||||
|  | 	import { _ } from "svelte-i18n"; | ||||||
|  | 	import { clickOutside } from "../base/outsideclick"; | ||||||
|  | 	import { onMount } from "svelte"; | ||||||
|  | 	export let download_details = ""; | ||||||
|  | 	export let modal_open; | ||||||
|  | 	onMount(() => { | ||||||
|  | 		document.onkeydown = (e) => { | ||||||
|  | 			e = e || window.event; | ||||||
|  | 			if (e.key === "Escape") { | ||||||
|  | 				modal_open = false; | ||||||
|  | 			} | ||||||
|  | 			if (e.keyCode === 13) { | ||||||
|  | 				if (createbtnenabled === true) { | ||||||
|  | 					createbtnenabled = false; | ||||||
|  | 					submit(); | ||||||
|  | 				} | ||||||
|  | 			} | ||||||
|  | 		}; | ||||||
|  | 	}); | ||||||
|  | </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]" | ||||||
|  | 				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 | ||||||
|  | 								xmlns="http://www.w3.org/2000/svg" | ||||||
|  | 								viewBox="0 0 24 24" | ||||||
|  | 								class="h-6 w-6 text-blue-600" | ||||||
|  | 								fill="currentColor" | ||||||
|  | 								width="24" | ||||||
|  | 								height="24" | ||||||
|  | 								><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|  | 								<path | ||||||
|  | 									d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z" | ||||||
|  | 								/></svg | ||||||
|  | 							> | ||||||
|  | 						</div> | ||||||
|  | 						<div class="mt-3 sm:text-left text-base"> | ||||||
|  | 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|  | 								{$_('download_laeuft')} | ||||||
|  | 							</h3> | ||||||
|  | 							<div class="w-full"> | ||||||
|  | 								{download_details} | ||||||
|  | 							</div> | ||||||
|  | 						</div> | ||||||
|  | 					</div> | ||||||
|  | 				</div> | ||||||
|  | 			</div> | ||||||
|  | 		</div> | ||||||
|  | 	</div> | ||||||
|  | {/if} | ||||||
| @@ -7,6 +7,7 @@ | |||||||
| 	import DocumentServer from "./DocumentServer"; | 	import DocumentServer from "./DocumentServer"; | ||||||
| 	import { init } from "@paralleldrive/cuid2"; | 	import { init } from "@paralleldrive/cuid2"; | ||||||
| 	import toast from "svelte-french-toast"; | 	import toast from "svelte-french-toast"; | ||||||
|  | 	import DownloadProgressModal from "./DownloadProgressModal.svelte"; | ||||||
| 	const createId = init({ length: 10, fingerprint: "lfk-frontend" }); | 	const createId = init({ length: 10, fingerprint: "lfk-frontend" }); | ||||||
| 	const documentServer = new DocumentServer( | 	const documentServer = new DocumentServer( | ||||||
| 		config.baseurl_documentserver, | 		config.baseurl_documentserver, | ||||||
| @@ -17,8 +18,12 @@ | |||||||
| 	export let generate_runners = []; | 	export let generate_runners = []; | ||||||
| 	export let generate_orgs = []; | 	export let generate_orgs = []; | ||||||
| 	export let generate_teams = []; | 	export let generate_teams = []; | ||||||
|  | 	// | ||||||
|  | 	export let download_modal_open = false; | ||||||
|  | 	export let download_details = ""; | ||||||
|  |  | ||||||
| 	function generateSponsoringContract(locale) { | 	function generateSponsoringContract(locale) { | ||||||
|  | 		download_modal_open = true; | ||||||
| 		if (generate_orgs.length > 0) { | 		if (generate_orgs.length > 0) { | ||||||
| 			generateOrgContracts(locale); | 			generateOrgContracts(locale); | ||||||
| 		} else if (generate_teams.length > 0) { | 		} else if (generate_teams.length > 0) { | ||||||
| @@ -41,19 +46,24 @@ | |||||||
|  |  | ||||||
| 	async function generateTeamContracts(locale) { | 	async function generateTeamContracts(locale) { | ||||||
| 		toast.loading($_("generating-pdfs")); | 		toast.loading($_("generating-pdfs")); | ||||||
|  | 		let totalCount = generate_teams.length; | ||||||
| 		let count = 0; | 		let count = 0; | ||||||
| 		for (const t of generate_teams) { | 		for (const t of generate_teams) { | ||||||
| 			count++; | 			count++; | ||||||
|  | 			download_details = `${t.parentGroup.name} > ${t.name}`; | ||||||
| 			const runners = await RunnerTeamService.runnerTeamControllerGetRunners( | 			const runners = await RunnerTeamService.runnerTeamControllerGetRunners( | ||||||
| 				t.id | 				t.id | ||||||
| 			); | 			); | ||||||
| 			documentServer | 			await documentServer | ||||||
| 				.generateContracts(runners, locale) | 				.generateContracts(runners, locale) | ||||||
| 				.then((blob) => { | 				.then((blob) => { | ||||||
| 					download( | 					download( | ||||||
| 						blob, | 						blob, | ||||||
| 						`${$_("sponsorings")}_${t.name}-${locale}-${createId()}.pdf` | 						`${$_("sponsorings")}_${t.name}-${locale}-${createId()}.pdf` | ||||||
| 					); | 					); | ||||||
|  | 					if (count === totalCount) { | ||||||
|  | 						download_modal_open = false; | ||||||
|  | 					} | ||||||
| 				}) | 				}) | ||||||
| 				.catch((err) => {}); | 				.catch((err) => {}); | ||||||
| 		} | 		} | ||||||
| @@ -61,15 +71,23 @@ | |||||||
|  |  | ||||||
| 	async function generateOrgContracts(locale) { | 	async function generateOrgContracts(locale) { | ||||||
| 		toast.loading($_("generating-pdf")); | 		toast.loading($_("generating-pdf")); | ||||||
| 		let count_orgs = 0; | 		let totalCount = 0; | ||||||
| 		for (const o of generate_orgs) { | 		for (const o of generate_orgs) { | ||||||
| 			count_orgs++; | 			totalCount++; | ||||||
| 			let count = 0; | 			for (const t of o.teams) { | ||||||
|  | 				totalCount++; | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 		console.log({ totalCount }); | ||||||
|  | 		let count = 0; | ||||||
|  | 		for (const o of generate_orgs) { | ||||||
|  | 			count++; | ||||||
| 			let runners = | 			let runners = | ||||||
| 				await RunnerOrganizationService.runnerOrganizationControllerGetRunners( | 				await RunnerOrganizationService.runnerOrganizationControllerGetRunners( | ||||||
| 					o.id, | 					o.id, | ||||||
| 					true | 					true | ||||||
| 				); | 				); | ||||||
|  | 			download_details = o.name; | ||||||
| 			await documentServer | 			await documentServer | ||||||
| 				.generateContracts(runners, locale) | 				.generateContracts(runners, locale) | ||||||
| 				.then((blob) => { | 				.then((blob) => { | ||||||
| @@ -84,6 +102,7 @@ | |||||||
| 				let runners = await RunnerTeamService.runnerTeamControllerGetRunners( | 				let runners = await RunnerTeamService.runnerTeamControllerGetRunners( | ||||||
| 					t.id | 					t.id | ||||||
| 				); | 				); | ||||||
|  | 				download_details = `${o.name} > ${t.name}`; | ||||||
| 				await documentServer | 				await documentServer | ||||||
| 					.generateContracts(runners, locale) | 					.generateContracts(runners, locale) | ||||||
| 					.then((blob) => { | 					.then((blob) => { | ||||||
| @@ -93,15 +112,19 @@ | |||||||
| 								t.name | 								t.name | ||||||
| 							}-${locale}-${createId()}.pdf` | 							}-${locale}-${createId()}.pdf` | ||||||
| 						); | 						); | ||||||
|  | 						console.log({ count }); | ||||||
|  | 						if (count === totalCount) { | ||||||
|  | 							download_modal_open = false; | ||||||
|  | 						} | ||||||
| 					}) | 					}) | ||||||
| 					.catch((err) => {}); | 					.catch((err) => {}); | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	function generateRunnerContracts(locale) { | 	async function generateRunnerContracts(locale) { | ||||||
| 		toast.loading($_("generating-pdf")); | 		toast.loading($_("generating-pdf")); | ||||||
| 		documentServer | 		await documentServer | ||||||
| 			.generateContracts(generate_runners, locale) | 			.generateContracts(generate_runners, locale) | ||||||
| 			.then((blob) => { | 			.then((blob) => { | ||||||
| 				let fileName = `${$_("sponsorings")}-${locale}-${createId()}.pdf`; | 				let fileName = `${$_("sponsorings")}-${locale}-${createId()}.pdf`; | ||||||
| @@ -111,6 +134,7 @@ | |||||||
| 					}-${locale}-${createId()}.pdf`; | 					}-${locale}-${createId()}.pdf`; | ||||||
| 				} | 				} | ||||||
| 				download(blob, fileName); | 				download(blob, fileName); | ||||||
|  | 				download_modal_open = false; | ||||||
| 			}) | 			}) | ||||||
| 			.catch((err) => { | 			.catch((err) => { | ||||||
| 				console.error(err); | 				console.error(err); | ||||||
| @@ -119,6 +143,7 @@ | |||||||
| </script> | </script> | ||||||
|  |  | ||||||
| {#if sponsoring_contracts_show} | {#if sponsoring_contracts_show} | ||||||
|  | 	<DownloadProgressModal {download_details} modal_open={download_modal_open} /> | ||||||
| 	<button | 	<button | ||||||
| 		on:click={() => { | 		on:click={() => { | ||||||
| 			generateSponsoringContract("de"); | 			generateSponsoringContract("de"); | ||||||
|   | |||||||
| @@ -1,92 +0,0 @@ | |||||||
| <h3 class="text-lg">Standard Avatars</h3> |  | ||||||
| <div class="relative rounded-full w-4 h-4"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-8 h-8"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-12 h-12"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-16 h-16"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-20 h-20"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-24 h-24"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| <h3 class="text-lg">Status Avatars</h3> |  | ||||||
| <div class="relative rounded-full w-4 h-4"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-1 h-1 bg-gray-200" /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-8 h-8"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-2 h-2 bg-green-400" /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-12 h-12"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-4 h-4 bg-red-600" /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-16 h-16"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-5 h-5 bg-gray-200" /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-20 h-20"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-6 h-6 bg-green-400" /> |  | ||||||
| </div> |  | ||||||
| <div class="relative rounded-full w-24 h-24"> |  | ||||||
|   <img |  | ||||||
|     alt="" |  | ||||||
|     src="https://gustui.s3.amazonaws.com/avatar.png" |  | ||||||
|     class="absolute left-0 top-0 w-full h-full rounded-full object-cover" |  | ||||||
|   /> |  | ||||||
|   <div class="absolute rounded-full right-0 bottom-0 w-6 h-6 bg-red-600" /> |  | ||||||
| </div> |  | ||||||
| @@ -1,65 +0,0 @@ | |||||||
| <h3 class="text-lg">badges</h3> |  | ||||||
| <span |  | ||||||
|   class="text-sm font-medium bg-green-100 py-1 px-2 rounded text-green-500 align-middle" |  | ||||||
|   >Paid</span |  | ||||||
| > |  | ||||||
| <span |  | ||||||
|   class="text-sm font-medium bg-red-100 py-1 px-2 rounded text-red-500 align-middle" |  | ||||||
|   >Overdue</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-blue-600" |  | ||||||
|   >Primary</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-gray-600" |  | ||||||
|   >Secondary</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-green-600" |  | ||||||
|   >Success</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-red-600" |  | ||||||
|   >Danger</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-black bg-yellow-400" |  | ||||||
|   >Warning</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-indigo-300" |  | ||||||
|   >Info</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-black bg-gray-200" |  | ||||||
|   >Light</span |  | ||||||
| > |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-gray-900" |  | ||||||
|   >Dark</span |  | ||||||
| > |  | ||||||
| <h3 class="text-lg">closable badges</h3> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-blue-600"> |  | ||||||
|   Primary |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-gray-600"> |  | ||||||
|   Secondary |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-green-600"> |  | ||||||
|   Success |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-red-600"> |  | ||||||
|   Danger |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-black bg-yellow-400"> |  | ||||||
|   Warning |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-indigo-300"> |  | ||||||
|   Info |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-black bg-gray-200"> |  | ||||||
|   Light<span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| <span class="rounded-sm py-1 px-2 text-xs font-medium text-white bg-gray-900"> |  | ||||||
|   Dark |  | ||||||
|   <span class="ml-2 text-base cursor-pointer">×</span> |  | ||||||
| </span> |  | ||||||
| @@ -1,59 +0,0 @@ | |||||||
| <div class="flex flex-row mb-4"> |  | ||||||
|   <div class="w-full"> |  | ||||||
|     <nav class="w-full flex"> |  | ||||||
|       <ol class="list-none flex flex-row items-center justify-start"> |  | ||||||
|         <li class="mr-2 flex items-center"> |  | ||||||
|           <svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="h-3 w-3 stroke-current" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><path d="M3 9l9-7 9 7v11a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2z" /> |  | ||||||
|             <polyline points="9 22 9 12 15 12 15 22" /></svg |  | ||||||
|           > |  | ||||||
|         </li> |  | ||||||
|         <li class="flex items-center"> |  | ||||||
|           <a class="mr-2" href="/">Home</a><svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="h-3 w-3 mr-2 stroke-current" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><line x1="5" y1="12" x2="19" y2="12" /> |  | ||||||
|             <polyline points="12 5 19 12 12 19" /></svg |  | ||||||
|           > |  | ||||||
|         </li> |  | ||||||
|         <li class="flex items-center"> |  | ||||||
|           <a class="mr-2" href="/">Second level</a><svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="h-3 w-3 mr-2 stroke-current" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><line x1="5" y1="12" x2="19" y2="12" /> |  | ||||||
|             <polyline points="12 5 19 12 12 19" /></svg |  | ||||||
|           > |  | ||||||
|         </li> |  | ||||||
|         <li class="flex items-center"> |  | ||||||
|           <a class="mr-2" href="/">Third level</a> |  | ||||||
|         </li> |  | ||||||
|       </ol> |  | ||||||
|     </nav> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -1,80 +0,0 @@ | |||||||
| <script> |  | ||||||
|   import Avatars from "./Avatars.svelte"; |  | ||||||
|   import Badges from "./Badges.svelte"; |  | ||||||
|   import BreadcrumbNav from "./BreadcrumbNav.svelte"; |  | ||||||
|   import FileUpload from "./FileUpload.svelte"; |  | ||||||
|   import Pagination from "./Pagination.svelte"; |  | ||||||
|   import Table from "./Table.svelte"; |  | ||||||
|   import Tabs from "./Tabs.svelte"; |  | ||||||
|   import Tags from "./Tags.svelte"; |  | ||||||
| </script> |  | ||||||
|  |  | ||||||
| <div class="border-4 border-dashed rounded h-96 mb-4" /> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <FileUpload /> |  | ||||||
| </div> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <Tabs /> |  | ||||||
| </div> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <Tags /> |  | ||||||
| </div> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <Badges /> |  | ||||||
| </div> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <Avatars /> |  | ||||||
| </div> |  | ||||||
| <Pagination /> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <Table /> |  | ||||||
| </div> |  | ||||||
| <div class="widget w-full p-4 mb-4 rounded-lg bg-white border border-grey-100"> |  | ||||||
|   <div class="flex flex-row items-center justify-between mb-6"> |  | ||||||
|     <div class="flex flex-col"> |  | ||||||
|       <div class="text-sm font-light text-grey-500">Regular</div> |  | ||||||
|       <div class="text-sm font-bold"><span>Text inputs</span></div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
|   <div class="flex flex-col lg:flex-row lg:flex-wrap w-full lg:space-x-4"> |  | ||||||
|     <div class="w-full lg:w-1/4"> |  | ||||||
|       <div class="form-element"> |  | ||||||
|         <div class="form-label">Label</div> |  | ||||||
|         <input |  | ||||||
|           name="name" |  | ||||||
|           type="text" |  | ||||||
|           class="form-input" |  | ||||||
|           placeholder="Enter something..." |  | ||||||
|         /> |  | ||||||
|         <div class="form-hint">This is a hint</div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="w-full lg:w-1/4"> |  | ||||||
|       <div class="form-element"> |  | ||||||
|         <div class="form-label">First name</div> |  | ||||||
|         <input |  | ||||||
|           name="name" |  | ||||||
|           type="text" |  | ||||||
|           class="form-input form-input-invalid" |  | ||||||
|           placeholder="john@example.com" |  | ||||||
|         /> |  | ||||||
|         <div class="form-error">First name is required</div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="w-full lg:w-1/4"> |  | ||||||
|       <div class="form-element"> |  | ||||||
|         <div class="form-label">First name</div> |  | ||||||
|         <input |  | ||||||
|           name="name" |  | ||||||
|           type="text" |  | ||||||
|           class="form-input form-input-valid" |  | ||||||
|           placeholder="john@example.com" |  | ||||||
|         /> |  | ||||||
|         <div class="form-success">First name is valid</div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| <div class="mb-8"> |  | ||||||
|   <BreadcrumbNav /> |  | ||||||
| </div> |  | ||||||
| @@ -1,643 +0,0 @@ | |||||||
| <div class="w-full p-4 rounded-lg bg-white border border-grey-100"> |  | ||||||
|   <div class="flex flex-row items-center justify-between mb-6"> |  | ||||||
|     <div class="flex flex-col"> |  | ||||||
|       <div class="text-sm font-light text-grey-500">Conversions</div> |  | ||||||
|       <div class="text-sm font-bold"><span>This year</span></div> |  | ||||||
|     </div> |  | ||||||
|     <div class="relative"> |  | ||||||
|       <button |  | ||||||
|         class="btn btn-default btn-circle btn-icon bg-transparent hover:bg-transparent active:bg-transparent relative" |  | ||||||
|         ><svg |  | ||||||
|           stroke="currentColor" |  | ||||||
|           fill="none" |  | ||||||
|           stroke-width="2" |  | ||||||
|           viewBox="0 0 24 24" |  | ||||||
|           stroke-linecap="round" |  | ||||||
|           stroke-linejoin="round" |  | ||||||
|           class="stroke-current stroke-1" |  | ||||||
|           size="18" |  | ||||||
|           height="18" |  | ||||||
|           width="18" |  | ||||||
|           xmlns="http://www.w3.org/2000/svg" |  | ||||||
|         > |  | ||||||
|           <circle cx="12" cy="12" r="1" /> |  | ||||||
|           <circle cx="12" cy="5" r="1" /> |  | ||||||
|           <circle cx="12" cy="19" r="1" /> |  | ||||||
|         </svg></button |  | ||||||
|       > |  | ||||||
|       <div class="dropdown absolute top-0 right-0 mt-8"> |  | ||||||
|         <div class="dropdown-content w-48 bottom-start"> |  | ||||||
|           <div class="flex flex-col w-full"> |  | ||||||
|             <ul class="list-none"> |  | ||||||
|               <li> |  | ||||||
|                 <a |  | ||||||
|                   class="flex flex-row items-center justify-start h-10 w-full px-2 bg-white hover:bg-grey-100" |  | ||||||
|                   href="/">Today</a |  | ||||||
|                 > |  | ||||||
|               </li> |  | ||||||
|               <li> |  | ||||||
|                 <a |  | ||||||
|                   class="flex flex-row items-center justify-start h-10 w-full px-2 bg-white hover:bg-grey-100" |  | ||||||
|                   href="/">This week</a |  | ||||||
|                 > |  | ||||||
|               </li> |  | ||||||
|               <li> |  | ||||||
|                 <a |  | ||||||
|                   class="flex flex-row items-center justify-start h-10 w-full px-2 bg-white hover:bg-grey-100" |  | ||||||
|                   href="/">This month</a |  | ||||||
|                 > |  | ||||||
|               </li> |  | ||||||
|               <li> |  | ||||||
|                 <a |  | ||||||
|                   class="flex flex-row items-center justify-start h-10 w-full px-2 bg-white hover:bg-grey-100" |  | ||||||
|                   href="/">This year</a |  | ||||||
|                 > |  | ||||||
|               </li> |  | ||||||
|             </ul> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
|   <div class="flex flex-row w-full"> |  | ||||||
|     <div style="width:100%;height:240px"> |  | ||||||
|       <div class="recharts-responsive-container" style="width:100%;height:100%"> |  | ||||||
|         <div |  | ||||||
|           class="recharts-wrapper" |  | ||||||
|           style="position: relative; cursor: default; width: 704px; height: 240px;" |  | ||||||
|         > |  | ||||||
|           <svg |  | ||||||
|             class="recharts-surface" |  | ||||||
|             width="704" |  | ||||||
|             height="240" |  | ||||||
|             viewBox="0 0 704 240" |  | ||||||
|             version="1.1" |  | ||||||
|           > |  | ||||||
|             <defs> |  | ||||||
|               <clipPath id="recharts3-clip"> |  | ||||||
|                 <rect x="40" y="10" height="190" width="654" /> |  | ||||||
|               </clipPath> |  | ||||||
|             </defs> |  | ||||||
|             <g |  | ||||||
|               class="recharts-layer recharts-cartesian-axis recharts-xAxis xAxis" |  | ||||||
|             > |  | ||||||
|               <g class="recharts-cartesian-axis-ticks"> |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="67.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="67.25" dy="0.71em">Jan</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="121.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="121.75" dy="0.71em">Feb</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="176.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="176.25" dy="0.71em">Mar</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="230.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="230.75" dy="0.71em">Apr</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="285.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="285.25" dy="0.71em">May</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="339.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="339.75" dy="0.71em">Jun</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="394.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="394.25" dy="0.71em">Jul</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="448.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="448.75" dy="0.71em">Aug</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="503.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="503.25" dy="0.71em">Sep</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="557.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="557.75" dy="0.71em">Oct</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="612.25" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="612.25" dy="0.71em">Nov</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="654" |  | ||||||
|                     height="30" |  | ||||||
|                     x="666.75" |  | ||||||
|                     y="208" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="middle" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="666.75" dy="0.71em">Dec</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|               </g> |  | ||||||
|             </g> |  | ||||||
|             <g |  | ||||||
|               class="recharts-layer recharts-cartesian-axis recharts-yAxis yAxis" |  | ||||||
|             > |  | ||||||
|               <g class="recharts-cartesian-axis-ticks"> |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="30" |  | ||||||
|                     height="190" |  | ||||||
|                     x="32" |  | ||||||
|                     y="200" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="end" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="32" dy="0.355em">0</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="30" |  | ||||||
|                     height="190" |  | ||||||
|                     x="32" |  | ||||||
|                     y="152.5" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="end" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="32" dy="0.355em">65</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="30" |  | ||||||
|                     height="190" |  | ||||||
|                     x="32" |  | ||||||
|                     y="105" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="end" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="32" dy="0.355em">130</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="30" |  | ||||||
|                     height="190" |  | ||||||
|                     x="32" |  | ||||||
|                     y="57.5" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="end" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="32" dy="0.355em">195</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|                 <g class="recharts-layer recharts-cartesian-axis-tick" |  | ||||||
|                   ><text |  | ||||||
|                     width="30" |  | ||||||
|                     height="190" |  | ||||||
|                     x="32" |  | ||||||
|                     y="10" |  | ||||||
|                     stroke="none" |  | ||||||
|                     fill="#666" |  | ||||||
|                     class="recharts-text recharts-cartesian-axis-tick-value" |  | ||||||
|                     text-anchor="end" |  | ||||||
|                   > |  | ||||||
|                     <tspan x="32" dy="0.355em">260</tspan> |  | ||||||
|                   </text></g |  | ||||||
|                 > |  | ||||||
|               </g> |  | ||||||
|             </g> |  | ||||||
|             <g class="recharts-layer recharts-bar"> |  | ||||||
|               <g class="recharts-layer recharts-bar-rectangles"> |  | ||||||
|                 <g class="recharts-layer"> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="119.11538461538461" |  | ||||||
|                       x="55" |  | ||||||
|                       y="80.88461538461539" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 55,80.88461538461539 h 10 v 119.11538461538461 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="95" |  | ||||||
|                       x="109.5" |  | ||||||
|                       y="105" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 109.5,105 h 10 v 95 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="122.03846153846155" |  | ||||||
|                       x="164" |  | ||||||
|                       y="77.96153846153845" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 164,77.96153846153845 h 10 v 122.03846153846155 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="81.11538461538461" |  | ||||||
|                       x="218.5" |  | ||||||
|                       y="118.88461538461539" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 218.5,118.88461538461539 h 10 v 81.11538461538461 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="114" |  | ||||||
|                       x="273" |  | ||||||
|                       y="86" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 273,86 h 10 v 114 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="117.65384615384616" |  | ||||||
|                       x="327.5" |  | ||||||
|                       y="82.34615384615384" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 327.5,82.34615384615384 h 10 v 117.65384615384616 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="103.76923076923076" |  | ||||||
|                       x="382" |  | ||||||
|                       y="96.23076923076924" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 382,96.23076923076924 h 10 v 103.76923076923076 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="92.80769230769232" |  | ||||||
|                       x="436.5" |  | ||||||
|                       y="107.19230769230768" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 436.5,107.19230769230768 h 10 v 92.80769230769232 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="92.80769230769232" |  | ||||||
|                       x="491" |  | ||||||
|                       y="107.19230769230768" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 491,107.19230769230768 h 10 v 92.80769230769232 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="127.8846153846154" |  | ||||||
|                       x="545.5" |  | ||||||
|                       y="72.1153846153846" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 545.5,72.1153846153846 h 10 v 127.8846153846154 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="105.23076923076924" |  | ||||||
|                       x="600" |  | ||||||
|                       y="94.76923076923076" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 600,94.76923076923076 h 10 v 105.23076923076924 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#90caf9" |  | ||||||
|                       width="10" |  | ||||||
|                       height="115.46153846153845" |  | ||||||
|                       x="654.5" |  | ||||||
|                       y="84.53846153846155" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 654.5,84.53846153846155 h 10 v 115.46153846153845 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                 </g> |  | ||||||
|               </g> |  | ||||||
|             </g> |  | ||||||
|             <g class="recharts-layer recharts-bar"> |  | ||||||
|               <g class="recharts-layer recharts-bar-rectangles"> |  | ||||||
|                 <g class="recharts-layer"> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="112.53846153846155" |  | ||||||
|                       x="69" |  | ||||||
|                       y="87.46153846153845" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 69,87.46153846153845 h 10 v 112.53846153846155 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="151.26923076923077" |  | ||||||
|                       x="123.5" |  | ||||||
|                       y="48.730769230769226" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 123.5,48.730769230769226 h 10 v 151.26923076923077 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="181.23076923076923" |  | ||||||
|                       x="178" |  | ||||||
|                       y="18.769230769230774" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 178,18.769230769230774 h 10 v 181.23076923076923 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="165.8846153846154" |  | ||||||
|                       x="232.5" |  | ||||||
|                       y="34.11538461538461" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 232.5,34.11538461538461 h 10 v 165.8846153846154 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="156.38461538461536" |  | ||||||
|                       x="287" |  | ||||||
|                       y="43.61538461538464" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 287,43.61538461538464 h 10 v 156.38461538461536 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="118.38461538461539" |  | ||||||
|                       x="341.5" |  | ||||||
|                       y="81.61538461538461" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 341.5,81.61538461538461 h 10 v 118.38461538461539 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="138.84615384615384" |  | ||||||
|                       x="396" |  | ||||||
|                       y="61.15384615384616" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 396,61.15384615384616 h 10 v 138.84615384615384 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="175.3846153846154" |  | ||||||
|                       x="450.5" |  | ||||||
|                       y="24.615384615384613" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 450.5,24.615384615384613 h 10 v 175.3846153846154 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="155.65384615384613" |  | ||||||
|                       x="505" |  | ||||||
|                       y="44.34615384615387" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 505,44.34615384615387 h 10 v 155.65384615384613 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="179.76923076923077" |  | ||||||
|                       x="559.5" |  | ||||||
|                       y="20.230769230769226" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 559.5,20.230769230769226 h 10 v 179.76923076923077 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="173.19230769230768" |  | ||||||
|                       x="614" |  | ||||||
|                       y="26.80769230769232" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 614,26.80769230769232 h 10 v 173.19230769230768 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                   <g class="recharts-layer recharts-bar-rectangle"> |  | ||||||
|                     <path |  | ||||||
|                       fill="#1e88e5" |  | ||||||
|                       width="10" |  | ||||||
|                       height="146.15384615384616" |  | ||||||
|                       x="668.5" |  | ||||||
|                       y="53.84615384615384" |  | ||||||
|                       radius="0" |  | ||||||
|                       class="recharts-rectangle" |  | ||||||
|                       d="M 668.5,53.84615384615384 h 10 v 146.15384615384616 h -10 Z" |  | ||||||
|                     /> |  | ||||||
|                   </g> |  | ||||||
|                 </g> |  | ||||||
|               </g> |  | ||||||
|             </g> |  | ||||||
|           </svg> |  | ||||||
|           <div |  | ||||||
|             class="recharts-tooltip-wrapper" |  | ||||||
|             style="pointer-events: none; visibility: hidden; position: absolute; top: 0px; transform: translate(538.875px, 126px);" |  | ||||||
|           /> |  | ||||||
|         </div> |  | ||||||
|         <div |  | ||||||
|           style="position:absolute;width:0;height:0;visibility:hidden;display:none" |  | ||||||
|         /> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -1,120 +0,0 @@ | |||||||
| <!-- This example requires Tailwind CSS v2.0+ --> |  | ||||||
| <div |  | ||||||
|   class="bg-white px-4 py-3 flex items-center justify-between border-t border-gray-200 sm:px-6" |  | ||||||
| > |  | ||||||
|   <div class="flex-1 flex justify-between sm:hidden"> |  | ||||||
|     <a |  | ||||||
|       href="#" |  | ||||||
|       class="relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:text-gray-500" |  | ||||||
|     > |  | ||||||
|       Previous |  | ||||||
|     </a> |  | ||||||
|     <a |  | ||||||
|       href="#" |  | ||||||
|       class="ml-3 relative inline-flex items-center px-4 py-2 border border-gray-300 text-sm font-medium rounded-md text-gray-700 bg-white hover:text-gray-500" |  | ||||||
|     > |  | ||||||
|       Next |  | ||||||
|     </a> |  | ||||||
|   </div> |  | ||||||
|   <div class="hidden sm:flex-1 sm:flex sm:items-center sm:justify-between"> |  | ||||||
|     <div> |  | ||||||
|       <p class="text-sm text-gray-700"> |  | ||||||
|         Showing |  | ||||||
|         <span class="font-medium">1</span> |  | ||||||
|         to |  | ||||||
|         <span class="font-medium">10</span> |  | ||||||
|         of |  | ||||||
|         <span class="font-medium">97</span> |  | ||||||
|         results |  | ||||||
|       </p> |  | ||||||
|     </div> |  | ||||||
|     <div> |  | ||||||
|       <nav |  | ||||||
|         class="relative z-0 inline-flex shadow-sm -space-x-px" |  | ||||||
|         aria-label="Pagination" |  | ||||||
|       > |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-2 py-2 rounded-l-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           <span class="sr-only">Previous</span> |  | ||||||
|           <!-- Heroicon name: chevron-left --> |  | ||||||
|           <svg |  | ||||||
|             class="h-5 w-5" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             viewBox="0 0 20 20" |  | ||||||
|             fill="currentColor" |  | ||||||
|             aria-hidden="true" |  | ||||||
|           > |  | ||||||
|             <path |  | ||||||
|               fill-rule="evenodd" |  | ||||||
|               d="M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z" |  | ||||||
|               clip-rule="evenodd" |  | ||||||
|             /> |  | ||||||
|           </svg> |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           1 |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           2 |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="hidden md:inline-flex relative items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           3 |  | ||||||
|         </a> |  | ||||||
|         <span |  | ||||||
|           class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700" |  | ||||||
|         > |  | ||||||
|           ... |  | ||||||
|         </span> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="hidden md:inline-flex relative items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           8 |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           9 |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-4 py-2 border border-gray-300 bg-white text-sm font-medium text-gray-700 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           10 |  | ||||||
|         </a> |  | ||||||
|         <a |  | ||||||
|           href="#" |  | ||||||
|           class="relative inline-flex items-center px-2 py-2 rounded-r-md border border-gray-300 bg-white text-sm font-medium text-gray-500 hover:bg-gray-50" |  | ||||||
|         > |  | ||||||
|           <span class="sr-only">Next</span> |  | ||||||
|           <!-- Heroicon name: chevron-right --> |  | ||||||
|           <svg |  | ||||||
|             class="h-5 w-5" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             viewBox="0 0 20 20" |  | ||||||
|             fill="currentColor" |  | ||||||
|             aria-hidden="true" |  | ||||||
|           > |  | ||||||
|             <path |  | ||||||
|               fill-rule="evenodd" |  | ||||||
|               d="M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z" |  | ||||||
|               clip-rule="evenodd" |  | ||||||
|             /> |  | ||||||
|           </svg> |  | ||||||
|         </a> |  | ||||||
|       </nav> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -1,289 +0,0 @@ | |||||||
| <div class="min-h-screen w-full p-4"> |  | ||||||
|   <div class="section-title w-full mb-6 pt-3"> |  | ||||||
|     <div class="flex flex-row items-center justify-between mb-4"> |  | ||||||
|       <div class="flex flex-col"> |  | ||||||
|         <div class="text-xs uppercase font-light text-grey-500">Pages</div> |  | ||||||
|         <div class="text-xl font-bold">User profile</div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
|   <div class="w-full p-4 mb-4 rounded-lg bg-white border border-grey-100"> |  | ||||||
|     <div class="flex flex-row items-center justify-start p-4"> |  | ||||||
|       <div class="flex-shrink-0 w-24"> |  | ||||||
|         <img |  | ||||||
|           src="/images/faces/m1.png" |  | ||||||
|           alt="media" |  | ||||||
|           class="shadow rounded-full h-20 w-20 shadow-outline mb-2" |  | ||||||
|         /> |  | ||||||
|       </div> |  | ||||||
|       <div class="py-2 px-2"> |  | ||||||
|         <p class="text-base font-bold whitespace-no-wrap">Lucas Smith</p> |  | ||||||
|         <p class="text-sm text-grey-500 whitespace-no-wrap"> |  | ||||||
|           Vital Database Dude |  | ||||||
|         </p> |  | ||||||
|         <div |  | ||||||
|           class="flex flex-row items-center justify-start w-full py-1 space-x-2" |  | ||||||
|         > |  | ||||||
|           <svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="stroke-current text-xl text-twitter" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><path |  | ||||||
|               d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z" |  | ||||||
|             /></svg |  | ||||||
|           ><svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="stroke-current text-xl text-facebook" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><path |  | ||||||
|               d="M18 2h-3a5 5 0 0 0-5 5v3H7v4h3v8h4v-8h3l1-4h-4V7a1 1 0 0 1 1-1h3z" |  | ||||||
|             /></svg |  | ||||||
|           ><svg |  | ||||||
|             stroke="currentColor" |  | ||||||
|             fill="none" |  | ||||||
|             stroke-width="2" |  | ||||||
|             viewBox="0 0 24 24" |  | ||||||
|             stroke-linecap="round" |  | ||||||
|             stroke-linejoin="round" |  | ||||||
|             class="stroke-current text-xl text-instagram" |  | ||||||
|             height="1em" |  | ||||||
|             width="1em" |  | ||||||
|             xmlns="http://www.w3.org/2000/svg" |  | ||||||
|             ><rect x="2" y="2" width="20" height="20" rx="5" ry="5" /> |  | ||||||
|             <path d="M16 11.37A4 4 0 1 1 12.63 8 4 4 0 0 1 16 11.37z" /> |  | ||||||
|             <line x1="17.5" y1="6.5" x2="17.5" y2="6.5" /></svg |  | ||||||
|           > |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|       <div class="ml-auto flex-shrink-0 space-x-2 hidden lg:flex"> |  | ||||||
|         <button |  | ||||||
|           class="btn btn-default btn-rounded bg-blue-500 hover:bg-blue-600 text-white" |  | ||||||
|           >Subscribe</button |  | ||||||
|         ><button |  | ||||||
|           class="btn btn-default btn-rounded bg-blue-500 hover:bg-blue-600 text-white" |  | ||||||
|           >Follow</button |  | ||||||
|         > |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|     <div class="flex flex-wrap"> |  | ||||||
|       <div class="w-full p-4"> |  | ||||||
|         <div class="flex flex-wrap flex-col w-full tabs"> |  | ||||||
|           <div class="flex lg:flex-wrap flex-row lg:space-x-2"> |  | ||||||
|             <div class="flex-none"> |  | ||||||
|               <button class="tab tab-underline tab-active" type="button" |  | ||||||
|                 >Account settings</button |  | ||||||
|               > |  | ||||||
|             </div> |  | ||||||
|             <div class="flex-none"> |  | ||||||
|               <button class="tab tab-underline" type="button" |  | ||||||
|                 >Email preferences</button |  | ||||||
|               > |  | ||||||
|             </div> |  | ||||||
|             <div class="flex-none"> |  | ||||||
|               <button class="tab tab-underline" type="button" |  | ||||||
|                 >Security settings</button |  | ||||||
|               > |  | ||||||
|             </div> |  | ||||||
|           </div> |  | ||||||
|           <div class="tab-content block"> |  | ||||||
|             <div class="py-4 w-full lg:w-1/2"> |  | ||||||
|               <div class="flex flex-col"> |  | ||||||
|                 <form class="form flex flex-wrap w-full"> |  | ||||||
|                   <div class="w-full"> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">First name</div> |  | ||||||
|                       <input |  | ||||||
|                         name="first-name" |  | ||||||
|                         type="text" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you first name" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Last name</div> |  | ||||||
|                       <input |  | ||||||
|                         name="last-name" |  | ||||||
|                         type="text" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you last name" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Email address</div> |  | ||||||
|                       <input |  | ||||||
|                         name="email" |  | ||||||
|                         type="email" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you email address" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Company</div> |  | ||||||
|                       <input |  | ||||||
|                         name="company" |  | ||||||
|                         type="text" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you company" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Position</div> |  | ||||||
|                       <input |  | ||||||
|                         name="position" |  | ||||||
|                         type="text" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you position" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Language</div> |  | ||||||
|                       <select name="language" class="form-select" |  | ||||||
|                         ><option>Select language</option> |  | ||||||
|                         <option value="english">English</option> |  | ||||||
|                         <option value="spanish">Spanish</option> |  | ||||||
|                         <option value="portuguese">Portuguese</option></select |  | ||||||
|                       > |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                   <input |  | ||||||
|                     type="submit" |  | ||||||
|                     class="btn btn-default bg-blue-500 hover:bg-blue-600 text-white btn-rounded" |  | ||||||
|                   /> |  | ||||||
|                 </form> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </div> |  | ||||||
|           <div class="tab-content hidden"> |  | ||||||
|             <div class="py-4 w-full lg:w-1/2"> |  | ||||||
|               <div class="flex flex-col"> |  | ||||||
|                 <form class="form flex flex-wrap w-full"> |  | ||||||
|                   <div class="w-full"> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Current email</div> |  | ||||||
|                       <input |  | ||||||
|                         name="email" |  | ||||||
|                         type="email" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you current email address" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">New email</div> |  | ||||||
|                       <input |  | ||||||
|                         name="email" |  | ||||||
|                         type="email" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter you new email address" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Daily updates</div> |  | ||||||
|                       <div class="flex items-center justify-start space-x-2"> |  | ||||||
|                         <label class="flex items-center justify-start space-x-2" |  | ||||||
|                           ><input |  | ||||||
|                             type="radio" |  | ||||||
|                             name="daily-updates" |  | ||||||
|                             class="form-radio h-4 w-4" |  | ||||||
|                             value="yes" |  | ||||||
|                           /><span class="">Yes</span></label |  | ||||||
|                         ><label |  | ||||||
|                           class="flex items-center justify-start space-x-2" |  | ||||||
|                           ><input |  | ||||||
|                             type="radio" |  | ||||||
|                             name="daily-updates" |  | ||||||
|                             class="form-radio h-4 w-4" |  | ||||||
|                             value="no" |  | ||||||
|                           /><span class="">No</span></label |  | ||||||
|                         > |  | ||||||
|                       </div> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Weekly updates</div> |  | ||||||
|                       <div class="flex items-center justify-start space-x-2"> |  | ||||||
|                         <label class="flex items-center justify-start space-x-2" |  | ||||||
|                           ><input |  | ||||||
|                             type="radio" |  | ||||||
|                             name="weekle-updates" |  | ||||||
|                             class="form-radio h-4 w-4" |  | ||||||
|                             value="yes" |  | ||||||
|                           /><span class="">Yes</span></label |  | ||||||
|                         ><label |  | ||||||
|                           class="flex items-center justify-start space-x-2" |  | ||||||
|                           ><input |  | ||||||
|                             type="radio" |  | ||||||
|                             name="weekle-updates" |  | ||||||
|                             class="form-radio h-4 w-4" |  | ||||||
|                             value="no" |  | ||||||
|                           /><span class="">No</span></label |  | ||||||
|                         > |  | ||||||
|                       </div> |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                   <input |  | ||||||
|                     type="submit" |  | ||||||
|                     class="btn btn-default bg-blue-500 hover:bg-blue-600 text-white btn-rounded" |  | ||||||
|                   /> |  | ||||||
|                 </form> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </div> |  | ||||||
|           <div class="tab-content hidden"> |  | ||||||
|             <div class="py-4 w-full lg:w-1/2"> |  | ||||||
|               <div class="flex flex-col"> |  | ||||||
|                 <form class="form flex flex-wrap w-full"> |  | ||||||
|                   <div class="w-full"> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Current password</div> |  | ||||||
|                       <input |  | ||||||
|                         name="current-password" |  | ||||||
|                         type="password" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter your current password" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">New password</div> |  | ||||||
|                       <input |  | ||||||
|                         name="new-password" |  | ||||||
|                         type="password" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter your new password" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                     <div class="form-element"> |  | ||||||
|                       <div class="form-label">Confirm new password</div> |  | ||||||
|                       <input |  | ||||||
|                         name="confirm-new-password" |  | ||||||
|                         type="password" |  | ||||||
|                         class="form-input" |  | ||||||
|                         placeholder="Enter your new password confirmation" |  | ||||||
|                       /> |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                   <input |  | ||||||
|                     type="submit" |  | ||||||
|                     class="btn btn-default bg-blue-500 hover:bg-blue-600 text-white btn-rounded" |  | ||||||
|                   /> |  | ||||||
|                 </form> |  | ||||||
|               </div> |  | ||||||
|             </div> |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -1,92 +0,0 @@ | |||||||
| <!-- This example requires Tailwind CSS v2.0+ --> |  | ||||||
| <div class="flex flex-col"> |  | ||||||
|   <div class="-my-2 overflow-x-auto sm:-mx-6 lg:-mx-8"> |  | ||||||
|     <div class="py-2 align-middle inline-block min-w-full sm:px-6 lg:px-8"> |  | ||||||
|       <div |  | ||||||
|         class="shadow overflow-hidden border-b border-gray-200 sm:rounded-lg" |  | ||||||
|       > |  | ||||||
|         <table class="min-w-full divide-y divide-gray-200"> |  | ||||||
|           <thead class="bg-gray-50"> |  | ||||||
|             <tr class="odd:bg-white even:bg-gray-100"> |  | ||||||
|               <th |  | ||||||
|                 scope="col" |  | ||||||
|                 class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" |  | ||||||
|               > |  | ||||||
|                 Name |  | ||||||
|               </th> |  | ||||||
|               <th |  | ||||||
|                 scope="col" |  | ||||||
|                 class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" |  | ||||||
|               > |  | ||||||
|                 Title |  | ||||||
|               </th> |  | ||||||
|               <th |  | ||||||
|                 scope="col" |  | ||||||
|                 class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" |  | ||||||
|               > |  | ||||||
|                 Status |  | ||||||
|               </th> |  | ||||||
|               <th |  | ||||||
|                 scope="col" |  | ||||||
|                 class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" |  | ||||||
|               > |  | ||||||
|                 Role |  | ||||||
|               </th> |  | ||||||
|               <th scope="col" class="relative px-6 py-3"> |  | ||||||
|                 <span class="sr-only">{$_("edit")}</span> |  | ||||||
|               </th> |  | ||||||
|             </tr> |  | ||||||
|           </thead> |  | ||||||
|           <tbody class="divide-y divide-gray-200"> |  | ||||||
|             <tr class="odd:bg-white even:bg-gray-100"> |  | ||||||
|               <td class="px-6 py-4 whitespace-nowrap"> |  | ||||||
|                 <div class="flex items-center"> |  | ||||||
|                   <div class="flex-shrink-0 h-10 w-10"> |  | ||||||
|                     <img |  | ||||||
|                       class="h-10 w-10 rounded-full" |  | ||||||
|                       src="https://images.unsplash.com/photo-1494790108377-be9c29b29330?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=facearea&facepad=4&w=256&h=256&q=60" |  | ||||||
|                       alt="" |  | ||||||
|                     /> |  | ||||||
|                   </div> |  | ||||||
|                   <div class="ml-4"> |  | ||||||
|                     <div class="text-sm font-medium text-gray-900"> |  | ||||||
|                       Jane Cooper |  | ||||||
|                     </div> |  | ||||||
|                     <div class="text-sm text-gray-500"> |  | ||||||
|                       jane.cooper@example.com |  | ||||||
|                     </div> |  | ||||||
|                   </div> |  | ||||||
|                 </div> |  | ||||||
|               </td> |  | ||||||
|               <td class="px-6 py-4 whitespace-nowrap"> |  | ||||||
|                 <div class="text-sm text-gray-900"> |  | ||||||
|                   Regional Paradigm Technician |  | ||||||
|                 </div> |  | ||||||
|                 <div class="text-sm text-gray-500">Optimization</div> |  | ||||||
|               </td> |  | ||||||
|               <td class="px-6 py-4 whitespace-nowrap"> |  | ||||||
|                 <span |  | ||||||
|                   class="px-2 inline-flex text-xs leading-5 font-semibold rounded-full border border-current bg-green-100 text-green-800" |  | ||||||
|                 > |  | ||||||
|                   Active |  | ||||||
|                 </span> |  | ||||||
|               </td> |  | ||||||
|               <td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> |  | ||||||
|                 Admin |  | ||||||
|               </td> |  | ||||||
|               <td |  | ||||||
|                 class="px-6 py-4 whitespace-nowrap text-right text-sm font-medium" |  | ||||||
|               > |  | ||||||
|                 <a href="#" class="text-indigo-600 hover:text-indigo-900" |  | ||||||
|                   >{$_("edit")}</a |  | ||||||
|                 > |  | ||||||
|               </td> |  | ||||||
|             </tr> |  | ||||||
|  |  | ||||||
|             <!-- More rows... --> |  | ||||||
|           </tbody> |  | ||||||
|         </table> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -1,23 +0,0 @@ | |||||||
| <h3 class="text-lg">Tabs</h3> |  | ||||||
| <div |  | ||||||
|   class="w-full flex sm:border-b sm:border-gray-300 relative flex-col sm:flex-row" |  | ||||||
| > |  | ||||||
|   <div |  | ||||||
|     class="flex-1 sm:text-center font-medium pb-3 cursor-pointer hover:text-blue-400 false" |  | ||||||
|   > |  | ||||||
|     1 |  | ||||||
|   </div> |  | ||||||
|   <div |  | ||||||
|     class="flex-1 sm:text-center font-medium pb-3 cursor-pointer hover:text-blue-400 false" |  | ||||||
|   > |  | ||||||
|     2 |  | ||||||
|   </div> |  | ||||||
|   <div |  | ||||||
|     class="flex-1 sm:text-center font-medium pb-3 cursor-pointer hover:text-blue-400 false" |  | ||||||
|   > |  | ||||||
|     3 |  | ||||||
|   </div> |  | ||||||
|   <div |  | ||||||
|     class="hidden sm:block absolute bottom-0 left-0 h-1 bg-blue-400 transition-transform duration-300 ease-out w-1/4 transform translate-x-double" |  | ||||||
|   /> |  | ||||||
| </div> |  | ||||||
| @@ -1,113 +0,0 @@ | |||||||
| <div> |  | ||||||
|   <div |  | ||||||
|     class="text-xs inline-flex items-center font-bold leading-sm uppercase px-3 py-1 bg-blue-200 text-blue-700 rounded-full" |  | ||||||
|   > |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       width="16" |  | ||||||
|       height="16" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       fill="none" |  | ||||||
|       stroke="currentColor" |  | ||||||
|       stroke-width="2" |  | ||||||
|       stroke-linecap="round" |  | ||||||
|       stroke-linejoin="round" |  | ||||||
|       class="feather feather-bell-off mr-2" |  | ||||||
|     > |  | ||||||
|       <path d="M13.73 21a2 2 0 0 1-3.46 0" /> |  | ||||||
|       <path d="M18.63 13A17.89 17.89 0 0 1 18 8" /> |  | ||||||
|       <path d="M6.26 6.26A5.86 5.86 0 0 0 6 8c0 7-3 9-3 9h14" /> |  | ||||||
|       <path d="M18 8a6 6 0 0 0-9.33-5" /> |  | ||||||
|       <line x1="1" y1="1" x2="23" y2="23" /> |  | ||||||
|     </svg> |  | ||||||
|     Tag |  | ||||||
|   </div> |  | ||||||
|  |  | ||||||
|   <div |  | ||||||
|     class="ml-4 text-xs inline-flex items-center font-bold leading-sm uppercase px-3 py-1 bg-green-200 text-green-700 rounded-full" |  | ||||||
|   > |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       width="16" |  | ||||||
|       height="16" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       fill="none" |  | ||||||
|       stroke="currentColor" |  | ||||||
|       stroke-width="2" |  | ||||||
|       stroke-linecap="round" |  | ||||||
|       stroke-linejoin="round" |  | ||||||
|       class="feather feather-arrow-right mr-2" |  | ||||||
|     > |  | ||||||
|       <line x1="5" y1="12" x2="19" y2="12" /> |  | ||||||
|       <polyline points="12 5 19 12 12 19" /> |  | ||||||
|     </svg> |  | ||||||
|     Tag |  | ||||||
|   </div> |  | ||||||
|  |  | ||||||
|   <div |  | ||||||
|     class="ml-4 text-xs inline-flex items-center font-bold leading-sm uppercase px-3 py-1 bg-orange-200 text-orange-700 rounded-full" |  | ||||||
|   > |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       width="16" |  | ||||||
|       height="16" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       fill="none" |  | ||||||
|       stroke="currentColor" |  | ||||||
|       stroke-width="2" |  | ||||||
|       stroke-linecap="round" |  | ||||||
|       stroke-linejoin="round" |  | ||||||
|       class="feather feather-activity mr-2" |  | ||||||
|     > |  | ||||||
|       <polyline points="22 12 18 12 15 21 9 3 6 12 2 12" /> |  | ||||||
|     </svg> |  | ||||||
|     Tag |  | ||||||
|   </div> |  | ||||||
|  |  | ||||||
|   <div |  | ||||||
|     class="ml-4 text-xs inline-flex items-center font-bold leading-sm uppercase px-3 py-1 bg-red-200 text-red-700 rounded-full" |  | ||||||
|   > |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       width="16" |  | ||||||
|       height="16" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       fill="none" |  | ||||||
|       stroke="currentColor" |  | ||||||
|       stroke-width="2" |  | ||||||
|       stroke-linecap="round" |  | ||||||
|       stroke-linejoin="round" |  | ||||||
|       class="feather feather-archive mr-2" |  | ||||||
|     > |  | ||||||
|       <polyline points="21 8 21 21 3 21 3 8" /> |  | ||||||
|       <rect x="1" y="3" width="22" height="5" /> |  | ||||||
|       <line x1="10" y1="12" x2="14" y2="12" /> |  | ||||||
|     </svg> |  | ||||||
|     Tag |  | ||||||
|   </div> |  | ||||||
|  |  | ||||||
|   <div |  | ||||||
|     class="ml-4 text-xs inline-flex items-center font-bold leading-sm uppercase px-3 py-1 rounded-full bg-white text-gray-700 border" |  | ||||||
|   > |  | ||||||
|     <svg |  | ||||||
|       xmlns="http://www.w3.org/2000/svg" |  | ||||||
|       width="16" |  | ||||||
|       height="16" |  | ||||||
|       viewBox="0 0 24 24" |  | ||||||
|       fill="none" |  | ||||||
|       stroke="currentColor" |  | ||||||
|       stroke-width="2" |  | ||||||
|       stroke-linecap="round" |  | ||||||
|       stroke-linejoin="round" |  | ||||||
|       class="feather feather-hard-drive mr-2" |  | ||||||
|     > |  | ||||||
|       <line x1="22" y1="12" x2="2" y2="12" /> |  | ||||||
|       <path |  | ||||||
|         d="M5.45 5.11L2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z" |  | ||||||
|       /> |  | ||||||
|       <line x1="6" y1="16" x2="6.01" y2="16" /> |  | ||||||
|       <line x1="10" y1="16" x2="10.01" y2="16" /> |  | ||||||
|     </svg> |  | ||||||
|     Tag |  | ||||||
|   </div> |  | ||||||
| </div> |  | ||||||
| @@ -117,14 +117,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -137,15 +137,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 xmlns="http://www.w3.org/2000/svg" |                 xmlns="http://www.w3.org/2000/svg" | ||||||
| @@ -160,18 +160,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-runner")} |                 {$_("create-a-new-runner")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-runner" |                     "please-provide-the-required-information-to-add-a-new-runner" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -323,13 +323,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -338,7 +338,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -31,14 +31,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -51,15 +51,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 xmlns="http://www.w3.org/2000/svg" |                 xmlns="http://www.w3.org/2000/svg" | ||||||
| @@ -74,7 +74,7 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_('delete_runner')} |                 {$_('delete_runner')} | ||||||
|               </h3> |               </h3> | ||||||
| @@ -86,11 +86,11 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("delete")} |             {$_("delete")} | ||||||
|           </button> |           </button> | ||||||
| @@ -99,7 +99,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -1,401 +1,386 @@ | |||||||
| <script> | <script> | ||||||
|   import csv from "csvtojson"; | 	import csv from "csvtojson"; | ||||||
|   import { read as readXlsx, utils as xlsx_utils } from "xlsx"; | 	import { read as readXlsx, utils as xlsx_utils } from "xlsx"; | ||||||
|   import { _ } from "svelte-i18n"; | 	import { _ } from "svelte-i18n"; | ||||||
|   import { clickOutside } from "../base/outsideclick"; | 	import { clickOutside } from "../base/outsideclick"; | ||||||
|  |  | ||||||
|   import { | 	import { | ||||||
|     ImportService, | 		ImportService, | ||||||
|     RunnerTeamService, | 		RunnerTeamService, | ||||||
|     RunnerOrganizationService, | 		RunnerOrganizationService, | ||||||
|   } from "@odit/lfk-client-js"; | 	} from "@odit/lfk-client-js"; | ||||||
|   import { createEventDispatcher } from "svelte"; | 	import { createEventDispatcher } from "svelte"; | ||||||
|   import Select from "svelte-select"; | 	import Select from "svelte-select"; | ||||||
|   import toast from "svelte-french-toast"; | 	import toast from "svelte-french-toast"; | ||||||
|   export let opened_from; | 	export let opened_from; | ||||||
|   export let passed_org; | 	export let passed_org; | ||||||
|   export let passed_orgs; | 	export let passed_orgs; | ||||||
|   export let passed_team; | 	export let passed_team; | ||||||
|   export let import_modal_open; | 	export let import_modal_open; | ||||||
|   $: searchvalue = ""; | 	$: searchvalue = ""; | ||||||
|   $: importButtonEnabled = | 	$: importButtonEnabled = | ||||||
|     recent_processed && | 		recent_processed && | ||||||
|     (!(selected_org_or_team == "" || selected_org_or_team == null) || | 		(!(selected_org_or_team == "" || selected_org_or_team == null) || | ||||||
|       !(passed_org?.id == null || passed_org?.id == 0) || | 			!(passed_org?.id == null || passed_org?.id == 0) || | ||||||
|       !(passed_team?.id == null || passed_team?.id == 0)); | 			!(passed_team?.id == null || passed_team?.id == 0)); | ||||||
|   const dispatch = createEventDispatcher(); | 	const dispatch = createEventDispatcher(); | ||||||
|   function cancelModal() { | 	function cancelModal() { | ||||||
|     json_output = []; | 		json_output = []; | ||||||
|     import_modal_open = false; | 		import_modal_open = false; | ||||||
|     dispatch("cancel"); | 		dispatch("cancel"); | ||||||
|   } | 	} | ||||||
|   (() => { | 	(() => { | ||||||
|     document.onkeydown = (e) => { | 		document.onkeydown = (e) => { | ||||||
|       e = e || window.event; | 			e = e || window.event; | ||||||
|       if (e.key === "Escape") { | 			if (e.key === "Escape") { | ||||||
|         cancelModal(); | 				cancelModal(); | ||||||
|       } | 			} | ||||||
|       if (e.keyCode === 13) { | 			if (e.keyCode === 13) { | ||||||
|         // | 				// | ||||||
|       } | 			} | ||||||
|     }; | 		}; | ||||||
|   })(); | 	})(); | ||||||
|   let groups = []; | 	let groups = []; | ||||||
|   RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => { | 	RunnerOrganizationService.runnerOrganizationControllerGetAll().then((val) => { | ||||||
|     const orgs = val.map((r) => { | 		const orgs = val.map((r) => { | ||||||
|       return { label: r.name, value: `ORG_${r.id}` }; | 			return { label: r.name, value: `ORG_${r.id}` }; | ||||||
|     }); | 		}); | ||||||
|     groups = groups.concat(orgs); | 		groups = groups.concat(orgs); | ||||||
|     RunnerTeamService.runnerTeamControllerGetAll().then((val) => { | 		RunnerTeamService.runnerTeamControllerGetAll().then((val) => { | ||||||
|       const teams = val.map((r) => { | 			const teams = val.map((r) => { | ||||||
|         return { | 				return { | ||||||
|           label: `${r.parentGroup.name} > ${r.name}`, | 					label: `${r.parentGroup.name} > ${r.name}`, | ||||||
|           value: `TEAM_${r.id}`, | 					value: `TEAM_${r.id}`, | ||||||
|         }; | 				}; | ||||||
|       }); | 			}); | ||||||
|       groups = groups.concat(teams); | 			groups = groups.concat(teams); | ||||||
|     }); | 		}); | ||||||
|   }); | 	}); | ||||||
|   let selected_org; | 	let selected_org; | ||||||
|   $: selected_org_or_team = ""; | 	$: selected_org_or_team = ""; | ||||||
|   let files; | 	let files; | ||||||
|   let recent_processed = true; | 	let recent_processed = true; | ||||||
|   $: json_output = []; | 	$: json_output = []; | ||||||
|   $: { | 	$: { | ||||||
|     if (files) { | 		if (files) { | ||||||
|       if ( | 			if ( | ||||||
|         files[0].type === | 				files[0].type === | ||||||
|         "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | 				"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | ||||||
|       ) { | 			) { | ||||||
|         const reader = new FileReader(); | 				const reader = new FileReader(); | ||||||
|         reader.addEventListener("load", async (e) => { | 				reader.addEventListener("load", async (e) => { | ||||||
|           const data = new Uint8Array(e.target.result); | 					const data = new Uint8Array(e.target.result); | ||||||
|           const out = readXlsx(data, { type: "array" }); | 					const out = readXlsx(data, { type: "array" }); | ||||||
|           json_output = xlsx_utils.sheet_to_json( | 					json_output = xlsx_utils.sheet_to_json( | ||||||
|             out.Sheets[Object.keys(out.Sheets)[0]] | 						out.Sheets[Object.keys(out.Sheets)[0]] | ||||||
|           ); | 					); | ||||||
|         }); | 				}); | ||||||
|         reader.readAsArrayBuffer(files[0]); | 				reader.readAsArrayBuffer(files[0]); | ||||||
|       } else { | 			} else { | ||||||
|         const reader = new FileReader(); | 				const reader = new FileReader(); | ||||||
|         reader.addEventListener("load", async (e) => { | 				reader.addEventListener("load", async (e) => { | ||||||
|           json_output = await csv({ | 					json_output = await csv({ | ||||||
|             delimiter: [";", ","], | 						delimiter: [";", ","], | ||||||
|             trim: true, | 						trim: true, | ||||||
|           }).fromString(e.target.result); | 					}).fromString(e.target.result); | ||||||
|         }); | 				}); | ||||||
|         reader.readAsText(files[0]); | 				reader.readAsText(files[0]); | ||||||
|       } | 			} | ||||||
|     } | 		} | ||||||
|   } | 	} | ||||||
|   function importAction() { | 	function importAction() { | ||||||
|     if (recent_processed === true) { | 		if (recent_processed === true) { | ||||||
|       toast.loading($_("runners-are-being-imported")); | 			toast.loading($_("runners-are-being-imported")); | ||||||
|       recent_processed = false; | 			recent_processed = false; | ||||||
|       const mapped = json_output.map(function (runner) { | 			const mapped = json_output.map(function (runner) { | ||||||
|         return { | 				return { | ||||||
|           firstname: runner[`${$_("csv_import__firstname")}`], | 					firstname: runner[`${$_("csv_import__firstname")}`], | ||||||
|           middlename: runner[`${$_("csv_import__middlename")}`], | 					middlename: runner[`${$_("csv_import__middlename")}`], | ||||||
|           lastname: runner[`${$_("csv_import__lastname")}`], | 					lastname: runner[`${$_("csv_import__lastname")}`], | ||||||
|           team: | 					team: | ||||||
|             runner[`${$_("csv_import__team")}`] || | 						runner[`${$_("csv_import__team")}`] || | ||||||
|             runner[`${$_("csv_import__class")}`], | 						runner[`${$_("csv_import__class")}`], | ||||||
|         }; | 				}; | ||||||
|       }); | 			}); | ||||||
|       let org = 0; | 			let org = 0; | ||||||
|       if (opened_from === "OrgDetail") { | 			if (opened_from === "OrgDetail") { | ||||||
|         org = passed_org.id; | 				org = passed_org.id; | ||||||
|       } | 			} | ||||||
|       if (opened_from === "OrgOverview") { | 			if (opened_from === "OrgOverview") { | ||||||
|         org = parseInt(selected_org); | 				org = parseInt(selected_org); | ||||||
|       } | 			} | ||||||
|       if (opened_from === "OrgOverview" || opened_from === "OrgDetail") { | 			if (opened_from === "OrgOverview" || opened_from === "OrgDetail") { | ||||||
|         ImportService.importControllerPostOrgsJson(org, mapped) | 				ImportService.importControllerPostOrgsJson(org, mapped) | ||||||
|           .then((resp) => { | 					.then((resp) => { | ||||||
|             toast.dismiss(); | 						toast.dismiss(); | ||||||
|             recent_processed = true; | 						recent_processed = true; | ||||||
|             toast.success($_("import-finished")); | 						toast.success($_("import-finished")); | ||||||
|             cancelModal(); | 						cancelModal(); | ||||||
|           }) | 					}) | ||||||
|           .catch((err) => { | 					.catch((err) => { | ||||||
|             toast.dismiss(); | 						toast.dismiss(); | ||||||
|             recent_processed = true; | 						recent_processed = true; | ||||||
|             toast.error($_("error-during-import")); | 						toast.error($_("error-during-import")); | ||||||
|             cancelModal(); | 						cancelModal(); | ||||||
|           }); | 					}); | ||||||
|       } | 			} | ||||||
|       if (opened_from === "TeamDetail") { | 			if (opened_from === "TeamDetail") { | ||||||
|         ImportService.importControllerPostTeamsJson(passed_team.id, mapped) | 				ImportService.importControllerPostTeamsJson(passed_team.id, mapped) | ||||||
|           .then((resp) => { | 					.then((resp) => { | ||||||
|             toast.dismiss(); | 						toast.dismiss(); | ||||||
|             recent_processed = true; | 						recent_processed = true; | ||||||
|             toast.success($_("import-finished")); | 						toast.success($_("import-finished")); | ||||||
|             cancelModal(); | 						cancelModal(); | ||||||
|           }) | 					}) | ||||||
|           .catch((err) => { | 					.catch((err) => { | ||||||
|             toast.dismiss(); | 						toast.dismiss(); | ||||||
|             recent_processed = true; | 						recent_processed = true; | ||||||
|             toast.error($_("error-during-import")); | 						toast.error($_("error-during-import")); | ||||||
|             cancelModal(); | 						cancelModal(); | ||||||
|           }); | 					}); | ||||||
|       } | 			} | ||||||
|       if (opened_from === "RunnerOverview") { | 			if (opened_from === "RunnerOverview") { | ||||||
|         if (selected_org_or_team.includes("ORG_")) { | 				if (selected_org_or_team.includes("ORG_")) { | ||||||
|           selected_org_or_team = selected_org_or_team.split("_")[1]; | 					selected_org_or_team = selected_org_or_team.split("_")[1]; | ||||||
|           ImportService.importControllerPostOrgsJson( | 					ImportService.importControllerPostOrgsJson( | ||||||
|             selected_org_or_team, | 						selected_org_or_team, | ||||||
|             mapped | 						mapped | ||||||
|           ) | 					) | ||||||
|             .then((resp) => { | 						.then((resp) => { | ||||||
|               dispatch("created", { runners: resp }); | 							dispatch("created", { runners: resp }); | ||||||
|               toast.dismiss(); | 							toast.dismiss(); | ||||||
|               recent_processed = true; | 							recent_processed = true; | ||||||
|               toast.success($_("import-finished")); | 							toast.success($_("import-finished")); | ||||||
|               cancelModal(); | 							cancelModal(); | ||||||
|             }) | 						}) | ||||||
|             .catch((err) => { | 						.catch((err) => { | ||||||
|               toast.dismiss(); | 							toast.dismiss(); | ||||||
|               recent_processed = true; | 							recent_processed = true; | ||||||
|               toast.error($_("error-during-import")); | 							toast.error($_("error-during-import")); | ||||||
|               cancelModal(); | 							cancelModal(); | ||||||
|             }); | 						}); | ||||||
|         } | 				} | ||||||
|         if (selected_org_or_team.includes("TEAM_")) { | 				if (selected_org_or_team.includes("TEAM_")) { | ||||||
|           selected_org_or_team = selected_org_or_team.split("_")[1]; | 					selected_org_or_team = selected_org_or_team.split("_")[1]; | ||||||
|           ImportService.importControllerPostTeamsJson( | 					ImportService.importControllerPostTeamsJson( | ||||||
|             selected_org_or_team, | 						selected_org_or_team, | ||||||
|             mapped | 						mapped | ||||||
|           ) | 					) | ||||||
|             .then((resp) => { | 						.then((resp) => { | ||||||
|               dispatch("created", { runners: resp }); | 							dispatch("created", { runners: resp }); | ||||||
|               toast.dismiss(); | 							toast.dismiss(); | ||||||
|               recent_processed = true; | 							recent_processed = true; | ||||||
|               toast.success($_("import-finished")); | 							toast.success($_("import-finished")); | ||||||
|               cancelModal(); | 							cancelModal(); | ||||||
|             }) | 						}) | ||||||
|             .catch((err) => { | 						.catch((err) => { | ||||||
|               toast.dismiss(); | 							toast.dismiss(); | ||||||
|               recent_processed = true; | 							recent_processed = true; | ||||||
|               toast.error($_("error-during-import")); | 							toast.error($_("error-during-import")); | ||||||
|               cancelModal(); | 							cancelModal(); | ||||||
|             }); | 						}); | ||||||
|         } | 				} | ||||||
|       } | 			} | ||||||
|     } | 		} | ||||||
|   } | 	} | ||||||
| </script> | </script> | ||||||
|  |  | ||||||
| {#if import_modal_open} | {#if import_modal_open} | ||||||
|   <div | 	<div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" | 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside | 		use:clickOutside | ||||||
|     on:click_outside={() => { | 		on:click_outside={() => { | ||||||
|       cancelModal(); | 			cancelModal(); | ||||||
|     }} | 		}} | ||||||
|   > | 	> | ||||||
|     <div | 		<div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" | 			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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div | 				<div | ||||||
|           class="absolute inset-0 bg-gray-500 opacity-75" | 					class="absolute inset-0 bg-gray-500 opacity-75" | ||||||
|           data-id="modal_backdrop" | 					data-id="modal_backdrop" | ||||||
|         /> | 				/> | ||||||
|       </div> | 			</div> | ||||||
|       <span | 			<span | ||||||
|         class="hidden sm:inline-block sm:align-middle sm:h-screen" | 				class="hidden sm:inline-block sm:align-middle sm:h-screen" | ||||||
|         aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
|       > | 			> | ||||||
|       <div | 			<div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-max sm:w-full" | 				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]" | ||||||
|         role="dialog" | 				role="dialog" | ||||||
|         aria-modal="true" | 				aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
|       > | 			> | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div | ||||||
|           <div class="sm:flex sm:items-start"> | 					class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl lg:rounded-xl" | ||||||
|             <div | 				> | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 					<div class=""> | ||||||
|             > | 						<div | ||||||
|               <svg | 							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" | ||||||
|                 xmlns="http://www.w3.org/2000/svg" | 						> | ||||||
|                 viewBox="0 0 24 24" | 							<svg | ||||||
|                 class="h-6 w-6 text-blue-600" | 								xmlns="http://www.w3.org/2000/svg" | ||||||
|                 fill="currentColor" | 								viewBox="0 0 24 24" | ||||||
|                 width="24" | 								class="h-6 w-6 text-blue-600" | ||||||
|                 height="24" | 								fill="currentColor" | ||||||
|                 ><path fill="none" d="M0 0h24v24H0z" /> | 								width="24" | ||||||
|                 <path | 								height="24" | ||||||
|                   d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z" | 								><path fill="none" d="M0 0h24v24H0z" /> | ||||||
|                 /></svg | 								<path | ||||||
|               > | 									d="M9.83 8.79L8 9.456V13H6V8.05h.015l5.268-1.918c.244-.093.51-.14.782-.131a2.616 2.616 0 0 1 2.427 1.82c.186.583.356.977.51 1.182A4.992 4.992 0 0 0 19 11v2a6.986 6.986 0 0 1-5.402-2.547l-.581 3.297L15 15.67V23h-2v-5.986l-2.05-1.987-.947 4.298-6.894-1.215.348-1.97 4.924.868L9.83 8.79zM13.5 5.5a2 2 0 1 1 0-4 2 2 0 0 1 0 4z" | ||||||
|             </div> | 								/></svg | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-2 sm:text-left w-full"> | 							> | ||||||
|               <h3 class="text-lg leading-6 font-bold mt-2 text-gray-900"> | 						</div> | ||||||
|                 {$_("runner-import")} | 						<div class="mt-3 sm:mt-0 sm:text-left w-full"> | ||||||
|               </h3> | 							<h3 class="text-lg leading-6 font-bold mt-2 text-gray-900"> | ||||||
|             </div> | 								{$_("runner-import")} | ||||||
|           </div> | 							</h3> | ||||||
|           <div class="mt-5 text-center sm:mt-0 sm:ml-2 sm:text-left w-full"> | 						</div> | ||||||
|             {#if json_output.length === 0} | 					</div> | ||||||
|               <div class="mt-2 mb-6"> | 					<div class="sm:text-left w-full"> | ||||||
|                 <p class="text-sm text-gray-500"> | 						{#if json_output.length === 0} | ||||||
|                   {$_("please-provide-the-required-csv-xlsx-file")} | 							<div class="mb-6"> | ||||||
|                 </p> | 								<p class="text-sm text-gray-500"> | ||||||
|               </div> | 									{$_("please-provide-the-required-csv-xlsx-file")} | ||||||
|               <div class="overflow-hidden relative mt-4 mb-4"> | 								</p> | ||||||
|                 <input | 							</div> | ||||||
|                   accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | 							<div class="overflow-hidden relative mt-4 mb-4"> | ||||||
|                   bind:files | 								<input | ||||||
|                   type="file" | 									accept=".csv, application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" | ||||||
|                 /> | 									bind:files | ||||||
|               </div> | 									type="file" | ||||||
|               <div class="overflow-hidden relative mt-4 mb-4"> | 								/> | ||||||
|                 <button | 							</div> | ||||||
|                   on:click={() => { | 							<div class="overflow-hidden relative mt-4 mb-4"> | ||||||
|                     cancelModal(); | 								<button | ||||||
|                   }} | 									on:click={() => { | ||||||
|                   type="button" | 										cancelModal(); | ||||||
|                   class="w-full rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 md:ml-40 mr-0 sm:ml-0 sm:w-auto sm:text-sm" | 									}} | ||||||
|                 > | 									type="button" | ||||||
|                   {$_("cancel")} | 									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" | ||||||
|                 </button> | 								> | ||||||
|               </div> | 									{$_("cancel")} | ||||||
|             {/if} | 								</button> | ||||||
|             {#if json_output.length > 0} | 							</div> | ||||||
|               {#if opened_from === "OrgOverview"} | 						{/if} | ||||||
|                 <p>{$_("import__target-organization")}</p> | 						{#if json_output.length > 0} | ||||||
|                 <select | 							{#if opened_from === "OrgOverview"} | ||||||
|                   name="team" | 								<p>{$_("import__target-organization")}</p> | ||||||
|                   bind:value={selected_org} | 								<select | ||||||
|                   class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | 									name="team" | ||||||
|                 > | 									bind:value={selected_org} | ||||||
|                   {#each passed_orgs as o} | 									class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | ||||||
|                     <option value={o.id}>{o.name}</option> | 								> | ||||||
|                   {/each} | 									{#each passed_orgs as o} | ||||||
|                 </select> | 										<option value={o.id}>{o.name}</option> | ||||||
|                 <p>{$_("confirm-runner-import")}</p> | 									{/each} | ||||||
|               {/if} | 								</select> | ||||||
|               {#if opened_from === "RunnerOverview"} | 								<p>{$_("confirm-runner-import")}</p> | ||||||
|                 <p>{$_("group")}</p> | 							{/if} | ||||||
|                 <Select | 							{#if opened_from === "RunnerOverview"} | ||||||
|                   containerClasses="rounded-l-md mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | 								<p>{$_("group")}</p> | ||||||
|                   itemFilter={(label, filterText, option) => | 								<select | ||||||
|                     label.toLowerCase().includes(filterText.toLowerCase()) || | 									bind:value={selected_org_or_team} | ||||||
|                     option.id.value | 									class="mt-1 focus:ring-indigo-500 focus:border-indigo-500 block w-full shadow-sm rounded-l-md sm:text-sm border-gray-300 border bg-gray-50 text-neutral-800 rounded-md p-2" | ||||||
|                       .toString() | 								> | ||||||
|                       .startsWith(filterText.toLowerCase())} | 									{#each groups as g} | ||||||
|                   items={groups} | 										<option value={g.value}>{g.label}</option> | ||||||
|                   showChevron={true} | 									{/each} | ||||||
|                   placeholder={$_( | 								</select> | ||||||
|                     "search-for-an-organization-or-team-by-name-or-id" | 							{/if} | ||||||
|                   )} | 							{#if opened_from === "OrgDetail"} | ||||||
|                   noOptionsMessage={$_("no-organization-or-team-found")} | 								<p> | ||||||
|                   on:select={(selectedValue) => { | 									{$_("runnerimport_verify_runners_org", { | ||||||
|                     selected_org_or_team = selectedValue.detail.value; | 										values: { org_name: passed_org.name }, | ||||||
|                   }} | 									})} | ||||||
|                   on:clear={() => (selected_org_or_team = null)} | 								</p> | ||||||
|                 /> | 							{/if} | ||||||
|               {/if} | 							<div class="relative w-full mt-4 mb-4"> | ||||||
|               {#if opened_from === "OrgDetail"} | 								<div class="w-full overflow-x-auto max-h-[50vh]"> | ||||||
|                 <p> | 									<table class="divide-y divide-gray-200 w-full"> | ||||||
|                   {$_("runnerimport_verify_runners_org", { | 										<thead class="bg-gray-50"> | ||||||
|                     values: { org_name: passed_org.name }, | 											<tr class="odd:bg-white even:bg-gray-100"> | ||||||
|                   })} | 												<th | ||||||
|                 </p> | 													scope="col" | ||||||
|               {/if} | 													class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | ||||||
|               <input | 												> | ||||||
|                 type="search" | 													{$_("csv_import__firstname")} | ||||||
|                 bind:value={searchvalue} | 												</th> | ||||||
|                 placeholder={$_("datatable.search")} | 												<th | ||||||
|                 aria-label={$_("datatable.search")} | 													scope="col" | ||||||
|                 class="p-2 w-full" | 													class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | ||||||
|               /> | 												> | ||||||
|               <div class="relative w-full mt-4 mb-4"> | 													{$_("csv_import__middlename")} | ||||||
|                 <div class="w-full overflow-x-auto"> | 												</th> | ||||||
|                   <table class="divide-y divide-gray-200 w-full"> | 												<th | ||||||
|                     <thead class="bg-gray-50"> | 													scope="col" | ||||||
|                       <tr class="odd:bg-white even:bg-gray-100"> | 													class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | ||||||
|                         <th | 												> | ||||||
|                           scope="col" | 													{$_("csv_import__lastname")} | ||||||
|                           class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | 												</th> | ||||||
|                         > | 												{#if (opened_from !== "TeamDetail" && opened_from !== "RunnerOverview") || (opened_from === "RunnerOverview" && selected_org_or_team.includes("ORG_"))} | ||||||
|                           {$_("csv_import__firstname")} | 													<th | ||||||
|                         </th> | 														scope="col" | ||||||
|                         <th | 														class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | ||||||
|                           scope="col" | 													> | ||||||
|                           class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | 														{$_("csv_import__team")} | ||||||
|                         > | 													</th> | ||||||
|                           {$_("csv_import__middlename")} | 												{/if} | ||||||
|                         </th> | 											</tr> | ||||||
|                         <th | 										</thead> | ||||||
|                           scope="col" | 										<tbody class="divide-y divide-gray-200"> | ||||||
|                           class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | 											{#each json_output as runner} | ||||||
|                         > | 												{#if Object.values(runner) | ||||||
|                           {$_("csv_import__lastname")} | 													.toString() | ||||||
|                         </th> | 													.toLowerCase() | ||||||
|                         {#if (opened_from !== "TeamDetail" && opened_from !== "RunnerOverview") || (opened_from === "RunnerOverview" && selected_org_or_team.includes("ORG_"))} | 													.includes(searchvalue)} | ||||||
|                           <th | 													<tr class="odd:bg-white even:bg-gray-100"> | ||||||
|                             scope="col" | 														<td class="px-6 py-4 whitespace-nowrap"> | ||||||
|                             class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider" | 															{runner[`${$_("csv_import__firstname")}`]} | ||||||
|                           > | 														</td> | ||||||
|                             {$_("csv_import__team")} | 														<td class="px-6 py-4 whitespace-nowrap"> | ||||||
|                           </th> | 															{runner[`${$_("csv_import__middlename")}`] || ""} | ||||||
|                         {/if} | 														</td> | ||||||
|                       </tr> | 														<td class="px-6 py-4 whitespace-nowrap"> | ||||||
|                     </thead> | 															{runner[`${$_("csv_import__lastname")}`]} | ||||||
|                     <tbody class="divide-y divide-gray-200"> | 														</td> | ||||||
|                       {#each json_output as runner} | 														{#if (opened_from !== "TeamDetail" && opened_from !== "RunnerOverview") || (opened_from === "RunnerOverview" && selected_org_or_team.includes("ORG_"))} | ||||||
|                         {#if Object.values(runner) | 															<td class="px-6 py-4 whitespace-nowrap"> | ||||||
|                           .toString() | 																{runner[`${$_("csv_import__team")}`] || | ||||||
|                           .toLowerCase() | 																	runner[`${$_("csv_import__class")}`] || | ||||||
|                           .includes(searchvalue)} | 																	"---"} | ||||||
|                           <tr class="odd:bg-white even:bg-gray-100"> | 															</td> | ||||||
|                             <td class="px-6 py-4 whitespace-nowrap"> | 														{/if} | ||||||
|                               {runner[`${$_("csv_import__firstname")}`]} | 													</tr> | ||||||
|                             </td> | 												{/if} | ||||||
|                             <td class="px-6 py-4 whitespace-nowrap"> | 											{/each} | ||||||
|                               {runner[`${$_("csv_import__middlename")}`] || ""} | 										</tbody> | ||||||
|                             </td> | 									</table> | ||||||
|                             <td class="px-6 py-4 whitespace-nowrap"> | 								</div> | ||||||
|                               {runner[`${$_("csv_import__lastname")}`]} | 								<button | ||||||
|                             </td> | 									disabled={!importButtonEnabled} | ||||||
|                             {#if (opened_from !== "TeamDetail" && opened_from !== "RunnerOverview") || (opened_from === "RunnerOverview" && selected_org_or_team.includes("ORG_"))} | 									class:opacity-50={!importButtonEnabled} | ||||||
|                               <td class="px-6 py-4 whitespace-nowrap"> | 									on:click={importAction} | ||||||
|                                 {runner[`${$_("csv_import__team")}`] || | 									type="button" | ||||||
|                                   runner[`${$_("csv_import__class")}`] || | 									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" | ||||||
|                                   "---"} | 								> | ||||||
|                               </td> | 									{$_("import-runners")} | ||||||
|                             {/if} | 								</button> | ||||||
|                           </tr> | 								<button | ||||||
|                         {/if} | 									on:click={() => { | ||||||
|                       {/each} | 										cancelModal(); | ||||||
|                     </tbody> | 									}} | ||||||
|                   </table> | 									type="button" | ||||||
|                 </div> | 									class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|                 <button | 								> | ||||||
|                   disabled={!importButtonEnabled} | 									{$_("cancel")} | ||||||
|                   class:opacity-50={!importButtonEnabled} | 								</button> | ||||||
|                   on:click={importAction} | 							</div> | ||||||
|                   type="button" | 						{/if} | ||||||
|                   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 sm:ml-3 sm:w-auto sm:text-sm" | 					</div> | ||||||
|                 > | 				</div> | ||||||
|                   {$_("import-runners")} | 			</div> | ||||||
|                 </button> | 		</div> | ||||||
|                 <button | 	</div> | ||||||
|                   on:click={() => { |  | ||||||
|                     cancelModal(); |  | ||||||
|                   }} |  | ||||||
|                   type="button" |  | ||||||
|                   class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |  | ||||||
|                 > |  | ||||||
|                   {$_("cancel")} |  | ||||||
|                 </button> |  | ||||||
|               </div> |  | ||||||
|             {/if} |  | ||||||
|           </div> |  | ||||||
|         </div> |  | ||||||
|       </div> |  | ||||||
|     </div> |  | ||||||
|   </div> |  | ||||||
| {/if} | {/if} | ||||||
|   | |||||||
| @@ -291,6 +291,11 @@ | |||||||
| 			<br /> | 			<br /> | ||||||
| 			<span class="text-gray-700">{original_data.distance / 1000} km</span> | 			<span class="text-gray-700">{original_data.distance / 1000} km</span> | ||||||
| 		</div> | 		</div> | ||||||
|  | 		<div class="text-sm w-full mt-2"> | ||||||
|  | 			<span class="font-semibold text-gray-700">{$_('created_via')}</span> | ||||||
|  | 			<br /> | ||||||
|  | 			<span class="text-gray-700">{original_data.created_via}</span> | ||||||
|  | 		</div> | ||||||
| 	</section> | 	</section> | ||||||
| {:catch error} | {:catch error} | ||||||
| 	<PromiseError {error} /> | 	<PromiseError {error} /> | ||||||
|   | |||||||
| @@ -180,6 +180,7 @@ | |||||||
| 	import store from "../../store"; | 	import store from "../../store"; | ||||||
| 	import AddRunnerModal from "./AddRunnerModal.svelte"; | 	import AddRunnerModal from "./AddRunnerModal.svelte"; | ||||||
| 	import ImportRunnerModal from "./ImportRunnerModal.svelte"; | 	import ImportRunnerModal from "./ImportRunnerModal.svelte"; | ||||||
|  | 	import toast from "svelte-french-toast"; | ||||||
| 	$: current_runners = []; | 	$: current_runners = []; | ||||||
| 	export let modal_open = false; | 	export let modal_open = false; | ||||||
| 	export let import_modal_open = false; | 	export let import_modal_open = false; | ||||||
|   | |||||||
| @@ -68,14 +68,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -88,15 +88,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -112,18 +112,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-scan-fixed-only")} |                 {$_("create-a-new-scan-fixed-only")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-nessecary-information-to-create-a-new-scan" |                     "please-provide-the-nessecary-information-to-create-a-new-scan" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="donor" |                     for="donor" | ||||||
| @@ -180,13 +180,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -195,7 +195,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -33,14 +33,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -53,15 +53,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 xmlns="http://www.w3.org/2000/svg" |                 xmlns="http://www.w3.org/2000/svg" | ||||||
| @@ -76,21 +76,21 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("please-confirm-the-deletion-of-scan")} |                 {$_("please-confirm-the-deletion-of-scan")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 #{delete_scan.id} |                 #{delete_scan.id} | ||||||
|               </div> |               </div> | ||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("delete")} |             {$_("delete")} | ||||||
|           </button> |           </button> | ||||||
| @@ -99,7 +99,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -72,14 +72,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -92,15 +92,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -115,18 +115,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:mt-0"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-scanstation")} |                 {$_("create-a-new-scanstation")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-create-a-new-scanstation" |                     "please-provide-the-required-information-to-create-a-new-scanstation" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="track" |                     for="track" | ||||||
| @@ -188,13 +188,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -203,7 +203,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -24,12 +24,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={cancelDelete} |     on:click_outside={cancelDelete} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -42,15 +42,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -62,11 +62,11 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("attention")} |                 {$_("attention")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "do-you-want-to-delete-this-donor-with-all-related-donations" |                     "do-you-want-to-delete-this-donor-with-all-related-donations" | ||||||
| @@ -78,18 +78,18 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={deleteStation} |             on:click={deleteStation} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("confirm-delete-station-with-all-scans")} |             {$_("confirm-delete-station-with-all-scans")} | ||||||
|           </button> |           </button> | ||||||
|           <button |           <button | ||||||
|             on:click={cancelDelete} |             on:click={cancelDelete} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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-keep-station")} |             {$_("cancel-keep-station")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -60,9 +60,9 @@ | |||||||
| 	{#if valueCopy != null} | 	{#if valueCopy != null} | ||||||
| 		<textarea bind:this={areaDom}>{valueCopy}</textarea> | 		<textarea bind:this={areaDom}>{valueCopy}</textarea> | ||||||
| 	{/if} | 	{/if} | ||||||
| 	<div class="fixed z-10 inset-0 overflow-y-auto"> | 	<div class="fixed z-10 inset-0 overflow-y-hidden"> | ||||||
| 		<div | 		<div | ||||||
| 			class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" | 			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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
| 				<div | 				<div | ||||||
| @@ -75,15 +75,15 @@ | |||||||
| 				aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
| 			> | 			> | ||||||
| 			<div | 			<div | ||||||
| 				class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" | 				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]" | ||||||
| 				role="dialog" | 				role="dialog" | ||||||
| 				aria-modal="true" | 				aria-modal="true" | ||||||
| 				aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
| 			> | 			> | ||||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
| 					<div class="sm:flex sm:items-start"> | 					<div class=""> | ||||||
| 						<div | 						<div | ||||||
| 							class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 							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 | 							<svg | ||||||
| 								class="h-6 w-6 text-blue-600" | 								class="h-6 w-6 text-blue-600" | ||||||
| @@ -96,11 +96,11 @@ | |||||||
| 								/></svg | 								/></svg | ||||||
| 							> | 							> | ||||||
| 						</div> | 						</div> | ||||||
| 						<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | 						<div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
| 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
| 								{$_("token")} | 								{$_("token")} | ||||||
| 							</h3> | 							</h3> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500"> | 								<p class="text-sm text-gray-500"> | ||||||
| 									{$_( | 									{$_( | ||||||
| 										"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again" | 										"the-scanstations-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again" | ||||||
| @@ -109,7 +109,7 @@ | |||||||
| 									{$_("please-copy-the-token-and-store-it-somewhere-save")} | 									{$_("please-copy-the-token-and-store-it-somewhere-save")} | ||||||
| 								</p> | 								</p> | ||||||
| 							</div> | 							</div> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<label | 								<label | ||||||
| 									for="token" | 									for="token" | ||||||
| 									class="block text-sm font-medium text-gray-700" | 									class="block text-sm font-medium text-gray-700" | ||||||
| @@ -170,7 +170,7 @@ | |||||||
| 						<img | 						<img | ||||||
| 							class:w-[50%]={is_qrcode} | 							class:w-[50%]={is_qrcode} | ||||||
| 							class:w-full={!is_qrcode} | 							class:w-full={!is_qrcode} | ||||||
| 							class="md:w-auto mb-2 mx-auto" | 							class="w-full lg:max-w-[50vw] lg:max-h-[10rem] object-contain mb-2 mx-auto" | ||||||
| 							alt="Registrierungscode" | 							alt="Registrierungscode" | ||||||
| 							src={textToBase64Barcode(window.config.baseurl, is_qrcode)} | 							src={textToBase64Barcode(window.config.baseurl, is_qrcode)} | ||||||
| 						/> | 						/> | ||||||
| @@ -178,17 +178,17 @@ | |||||||
| 						<img | 						<img | ||||||
| 							class:w-[50%]={is_qrcode} | 							class:w-[50%]={is_qrcode} | ||||||
| 							class:w-full={!is_qrcode} | 							class:w-full={!is_qrcode} | ||||||
| 							class="md:w-auto mb-2 mx-auto" | 							class="w-full lg:max-w-[50vw] lg:max-h-[10rem] object-contain mb-2 mx-auto" | ||||||
| 							alt="Registrierungscode" | 							alt="Registrierungscode" | ||||||
| 							src={barcode} | 							src={barcode} | ||||||
| 						/> | 						/> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> | 				<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 | 					<button | ||||||
| 						on:click={close} | 						on:click={close} | ||||||
| 						type="button" | 						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-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" | 						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-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
| 					> | 					> | ||||||
| 						{$_("yes-i-copied-the-token")} | 						{$_("yes-i-copied-the-token")} | ||||||
| 					</button> | 					</button> | ||||||
|   | |||||||
| @@ -25,12 +25,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={cancelDelete} |     on:click_outside={cancelDelete} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -43,15 +43,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -63,11 +63,11 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("attention")} |                 {$_("attention")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_("do-you-really-want-to-delete-your-profile")} |                   {$_("do-you-really-want-to-delete-your-profile")} | ||||||
|                   <br /> |                   <br /> | ||||||
| @@ -81,18 +81,18 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={deleteMe} |             on:click={deleteMe} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("confirm-delete-my-user-profile")} |             {$_("confirm-delete-my-user-profile")} | ||||||
|           </button> |           </button> | ||||||
|           <button |           <button | ||||||
|             on:click={cancelDelete} |             on:click={cancelDelete} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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-keep-my-profile")} |             {$_("cancel-keep-my-profile")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -66,7 +66,7 @@ | |||||||
|   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> |   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> | ||||||
|     <span class="text-3xl font-bold">{$_("settings")}</span> |     <span class="text-3xl font-bold">{$_("settings")}</span> | ||||||
|     <div> |     <div> | ||||||
|       <div class="md:grid md:grid-cols-3 md:gap-6"> |       <div class="md:grid md:grid-cols-3 md:gap-2 lg:gap-6"> | ||||||
|         <div class="md:col-span-1"> |         <div class="md:col-span-1"> | ||||||
|           <div class="sm:px-0"> |           <div class="sm:px-0"> | ||||||
|             <h3 class="text-lg font-medium leading-6 text-gray-900"> |             <h3 class="text-lg font-medium leading-6 text-gray-900"> | ||||||
| @@ -174,7 +174,7 @@ | |||||||
|   </div> |   </div> | ||||||
|   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> |   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> | ||||||
|     <div> |     <div> | ||||||
|       <div class="md:grid md:grid-cols-3 md:gap-6"> |       <div class="md:grid md:grid-cols-3 md:gap-2 lg:gap-6"> | ||||||
|         <div class="md:col-span-1"> |         <div class="md:col-span-1"> | ||||||
|           <div class="sm:px-0"> |           <div class="sm:px-0"> | ||||||
|             <h3 class="text-lg font-medium leading-6 text-gray-900"> |             <h3 class="text-lg font-medium leading-6 text-gray-900"> | ||||||
| @@ -245,7 +245,7 @@ | |||||||
|   </div> |   </div> | ||||||
|   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> |   <div class="max-w-7xl mx-auto py-6 px-4 sm:px-6 lg:px-8"> | ||||||
|     <div> |     <div> | ||||||
|       <div class="md:grid md:grid-cols-3 md:gap-6"> |       <div class="md:grid md:grid-cols-3 md:gap-2 lg:gap-6"> | ||||||
|         <div class="md:col-span-1"> |         <div class="md:col-span-1"> | ||||||
|           <div class="sm:px-0"> |           <div class="sm:px-0"> | ||||||
|             <h3 class="text-lg font-medium leading-6 text-gray-900"> |             <h3 class="text-lg font-medium leading-6 text-gray-900"> | ||||||
| @@ -268,7 +268,7 @@ | |||||||
|                       on:click={() => { |                       on:click={() => { | ||||||
|                         modal_open = true; |                         modal_open = true; | ||||||
|                       }} |                       }} | ||||||
|                       class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:" |                       class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|                       >{$_("confirm-deletion")}</button |                       >{$_("confirm-deletion")}</button | ||||||
|                     > |                     > | ||||||
|                     <button |                     <button | ||||||
| @@ -285,7 +285,7 @@ | |||||||
|                         delete_triggered = true; |                         delete_triggered = true; | ||||||
|                       }} |                       }} | ||||||
|                       type="button" |                       type="button" | ||||||
|                       class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:" |                       class="w-full justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|                       >{$_("delete-profile")}</button |                       >{$_("delete-profile")}</button | ||||||
|                     > |                     > | ||||||
|                   {/if} |                   {/if} | ||||||
|   | |||||||
| @@ -58,14 +58,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -78,15 +78,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -101,18 +101,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-statsclient")} |                 {$_("create-a-new-statsclient")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-create-a-new-statsclient" |                     "please-provide-the-required-information-to-create-a-new-statsclient" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="description" |                     for="description" | ||||||
| @@ -133,13 +133,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -148,7 +148,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -23,12 +23,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={cancelDelete} |     on:click_outside={cancelDelete} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -41,15 +41,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -61,11 +61,11 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <!-- <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <!-- <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_('attention')} |                 {$_('attention')} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     'do-you-want-to-delete-this-donor-with-all-related-donations' |                     'do-you-want-to-delete-this-donor-with-all-related-donations' | ||||||
| @@ -77,18 +77,18 @@ | |||||||
|             </div> --> |             </div> --> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={deleteClient} |             on:click={deleteClient} | ||||||
|             type="button" |             type="button" | ||||||
|             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("confirm-delete-statsclient")} |             {$_("confirm-delete-statsclient")} | ||||||
|           </button> |           </button> | ||||||
|           <button |           <button | ||||||
|             on:click={cancelDelete} |             on:click={cancelDelete} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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-keep-statsclient")} |             {$_("cancel-keep-statsclient")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -37,9 +37,9 @@ | |||||||
|   {#if valueCopy != null} |   {#if valueCopy != null} | ||||||
|     <textarea bind:this={areaDom}>{valueCopy}</textarea> |     <textarea bind:this={areaDom}>{valueCopy}</textarea> | ||||||
|   {/if} |   {/if} | ||||||
|   <div class="fixed z-10 inset-0 overflow-y-auto"> |   <div class="fixed z-10 inset-0 overflow-y-hidden"> | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -52,15 +52,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -73,11 +73,11 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("token")} |                 {$_("token")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again" |                     "the-statsclient-api-token-will-only-get-displayed-once-you-wont-be-able-to-change-or-view-it-again" | ||||||
| @@ -86,7 +86,7 @@ | |||||||
|                   {$_("please-copy-the-token-and-store-it-somewhere-save")} |                   {$_("please-copy-the-token-and-store-it-somewhere-save")} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <label |                 <label | ||||||
|                   for="token" |                   for="token" | ||||||
|                   class="block text-sm font-medium text-gray-700" |                   class="block text-sm font-medium text-gray-700" | ||||||
| @@ -123,11 +123,11 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             on:click={close} |             on:click={close} | ||||||
|             type="button" |             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-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" |             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-green-500 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
|           > |           > | ||||||
|             {$_("yes-i-copied-the-token")} |             {$_("yes-i-copied-the-token")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -69,14 +69,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -89,15 +89,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-md text-left shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -112,18 +112,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-team")} |                 {$_("create-a-new-team")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-team" |                     "please-provide-the-required-information-to-add-a-new-team" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -184,13 +184,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -199,7 +199,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -17,7 +17,7 @@ | |||||||
| 		RunnerTeamService.runnerTeamControllerRemove(delete_team.id, true) | 		RunnerTeamService.runnerTeamControllerRemove(delete_team.id, true) | ||||||
| 			.then((resp) => { | 			.then((resp) => { | ||||||
| 				toast.dismiss(); | 				toast.dismiss(); | ||||||
| 				toast($_("team-deleted")); | 				toast.success($_("team-deleted")); | ||||||
| 				location.replace("./"); | 				location.replace("./"); | ||||||
| 			}) | 			}) | ||||||
| 			.catch((err) => {}); | 			.catch((err) => {}); | ||||||
| @@ -26,12 +26,12 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
| 	<div | 	<div | ||||||
| 		class="fixed z-10 inset-0 overflow-y-auto" | 		class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
| 		use:clickOutside | 		use:clickOutside | ||||||
| 		on:click_outside={cancelDelete} | 		on:click_outside={cancelDelete} | ||||||
| 	> | 	> | ||||||
| 		<div | 		<div | ||||||
| 			class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" | 			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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
| 				<div | 				<div | ||||||
| @@ -44,15 +44,15 @@ | |||||||
| 				aria-hidden="true">​</span | 				aria-hidden="true">​</span | ||||||
| 			> | 			> | ||||||
| 			<div | 			<div | ||||||
| 				class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" | 				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]" | ||||||
| 				role="dialog" | 				role="dialog" | ||||||
| 				aria-modal="true" | 				aria-modal="true" | ||||||
| 				aria-labelledby="modal-headline" | 				aria-labelledby="modal-headline" | ||||||
| 			> | 			> | ||||||
| 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> | 				<div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
| 					<div class="sm:flex sm:items-start"> | 					<div class=""> | ||||||
| 						<div | 						<div | ||||||
| 							class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" | 							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 | 							<svg | ||||||
| 								class="h-6 w-6 text-blue-600" | 								class="h-6 w-6 text-blue-600" | ||||||
| @@ -67,13 +67,13 @@ | |||||||
| 								/></svg | 								/></svg | ||||||
| 							> | 							> | ||||||
| 						</div> | 						</div> | ||||||
| 						<div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> | 						<div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
| 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | 							<h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
| 								{$_("do-you-want-to-delete-the-team-delete_team-name", { | 								{$_("do-you-want-to-delete-the-team-delete_team-name", { | ||||||
| 									values: { teamname: delete_team.name }, | 									values: { teamname: delete_team.name }, | ||||||
| 								})} | 								})} | ||||||
| 							</h3> | 							</h3> | ||||||
| 							<div class="mt-2 mb-6"> | 							<div class="mb-6"> | ||||||
| 								<p class="text-sm text-gray-500"> | 								<p class="text-sm text-gray-500"> | ||||||
| 									{$_("all-associated-runners-will-be-deleted-too")} | 									{$_("all-associated-runners-will-be-deleted-too")} | ||||||
| 								</p> | 								</p> | ||||||
| @@ -81,18 +81,18 @@ | |||||||
| 						</div> | 						</div> | ||||||
| 					</div> | 					</div> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> | 				<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 | 					<button | ||||||
| 						on:click={deleteTeam} | 						on:click={deleteTeam} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500 sm:ml-3 sm:w-auto sm:text-sm" | 						class="w-full inline-flex justify-center rounded-md border border-transparent shadow-sm px-4 py-2 bg-red-600 text-base font-medium text-white hover:bg-red-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-red-500" | ||||||
| 					> | 					> | ||||||
| 						{$_("confirm-delete-team-and-associated-runners")} | 						{$_("confirm-delete-team-and-associated-runners")} | ||||||
| 					</button> | 					</button> | ||||||
| 					<button | 					<button | ||||||
| 						on:click={cancelDelete} | 						on:click={cancelDelete} | ||||||
| 						type="button" | 						type="button" | ||||||
| 						class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" | 						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-keep-team")} | 						{$_("cancel-keep-team")} | ||||||
| 					</button> | 					</button> | ||||||
|   | |||||||
| @@ -67,14 +67,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -87,15 +87,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -110,18 +110,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3 sm:text-left max-h-[75vh] overflow-y-auto"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-track")} |                 {$_("create-a-new-track")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-track" |                     "please-provide-the-required-information-to-add-a-new-track" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="trackname" |                     for="trackname" | ||||||
| @@ -215,13 +215,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -230,7 +230,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -84,14 +84,14 @@ | |||||||
|  |  | ||||||
| {#if modal_open} | {#if modal_open} | ||||||
|   <div |   <div | ||||||
|     class="fixed z-10 inset-0 overflow-y-auto" |     class="fixed z-10 inset-0 overflow-y-hidden" | ||||||
|     use:clickOutside |     use:clickOutside | ||||||
|     on:click_outside={() => { |     on:click_outside={() => { | ||||||
|       modal_open = false; |       modal_open = false; | ||||||
|     }} |     }} | ||||||
|   > |   > | ||||||
|     <div |     <div | ||||||
|       class="flex items-end justify-center min-h-screen pt-4 px-4 pb-4 text-center sm:block sm:p-0" |       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="fixed inset-0 transition-opacity" aria-hidden="true"> | ||||||
|         <div |         <div | ||||||
| @@ -104,15 +104,15 @@ | |||||||
|         aria-hidden="true">​</span |         aria-hidden="true">​</span | ||||||
|       > |       > | ||||||
|       <div |       <div | ||||||
|         class="inline-block align-bottom bg-white rounded-lg text-left overflow-hidden shadow-xl transform transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full" |         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]" | ||||||
|         role="dialog" |         role="dialog" | ||||||
|         aria-modal="true" |         aria-modal="true" | ||||||
|         aria-labelledby="modal-headline" |         aria-labelledby="modal-headline" | ||||||
|       > |       > | ||||||
|         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t"> |         <div class="bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4 rounded-t-xl"> | ||||||
|           <div class="sm:flex sm:items-start"> |           <div class=""> | ||||||
|             <div |             <div | ||||||
|               class="mx-auto flex-shrink-0 flex items-center justify-center h-12 w-12 rounded-full bg-blue-100 sm:mx-0 sm:h-10 sm:w-10" |               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 |               <svg | ||||||
|                 class="h-6 w-6 text-blue-600" |                 class="h-6 w-6 text-blue-600" | ||||||
| @@ -127,18 +127,18 @@ | |||||||
|                 /></svg |                 /></svg | ||||||
|               > |               > | ||||||
|             </div> |             </div> | ||||||
|             <div class="mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left"> |             <div class="mt-3"> | ||||||
|               <h3 class="text-lg leading-6 font-medium text-gray-900"> |               <h3 class="text-lg leading-6 font-medium text-gray-900"> | ||||||
|                 {$_("create-a-new-user")} |                 {$_("create-a-new-user")} | ||||||
|               </h3> |               </h3> | ||||||
|               <div class="mt-2 mb-6"> |               <div class="mb-6"> | ||||||
|                 <p class="text-sm text-gray-500"> |                 <p class="text-sm text-gray-500"> | ||||||
|                   {$_( |                   {$_( | ||||||
|                     "please-provide-the-required-information-to-add-a-new-user" |                     "please-provide-the-required-information-to-add-a-new-user" | ||||||
|                   )} |                   )} | ||||||
|                 </p> |                 </p> | ||||||
|               </div> |               </div> | ||||||
|               <div class="grid grid-cols-6 gap-6"> |               <div class="grid grid-cols-6 gap-2 lg:gap-6 text-left"> | ||||||
|                 <div class="col-span-6"> |                 <div class="col-span-6"> | ||||||
|                   <label |                   <label | ||||||
|                     for="firstname" |                     for="firstname" | ||||||
| @@ -272,13 +272,13 @@ | |||||||
|             </div> |             </div> | ||||||
|           </div> |           </div> | ||||||
|         </div> |         </div> | ||||||
|         <div class="bg-gray-50 px-4 py-3 sm:px-6 grid gap-2 rounded-b"> |         <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 |           <button | ||||||
|             disabled={!createbtnenabled} |             disabled={!createbtnenabled} | ||||||
|             class:opacity-50={!createbtnenabled} |             class:opacity-50={!createbtnenabled} | ||||||
|             on:click={submit} |             on:click={submit} | ||||||
|             type="button" |             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 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("create")} | ||||||
|           </button> |           </button> | ||||||
| @@ -287,7 +287,7 @@ | |||||||
|               modal_open = false; |               modal_open = false; | ||||||
|             }} |             }} | ||||||
|             type="button" |             type="button" | ||||||
|             class="mt-3 w-full inline-flex 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 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm" |             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")} |             {$_("cancel")} | ||||||
|           </button> |           </button> | ||||||
|   | |||||||
| @@ -101,20 +101,20 @@ | |||||||
|     "count_teams": "Teams", |     "count_teams": "Teams", | ||||||
|     "create": "Erstellen", |     "create": "Erstellen", | ||||||
|     "create-a-new": "Erstelle eine neue", |     "create-a-new": "Erstelle eine neue", | ||||||
|     "create-a-new-card": "Neue Läuferkarte erstellen", |     "create-a-new-card": "Läuferkarte erstellen", | ||||||
|     "create-a-new-contact": "Kontakt erstellen", |     "create-a-new-contact": "Kontakt erstellen", | ||||||
|     "create-a-new-distance-donation": "Erstelle ein neues Sponsoring", |     "create-a-new-distance-donation": "Erstelle ein neues Sponsoring", | ||||||
|     "create-a-new-donor": "Neuen Sponsor erstellen", |     "create-a-new-donor": "Sponsor erstellen", | ||||||
|     "create-a-new-fixed-donation": "Erstelle eine neue Festbetragsspende", |     "create-a-new-fixed-donation": "Festbetragsspende erstellen", | ||||||
|     "create-a-new-organization": "Neue Organisation anlegen", |     "create-a-new-organization": "Organisation anlegen", | ||||||
|     "create-a-new-runner": "Neuen Läufer erstellen", |     "create-a-new-runner": "Läufer erstellen", | ||||||
|     "create-a-new-scan-fixed-only": "Neuen Scan erstellen (nur mit Festdistanz)", |     "create-a-new-scan-fixed-only": "Scan erstellen (nur mit Festdistanz)", | ||||||
|     "create-a-new-scanstation": "Neue Station erstellen", |     "create-a-new-scanstation": "Station erstellen", | ||||||
|     "create-a-new-statsclient": "Neuen Statsclient erstellen", |     "create-a-new-statsclient": "Statsclient erstellen", | ||||||
|     "create-a-new-team": "Erstelle ein neues Team", |     "create-a-new-team": "Erstelle ein neues Team", | ||||||
|     "create-a-new-track": "Neue Laufstrecke erstellen", |     "create-a-new-track": "Laufstrecke erstellen", | ||||||
|     "create-a-new-user": "Neuen Benutzer anlegen", |     "create-a-new-user": "Benutzer anlegen", | ||||||
|     "create-a-new-user-group": "Erstelle eine neue Gruppe", |     "create-a-new-user-group": "Gruppe erstellen", | ||||||
|     "create-and-generate-pdf": "Erstellen und PDF herunterladen", |     "create-and-generate-pdf": "Erstellen und PDF herunterladen", | ||||||
|     "create-bulk-blanco-cards": "Blankokarten erstellen", |     "create-bulk-blanco-cards": "Blankokarten erstellen", | ||||||
|     "create-bulk-cards": "Blankokarten erstellen", |     "create-bulk-cards": "Blankokarten erstellen", | ||||||
| @@ -124,6 +124,7 @@ | |||||||
|     "create-user": "Benutzer anlegen", |     "create-user": "Benutzer anlegen", | ||||||
|     "create-without-pdf": "Ohne PDF erstellen", |     "create-without-pdf": "Ohne PDF erstellen", | ||||||
|     "created-blanco-cards": "Blankokarten wurden erstellt", |     "created-blanco-cards": "Blankokarten wurden erstellt", | ||||||
|  |     "created_via": "Erstellt von", | ||||||
|     "creating-blanco-cards": "Erstelle Blankokarten", |     "creating-blanco-cards": "Erstelle Blankokarten", | ||||||
|     "credits": "Credits", |     "credits": "Credits", | ||||||
|     "csv_import__class": "Klasse", |     "csv_import__class": "Klasse", | ||||||
| @@ -203,6 +204,7 @@ | |||||||
|     "donors-are-being-loaded": "Sponsoren werden geladen", |     "donors-are-being-loaded": "Sponsoren werden geladen", | ||||||
|     "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?", |     "dont-have-your-email-connected": "Deine E-Mail ist nicht verknüpft?", | ||||||
|     "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌", |     "dont-panic-were-resetting-it": "Keine Panik, wir setzen es zurück ✌", | ||||||
|  |     "download_laeuft": "Download läuft...", | ||||||
|     "e-mail-adress": "E-Mail-Adresse", |     "e-mail-adress": "E-Mail-Adresse", | ||||||
|     "edit": "Bearbeiten", |     "edit": "Bearbeiten", | ||||||
|     "edit-a-card": "Läuferkarte bearbeiten", |     "edit-a-card": "Läuferkarte bearbeiten", | ||||||
| @@ -374,11 +376,13 @@ | |||||||
|     "runner-import": "Läufer Import", |     "runner-import": "Läufer Import", | ||||||
|     "runner-is-being-added": "Läufer wird hinzugefügt...", |     "runner-is-being-added": "Läufer wird hinzugefügt...", | ||||||
|     "runner-updated": "Läufer aktualisiert!", |     "runner-updated": "Läufer aktualisiert!", | ||||||
|  |     "runner_via_selfservice": "Läufer via Selfservice", | ||||||
|     "runnercards": "Laeuferkarten", |     "runnercards": "Laeuferkarten", | ||||||
|     "runnerimport_verify_runners_org": "Bitte die Läufer für den Import in die Organisation \"{org_name}\" bestätigen", |     "runnerimport_verify_runners_org": "Bitte die Läufer für den Import in die Organisation \"{org_name}\" bestätigen", | ||||||
|     "runners": "Läufer", |     "runners": "Läufer", | ||||||
|     "runners-are-being-imported": "Läufer werden importiert ...", |     "runners-are-being-imported": "Läufer werden importiert ...", | ||||||
|     "runners-are-being-loaded": "Läufer werden geladen ...", |     "runners-are-being-loaded": "Läufer werden geladen ...", | ||||||
|  |     "runners_via_kiosk": "Läufer via Kiosk", | ||||||
|     "save": "Speichern", |     "save": "Speichern", | ||||||
|     "save-changes": "Änderungen speichern", |     "save-changes": "Änderungen speichern", | ||||||
|     "scan-added": "Scan hinzugefügt", |     "scan-added": "Scan hinzugefügt", | ||||||
|   | |||||||
| @@ -124,6 +124,7 @@ | |||||||
|     "create-user": "Create User", |     "create-user": "Create User", | ||||||
|     "create-without-pdf": "Create without PDF", |     "create-without-pdf": "Create without PDF", | ||||||
|     "created-blanco-cards": "Created blanco cards", |     "created-blanco-cards": "Created blanco cards", | ||||||
|  |     "created_via": "Erstellt über", | ||||||
|     "creating-blanco-cards": "Creating blanco cards", |     "creating-blanco-cards": "Creating blanco cards", | ||||||
|     "credits": "Credits", |     "credits": "Credits", | ||||||
|     "csv_import__class": "Class", |     "csv_import__class": "Class", | ||||||
| @@ -203,6 +204,7 @@ | |||||||
|     "donors-are-being-loaded": "donors are being loaded", |     "donors-are-being-loaded": "donors are being loaded", | ||||||
|     "dont-have-your-email-connected": "Don't have your email connected?", |     "dont-have-your-email-connected": "Don't have your email connected?", | ||||||
|     "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌", |     "dont-panic-were-resetting-it": "Don't panic, we're resetting it ✌", | ||||||
|  |     "download_laeuft": "Download in progress...", | ||||||
|     "e-mail-adress": "E-Mail Adress", |     "e-mail-adress": "E-Mail Adress", | ||||||
|     "edit": "Edit", |     "edit": "Edit", | ||||||
|     "edit-a-card": "Edit a card", |     "edit-a-card": "Edit a card", | ||||||
| @@ -374,11 +376,13 @@ | |||||||
|     "runner-import": "Runner Import", |     "runner-import": "Runner Import", | ||||||
|     "runner-is-being-added": "Runner is being added...", |     "runner-is-being-added": "Runner is being added...", | ||||||
|     "runner-updated": "Runner updated!", |     "runner-updated": "Runner updated!", | ||||||
|  |     "runner_via_selfservice": "Runner via Selfservice", | ||||||
|     "runnercards": "Runnercards", |     "runnercards": "Runnercards", | ||||||
|     "runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"", |     "runnerimport_verify_runners_org": "Please confirm these runners for import into the organization \"{org_name}\"", | ||||||
|     "runners": "Runners", |     "runners": "Runners", | ||||||
|     "runners-are-being-imported": "Runners are being imported...", |     "runners-are-being-imported": "Runners are being imported...", | ||||||
|     "runners-are-being-loaded": "runners are being loaded...", |     "runners-are-being-loaded": "runners are being loaded...", | ||||||
|  |     "runners_via_kiosk": "Runners via Kiosk", | ||||||
|     "save": "Save", |     "save": "Save", | ||||||
|     "save-changes": "Save Changes", |     "save-changes": "Save Changes", | ||||||
|     "scan-added": "Scan added", |     "scan-added": "Scan added", | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user