mirror of
				https://gitlab.nic.cz/turris/reforis/foris-js.git
				synced 2025-11-03 23:00:31 +01:00 
			
		
		
		
	Compare commits
	
		
			50 Commits
		
	
	
		
			feature/ws
			...
			5a53eca138
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5a53eca138 | ||
| 
						 | 
					8d2a4dc108 | ||
| 
						 | 
					2481a0c025 | ||
| 
						 | 
					71697424c5 | ||
| 
						 | 
					07f8e3b9de | ||
| 
						 | 
					c9f2b24095 | ||
| 
						 | 
					087ecfa670 | ||
| 
						 | 
					e6365ecac4 | ||
| 
						 | 
					e57722caa0 | ||
| 
						 | 
					babdf92ddd | ||
| 
						 | 
					42294316d9 | ||
| 
						 | 
					b65e034b04 | ||
| 
						 | 
					85b207b1dd | ||
| 
						 | 
					79e61d9507 | ||
| 
						 | 
					6795c3941b | ||
| 
						 | 
					969e8e6411 | ||
| 
						 | 
					0099759279 | ||
| 
						 | 
					87c81a2a2d | ||
| 
						 | 
					81b71f8153 | ||
| 
						 | 
					1ec0a26199 | ||
| 
						 | 
					76e37b738a | ||
| 
						 | 
					8a69d14429 | ||
| 
						 | 
					4d5395c826 | ||
| 
						 | 
					1fb83e08ea | ||
| 
						 | 
					e6cfc6dbb0 | ||
| 
						 | 
					a93a64bf96 | ||
| 
						 | 
					1ab77decfd | ||
| 
						 | 
					b6e1e0adae | ||
| 
						 | 
					e7758cab9a | ||
| 
						 | 
					bf88b76613 | ||
| 
						 | 
					3cf85a9516 | ||
| 
						 | 
					7c8442300a | ||
| 
						 | 
					e849397aa2 | ||
| 
						 | 
					c1b44d498c | ||
| 
						 | 
					1b5a5da953 | ||
| 
						 | 
					7f45201f05 | ||
| 
						 | 
					f34d9bbdbd | ||
| 
						 | 
					c7ff3f42f6 | ||
| 
						 | 
					a1036514dd | ||
| 
						 | 
					a352f12279 | ||
| 
						 | 
					acfbeb2c43 | ||
| 
						 | 
					3bef624ce4 | ||
| 
						 | 
					7d0d52666d | ||
| 
						 | 
					52fe5d65a6 | ||
| 
						 | 
					b99add91cf | ||
| 
						 | 
					b7a4613cf4 | ||
| 
						 | 
					9e2278e016 | ||
| 
						 | 
					83a6ff75f6 | ||
| 
						 | 
					02f3803265 | ||
| 
						 | 
					bb559cbe53 | 
							
								
								
									
										65
									
								
								CHANGELOG.md
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								CHANGELOG.md
									
									
									
									
									
								
							@@ -8,6 +8,64 @@ and this project adheres to
 | 
			
		||||
 | 
			
		||||
## [Unreleased]
 | 
			
		||||
 | 
			
		||||
## [6.5.0] - 2024-11-13
 | 
			
		||||
 | 
			
		||||
### Added
 | 
			
		||||
 | 
			
		||||
-   Added & updated Weblate translations
 | 
			
		||||
-   Added RichTable component with pagination and sorting
 | 
			
		||||
-   Added @tanstack/react-table v8.20.5 to dependencies
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
-   Updated documentation
 | 
			
		||||
-   Replaced RebootButton with ActionButtonWithModal component
 | 
			
		||||
-   Fixed import path for CustomizationContextMock in customTestRender.js
 | 
			
		||||
 | 
			
		||||
## [6.4.0] - 2024-10-02
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
-   Refactored Alert component to include dismiss animation and timeout
 | 
			
		||||
-   Refactored ThreeDotsMenu component to include additional props
 | 
			
		||||
 | 
			
		||||
## [6.3.0] - 2024-09-27
 | 
			
		||||
 | 
			
		||||
### Added
 | 
			
		||||
 | 
			
		||||
-   Added ThreeDotsMenu component
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
-   Refactored EmailInput description
 | 
			
		||||
-   Refactored RadioSet & ignore Radio component
 | 
			
		||||
-   Refactored npm package badge in introduction.md
 | 
			
		||||
-   NPM audit fix
 | 
			
		||||
 | 
			
		||||
## [6.2.1] - 2024-09-25
 | 
			
		||||
 | 
			
		||||
### Added
 | 
			
		||||
 | 
			
		||||
-   Added & updated Weblate translations
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
-   Refactored CopyInput component
 | 
			
		||||
-   Refactored ForisURLs to include new URLs for Overview page
 | 
			
		||||
 | 
			
		||||
## [6.2.0] - 2024-09-20
 | 
			
		||||
 | 
			
		||||
### Added
 | 
			
		||||
 | 
			
		||||
-   Added useFocusTrap hook
 | 
			
		||||
-   Added extendSession endpoint
 | 
			
		||||
 | 
			
		||||
### Changed
 | 
			
		||||
 | 
			
		||||
-   Refactored Spinner.css to use CSS variable for color
 | 
			
		||||
-   Refactored Modal component to use useFocusTrap hook
 | 
			
		||||
-   Refactored Alert component to use useFocusTrap hook
 | 
			
		||||
 | 
			
		||||
## [6.1.1] - 2024-08-30
 | 
			
		||||
 | 
			
		||||
### Added
 | 
			
		||||
@@ -361,7 +419,12 @@ and this project adheres to
 | 
			
		||||
## [0.0.7] - 2019-09-02
 | 
			
		||||
 | 
			
		||||
[unreleased]:
 | 
			
		||||
    https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...master
 | 
			
		||||
    https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.5.0...dev
 | 
			
		||||
[6.5.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.4.0...v6.5.0
 | 
			
		||||
[6.4.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.3.0...v6.4.0
 | 
			
		||||
[6.3.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.1...v6.3.0
 | 
			
		||||
[6.2.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.2.0...v6.2.1
 | 
			
		||||
[6.2.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.1...v6.2.0
 | 
			
		||||
[6.1.1]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.1.0...v6.1.1
 | 
			
		||||
[6.1.0]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.3...v6.1.0
 | 
			
		||||
[6.0.3]: https://gitlab.nic.cz/turris/reforis/foris-js/-/compare/v6.0.2...v6.0.3
 | 
			
		||||
 
 | 
			
		||||
@@ -33,5 +33,4 @@ To install a specific version:
 | 
			
		||||
npm install foris@version
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
<a target="_blank" href="https://www.npmjs.com/package/foris">Check
 | 
			
		||||
on<img width="100px" src="./docs/forisjs-npm.svg"></a>
 | 
			
		||||
[](https://badge.fury.io/js/foris)
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										418
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										418
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,25 +1,25 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "foris",
 | 
			
		||||
    "version": "6.1.1",
 | 
			
		||||
    "version": "6.5.0",
 | 
			
		||||
    "lockfileVersion": 2,
 | 
			
		||||
    "requires": true,
 | 
			
		||||
    "packages": {
 | 
			
		||||
        "": {
 | 
			
		||||
            "name": "foris",
 | 
			
		||||
            "version": "6.1.1",
 | 
			
		||||
            "version": "6.5.0",
 | 
			
		||||
            "license": "GPL-3.0",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@fortawesome/fontawesome-svg-core": "^6.6.0",
 | 
			
		||||
                "@fortawesome/free-regular-svg-icons": "^6.6.0",
 | 
			
		||||
                "@fortawesome/free-solid-svg-icons": "^6.6.0",
 | 
			
		||||
                "@fortawesome/react-fontawesome": "^0.2.2",
 | 
			
		||||
                "@tanstack/react-table": "^8.20.5",
 | 
			
		||||
                "axios": "^1.7.2",
 | 
			
		||||
                "immutability-helper": "^3.1.1",
 | 
			
		||||
                "moment": "^2.30.1",
 | 
			
		||||
                "qrcode.react": "^3.1.0",
 | 
			
		||||
                "react-datetime": "^3.2.0",
 | 
			
		||||
                "react-uid": "^2.3.3",
 | 
			
		||||
                "socket.io-client": "^4.6.1"
 | 
			
		||||
                "react-uid": "^2.3.3"
 | 
			
		||||
            },
 | 
			
		||||
            "devDependencies": {
 | 
			
		||||
                "@babel/cli": "^7.24.7",
 | 
			
		||||
@@ -3584,11 +3584,38 @@
 | 
			
		||||
                "@sinonjs/commons": "^3.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@socket.io/component-emitter": {
 | 
			
		||||
            "version": "3.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==",
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        "node_modules/@tanstack/react-table": {
 | 
			
		||||
            "version": "8.20.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz",
 | 
			
		||||
            "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@tanstack/table-core": "8.20.5"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "type": "github",
 | 
			
		||||
                "url": "https://github.com/sponsors/tannerlinsley"
 | 
			
		||||
            },
 | 
			
		||||
            "peerDependencies": {
 | 
			
		||||
                "react": ">=16.8",
 | 
			
		||||
                "react-dom": ">=16.8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@tanstack/table-core": {
 | 
			
		||||
            "version": "8.20.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz",
 | 
			
		||||
            "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=12"
 | 
			
		||||
            },
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "type": "github",
 | 
			
		||||
                "url": "https://github.com/sponsors/tannerlinsley"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/@testing-library/dom": {
 | 
			
		||||
            "version": "5.6.1",
 | 
			
		||||
@@ -5024,10 +5051,11 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/body-parser": {
 | 
			
		||||
            "version": "1.20.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
 | 
			
		||||
            "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
 | 
			
		||||
            "version": "1.20.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
 | 
			
		||||
            "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "bytes": "3.1.2",
 | 
			
		||||
                "content-type": "~1.0.5",
 | 
			
		||||
@@ -5037,7 +5065,7 @@
 | 
			
		||||
                "http-errors": "2.0.0",
 | 
			
		||||
                "iconv-lite": "0.4.24",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "qs": "6.11.0",
 | 
			
		||||
                "qs": "6.13.0",
 | 
			
		||||
                "raw-body": "2.5.2",
 | 
			
		||||
                "type-is": "~1.6.18",
 | 
			
		||||
                "unpipe": "1.0.0"
 | 
			
		||||
@@ -5052,6 +5080,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
@@ -5061,6 +5090,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
			
		||||
            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ms": "2.0.0"
 | 
			
		||||
            }
 | 
			
		||||
@@ -5069,7 +5099,8 @@
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/bonjour-service": {
 | 
			
		||||
            "version": "1.2.1",
 | 
			
		||||
@@ -5909,6 +5940,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
 | 
			
		||||
            "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
@@ -6379,6 +6411,7 @@
 | 
			
		||||
            "version": "4.3.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
 | 
			
		||||
            "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ms": "2.1.2"
 | 
			
		||||
            },
 | 
			
		||||
@@ -6546,6 +6579,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
@@ -6564,6 +6598,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8",
 | 
			
		||||
                "npm": "1.2.8000 || >= 1.4.16"
 | 
			
		||||
@@ -6684,7 +6719,8 @@
 | 
			
		||||
            "version": "1.1.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
 | 
			
		||||
            "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/electron-to-chromium": {
 | 
			
		||||
            "version": "1.4.792",
 | 
			
		||||
@@ -6720,36 +6756,15 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/encodeurl": {
 | 
			
		||||
            "version": "1.0.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
			
		||||
            "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/engine.io-client": {
 | 
			
		||||
            "version": "6.5.4",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
 | 
			
		||||
            "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.1",
 | 
			
		||||
                "engine.io-parser": "~5.2.1",
 | 
			
		||||
                "ws": "~8.17.1",
 | 
			
		||||
                "xmlhttprequest-ssl": "~2.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/engine.io-parser": {
 | 
			
		||||
            "version": "5.2.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
 | 
			
		||||
            "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=10.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/enhanced-resolve": {
 | 
			
		||||
            "version": "5.17.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
 | 
			
		||||
@@ -7937,6 +7952,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
 | 
			
		||||
            "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
@@ -8064,37 +8080,38 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/express": {
 | 
			
		||||
            "version": "4.19.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
 | 
			
		||||
            "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
 | 
			
		||||
            "version": "4.21.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
 | 
			
		||||
            "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "accepts": "~1.3.8",
 | 
			
		||||
                "array-flatten": "1.1.1",
 | 
			
		||||
                "body-parser": "1.20.2",
 | 
			
		||||
                "body-parser": "1.20.3",
 | 
			
		||||
                "content-disposition": "0.5.4",
 | 
			
		||||
                "content-type": "~1.0.4",
 | 
			
		||||
                "cookie": "0.6.0",
 | 
			
		||||
                "cookie-signature": "1.0.6",
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
                "depd": "2.0.0",
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "etag": "~1.8.1",
 | 
			
		||||
                "finalhandler": "1.2.0",
 | 
			
		||||
                "finalhandler": "1.3.1",
 | 
			
		||||
                "fresh": "0.5.2",
 | 
			
		||||
                "http-errors": "2.0.0",
 | 
			
		||||
                "merge-descriptors": "1.0.1",
 | 
			
		||||
                "merge-descriptors": "1.0.3",
 | 
			
		||||
                "methods": "~1.1.2",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
                "path-to-regexp": "0.1.7",
 | 
			
		||||
                "path-to-regexp": "0.1.10",
 | 
			
		||||
                "proxy-addr": "~2.0.7",
 | 
			
		||||
                "qs": "6.11.0",
 | 
			
		||||
                "qs": "6.13.0",
 | 
			
		||||
                "range-parser": "~1.2.1",
 | 
			
		||||
                "safe-buffer": "5.2.1",
 | 
			
		||||
                "send": "0.18.0",
 | 
			
		||||
                "serve-static": "1.15.0",
 | 
			
		||||
                "send": "0.19.0",
 | 
			
		||||
                "serve-static": "1.16.2",
 | 
			
		||||
                "setprototypeof": "1.2.0",
 | 
			
		||||
                "statuses": "2.0.1",
 | 
			
		||||
                "type-is": "~1.6.18",
 | 
			
		||||
@@ -8121,10 +8138,11 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/express/node_modules/path-to-regexp": {
 | 
			
		||||
            "version": "0.1.7",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
 | 
			
		||||
            "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "version": "0.1.10",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
 | 
			
		||||
            "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/express/node_modules/safe-buffer": {
 | 
			
		||||
            "version": "5.2.1",
 | 
			
		||||
@@ -8300,13 +8318,14 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/finalhandler": {
 | 
			
		||||
            "version": "1.2.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
 | 
			
		||||
            "version": "1.3.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
 | 
			
		||||
            "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
@@ -8322,6 +8341,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
			
		||||
            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ms": "2.0.0"
 | 
			
		||||
            }
 | 
			
		||||
@@ -8330,7 +8350,8 @@
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/find-cache-dir": {
 | 
			
		||||
            "version": "3.3.1",
 | 
			
		||||
@@ -8707,6 +8728,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
 | 
			
		||||
            "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
@@ -9280,6 +9302,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "depd": "2.0.0",
 | 
			
		||||
                "inherits": "2.0.4",
 | 
			
		||||
@@ -9394,6 +9417,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
 | 
			
		||||
            "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "safer-buffer": ">= 2.1.2 < 3"
 | 
			
		||||
            },
 | 
			
		||||
@@ -13740,6 +13764,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
 | 
			
		||||
            "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.6"
 | 
			
		||||
            }
 | 
			
		||||
@@ -13757,10 +13782,14 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/merge-descriptors": {
 | 
			
		||||
            "version": "1.0.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "version": "1.0.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
 | 
			
		||||
            "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "funding": {
 | 
			
		||||
                "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/merge-stream": {
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
@@ -13825,6 +13854,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
 | 
			
		||||
            "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "bin": {
 | 
			
		||||
                "mime": "cli.js"
 | 
			
		||||
            },
 | 
			
		||||
@@ -13976,7 +14006,8 @@
 | 
			
		||||
        "node_modules/ms": {
 | 
			
		||||
            "version": "2.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 | 
			
		||||
            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/multicast-dns": {
 | 
			
		||||
            "version": "7.2.5",
 | 
			
		||||
@@ -14240,6 +14271,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
 | 
			
		||||
            "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ee-first": "1.1.1"
 | 
			
		||||
            },
 | 
			
		||||
@@ -14561,10 +14593,11 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/path-to-regexp": {
 | 
			
		||||
            "version": "1.8.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
 | 
			
		||||
            "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
 | 
			
		||||
            "version": "1.9.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
 | 
			
		||||
            "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "isarray": "0.0.1"
 | 
			
		||||
            }
 | 
			
		||||
@@ -15032,12 +15065,13 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/qs": {
 | 
			
		||||
            "version": "6.11.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
 | 
			
		||||
            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
 | 
			
		||||
            "version": "6.13.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
 | 
			
		||||
            "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "BSD-3-Clause",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "side-channel": "^1.0.4"
 | 
			
		||||
                "side-channel": "^1.0.6"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=0.6"
 | 
			
		||||
@@ -15104,6 +15138,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz",
 | 
			
		||||
            "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "bytes": "3.1.2",
 | 
			
		||||
                "http-errors": "2.0.0",
 | 
			
		||||
@@ -15119,6 +15154,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
@@ -15491,7 +15527,6 @@
 | 
			
		||||
            "version": "16.9.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
 | 
			
		||||
            "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "loose-envify": "^1.1.0",
 | 
			
		||||
                "object-assign": "^4.1.1",
 | 
			
		||||
@@ -16245,7 +16280,6 @@
 | 
			
		||||
            "version": "0.15.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
 | 
			
		||||
            "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "loose-envify": "^1.1.0",
 | 
			
		||||
                "object-assign": "^4.1.1"
 | 
			
		||||
@@ -16298,10 +16332,11 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/send": {
 | 
			
		||||
            "version": "0.18.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
 | 
			
		||||
            "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
 | 
			
		||||
            "version": "0.19.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
 | 
			
		||||
            "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
                "depd": "2.0.0",
 | 
			
		||||
@@ -16326,6 +16361,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
 | 
			
		||||
            "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "ms": "2.0.0"
 | 
			
		||||
            }
 | 
			
		||||
@@ -16334,13 +16370,25 @@
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/send/node_modules/encodeurl": {
 | 
			
		||||
            "version": "1.0.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
			
		||||
            "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/send/node_modules/ms": {
 | 
			
		||||
            "version": "2.1.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
 | 
			
		||||
            "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/serialize-javascript": {
 | 
			
		||||
            "version": "6.0.2",
 | 
			
		||||
@@ -16430,15 +16478,16 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/serve-static": {
 | 
			
		||||
            "version": "1.15.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
 | 
			
		||||
            "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
 | 
			
		||||
            "version": "1.16.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
 | 
			
		||||
            "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
                "send": "0.18.0"
 | 
			
		||||
                "send": "0.19.0"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8.0"
 | 
			
		||||
@@ -16480,7 +16529,8 @@
 | 
			
		||||
            "version": "1.2.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "ISC"
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/shell-quote": {
 | 
			
		||||
            "version": "1.8.1",
 | 
			
		||||
@@ -16579,34 +16629,6 @@
 | 
			
		||||
            "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/socket.io-client": {
 | 
			
		||||
            "version": "4.7.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
 | 
			
		||||
            "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.2",
 | 
			
		||||
                "engine.io-client": "~6.5.2",
 | 
			
		||||
                "socket.io-parser": "~4.2.4"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=10.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/socket.io-parser": {
 | 
			
		||||
            "version": "4.2.4",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
 | 
			
		||||
            "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.1"
 | 
			
		||||
            },
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=10.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/sockjs": {
 | 
			
		||||
            "version": "0.3.24",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
 | 
			
		||||
@@ -16729,6 +16751,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
@@ -17250,6 +17273,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=0.6"
 | 
			
		||||
            }
 | 
			
		||||
@@ -17376,6 +17400,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
 | 
			
		||||
            "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "dependencies": {
 | 
			
		||||
                "media-typer": "0.3.0",
 | 
			
		||||
                "mime-types": "~2.1.24"
 | 
			
		||||
@@ -17633,6 +17658,7 @@
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">= 0.8"
 | 
			
		||||
            }
 | 
			
		||||
@@ -18415,6 +18441,7 @@
 | 
			
		||||
            "version": "8.17.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
 | 
			
		||||
            "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "license": "MIT",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=10.0.0"
 | 
			
		||||
@@ -18447,14 +18474,6 @@
 | 
			
		||||
            "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/xmlhttprequest-ssl": {
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A==",
 | 
			
		||||
            "engines": {
 | 
			
		||||
                "node": ">=0.4.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "node_modules/yallist": {
 | 
			
		||||
            "version": "4.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
			
		||||
@@ -21115,10 +21134,18 @@
 | 
			
		||||
                "@sinonjs/commons": "^3.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "@socket.io/component-emitter": {
 | 
			
		||||
            "version": "3.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA=="
 | 
			
		||||
        "@tanstack/react-table": {
 | 
			
		||||
            "version": "8.20.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.20.5.tgz",
 | 
			
		||||
            "integrity": "sha512-WEHopKw3znbUZ61s9i0+i9g8drmDo6asTWbrQh8Us63DAk/M0FkmIqERew6P71HI75ksZ2Pxyuf4vvKh9rAkiA==",
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "@tanstack/table-core": "8.20.5"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "@tanstack/table-core": {
 | 
			
		||||
            "version": "8.20.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.20.5.tgz",
 | 
			
		||||
            "integrity": "sha512-P9dF7XbibHph2PFRz8gfBKEXEY/HJPOhym8CHmjF8y3q5mWpKx9xtZapXQUWCgkqvsK0R46Azuz+VaxD4Xl+Tg=="
 | 
			
		||||
        },
 | 
			
		||||
        "@testing-library/dom": {
 | 
			
		||||
            "version": "5.6.1",
 | 
			
		||||
@@ -22346,9 +22373,9 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "body-parser": {
 | 
			
		||||
            "version": "1.20.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz",
 | 
			
		||||
            "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==",
 | 
			
		||||
            "version": "1.20.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz",
 | 
			
		||||
            "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "bytes": "3.1.2",
 | 
			
		||||
@@ -22359,7 +22386,7 @@
 | 
			
		||||
                "http-errors": "2.0.0",
 | 
			
		||||
                "iconv-lite": "0.4.24",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "qs": "6.11.0",
 | 
			
		||||
                "qs": "6.13.0",
 | 
			
		||||
                "raw-body": "2.5.2",
 | 
			
		||||
                "type-is": "~1.6.18",
 | 
			
		||||
                "unpipe": "1.0.0"
 | 
			
		||||
@@ -23329,6 +23356,7 @@
 | 
			
		||||
            "version": "4.3.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
 | 
			
		||||
            "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "ms": "2.1.2"
 | 
			
		||||
            }
 | 
			
		||||
@@ -23583,28 +23611,11 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "encodeurl": {
 | 
			
		||||
            "version": "1.0.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
			
		||||
            "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "engine.io-client": {
 | 
			
		||||
            "version": "6.5.4",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/engine.io-client/-/engine.io-client-6.5.4.tgz",
 | 
			
		||||
            "integrity": "sha512-GeZeeRjpD2qf49cZQ0Wvh/8NJNfeXkXXcoGh+F77oEAgo9gUHwT1fCRxSNU+YEEaysOJTnsFHmM5oAcPy4ntvQ==",
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.1",
 | 
			
		||||
                "engine.io-parser": "~5.2.1",
 | 
			
		||||
                "ws": "~8.17.1",
 | 
			
		||||
                "xmlhttprequest-ssl": "~2.0.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "engine.io-parser": {
 | 
			
		||||
            "version": "5.2.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz",
 | 
			
		||||
            "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q=="
 | 
			
		||||
        },
 | 
			
		||||
        "enhanced-resolve": {
 | 
			
		||||
            "version": "5.17.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz",
 | 
			
		||||
@@ -24575,37 +24586,37 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "express": {
 | 
			
		||||
            "version": "4.19.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz",
 | 
			
		||||
            "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==",
 | 
			
		||||
            "version": "4.21.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz",
 | 
			
		||||
            "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "accepts": "~1.3.8",
 | 
			
		||||
                "array-flatten": "1.1.1",
 | 
			
		||||
                "body-parser": "1.20.2",
 | 
			
		||||
                "body-parser": "1.20.3",
 | 
			
		||||
                "content-disposition": "0.5.4",
 | 
			
		||||
                "content-type": "~1.0.4",
 | 
			
		||||
                "cookie": "0.6.0",
 | 
			
		||||
                "cookie-signature": "1.0.6",
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
                "depd": "2.0.0",
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "etag": "~1.8.1",
 | 
			
		||||
                "finalhandler": "1.2.0",
 | 
			
		||||
                "finalhandler": "1.3.1",
 | 
			
		||||
                "fresh": "0.5.2",
 | 
			
		||||
                "http-errors": "2.0.0",
 | 
			
		||||
                "merge-descriptors": "1.0.1",
 | 
			
		||||
                "merge-descriptors": "1.0.3",
 | 
			
		||||
                "methods": "~1.1.2",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
                "path-to-regexp": "0.1.7",
 | 
			
		||||
                "path-to-regexp": "0.1.10",
 | 
			
		||||
                "proxy-addr": "~2.0.7",
 | 
			
		||||
                "qs": "6.11.0",
 | 
			
		||||
                "qs": "6.13.0",
 | 
			
		||||
                "range-parser": "~1.2.1",
 | 
			
		||||
                "safe-buffer": "5.2.1",
 | 
			
		||||
                "send": "0.18.0",
 | 
			
		||||
                "serve-static": "1.15.0",
 | 
			
		||||
                "send": "0.19.0",
 | 
			
		||||
                "serve-static": "1.16.2",
 | 
			
		||||
                "setprototypeof": "1.2.0",
 | 
			
		||||
                "statuses": "2.0.1",
 | 
			
		||||
                "type-is": "~1.6.18",
 | 
			
		||||
@@ -24629,9 +24640,9 @@
 | 
			
		||||
                    "dev": true
 | 
			
		||||
                },
 | 
			
		||||
                "path-to-regexp": {
 | 
			
		||||
                    "version": "0.1.7",
 | 
			
		||||
                    "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
 | 
			
		||||
                    "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==",
 | 
			
		||||
                    "version": "0.1.10",
 | 
			
		||||
                    "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz",
 | 
			
		||||
                    "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==",
 | 
			
		||||
                    "dev": true
 | 
			
		||||
                },
 | 
			
		||||
                "safe-buffer": {
 | 
			
		||||
@@ -24766,13 +24777,13 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "finalhandler": {
 | 
			
		||||
            "version": "1.2.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
 | 
			
		||||
            "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
 | 
			
		||||
            "version": "1.3.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz",
 | 
			
		||||
            "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "on-finished": "2.4.1",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
@@ -28875,9 +28886,9 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "merge-descriptors": {
 | 
			
		||||
            "version": "1.0.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
 | 
			
		||||
            "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==",
 | 
			
		||||
            "version": "1.0.3",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz",
 | 
			
		||||
            "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "merge-stream": {
 | 
			
		||||
@@ -29030,7 +29041,8 @@
 | 
			
		||||
        "ms": {
 | 
			
		||||
            "version": "2.1.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
 | 
			
		||||
            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
 | 
			
		||||
            "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "multicast-dns": {
 | 
			
		||||
            "version": "7.2.5",
 | 
			
		||||
@@ -29459,9 +29471,9 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "path-to-regexp": {
 | 
			
		||||
            "version": "1.8.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz",
 | 
			
		||||
            "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==",
 | 
			
		||||
            "version": "1.9.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz",
 | 
			
		||||
            "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "isarray": "0.0.1"
 | 
			
		||||
@@ -29793,12 +29805,12 @@
 | 
			
		||||
            "requires": {}
 | 
			
		||||
        },
 | 
			
		||||
        "qs": {
 | 
			
		||||
            "version": "6.11.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
 | 
			
		||||
            "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
 | 
			
		||||
            "version": "6.13.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz",
 | 
			
		||||
            "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "side-channel": "^1.0.4"
 | 
			
		||||
                "side-channel": "^1.0.6"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "qss": {
 | 
			
		||||
@@ -30116,7 +30128,6 @@
 | 
			
		||||
            "version": "16.9.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.9.0.tgz",
 | 
			
		||||
            "integrity": "sha512-YFT2rxO9hM70ewk9jq0y6sQk8cL02xm4+IzYBz75CQGlClQQ1Bxq0nhHF6OtSbit+AIahujJgb/CPRibFkMNJQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "loose-envify": "^1.1.0",
 | 
			
		||||
                "object-assign": "^4.1.1",
 | 
			
		||||
@@ -30681,7 +30692,6 @@
 | 
			
		||||
            "version": "0.15.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.15.0.tgz",
 | 
			
		||||
            "integrity": "sha512-xAefmSfN6jqAa7Kuq7LIJY0bwAPG3xlCj0HMEBQk1lxYiDKZscY2xJ5U/61ZTrYbmNQbXa+gc7czPkVo11tnCg==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "loose-envify": "^1.1.0",
 | 
			
		||||
                "object-assign": "^4.1.1"
 | 
			
		||||
@@ -30721,9 +30731,9 @@
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "send": {
 | 
			
		||||
            "version": "0.18.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
 | 
			
		||||
            "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
 | 
			
		||||
            "version": "0.19.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz",
 | 
			
		||||
            "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "debug": "2.6.9",
 | 
			
		||||
@@ -30758,6 +30768,12 @@
 | 
			
		||||
                        }
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                "encodeurl": {
 | 
			
		||||
                    "version": "1.0.2",
 | 
			
		||||
                    "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
 | 
			
		||||
                    "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
 | 
			
		||||
                    "dev": true
 | 
			
		||||
                },
 | 
			
		||||
                "ms": {
 | 
			
		||||
                    "version": "2.1.3",
 | 
			
		||||
                    "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
 | 
			
		||||
@@ -30844,15 +30860,15 @@
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "serve-static": {
 | 
			
		||||
            "version": "1.15.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
 | 
			
		||||
            "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
 | 
			
		||||
            "version": "1.16.2",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz",
 | 
			
		||||
            "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "encodeurl": "~1.0.2",
 | 
			
		||||
                "encodeurl": "~2.0.0",
 | 
			
		||||
                "escape-html": "~1.0.3",
 | 
			
		||||
                "parseurl": "~1.3.3",
 | 
			
		||||
                "send": "0.18.0"
 | 
			
		||||
                "send": "0.19.0"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "set-function-length": {
 | 
			
		||||
@@ -30959,26 +30975,6 @@
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "socket.io-client": {
 | 
			
		||||
            "version": "4.7.5",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/socket.io-client/-/socket.io-client-4.7.5.tgz",
 | 
			
		||||
            "integrity": "sha512-sJ/tqHOCe7Z50JCBCXrsY3I2k03iOiUe+tj1OmKeD2lXPiGH/RUCdTZFoqVyN7l1MnpIzPrGtLcijffmeouNlQ==",
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.2",
 | 
			
		||||
                "engine.io-client": "~6.5.2",
 | 
			
		||||
                "socket.io-parser": "~4.2.4"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "socket.io-parser": {
 | 
			
		||||
            "version": "4.2.4",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.4.tgz",
 | 
			
		||||
            "integrity": "sha512-/GbIKmo8ioc+NIWIhwdecY0ge+qVBSMdgxGygevmdHj24bsfgtCmcUUcQ5ZzcylGFHsN3k4HB4Cgkl96KVnuew==",
 | 
			
		||||
            "requires": {
 | 
			
		||||
                "@socket.io/component-emitter": "~3.1.0",
 | 
			
		||||
                "debug": "~4.3.1"
 | 
			
		||||
            }
 | 
			
		||||
        },
 | 
			
		||||
        "sockjs": {
 | 
			
		||||
            "version": "0.3.24",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz",
 | 
			
		||||
@@ -32300,6 +32296,7 @@
 | 
			
		||||
            "version": "8.17.1",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz",
 | 
			
		||||
            "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==",
 | 
			
		||||
            "dev": true,
 | 
			
		||||
            "requires": {}
 | 
			
		||||
        },
 | 
			
		||||
        "xml-name-validator": {
 | 
			
		||||
@@ -32314,11 +32311,6 @@
 | 
			
		||||
            "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==",
 | 
			
		||||
            "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "xmlhttprequest-ssl": {
 | 
			
		||||
            "version": "2.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/xmlhttprequest-ssl/-/xmlhttprequest-ssl-2.0.0.tgz",
 | 
			
		||||
            "integrity": "sha512-QKxVRxiRACQcVuQEYFsI1hhkrMlrXHPegbbd1yn9UHOmRxY+si12nQYzri3vbzt8VdTTRviqcKxcyllFas5z2A=="
 | 
			
		||||
        },
 | 
			
		||||
        "yallist": {
 | 
			
		||||
            "version": "4.0.0",
 | 
			
		||||
            "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
    "name": "foris",
 | 
			
		||||
    "version": "6.1.1",
 | 
			
		||||
    "version": "6.5.0",
 | 
			
		||||
    "description": "Foris JS library is a set of components and utils for reForis application and plugins.",
 | 
			
		||||
    "author": "CZ.NIC, z.s.p.o.",
 | 
			
		||||
    "repository": {
 | 
			
		||||
@@ -18,13 +18,13 @@
 | 
			
		||||
        "@fortawesome/free-regular-svg-icons": "^6.6.0",
 | 
			
		||||
        "@fortawesome/free-solid-svg-icons": "^6.6.0",
 | 
			
		||||
        "@fortawesome/react-fontawesome": "^0.2.2",
 | 
			
		||||
        "@tanstack/react-table": "^8.20.5",
 | 
			
		||||
        "axios": "^1.7.2",
 | 
			
		||||
        "immutability-helper": "^3.1.1",
 | 
			
		||||
        "moment": "^2.30.1",
 | 
			
		||||
        "qrcode.react": "^3.1.0",
 | 
			
		||||
        "react-datetime": "^3.2.0",
 | 
			
		||||
        "react-uid": "^2.3.3",
 | 
			
		||||
        "socket.io-client": "^4.6.1"
 | 
			
		||||
        "react-uid": "^2.3.3"
 | 
			
		||||
    },
 | 
			
		||||
    "peerDependencies": {
 | 
			
		||||
        "bootstrap": "^5.3.3",
 | 
			
		||||
 
 | 
			
		||||
@@ -5,10 +5,12 @@
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
import React, { useRef, useEffect, useState } from "react";
 | 
			
		||||
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { useFocusTrap } from "../utils/hooks";
 | 
			
		||||
 | 
			
		||||
export const ALERT_TYPES = Object.freeze({
 | 
			
		||||
    PRIMARY: "primary",
 | 
			
		||||
    SECONDARY: "secondary",
 | 
			
		||||
@@ -37,17 +39,37 @@ Alert.defaultProps = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function Alert({ type, onDismiss, children }) {
 | 
			
		||||
    const alertRef = useRef();
 | 
			
		||||
    const [isVisible, setIsVisible] = useState(true);
 | 
			
		||||
    useFocusTrap(alertRef, !!onDismiss);
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (onDismiss) {
 | 
			
		||||
            const timeout = setTimeout(() => setIsVisible(false), 7000);
 | 
			
		||||
            return () => clearTimeout(timeout);
 | 
			
		||||
        }
 | 
			
		||||
    }, [onDismiss]);
 | 
			
		||||
 | 
			
		||||
    const handleAnimationEnd = () => {
 | 
			
		||||
        if (!isVisible && onDismiss) {
 | 
			
		||||
            onDismiss();
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <div
 | 
			
		||||
            className={`alert alert-${type} ${
 | 
			
		||||
            ref={alertRef}
 | 
			
		||||
            className={`alert alert-${type} ${isVisible ? "alert-fade-in" : "alert-slide-out-top"} ${
 | 
			
		||||
                onDismiss ? "alert-dismissible" : ""
 | 
			
		||||
            }`.trim()}
 | 
			
		||||
            role="alert"
 | 
			
		||||
            onAnimationEnd={handleAnimationEnd}
 | 
			
		||||
        >
 | 
			
		||||
            {onDismiss && (
 | 
			
		||||
                <button
 | 
			
		||||
                    type="button"
 | 
			
		||||
                    className="btn-close"
 | 
			
		||||
                    onClick={onDismiss}
 | 
			
		||||
                    onClick={() => setIsVisible(false)}
 | 
			
		||||
                    aria-label={_("Close")}
 | 
			
		||||
                />
 | 
			
		||||
            )}
 | 
			
		||||
 
 | 
			
		||||
@@ -48,15 +48,13 @@ function CopyInput({ value, ...props }) {
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <Input type="text" value={value} ref={inputTextRef} {...props}>
 | 
			
		||||
            <div className="input-group-append">
 | 
			
		||||
                <button
 | 
			
		||||
                    className="btn btn-outline-secondary"
 | 
			
		||||
                    type="button"
 | 
			
		||||
                    onClick={handleCopyClick}
 | 
			
		||||
                >
 | 
			
		||||
                    <span>{isCopied ? _("Copied!") : _("Copy")}</span>
 | 
			
		||||
                </button>
 | 
			
		||||
            </div>
 | 
			
		||||
            <button
 | 
			
		||||
                className="btn btn-outline-secondary"
 | 
			
		||||
                type="button"
 | 
			
		||||
                onClick={handleCopyClick}
 | 
			
		||||
            >
 | 
			
		||||
                <span>{isCopied ? _("Copied!") : _("Copy")}</span>
 | 
			
		||||
            </button>
 | 
			
		||||
        </Input>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ All additional `props` are passed to the `<input type="email">` HTML component.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import { useState } from "react";
 | 
			
		||||
import Button from "./Button";
 | 
			
		||||
const [email, setEmail] = useState("Wrong email");
 | 
			
		||||
<form onSubmit={(e) => e.preventDefault()}>
 | 
			
		||||
    <EmailInput
 | 
			
		||||
@@ -14,6 +15,6 @@ const [email, setEmail] = useState("Wrong email");
 | 
			
		||||
        helpText="Read the small text!"
 | 
			
		||||
        onChange={(event) => setEmail(event.target.value)}
 | 
			
		||||
    />
 | 
			
		||||
    <button type="submit">Try to submit</button>
 | 
			
		||||
    <Button type="submit">Try to submit</Button>
 | 
			
		||||
</form>;
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@ import React, { useRef, useEffect } from "react";
 | 
			
		||||
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { useClickOutside } from "../utils/hooks";
 | 
			
		||||
import { useClickOutside, useFocusTrap } from "../utils/hooks";
 | 
			
		||||
import Portal from "../utils/Portal";
 | 
			
		||||
import "./Modal.css";
 | 
			
		||||
 | 
			
		||||
@@ -29,10 +29,11 @@ Modal.propTypes = {
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function Modal({ shown, setShown, scrollable, size, children }) {
 | 
			
		||||
    const dialogRef = useRef();
 | 
			
		||||
    const modalRef = useRef();
 | 
			
		||||
    let modalSize = "modal-";
 | 
			
		||||
 | 
			
		||||
    useClickOutside(dialogRef, () => setShown(false));
 | 
			
		||||
    useClickOutside(modalRef, () => setShown(false));
 | 
			
		||||
    useFocusTrap(modalRef, shown);
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        const handleEsc = (event) => {
 | 
			
		||||
@@ -65,11 +66,13 @@ export function Modal({ shown, setShown, scrollable, size, children }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <Portal containerId="modal-container">
 | 
			
		||||
            <div
 | 
			
		||||
                ref={modalRef}
 | 
			
		||||
                className={`modal fade ${shown ? "show" : ""}`.trim()}
 | 
			
		||||
                role="dialog"
 | 
			
		||||
                aria-modal="true"
 | 
			
		||||
                aria-labelledby="modal-title"
 | 
			
		||||
            >
 | 
			
		||||
                <div
 | 
			
		||||
                    ref={dialogRef}
 | 
			
		||||
                    className={`${modalSize.trim()} modal-dialog modal-dialog-centered ${
 | 
			
		||||
                        scrollable ? "modal-dialog-scrollable" : ""
 | 
			
		||||
                    }`.trim()}
 | 
			
		||||
@@ -90,7 +93,7 @@ ModalHeader.propTypes = {
 | 
			
		||||
export function ModalHeader({ setShown, title }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <div className="modal-header">
 | 
			
		||||
            <h5 className="modal-title">{title}</h5>
 | 
			
		||||
            <h1 className="modal-title fs-5">{title}</h1>
 | 
			
		||||
            <button
 | 
			
		||||
                type="button"
 | 
			
		||||
                className="btn-close"
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								src/bootstrap/Radio.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/bootstrap/Radio.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
Radio.propTypes = {
 | 
			
		||||
    label: PropTypes.oneOfType([
 | 
			
		||||
        PropTypes.string,
 | 
			
		||||
        PropTypes.element,
 | 
			
		||||
        PropTypes.node,
 | 
			
		||||
        PropTypes.arrayOf(PropTypes.node),
 | 
			
		||||
    ]).isRequired,
 | 
			
		||||
    id: PropTypes.string.isRequired,
 | 
			
		||||
    inline: PropTypes.bool,
 | 
			
		||||
    helpText: PropTypes.string,
 | 
			
		||||
    className: PropTypes.string,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function Radio({ label, id, helpText, inline, className, ...props }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <div
 | 
			
		||||
            className={`${className || "mb-3"} ${inline ? "form-check form-check-inline" : ""}`.trim()}
 | 
			
		||||
        >
 | 
			
		||||
            <input
 | 
			
		||||
                id={id}
 | 
			
		||||
                className="form-check-input me-2"
 | 
			
		||||
                type="radio"
 | 
			
		||||
                {...props}
 | 
			
		||||
            />
 | 
			
		||||
            <label className="form-check-label" htmlFor={id}>
 | 
			
		||||
                {label}
 | 
			
		||||
                {helpText && (
 | 
			
		||||
                    <div className="form-text">
 | 
			
		||||
                        <small>{helpText}</small>
 | 
			
		||||
                    </div>
 | 
			
		||||
                )}
 | 
			
		||||
            </label>
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default Radio;
 | 
			
		||||
@@ -10,6 +10,8 @@ import React from "react";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
import { useUID } from "react-uid";
 | 
			
		||||
 | 
			
		||||
import Radio from "./Radio";
 | 
			
		||||
 | 
			
		||||
RadioSet.propTypes = {
 | 
			
		||||
    /** Name attribute of the input HTML tag. */
 | 
			
		||||
    name: PropTypes.string.isRequired,
 | 
			
		||||
@@ -73,40 +75,4 @@ function RadioSet({ name, label, choices, value, helpText, inline, ...props }) {
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
Radio.propTypes = {
 | 
			
		||||
    label: PropTypes.oneOfType([
 | 
			
		||||
        PropTypes.string,
 | 
			
		||||
        PropTypes.element,
 | 
			
		||||
        PropTypes.node,
 | 
			
		||||
        PropTypes.arrayOf(PropTypes.node),
 | 
			
		||||
    ]).isRequired,
 | 
			
		||||
    id: PropTypes.string.isRequired,
 | 
			
		||||
    inline: PropTypes.bool,
 | 
			
		||||
    helpText: PropTypes.string,
 | 
			
		||||
    className: PropTypes.string,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
export function Radio({ label, id, helpText, inline, className, ...props }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <div
 | 
			
		||||
            className={`${className || "mb-3"} ${inline ? "form-check form-check-inline" : ""}`.trim()}
 | 
			
		||||
        >
 | 
			
		||||
            <input
 | 
			
		||||
                id={id}
 | 
			
		||||
                className="form-check-input me-2"
 | 
			
		||||
                type="radio"
 | 
			
		||||
                {...props}
 | 
			
		||||
            />
 | 
			
		||||
            <label className="form-check-label" htmlFor={id}>
 | 
			
		||||
                {label}
 | 
			
		||||
                {helpText && (
 | 
			
		||||
                    <div className="form-text">
 | 
			
		||||
                        <small>{helpText}</small>
 | 
			
		||||
                    </div>
 | 
			
		||||
                )}
 | 
			
		||||
            </label>
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RadioSet;
 | 
			
		||||
 
 | 
			
		||||
@@ -9,7 +9,7 @@
 | 
			
		||||
.spinner-wrapper .spinner-border {
 | 
			
		||||
    width: 4rem;
 | 
			
		||||
    height: 4rem;
 | 
			
		||||
    color: #00a2e2;
 | 
			
		||||
    color: var(--bs-primary);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
.spinner-fs-background {
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										42
									
								
								src/bootstrap/ThreeDotsMenu.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										42
									
								
								src/bootstrap/ThreeDotsMenu.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,42 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import { faEllipsisVertical } from "@fortawesome/free-solid-svg-icons";
 | 
			
		||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import Button from "./Button";
 | 
			
		||||
 | 
			
		||||
ThreeDotsMenu.propTypes = {
 | 
			
		||||
    /** Menu items. */
 | 
			
		||||
    children: PropTypes.arrayOf(PropTypes.node).isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function ThreeDotsMenu({ children, ...props }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <div className="dropdown position-static" {...props}>
 | 
			
		||||
            <Button
 | 
			
		||||
                className="btn-sm btn-link text-body"
 | 
			
		||||
                data-bs-toggle="dropdown"
 | 
			
		||||
                aria-expanded="false"
 | 
			
		||||
            >
 | 
			
		||||
                <FontAwesomeIcon icon={faEllipsisVertical} />
 | 
			
		||||
            </Button>
 | 
			
		||||
            <ul className="dropdown-menu">
 | 
			
		||||
                {children.map((child) => (
 | 
			
		||||
                    <li key={child.key || child.props.id || Math.random()}>
 | 
			
		||||
                        {child}
 | 
			
		||||
                    </li>
 | 
			
		||||
                ))}
 | 
			
		||||
            </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default ThreeDotsMenu;
 | 
			
		||||
							
								
								
									
										40
									
								
								src/bootstrap/ThreeDotsMenu.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								src/bootstrap/ThreeDotsMenu.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,40 @@
 | 
			
		||||
ThreeDotsMenu Bootstrap component is a dropdown menu that appears when the user
 | 
			
		||||
clicks on three dots. It is used to display a list of actions that can be
 | 
			
		||||
performed on a particular item.
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import { useState } from "react";
 | 
			
		||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
 | 
			
		||||
import { faEdit, faTrash } from "@fortawesome/free-solid-svg-icons";
 | 
			
		||||
 | 
			
		||||
const threeDotsMenuItems = [
 | 
			
		||||
    {
 | 
			
		||||
        text: "Edit",
 | 
			
		||||
        icon: faEdit,
 | 
			
		||||
        onClick: () => {
 | 
			
		||||
            alert("Edit clicked");
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        text: "Delete",
 | 
			
		||||
        icon: faTrash,
 | 
			
		||||
        onClick: () => {
 | 
			
		||||
            alert("Delete clicked");
 | 
			
		||||
        },
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
<ThreeDotsMenu>
 | 
			
		||||
    {threeDotsMenuItems.map((item, index) => (
 | 
			
		||||
        <button key={index} onClick={item.onClick} className="dropdown-item">
 | 
			
		||||
            <FontAwesomeIcon
 | 
			
		||||
                icon={item.icon}
 | 
			
		||||
                className="me-1"
 | 
			
		||||
                width="1rem"
 | 
			
		||||
                size="sm"
 | 
			
		||||
            />
 | 
			
		||||
            {item.text}
 | 
			
		||||
        </button>
 | 
			
		||||
    ))}
 | 
			
		||||
</ThreeDotsMenu>;
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										135
									
								
								src/common/ActionButtonWithModal/ActionButtonWithModal.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/common/ActionButtonWithModal/ActionButtonWithModal.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React, { useState, useEffect } from "react";
 | 
			
		||||
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { useAPIPost } from "../../api/hooks";
 | 
			
		||||
import { API_STATE } from "../../api/utils";
 | 
			
		||||
import Button from "../../bootstrap/Button";
 | 
			
		||||
import {
 | 
			
		||||
    Modal,
 | 
			
		||||
    ModalHeader,
 | 
			
		||||
    ModalBody,
 | 
			
		||||
    ModalFooter,
 | 
			
		||||
} from "../../bootstrap/Modal";
 | 
			
		||||
import { useAlert } from "../../context/alertContext/AlertContext";
 | 
			
		||||
 | 
			
		||||
ActionButtonWithModal.propTypes = {
 | 
			
		||||
    /** Component that triggers the action. */
 | 
			
		||||
    actionTrigger: PropTypes.elementType.isRequired,
 | 
			
		||||
    /** URL to send the action to. */
 | 
			
		||||
    actionUrl: PropTypes.string.isRequired,
 | 
			
		||||
    /** Title of the modal. */
 | 
			
		||||
    modalTitle: PropTypes.string.isRequired,
 | 
			
		||||
    /** Message of the modal. */
 | 
			
		||||
    modalMessage: PropTypes.string.isRequired,
 | 
			
		||||
    /** Text of the action button in the modal. */
 | 
			
		||||
    modalActionText: PropTypes.string,
 | 
			
		||||
    /** Props for the action button in the modal. */
 | 
			
		||||
    modalActionProps: PropTypes.object,
 | 
			
		||||
    /** Message to display on successful action. */
 | 
			
		||||
    successMessage: PropTypes.string,
 | 
			
		||||
    /** Message to display on failed action. */
 | 
			
		||||
    errorMessage: PropTypes.string,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function ActionButtonWithModal({
 | 
			
		||||
    actionTrigger: ActionTriggerComponent,
 | 
			
		||||
    actionUrl,
 | 
			
		||||
    modalTitle,
 | 
			
		||||
    modalMessage,
 | 
			
		||||
    modalActionText,
 | 
			
		||||
    modalActionProps,
 | 
			
		||||
    successMessage,
 | 
			
		||||
    errorMessage,
 | 
			
		||||
}) {
 | 
			
		||||
    const [triggered, setTriggered] = useState(false);
 | 
			
		||||
    const [modalShown, setModalShown] = useState(false);
 | 
			
		||||
    const [triggerActionStatus, triggerAction] = useAPIPost(actionUrl);
 | 
			
		||||
 | 
			
		||||
    const [setAlert] = useAlert();
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (triggerActionStatus.state === API_STATE.SUCCESS) {
 | 
			
		||||
            setAlert(
 | 
			
		||||
                successMessage || _("Action successful."),
 | 
			
		||||
                API_STATE.SUCCESS
 | 
			
		||||
            );
 | 
			
		||||
        }
 | 
			
		||||
        if (triggerActionStatus.state === API_STATE.ERROR) {
 | 
			
		||||
            setAlert(errorMessage || _("Action failed."));
 | 
			
		||||
        }
 | 
			
		||||
    }, [triggerActionStatus, setAlert, successMessage, errorMessage]);
 | 
			
		||||
 | 
			
		||||
    const actionHandler = () => {
 | 
			
		||||
        setTriggered(true);
 | 
			
		||||
        triggerAction();
 | 
			
		||||
        setModalShown(false);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <>
 | 
			
		||||
            <ActionModal
 | 
			
		||||
                shown={modalShown}
 | 
			
		||||
                setShown={setModalShown}
 | 
			
		||||
                onAction={actionHandler}
 | 
			
		||||
                title={modalTitle}
 | 
			
		||||
                message={modalMessage}
 | 
			
		||||
                actionText={modalActionText}
 | 
			
		||||
                actionProps={modalActionProps}
 | 
			
		||||
            />
 | 
			
		||||
            <ActionTriggerComponent
 | 
			
		||||
                loading={triggered}
 | 
			
		||||
                disabled={triggered}
 | 
			
		||||
                onClick={() => setModalShown(true)}
 | 
			
		||||
            />
 | 
			
		||||
        </>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ActionModal.propTypes = {
 | 
			
		||||
    shown: PropTypes.bool.isRequired,
 | 
			
		||||
    setShown: PropTypes.func.isRequired,
 | 
			
		||||
    onAction: PropTypes.func.isRequired,
 | 
			
		||||
    title: PropTypes.string.isRequired,
 | 
			
		||||
    message: PropTypes.string.isRequired,
 | 
			
		||||
    actionText: PropTypes.string,
 | 
			
		||||
    actionProps: PropTypes.object,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function ActionModal({
 | 
			
		||||
    shown,
 | 
			
		||||
    setShown,
 | 
			
		||||
    onAction,
 | 
			
		||||
    title,
 | 
			
		||||
    message,
 | 
			
		||||
    actionText,
 | 
			
		||||
    actionProps,
 | 
			
		||||
}) {
 | 
			
		||||
    return (
 | 
			
		||||
        <Modal shown={shown} setShown={setShown}>
 | 
			
		||||
            <ModalHeader setShown={setShown} title={title} />
 | 
			
		||||
            <ModalBody>
 | 
			
		||||
                <p className="mb-0">{message}</p>
 | 
			
		||||
            </ModalBody>
 | 
			
		||||
            <ModalFooter>
 | 
			
		||||
                <Button
 | 
			
		||||
                    className="btn-secondary"
 | 
			
		||||
                    onClick={() => setShown(false)}
 | 
			
		||||
                >
 | 
			
		||||
                    {_("Cancel")}
 | 
			
		||||
                </Button>
 | 
			
		||||
                <Button onClick={onAction} {...actionProps}>
 | 
			
		||||
                    {actionText || _("Confirm")}
 | 
			
		||||
                </Button>
 | 
			
		||||
            </ModalFooter>
 | 
			
		||||
        </Modal>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default ActionButtonWithModal;
 | 
			
		||||
							
								
								
									
										39
									
								
								src/common/ActionButtonWithModal/ActionButtonWithModal.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								src/common/ActionButtonWithModal/ActionButtonWithModal.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,39 @@
 | 
			
		||||
RebootButton component is a button that opens a modal dialog to confirm the
 | 
			
		||||
reboot of the device.
 | 
			
		||||
 | 
			
		||||
## Usage
 | 
			
		||||
 | 
			
		||||
```jsx
 | 
			
		||||
import React, { useEffect, createContext } from "react";
 | 
			
		||||
 | 
			
		||||
import Button from "../../bootstrap/Button";
 | 
			
		||||
import { AlertContextProvider } from "../../context/alertContext/AlertContext";
 | 
			
		||||
import ActionButtonWithModal from "./ActionButtonWithModal";
 | 
			
		||||
 | 
			
		||||
window.AlertContext = React.createContext();
 | 
			
		||||
 | 
			
		||||
const RebootButtonExample = () => {
 | 
			
		||||
    const ActionButton = (props) => {
 | 
			
		||||
        return <Button {...props}>Action</Button>;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <AlertContextProvider>
 | 
			
		||||
            <div id="modal-container" />
 | 
			
		||||
            <div id="alert-container" />
 | 
			
		||||
            <ActionButtonWithModal
 | 
			
		||||
                actionTrigger={ActionButton}
 | 
			
		||||
                actionUrl="/reforis/api/action"
 | 
			
		||||
                modalTitle="Warning!"
 | 
			
		||||
                modalMessage="Are you sure you want to perform this action?"
 | 
			
		||||
                modalActionText="Confirm action"
 | 
			
		||||
                modalActionProps={{ className: "btn-danger" }}
 | 
			
		||||
                successMessage="Action request succeeded."
 | 
			
		||||
                errorMessage="Action request failed."
 | 
			
		||||
            />
 | 
			
		||||
        </AlertContextProvider>
 | 
			
		||||
    );
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
<RebootButtonExample />;
 | 
			
		||||
```
 | 
			
		||||
@@ -1,80 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React, { useState, useEffect } from "react";
 | 
			
		||||
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { useAPIPost } from "../api/hooks";
 | 
			
		||||
import { API_STATE } from "../api/utils";
 | 
			
		||||
import Button from "../bootstrap/Button";
 | 
			
		||||
import { Modal, ModalHeader, ModalBody, ModalFooter } from "../bootstrap/Modal";
 | 
			
		||||
import { useAlert } from "../context/alertContext/AlertContext";
 | 
			
		||||
import { ForisURLs } from "../utils/forisUrls";
 | 
			
		||||
 | 
			
		||||
function RebootButton(props) {
 | 
			
		||||
    const [triggered, setTriggered] = useState(false);
 | 
			
		||||
    const [modalShown, setModalShown] = useState(false);
 | 
			
		||||
    const [triggerRebootStatus, triggerReboot] = useAPIPost(ForisURLs.reboot);
 | 
			
		||||
 | 
			
		||||
    const [setAlert] = useAlert();
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (triggerRebootStatus.state === API_STATE.ERROR) {
 | 
			
		||||
            setAlert(_("Reboot request failed."));
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const rebootHandler = () => {
 | 
			
		||||
        setTriggered(true);
 | 
			
		||||
        triggerReboot();
 | 
			
		||||
        setModalShown(false);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <>
 | 
			
		||||
            <RebootModal
 | 
			
		||||
                shown={modalShown}
 | 
			
		||||
                setShown={setModalShown}
 | 
			
		||||
                onReboot={rebootHandler}
 | 
			
		||||
            />
 | 
			
		||||
            <Button
 | 
			
		||||
                className="btn-danger"
 | 
			
		||||
                loading={triggered}
 | 
			
		||||
                disabled={triggered}
 | 
			
		||||
                onClick={() => setModalShown(true)}
 | 
			
		||||
                {...props}
 | 
			
		||||
            >
 | 
			
		||||
                {_("Reboot")}
 | 
			
		||||
            </Button>
 | 
			
		||||
        </>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
RebootModal.propTypes = {
 | 
			
		||||
    shown: PropTypes.bool.isRequired,
 | 
			
		||||
    setShown: PropTypes.func.isRequired,
 | 
			
		||||
    onReboot: PropTypes.func.isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RebootModal({ shown, setShown, onReboot }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <Modal shown={shown} setShown={setShown}>
 | 
			
		||||
            <ModalHeader setShown={setShown} title={_("Warning!")} />
 | 
			
		||||
            <ModalBody>
 | 
			
		||||
                <p>{_("Are you sure you want to restart the router?")}</p>
 | 
			
		||||
            </ModalBody>
 | 
			
		||||
            <ModalFooter>
 | 
			
		||||
                <Button onClick={() => setShown(false)}>{_("Cancel")}</Button>
 | 
			
		||||
                <Button className="btn-danger" onClick={onReboot}>
 | 
			
		||||
                    {_("Confirm reboot")}
 | 
			
		||||
                </Button>
 | 
			
		||||
            </ModalFooter>
 | 
			
		||||
        </Modal>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RebootButton;
 | 
			
		||||
							
								
								
									
										84
									
								
								src/common/RichTable/RichTable.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								src/common/RichTable/RichTable.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,84 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React, { useMemo, useState } from "react";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    flexRender,
 | 
			
		||||
    getCoreRowModel,
 | 
			
		||||
    getSortedRowModel,
 | 
			
		||||
    getPaginationRowModel,
 | 
			
		||||
    useReactTable,
 | 
			
		||||
} from "@tanstack/react-table";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import RichTableBody from "./RichTableBody";
 | 
			
		||||
import RichTableHeader from "./RichTableHeader";
 | 
			
		||||
import RichTablePagination from "./RichTablePagination";
 | 
			
		||||
 | 
			
		||||
const fallbackData = [];
 | 
			
		||||
 | 
			
		||||
RichTable.propTypes = {
 | 
			
		||||
    /** Columns to be displayed in the table */
 | 
			
		||||
    columns: PropTypes.array.isRequired,
 | 
			
		||||
    /** Data to be displayed in the table */
 | 
			
		||||
    data: PropTypes.array.isRequired,
 | 
			
		||||
    /** Whether to display pagination */
 | 
			
		||||
    withPagination: PropTypes.bool,
 | 
			
		||||
    /** Number of rows per page */
 | 
			
		||||
    pageSize: PropTypes.number,
 | 
			
		||||
    /** Index of the current page */
 | 
			
		||||
    pageIndex: PropTypes.number,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RichTable({
 | 
			
		||||
    columns,
 | 
			
		||||
    data,
 | 
			
		||||
    withPagination,
 | 
			
		||||
    pageSize = 5,
 | 
			
		||||
    pageIndex = 0,
 | 
			
		||||
}) {
 | 
			
		||||
    const tableColumns = useMemo(() => columns, [columns]);
 | 
			
		||||
    const [tableData] = useState(data ?? fallbackData);
 | 
			
		||||
    const [sorting, setSorting] = useState([]);
 | 
			
		||||
    const [pagination, setPagination] = useState({
 | 
			
		||||
        pageIndex,
 | 
			
		||||
        pageSize,
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const table = useReactTable({
 | 
			
		||||
        data: tableData,
 | 
			
		||||
        columns: tableColumns,
 | 
			
		||||
        getCoreRowModel: getCoreRowModel(),
 | 
			
		||||
        getSortedRowModel: getSortedRowModel(),
 | 
			
		||||
        getPaginationRowModel: getPaginationRowModel(),
 | 
			
		||||
        onPaginationChange: setPagination,
 | 
			
		||||
        onSortingChange: setSorting,
 | 
			
		||||
        state: {
 | 
			
		||||
            sorting,
 | 
			
		||||
            pagination,
 | 
			
		||||
        },
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <div className="table-responsive">
 | 
			
		||||
            <table className="table table-hover text-nowrap">
 | 
			
		||||
                <RichTableHeader table={table} flexRender={flexRender} />
 | 
			
		||||
                <RichTableBody table={table} flexRender={flexRender} />
 | 
			
		||||
            </table>
 | 
			
		||||
            {withPagination && (
 | 
			
		||||
                <RichTablePagination
 | 
			
		||||
                    table={table}
 | 
			
		||||
                    tablePageSize={pageSize}
 | 
			
		||||
                    allRows={tableData.length}
 | 
			
		||||
                />
 | 
			
		||||
            )}
 | 
			
		||||
        </div>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RichTable;
 | 
			
		||||
							
								
								
									
										135
									
								
								src/common/RichTable/RichTable.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										135
									
								
								src/common/RichTable/RichTable.md
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,135 @@
 | 
			
		||||
### Description
 | 
			
		||||
 | 
			
		||||
Rich Table is a table component based on
 | 
			
		||||
[Tanstack React Table](https://tanstack.com/table/). It adds some features to
 | 
			
		||||
the table component, such as:
 | 
			
		||||
 | 
			
		||||
-   **Pagination**: The table can be paginated.
 | 
			
		||||
-   **Sorting**: The table can be sorted by columns.
 | 
			
		||||
-   **Row Expansion**: The table rows can be expanded. (To be implemented)
 | 
			
		||||
 | 
			
		||||
### Example
 | 
			
		||||
 | 
			
		||||
```js
 | 
			
		||||
import RichTable from "./RichTable";
 | 
			
		||||
 | 
			
		||||
const columns = [
 | 
			
		||||
    {
 | 
			
		||||
        header: "Name",
 | 
			
		||||
        accessorKey: "name",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        header: "Surname",
 | 
			
		||||
        accessorKey: "surname",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        header: "Age",
 | 
			
		||||
        accessorKey: "age",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        header: "Phone",
 | 
			
		||||
        accessorKey: "phone",
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
const data = [
 | 
			
		||||
    {
 | 
			
		||||
        name: "John",
 | 
			
		||||
        surname: "Coltrane",
 | 
			
		||||
        age: 30,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Jane",
 | 
			
		||||
        surname: "Doe",
 | 
			
		||||
        age: 25,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Alice",
 | 
			
		||||
        surname: "Smith",
 | 
			
		||||
        age: 35,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Bob",
 | 
			
		||||
        surname: "Smith",
 | 
			
		||||
        age: 40,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Charlie",
 | 
			
		||||
        surname: "Brown",
 | 
			
		||||
        age: 45,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Daisy",
 | 
			
		||||
        surname: "Brown",
 | 
			
		||||
        age: 50,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Eve",
 | 
			
		||||
        surname: "Johnson",
 | 
			
		||||
        age: 55,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Frank",
 | 
			
		||||
        surname: "Johnson",
 | 
			
		||||
        age: 60,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Grace",
 | 
			
		||||
        surname: "Williams",
 | 
			
		||||
        age: 65,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Henry",
 | 
			
		||||
        surname: "Williams",
 | 
			
		||||
        age: 70,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Ivy",
 | 
			
		||||
        surname: "Brown",
 | 
			
		||||
        age: 75,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Jack",
 | 
			
		||||
        surname: "Brown",
 | 
			
		||||
        age: 80,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Kelly",
 | 
			
		||||
        surname: "Johnson",
 | 
			
		||||
        age: 85,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Liam",
 | 
			
		||||
        surname: "Johnson",
 | 
			
		||||
        age: 90,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Mia",
 | 
			
		||||
        surname: "Williams",
 | 
			
		||||
        age: 95,
 | 
			
		||||
        phone: "123456789",
 | 
			
		||||
    },
 | 
			
		||||
    {
 | 
			
		||||
        name: "Nathan",
 | 
			
		||||
        surname: "Williams",
 | 
			
		||||
        age: 100,
 | 
			
		||||
        phone: "987654321",
 | 
			
		||||
    },
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
<RichTable columns={columns} data={data} withPagination />;
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										48
									
								
								src/common/RichTable/RichTableBody.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										48
									
								
								src/common/RichTable/RichTableBody.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,48 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import propTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
RichTableBody.propTypes = {
 | 
			
		||||
    table: propTypes.shape({
 | 
			
		||||
        getRowModel: propTypes.func.isRequired,
 | 
			
		||||
    }).isRequired,
 | 
			
		||||
    flexRender: propTypes.func.isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RichTableBody({ table, flexRender }) {
 | 
			
		||||
    return (
 | 
			
		||||
        <tbody>
 | 
			
		||||
            {table.getRowModel().rows.map((row) => {
 | 
			
		||||
                return (
 | 
			
		||||
                    <tr key={row.id} className="align-middle">
 | 
			
		||||
                        {row.getVisibleCells().map((cell) => {
 | 
			
		||||
                            return (
 | 
			
		||||
                                <td
 | 
			
		||||
                                    key={cell.id}
 | 
			
		||||
                                    {...(cell.column.columnDef.className && {
 | 
			
		||||
                                        className:
 | 
			
		||||
                                            cell.column.columnDef.className,
 | 
			
		||||
                                    })}
 | 
			
		||||
                                >
 | 
			
		||||
                                    {flexRender(
 | 
			
		||||
                                        cell.column.columnDef.cell,
 | 
			
		||||
                                        cell.getContext()
 | 
			
		||||
                                    )}
 | 
			
		||||
                                </td>
 | 
			
		||||
                            );
 | 
			
		||||
                        })}
 | 
			
		||||
                    </tr>
 | 
			
		||||
                );
 | 
			
		||||
            })}
 | 
			
		||||
        </tbody>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RichTableBody;
 | 
			
		||||
							
								
								
									
										96
									
								
								src/common/RichTable/RichTableHeader.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/common/RichTable/RichTableHeader.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,96 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    faSquareCaretUp,
 | 
			
		||||
    faSquareCaretDown,
 | 
			
		||||
} from "@fortawesome/free-solid-svg-icons";
 | 
			
		||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
 | 
			
		||||
import propTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
RichTableHeader.propTypes = {
 | 
			
		||||
    table: propTypes.shape({
 | 
			
		||||
        getHeaderGroups: propTypes.func.isRequired,
 | 
			
		||||
    }).isRequired,
 | 
			
		||||
    flexRender: propTypes.func.isRequired,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RichTableHeader({ table, flexRender }) {
 | 
			
		||||
    const getThTitle = (header) => {
 | 
			
		||||
        if (!header.column.getCanSort()) return undefined;
 | 
			
		||||
 | 
			
		||||
        const nextSortingOrder = header.column.getNextSortingOrder();
 | 
			
		||||
        if (nextSortingOrder === "asc") return _("Sort ascending");
 | 
			
		||||
        if (nextSortingOrder === "desc") return _("Sort descending");
 | 
			
		||||
        return _("Clear sort");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <thead className="thead-light">
 | 
			
		||||
            {table.getHeaderGroups().map((headerGroup) => (
 | 
			
		||||
                <tr key={headerGroup.id} role="row">
 | 
			
		||||
                    {headerGroup.headers.map((header) => (
 | 
			
		||||
                        <th
 | 
			
		||||
                            key={header.id}
 | 
			
		||||
                            colSpan={header.colSpan}
 | 
			
		||||
                            {...(header.column.columnDef.headerClassName && {
 | 
			
		||||
                                className:
 | 
			
		||||
                                    header.column.columnDef.headerClassName,
 | 
			
		||||
                            })}
 | 
			
		||||
                        >
 | 
			
		||||
                            {header.isPlaceholder ||
 | 
			
		||||
                            header.column.columnDef.headerIsHidden ? (
 | 
			
		||||
                                <div className="d-none" aria-hidden="true">
 | 
			
		||||
                                    {flexRender(
 | 
			
		||||
                                        header.column.columnDef.header,
 | 
			
		||||
                                        header.getContext()
 | 
			
		||||
                                    )}
 | 
			
		||||
                                </div>
 | 
			
		||||
                            ) : (
 | 
			
		||||
                                <button
 | 
			
		||||
                                    type="button"
 | 
			
		||||
                                    className={`btn btn-link text-decoration-none text-reset fw-bold p-0 d-flex align-items-center
 | 
			
		||||
                                                    ${
 | 
			
		||||
                                                        header.column.getCanSort()
 | 
			
		||||
                                                            ? "d-flex align-items-center"
 | 
			
		||||
                                                            : ""
 | 
			
		||||
                                                    }
 | 
			
		||||
                                                `}
 | 
			
		||||
                                    onClick={header.column.getToggleSortingHandler()}
 | 
			
		||||
                                    title={getThTitle(header)}
 | 
			
		||||
                                >
 | 
			
		||||
                                    {flexRender(
 | 
			
		||||
                                        header.column.columnDef.header,
 | 
			
		||||
                                        header.getContext()
 | 
			
		||||
                                    )}
 | 
			
		||||
                                    {{
 | 
			
		||||
                                        asc: (
 | 
			
		||||
                                            <FontAwesomeIcon
 | 
			
		||||
                                                icon={faSquareCaretUp}
 | 
			
		||||
                                                className="ms-1 text-primary"
 | 
			
		||||
                                            />
 | 
			
		||||
                                        ),
 | 
			
		||||
                                        desc: (
 | 
			
		||||
                                            <FontAwesomeIcon
 | 
			
		||||
                                                icon={faSquareCaretDown}
 | 
			
		||||
                                                className="ms-1 text-primary"
 | 
			
		||||
                                            />
 | 
			
		||||
                                        ),
 | 
			
		||||
                                    }[header.column.getIsSorted()] ?? null}
 | 
			
		||||
                                </button>
 | 
			
		||||
                            )}
 | 
			
		||||
                        </th>
 | 
			
		||||
                    ))}
 | 
			
		||||
                </tr>
 | 
			
		||||
            ))}
 | 
			
		||||
        </thead>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RichTableHeader;
 | 
			
		||||
							
								
								
									
										128
									
								
								src/common/RichTable/RichTablePagination.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								src/common/RichTable/RichTablePagination.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,128 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React, { useMemo } from "react";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    faAngleLeft,
 | 
			
		||||
    faAnglesLeft,
 | 
			
		||||
    faAngleRight,
 | 
			
		||||
    faAnglesRight,
 | 
			
		||||
} from "@fortawesome/free-solid-svg-icons";
 | 
			
		||||
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
 | 
			
		||||
import propTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
RichTablePagination.propTypes = {
 | 
			
		||||
    table: propTypes.shape({
 | 
			
		||||
        getState: propTypes.func.isRequired,
 | 
			
		||||
        getCanPreviousPage: propTypes.func.isRequired,
 | 
			
		||||
        getCanNextPage: propTypes.func.isRequired,
 | 
			
		||||
        firstPage: propTypes.func.isRequired,
 | 
			
		||||
        previousPage: propTypes.func.isRequired,
 | 
			
		||||
        nextPage: propTypes.func.isRequired,
 | 
			
		||||
        lastPage: propTypes.func.isRequired,
 | 
			
		||||
        setPageSize: propTypes.func.isRequired,
 | 
			
		||||
        getPageCount: propTypes.func.isRequired,
 | 
			
		||||
    }).isRequired,
 | 
			
		||||
    tablePageSize: propTypes.number,
 | 
			
		||||
    allRows: propTypes.number,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
function RichTablePagination({ table, tablePageSize, allRows }) {
 | 
			
		||||
    const { pagination } = table.getState();
 | 
			
		||||
    const prevPagBtnDisabled = !table.getCanPreviousPage();
 | 
			
		||||
    const nextPagBtnDisabled = !table.getCanNextPage();
 | 
			
		||||
 | 
			
		||||
    const pageSizes = useMemo(() => {
 | 
			
		||||
        return [tablePageSize ?? 5, 10, 25].filter(
 | 
			
		||||
            (value, index, self) => self.indexOf(value) === index
 | 
			
		||||
        );
 | 
			
		||||
    }, [tablePageSize]);
 | 
			
		||||
 | 
			
		||||
    const renderPaginationButton = (icon, ariaLabel, onClick, disabled) => (
 | 
			
		||||
        <li
 | 
			
		||||
            className={`page-item ${disabled ? "disabled" : ""}`}
 | 
			
		||||
            style={{ cursor: disabled ? "not-allowed" : "pointer" }}
 | 
			
		||||
        >
 | 
			
		||||
            <button
 | 
			
		||||
                type="button"
 | 
			
		||||
                className="page-link"
 | 
			
		||||
                aria-label={ariaLabel}
 | 
			
		||||
                onClick={onClick}
 | 
			
		||||
                disabled={disabled}
 | 
			
		||||
            >
 | 
			
		||||
                <FontAwesomeIcon icon={icon} />
 | 
			
		||||
            </button>
 | 
			
		||||
        </li>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    return (
 | 
			
		||||
        <nav
 | 
			
		||||
            aria-label={_("Pagination navigation bar")}
 | 
			
		||||
            className="d-flex gap-2 justify-content-start align-items-center mx-2 mb-1 text-nowrap"
 | 
			
		||||
        >
 | 
			
		||||
            <ul className="pagination pagination-sm mb-0">
 | 
			
		||||
                {renderPaginationButton(
 | 
			
		||||
                    faAnglesLeft,
 | 
			
		||||
                    _("First page"),
 | 
			
		||||
                    () => table.firstPage(),
 | 
			
		||||
                    prevPagBtnDisabled
 | 
			
		||||
                )}
 | 
			
		||||
                {renderPaginationButton(
 | 
			
		||||
                    faAngleLeft,
 | 
			
		||||
                    _("Previous page"),
 | 
			
		||||
                    () => table.previousPage(),
 | 
			
		||||
                    prevPagBtnDisabled
 | 
			
		||||
                )}
 | 
			
		||||
                {renderPaginationButton(
 | 
			
		||||
                    faAngleRight,
 | 
			
		||||
                    _("Next page"),
 | 
			
		||||
                    () => table.nextPage(),
 | 
			
		||||
                    nextPagBtnDisabled
 | 
			
		||||
                )}
 | 
			
		||||
                {renderPaginationButton(
 | 
			
		||||
                    faAnglesRight,
 | 
			
		||||
                    _("Last page"),
 | 
			
		||||
                    () => table.lastPage(),
 | 
			
		||||
                    nextPagBtnDisabled
 | 
			
		||||
                )}
 | 
			
		||||
            </ul>
 | 
			
		||||
            <span>
 | 
			
		||||
                {_("Page")} 
 | 
			
		||||
                <span className="fw-bold">
 | 
			
		||||
                    {pagination.pageIndex + 1}
 | 
			
		||||
                     {_("of")} 
 | 
			
		||||
                    {table.getPageCount().toLocaleString()}
 | 
			
		||||
                </span>
 | 
			
		||||
            </span>
 | 
			
		||||
            <div
 | 
			
		||||
                className="vr mx-1 align-self-center"
 | 
			
		||||
                style={{ height: "1.5rem" }}
 | 
			
		||||
            />
 | 
			
		||||
            <span>{_("Rows per page:")}</span>
 | 
			
		||||
            <select
 | 
			
		||||
                className="form-select form-select-sm w-auto"
 | 
			
		||||
                aria-label={_("Select rows per page")}
 | 
			
		||||
                value={pagination.pageSize}
 | 
			
		||||
                onChange={(e) => {
 | 
			
		||||
                    table.setPageSize(Number(e.target.value));
 | 
			
		||||
                }}
 | 
			
		||||
            >
 | 
			
		||||
                {pageSizes.map((pageSize) => (
 | 
			
		||||
                    <option key={pageSize} value={pageSize}>
 | 
			
		||||
                        {pageSize}
 | 
			
		||||
                    </option>
 | 
			
		||||
                ))}
 | 
			
		||||
                <option key={allRows} value={allRows}>
 | 
			
		||||
                    {_("All")}
 | 
			
		||||
                </option>
 | 
			
		||||
            </select>
 | 
			
		||||
        </nav>
 | 
			
		||||
    );
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default RichTablePagination;
 | 
			
		||||
@@ -26,7 +26,7 @@ function ResetWiFiSettings({ ws, endpoint }) {
 | 
			
		||||
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        const module = "wifi";
 | 
			
		||||
        ws.bind(module, "reset", () => {
 | 
			
		||||
        ws.subscribe(module).bind(module, "reset", () => {
 | 
			
		||||
            // eslint-disable-next-line no-restricted-globals
 | 
			
		||||
            setTimeout(() => location.reload(), 1000);
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										92
									
								
								src/common/__tests__/ActionButtonWithModal.test.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										92
									
								
								src/common/__tests__/ActionButtonWithModal.test.js
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,92 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import Button from "bootstrap/Button";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    fireEvent,
 | 
			
		||||
    getByText,
 | 
			
		||||
    queryByText,
 | 
			
		||||
    render,
 | 
			
		||||
    wait,
 | 
			
		||||
} from "customTestRender";
 | 
			
		||||
import mockAxios from "jest-mock-axios";
 | 
			
		||||
import { mockJSONError } from "testUtils/network";
 | 
			
		||||
import { mockSetAlert } from "testUtils/alertContextMock";
 | 
			
		||||
 | 
			
		||||
import ActionButtonWithModal from "../ActionButtonWithModal/ActionButtonWithModal";
 | 
			
		||||
 | 
			
		||||
describe("<ActionButtonWithModal/>", () => {
 | 
			
		||||
    let componentContainer;
 | 
			
		||||
    const ActionButton = (props) => (
 | 
			
		||||
        <Button type="button" {...props}>
 | 
			
		||||
            Action
 | 
			
		||||
        </Button>
 | 
			
		||||
    );
 | 
			
		||||
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
        const { container } = render(
 | 
			
		||||
            <>
 | 
			
		||||
                <div id="modal-container" />
 | 
			
		||||
                <div id="alert-container" />
 | 
			
		||||
                <ActionButtonWithModal
 | 
			
		||||
                    actionTrigger={ActionButton}
 | 
			
		||||
                    actionUrl="/reforis/api/action"
 | 
			
		||||
                    modalTitle="Warning!"
 | 
			
		||||
                    modalMessage="Are you sure you want to perform this action?"
 | 
			
		||||
                    modalActionText="Confirm action"
 | 
			
		||||
                    modalActionProps={{ className: "btn-danger" }}
 | 
			
		||||
                    successMessage="Action request succeeded."
 | 
			
		||||
                    errorMessage="Action request failed."
 | 
			
		||||
                />
 | 
			
		||||
            </>
 | 
			
		||||
        );
 | 
			
		||||
        componentContainer = container;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Render button.", () => {
 | 
			
		||||
        expect(componentContainer).toMatchSnapshot();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Render modal.", () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Action"));
 | 
			
		||||
        expect(componentContainer).toMatchSnapshot();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Confirm action.", () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Action"));
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Confirm action"));
 | 
			
		||||
        expect(mockAxios.post).toHaveBeenCalledWith(
 | 
			
		||||
            "/reforis/api/action",
 | 
			
		||||
            undefined,
 | 
			
		||||
            expect.anything()
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Hold error.", async () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Action"));
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Confirm action"));
 | 
			
		||||
        mockJSONError();
 | 
			
		||||
        await wait(() =>
 | 
			
		||||
            expect(mockSetAlert).toBeCalledWith("Action request failed.")
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Show success alert on successful action.", async () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Action"));
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Confirm action"));
 | 
			
		||||
        mockAxios.mockResponse({ status: 200 });
 | 
			
		||||
        await wait(() =>
 | 
			
		||||
            expect(mockSetAlert).toBeCalledWith(
 | 
			
		||||
                "Action request succeeded.",
 | 
			
		||||
                "success"
 | 
			
		||||
            )
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -1,63 +0,0 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2019 CZ.NIC z.s.p.o. (http://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
import React from "react";
 | 
			
		||||
 | 
			
		||||
import {
 | 
			
		||||
    fireEvent,
 | 
			
		||||
    getByText,
 | 
			
		||||
    queryByText,
 | 
			
		||||
    render,
 | 
			
		||||
    wait,
 | 
			
		||||
} from "customTestRender";
 | 
			
		||||
import mockAxios from "jest-mock-axios";
 | 
			
		||||
import { mockJSONError } from "testUtils/network";
 | 
			
		||||
import { mockSetAlert } from "testUtils/alertContextMock";
 | 
			
		||||
 | 
			
		||||
import RebootButton from "../RebootButton";
 | 
			
		||||
 | 
			
		||||
describe("<RebootButton/>", () => {
 | 
			
		||||
    let componentContainer;
 | 
			
		||||
    beforeEach(() => {
 | 
			
		||||
        const { container } = render(
 | 
			
		||||
            <>
 | 
			
		||||
                <div id="modal-container" />
 | 
			
		||||
                <RebootButton />
 | 
			
		||||
            </>
 | 
			
		||||
        );
 | 
			
		||||
        componentContainer = container;
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Render.", () => {
 | 
			
		||||
        expect(componentContainer).toMatchSnapshot();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Render modal.", () => {
 | 
			
		||||
        expect(queryByText(componentContainer, "Confirm reboot")).toBeNull();
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Reboot"));
 | 
			
		||||
        expect(componentContainer).toMatchSnapshot();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Confirm reboot.", () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Reboot"));
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Confirm reboot"));
 | 
			
		||||
        expect(mockAxios.post).toHaveBeenCalledWith(
 | 
			
		||||
            "/api/reboot",
 | 
			
		||||
            undefined,
 | 
			
		||||
            expect.anything()
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("Hold error.", async () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Reboot"));
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Confirm reboot"));
 | 
			
		||||
        mockJSONError();
 | 
			
		||||
        await wait(() =>
 | 
			
		||||
            expect(mockSetAlert).toBeCalledWith("Reboot request failed.")
 | 
			
		||||
        );
 | 
			
		||||
    });
 | 
			
		||||
});
 | 
			
		||||
@@ -1,11 +1,32 @@
 | 
			
		||||
// Jest Snapshot v1, https://goo.gl/fbAQLP
 | 
			
		||||
 | 
			
		||||
exports[`<RebootButton/> Render modal. 1`] = `
 | 
			
		||||
exports[`<ActionButtonWithModal/> Render button. 1`] = `
 | 
			
		||||
<div>
 | 
			
		||||
  <div
 | 
			
		||||
    id="modal-container"
 | 
			
		||||
  />
 | 
			
		||||
  <div
 | 
			
		||||
    id="alert-container"
 | 
			
		||||
  />
 | 
			
		||||
  <button
 | 
			
		||||
    class="btn btn-primary d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
    type="button"
 | 
			
		||||
  >
 | 
			
		||||
    <span>
 | 
			
		||||
      Action
 | 
			
		||||
    </span>
 | 
			
		||||
  </button>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
exports[`<ActionButtonWithModal/> Render modal. 1`] = `
 | 
			
		||||
<div>
 | 
			
		||||
  <div
 | 
			
		||||
    id="modal-container"
 | 
			
		||||
  >
 | 
			
		||||
    <div
 | 
			
		||||
      aria-labelledby="modal-title"
 | 
			
		||||
      aria-modal="true"
 | 
			
		||||
      class="modal fade show"
 | 
			
		||||
      role="dialog"
 | 
			
		||||
    >
 | 
			
		||||
@@ -19,11 +40,11 @@ exports[`<RebootButton/> Render modal. 1`] = `
 | 
			
		||||
          <div
 | 
			
		||||
            class="modal-header"
 | 
			
		||||
          >
 | 
			
		||||
            <h5
 | 
			
		||||
              class="modal-title"
 | 
			
		||||
            <h1
 | 
			
		||||
              class="modal-title fs-5"
 | 
			
		||||
            >
 | 
			
		||||
              Warning!
 | 
			
		||||
            </h5>
 | 
			
		||||
            </h1>
 | 
			
		||||
            <button
 | 
			
		||||
              aria-label="Close"
 | 
			
		||||
              class="btn-close"
 | 
			
		||||
@@ -33,15 +54,17 @@ exports[`<RebootButton/> Render modal. 1`] = `
 | 
			
		||||
          <div
 | 
			
		||||
            class="modal-body"
 | 
			
		||||
          >
 | 
			
		||||
            <p>
 | 
			
		||||
              Are you sure you want to restart the router?
 | 
			
		||||
            <p
 | 
			
		||||
              class="mb-0"
 | 
			
		||||
            >
 | 
			
		||||
              Are you sure you want to perform this action?
 | 
			
		||||
            </p>
 | 
			
		||||
          </div>
 | 
			
		||||
          <div
 | 
			
		||||
            class="modal-footer"
 | 
			
		||||
          >
 | 
			
		||||
            <button
 | 
			
		||||
              class="btn btn-primary d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
              class="btn btn-secondary d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
              type="button"
 | 
			
		||||
            >
 | 
			
		||||
              <span>
 | 
			
		||||
@@ -53,7 +76,7 @@ exports[`<RebootButton/> Render modal. 1`] = `
 | 
			
		||||
              type="button"
 | 
			
		||||
            >
 | 
			
		||||
              <span>
 | 
			
		||||
                Confirm reboot
 | 
			
		||||
                Confirm action
 | 
			
		||||
              </span>
 | 
			
		||||
            </button>
 | 
			
		||||
          </div>
 | 
			
		||||
@@ -61,28 +84,15 @@ exports[`<RebootButton/> Render modal. 1`] = `
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
  <button
 | 
			
		||||
    class="btn btn-danger d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
    type="button"
 | 
			
		||||
  >
 | 
			
		||||
    <span>
 | 
			
		||||
      Reboot
 | 
			
		||||
    </span>
 | 
			
		||||
  </button>
 | 
			
		||||
</div>
 | 
			
		||||
`;
 | 
			
		||||
 | 
			
		||||
exports[`<RebootButton/> Render. 1`] = `
 | 
			
		||||
<div>
 | 
			
		||||
  <div
 | 
			
		||||
    id="modal-container"
 | 
			
		||||
    id="alert-container"
 | 
			
		||||
  />
 | 
			
		||||
  <button
 | 
			
		||||
    class="btn btn-danger d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
    class="btn btn-primary d-inline-flex justify-content-center align-items-center"
 | 
			
		||||
    type="button"
 | 
			
		||||
  >
 | 
			
		||||
    <span>
 | 
			
		||||
      Reboot
 | 
			
		||||
      Action
 | 
			
		||||
    </span>
 | 
			
		||||
  </button>
 | 
			
		||||
</div>
 | 
			
		||||
@@ -43,14 +43,17 @@ describe("AlertContext", () => {
 | 
			
		||||
        expect(componentContainer).toMatchSnapshot();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("should dismiss alert with alert button", () => {
 | 
			
		||||
    it("should dismiss alert with alert button", async () => {
 | 
			
		||||
        fireEvent.click(getByText(componentContainer, "Set alert"));
 | 
			
		||||
        // Alert is present
 | 
			
		||||
        expect(getByText(componentContainer, "Alert content")).toBeDefined();
 | 
			
		||||
 | 
			
		||||
        fireEvent.click(componentContainer.querySelector(".btn-close"));
 | 
			
		||||
        // Alert is gone
 | 
			
		||||
        expect(queryByText(componentContainer, "Alert content")).toBeNull();
 | 
			
		||||
        await (() =>
 | 
			
		||||
            expect(
 | 
			
		||||
                queryByText(componentContainer, "Alert content")
 | 
			
		||||
            ).toBeNull());
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    it("should dismiss alert with external button", () => {
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,8 @@ exports[`AlertContext should render alert 1`] = `
 | 
			
		||||
    id="alert-container"
 | 
			
		||||
  >
 | 
			
		||||
    <div
 | 
			
		||||
      class="alert alert-danger alert-dismissible"
 | 
			
		||||
      class="alert alert-danger alert-fade-in alert-dismissible"
 | 
			
		||||
      role="alert"
 | 
			
		||||
    >
 | 
			
		||||
      <button
 | 
			
		||||
        aria-label="Close"
 | 
			
		||||
 
 | 
			
		||||
@@ -28,19 +28,22 @@ export { default as FileInput } from "./bootstrap/FileInput";
 | 
			
		||||
export { default as Input } from "./bootstrap/Input";
 | 
			
		||||
export { default as NumberInput } from "./bootstrap/NumberInput";
 | 
			
		||||
export { default as PasswordInput } from "./bootstrap/PasswordInput";
 | 
			
		||||
export { default as RadioSet, Radio } from "./bootstrap/RadioSet";
 | 
			
		||||
export { default as Radio } from "./bootstrap/Radio";
 | 
			
		||||
export { default as RadioSet } from "./bootstrap/RadioSet";
 | 
			
		||||
export { default as Select } from "./bootstrap/Select";
 | 
			
		||||
export { default as TextInput } from "./bootstrap/TextInput";
 | 
			
		||||
export { formFieldsSize, buttonFormFieldsSize } from "./bootstrap/constants";
 | 
			
		||||
export { default as Switch } from "./bootstrap/Switch";
 | 
			
		||||
export { default as ThreeDotsMenu } from "./bootstrap/ThreeDotsMenu";
 | 
			
		||||
 | 
			
		||||
export { Spinner, SpinnerElement } from "./bootstrap/Spinner";
 | 
			
		||||
export { Modal, ModalBody, ModalFooter, ModalHeader } from "./bootstrap/Modal";
 | 
			
		||||
 | 
			
		||||
// Common
 | 
			
		||||
export { default as RebootButton } from "./common/RebootButton";
 | 
			
		||||
export { default as ActionButtonWithModal } from "./common/ActionButtonWithModal/ActionButtonWithModal";
 | 
			
		||||
export { default as WiFiSettings } from "./common/WiFiSettings/WiFiSettings";
 | 
			
		||||
export { default as ResetWiFiSettings } from "./common/WiFiSettings/ResetWiFiSettings";
 | 
			
		||||
export { default as RichTable } from "./common/RichTable/RichTable";
 | 
			
		||||
// Form
 | 
			
		||||
export { default as ForisForm } from "./form/components/ForisForm";
 | 
			
		||||
export {
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ import { render } from "@testing-library/react";
 | 
			
		||||
import PropTypes from "prop-types";
 | 
			
		||||
 | 
			
		||||
import { AlertContextMock } from "./alertContextMock";
 | 
			
		||||
import { CustomizationContextMock } from "./cutomizationContextMock";
 | 
			
		||||
import { CustomizationContextMock } from "./customizationContextMock";
 | 
			
		||||
 | 
			
		||||
Wrapper.propTypes = {
 | 
			
		||||
    children: PropTypes.oneOfType([
 | 
			
		||||
 
 | 
			
		||||
@@ -10,4 +10,3 @@ global._ = (str) => str;
 | 
			
		||||
global.ngettext = (str) => str;
 | 
			
		||||
global.babel = { format: (str) => str };
 | 
			
		||||
global.ForisTranslations = { locale: "en" };
 | 
			
		||||
global.setImmediate = (fn) => setTimeout(fn, 0);
 | 
			
		||||
@@ -5,12 +5,14 @@
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
export const REFORIS_URL_PREFIX = process.env.REFORIS_PREFIX || "";
 | 
			
		||||
export const REFORIS_URL_PREFIX = "/reforis";
 | 
			
		||||
export const REFORIS_API_URL_PREFIX = `${REFORIS_URL_PREFIX}/api`;
 | 
			
		||||
 | 
			
		||||
export const ForisURLs = {
 | 
			
		||||
    // turris-auth
 | 
			
		||||
    login: `/login?${REFORIS_URL_PREFIX}/`,
 | 
			
		||||
    logout: `/logout`,
 | 
			
		||||
    extendSession: `/extend-session`,
 | 
			
		||||
 | 
			
		||||
    static: `${REFORIS_URL_PREFIX}/static/reforis`,
 | 
			
		||||
    wifi: `${REFORIS_URL_PREFIX}/network-settings/wifi`,
 | 
			
		||||
@@ -25,6 +27,13 @@ export const ForisURLs = {
 | 
			
		||||
    storage: `${REFORIS_URL_PREFIX}/storage`,
 | 
			
		||||
    sentinelAgreement: `${REFORIS_URL_PREFIX}/sentinel/agreement`,
 | 
			
		||||
 | 
			
		||||
    // URLs without prefix for Overview page
 | 
			
		||||
    openvpnClientSettings: "/openvpn/client-settings",
 | 
			
		||||
    packageManagementPackages: "/package-management/packages",
 | 
			
		||||
    packageManagementUpdateSettings: "/package-management/update-settings",
 | 
			
		||||
    sentinelLicenseAgreement: "/sentinel/agreement",
 | 
			
		||||
    librespeedSpeedTest: "/librespeed/speed-test",
 | 
			
		||||
 | 
			
		||||
    // Notifications links are used with <Link/> inside Router, thus url subdir is not required.
 | 
			
		||||
    overview: "/overview",
 | 
			
		||||
    notifications: "/overview#notifications",
 | 
			
		||||
 
 | 
			
		||||
@@ -40,3 +40,40 @@ export function useClickOutside(element, callback) {
 | 
			
		||||
        };
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Trap focus inside element. */
 | 
			
		||||
export function useFocusTrap(elementRef, condition = true) {
 | 
			
		||||
    useEffect(() => {
 | 
			
		||||
        if (!condition) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
        const currentElement = elementRef.current;
 | 
			
		||||
        const focusableElements = currentElement.querySelectorAll(
 | 
			
		||||
            'button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])'
 | 
			
		||||
        );
 | 
			
		||||
        const firstElement = focusableElements[0];
 | 
			
		||||
        const lastElement = focusableElements[focusableElements.length - 1];
 | 
			
		||||
 | 
			
		||||
        const handleTab = (event) => {
 | 
			
		||||
            if (event.key === "Tab") {
 | 
			
		||||
                if (event.shiftKey) {
 | 
			
		||||
                    if (document.activeElement === firstElement) {
 | 
			
		||||
                        lastElement.focus();
 | 
			
		||||
                        event.preventDefault();
 | 
			
		||||
                    }
 | 
			
		||||
                } else if (document.activeElement === lastElement) {
 | 
			
		||||
                    firstElement.focus();
 | 
			
		||||
                    event.preventDefault();
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        currentElement.addEventListener("keydown", handleTab);
 | 
			
		||||
 | 
			
		||||
        firstElement.focus();
 | 
			
		||||
 | 
			
		||||
        return () => {
 | 
			
		||||
            currentElement.removeEventListener("keydown", handleTab);
 | 
			
		||||
        };
 | 
			
		||||
    }, [elementRef, condition]);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,5 +1,5 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright (C) 2020-2024 CZ.NIC z.s.p.o. (https://www.nic.cz/)
 | 
			
		||||
 * Copyright (C) 2020-2022 CZ.NIC z.s.p.o. (http://www.nic.cz/)
 | 
			
		||||
 *
 | 
			
		||||
 * This is free software, licensed under the GNU General Public License v3.
 | 
			
		||||
 * See /LICENSE for more information.
 | 
			
		||||
@@ -7,33 +7,47 @@
 | 
			
		||||
 | 
			
		||||
/* eslint no-console: "off" */
 | 
			
		||||
 | 
			
		||||
import { io } from "socket.io-client";
 | 
			
		||||
const PROTOCOL = window.location.protocol === "http:" ? "ws" : "wss";
 | 
			
		||||
 | 
			
		||||
import { REFORIS_URL_PREFIX } from "../utils/forisUrls";
 | 
			
		||||
const URL = process.env.LIGHTTPD
 | 
			
		||||
    ? `${PROTOCOL}://${window.location.host}/${process.env.WSPATH || "foris-ws"}`
 | 
			
		||||
    : `${PROTOCOL}://${window.location.hostname}:9081`;
 | 
			
		||||
 | 
			
		||||
const WAITING_FOR_CONNECTION_TIMEOUT = 500;
 | 
			
		||||
 | 
			
		||||
class WebSockets {
 | 
			
		||||
    constructor() {
 | 
			
		||||
        this.socket = io("/notifications", {
 | 
			
		||||
            path: `${REFORIS_URL_PREFIX}/reforis-ws`,
 | 
			
		||||
        });
 | 
			
		||||
        this.connection = null;
 | 
			
		||||
        this.socket.on("disconnect", (reason) => {
 | 
			
		||||
            this.connection = null;
 | 
			
		||||
            console.debug(`SocketIO disconnected (${reason})`);
 | 
			
		||||
        });
 | 
			
		||||
        this.socket.on("notification", (message) => {
 | 
			
		||||
            console.debug("WS: Received Message:", message);
 | 
			
		||||
            this.dispatch(message);
 | 
			
		||||
        });
 | 
			
		||||
        this.socket.on("connect", (connection) => {
 | 
			
		||||
            this.connection = connection;
 | 
			
		||||
            console.debug(`SocketIO connected.`);
 | 
			
		||||
        });
 | 
			
		||||
        this.ws = new WebSocket(URL);
 | 
			
		||||
        this.ws.onerror = (e) => {
 | 
			
		||||
            console.error("WS: Error:", e);
 | 
			
		||||
        };
 | 
			
		||||
        this.ws.onmessage = (e) => {
 | 
			
		||||
            console.debug(`WS: Received Message: ${e.data}`);
 | 
			
		||||
            const data = JSON.parse(e.data);
 | 
			
		||||
            this.dispatch(data);
 | 
			
		||||
        };
 | 
			
		||||
        this.ws.onopen = () => {
 | 
			
		||||
            console.debug("WS: Connection open.");
 | 
			
		||||
        };
 | 
			
		||||
        this.ws.onclose = () => {
 | 
			
		||||
            console.debug("WS: Connection closed.");
 | 
			
		||||
        };
 | 
			
		||||
 | 
			
		||||
        // callbacks[module][action]
 | 
			
		||||
        this.callbacks = {};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    waitForConnection(callback) {
 | 
			
		||||
        if (this.ws.readyState === 1) {
 | 
			
		||||
            callback();
 | 
			
		||||
        } else {
 | 
			
		||||
            const that = this;
 | 
			
		||||
            setTimeout(() => {
 | 
			
		||||
                that.waitForConnection(callback);
 | 
			
		||||
            }, WAITING_FOR_CONNECTION_TIMEOUT);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    bind(module, action, callback) {
 | 
			
		||||
        this.callbacks[module] = this.callbacks[module] || {};
 | 
			
		||||
        this.callbacks[module][action] = this.callbacks[module][action] || [];
 | 
			
		||||
@@ -41,6 +55,13 @@ class WebSockets {
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    subscribe(module) {
 | 
			
		||||
        this.waitForConnection(() => {
 | 
			
		||||
            this.send("subscribe", module);
 | 
			
		||||
        });
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unbind(module, action, callback) {
 | 
			
		||||
        const callbacks = this.callbacks[module][action];
 | 
			
		||||
 | 
			
		||||
@@ -54,12 +75,28 @@ class WebSockets {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (Object.keys(this.callbacks[module]).length === 0) {
 | 
			
		||||
            delete this.callbacks[module];
 | 
			
		||||
            this.unsubscribe(module);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unsubscribe(module) {
 | 
			
		||||
        this.waitForConnection(() => {
 | 
			
		||||
            this.send("unsubscribe", module);
 | 
			
		||||
            delete this.callbacks[module];
 | 
			
		||||
        });
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    send(action, params) {
 | 
			
		||||
        const payload = JSON.stringify({ action, params });
 | 
			
		||||
        this.waitForConnection(() => {
 | 
			
		||||
            this.ws.send(payload);
 | 
			
		||||
        });
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    dispatch(json) {
 | 
			
		||||
        if (!json.module) return;
 | 
			
		||||
 | 
			
		||||
@@ -68,17 +105,20 @@ class WebSockets {
 | 
			
		||||
            chain = this.callbacks[json.module][json.action];
 | 
			
		||||
        } catch (error) {
 | 
			
		||||
            if (error instanceof TypeError) {
 | 
			
		||||
                console.debug(
 | 
			
		||||
                    `Callbacks for this module wasn't found: ${json.module}`
 | 
			
		||||
                console.warn(
 | 
			
		||||
                    `Callback for this message wasn't found:${error.data}`
 | 
			
		||||
                );
 | 
			
		||||
            } else throw error;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (typeof chain === "undefined") return;
 | 
			
		||||
 | 
			
		||||
        console.debug("Handling WS message", json);
 | 
			
		||||
        chain.forEach((callback) => callback(json));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    close() {
 | 
			
		||||
        this.ws.close();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export default WebSockets;
 | 
			
		||||
 
 | 
			
		||||
@@ -33,7 +33,7 @@ function useWSForisModule(
 | 
			
		||||
            setData(message.data);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ws.bind(module, action, callback);
 | 
			
		||||
        ws.subscribe(module).bind(module, action, callback);
 | 
			
		||||
 | 
			
		||||
        return () => {
 | 
			
		||||
            ws.unbind(module, action, callback);
 | 
			
		||||
 
 | 
			
		||||
@@ -28,11 +28,11 @@ module.exports = {
 | 
			
		||||
            content: "docs/development.md",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "Components",
 | 
			
		||||
            name: "Common Components",
 | 
			
		||||
            description: "Set of main components.",
 | 
			
		||||
            sections: [
 | 
			
		||||
                {
 | 
			
		||||
                    name: "Foris forms",
 | 
			
		||||
                    name: "ForisForm",
 | 
			
		||||
                    components: [
 | 
			
		||||
                        "src/form/components/ForisForm.js",
 | 
			
		||||
                        "src/form/components/alerts.js",
 | 
			
		||||
@@ -42,47 +42,52 @@ module.exports = {
 | 
			
		||||
                    usageMode: "expand",
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: "Alert Context",
 | 
			
		||||
                    components: ["src/context/alertContext/AlertContext.js"],
 | 
			
		||||
                    name: "RichTable",
 | 
			
		||||
                    components: ["src/common/RichTable/RichTable.js"],
 | 
			
		||||
                    exampleMode: "expand",
 | 
			
		||||
                    usageMode: "expand",
 | 
			
		||||
                },
 | 
			
		||||
                {
 | 
			
		||||
                    name: "ActionButtonWithModal",
 | 
			
		||||
                    components: [
 | 
			
		||||
                        "src/common/ActionButtonWithModal/ActionButtonWithModal.js",
 | 
			
		||||
                    ],
 | 
			
		||||
                    exampleMode: "expand",
 | 
			
		||||
                    usageMode: "expand",
 | 
			
		||||
                },
 | 
			
		||||
            ],
 | 
			
		||||
            sectionDepth: 1,
 | 
			
		||||
        },
 | 
			
		||||
 | 
			
		||||
        {
 | 
			
		||||
            name: "Customization Context",
 | 
			
		||||
            components: [
 | 
			
		||||
                "src/context/customizationContext/CustomizationContext.js",
 | 
			
		||||
            ],
 | 
			
		||||
            exampleMode: "expand",
 | 
			
		||||
            usageMode: "expand",
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "Bootstrap components",
 | 
			
		||||
            name: "Bootstrap Components",
 | 
			
		||||
            description: "Set of bootstrap components.",
 | 
			
		||||
            components: "src/bootstrap/*.js",
 | 
			
		||||
            exampleMode: "expand",
 | 
			
		||||
            usageMode: "expand",
 | 
			
		||||
            ignore: ["src/bootstrap/constants.js"],
 | 
			
		||||
            ignore: ["src/bootstrap/constants.js", "src/bootstrap/Radio.js"],
 | 
			
		||||
            sectionDepth: 0,
 | 
			
		||||
        },
 | 
			
		||||
        {
 | 
			
		||||
            name: "Contexts",
 | 
			
		||||
            components: [
 | 
			
		||||
                "src/context/alertContext/AlertContext.js",
 | 
			
		||||
                "src/context/customizationContext/CustomizationContext.js",
 | 
			
		||||
            ],
 | 
			
		||||
            exampleMode: "expand",
 | 
			
		||||
            usageMode: "expand",
 | 
			
		||||
        },
 | 
			
		||||
    ],
 | 
			
		||||
    template: {
 | 
			
		||||
        favicon: "/docs/components/logo.svg",
 | 
			
		||||
    },
 | 
			
		||||
    require: [
 | 
			
		||||
        "babel-polyfill",
 | 
			
		||||
        path.join(__dirname, "src/testUtils/mockGlobals"),
 | 
			
		||||
        path.join(__dirname, "src/testUtils/mockGlobals.js"),
 | 
			
		||||
        path.join(
 | 
			
		||||
            __dirname,
 | 
			
		||||
            "node_modules/bootstrap/dist/css/bootstrap.min.css"
 | 
			
		||||
        ),
 | 
			
		||||
        path.join(
 | 
			
		||||
            __dirname,
 | 
			
		||||
            "node_modules/@fortawesome/fontawesome-free/css/all.min.css"
 | 
			
		||||
        ),
 | 
			
		||||
        path.join(__dirname, "node_modules/bootstrap/dist/js/bootstrap.min.js"),
 | 
			
		||||
    ],
 | 
			
		||||
    styleguideComponents: {
 | 
			
		||||
        LogoRenderer: path.join(__dirname, "docs/components/Logo"),
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,13 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2023-11-23 16:03+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-09-25 10:15+0000\n"
 | 
			
		||||
"Last-Translator: Lukas Jelinek <lukas.jelinek@nic.cz>\n"
 | 
			
		||||
"Language: cs\n"
 | 
			
		||||
"Language-Team: Czech <https://hosted.weblate.org/projects/turris/foris-"
 | 
			
		||||
"js/cs/>\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
@@ -35,42 +35,89 @@ msgstr "Neobdržena žádná odezva."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Došlo k neznámé chybě v aplikačním programovém rozhraní."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Zavřít"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Zkopírováno!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Kopírovat"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Vyžadován restart."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Nastavení úspěšně uložena"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Restartovat"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Varování!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Opravdu chcete router restartovat?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Zrušit"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Potvrdit restart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr "Při resetu nastavení Wi-Fi došlo k chybě."
 | 
			
		||||
@@ -99,7 +146,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Heslo"
 | 
			
		||||
 | 
			
		||||
@@ -145,15 +192,14 @@ msgstr "Zapnout Wi-Fi pro hosty"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Show QR code"
 | 
			
		||||
msgstr "Wi-Fi QR kód"
 | 
			
		||||
msgstr "Ukázat QR kód"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "Wi-Fi QR kód"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Stáhnout PDF"
 | 
			
		||||
 | 
			
		||||
@@ -389,3 +435,15 @@ msgstr "Neobsahuje seznam e-mailů oddělených čárkou."
 | 
			
		||||
#~ "se tím odstraní aktuální konfigurace a vrátí se výchozí hodnoty.\n"
 | 
			
		||||
#~ "        "
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Vyžadován restart."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Restartovat"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Varování!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Opravdu chcete router restartovat?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: da\n"
 | 
			
		||||
@@ -34,40 +34,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -146,7 +191,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -424,3 +469,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
 | 
			
		||||
"Last-Translator: Erik Pfannenstein <debianignatz@gmx.de>\n"
 | 
			
		||||
"Language: de\n"
 | 
			
		||||
@@ -35,42 +35,89 @@ msgstr "Keine Antwort erhalten."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Ein unbekannter API-Fehler ist aufgetreten."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Kopiert!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Kopieren"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Neustart-Einleitung fehlgeschlagen."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Einstellungen erfolgreich gespeichert"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Systemneustart"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Warnung!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Sind Sie sicher, dass Sie den Router neu starten wollen?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Abbrechen"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Neustart bestätigen"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -101,7 +148,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "WLAN ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Passwort"
 | 
			
		||||
 | 
			
		||||
@@ -155,7 +202,7 @@ msgstr "WLAN QR-Code"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "WLAN QR-Code"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "PDF herunterladen"
 | 
			
		||||
 | 
			
		||||
@@ -387,3 +434,15 @@ msgstr "Enthält keine Liste von E-Mails, die durch Kommas getrennt sind."
 | 
			
		||||
#~ "        "
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Neustart-Einleitung fehlgeschlagen."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Systemneustart"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Warnung!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Sind Sie sicher, dass Sie den Router neu starten wollen?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2021-02-09 16:50+0000\n"
 | 
			
		||||
"Last-Translator: Michalis <michalisntovas@yahoo.gr>\n"
 | 
			
		||||
"Language: el\n"
 | 
			
		||||
@@ -35,42 +35,88 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Επανεκκίνηση"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Άκυρο"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Επιβεβαίωση επανεκκίνησης"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -96,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +194,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -426,3 +472,15 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Επανεκκίνηση"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Είστε βέβαιοι ότι θέλετε να κάνετε επανεκκίνηση του δρομολογητή;"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-10-17 09:28+0000\n"
 | 
			
		||||
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
 | 
			
		||||
"Language: en\n"
 | 
			
		||||
@@ -35,40 +35,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +192,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -422,3 +467,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,17 +7,16 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-08-24 13:09+0000\n"
 | 
			
		||||
"Last-Translator: gallegonovato <fran-carro@hotmail.es>\n"
 | 
			
		||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-js/"
 | 
			
		||||
"es/>\n"
 | 
			
		||||
"Language: es\n"
 | 
			
		||||
"Language-Team: Spanish <https://hosted.weblate.org/projects/turris/foris-"
 | 
			
		||||
"js/es/>\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
"Plural-Forms: nplurals=2; plural=n != 1;\n"
 | 
			
		||||
"X-Generator: Weblate 5.7.1-dev\n"
 | 
			
		||||
"Generated-By: Babel 2.16.0\n"
 | 
			
		||||
 | 
			
		||||
#: src/api/utils.js:61
 | 
			
		||||
@@ -38,42 +37,89 @@ msgstr ""
 | 
			
		||||
"Un error desconocido ha ocurrido. Compruebe la consola para mas "
 | 
			
		||||
"informaciòn."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr "Cerrar"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "¡Copiado!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Copiar"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "La petición de reinicio ha fallado."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Los ajustes se han guardado correctamente"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Reiniciar"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "¡Atención!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "¿Estás seguro de que quieres reiniciar el router?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Cancelar"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Confirmar reinicio"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr "Ocurrió un error durante el reseteo de los ajustes Wi-Fi."
 | 
			
		||||
@@ -102,7 +148,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Contraseña"
 | 
			
		||||
 | 
			
		||||
@@ -155,7 +201,7 @@ msgstr "Mostrar el código QR"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "Código QR Wi-Fi"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Descargar PDF"
 | 
			
		||||
 | 
			
		||||
@@ -446,3 +492,16 @@ msgstr "No contiene una lista de correos electrónicos separados por comas."
 | 
			
		||||
#~ " default option with 20 MHz wide "
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "La petición de reinicio ha fallado."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Reiniciar"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "¡Atención!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "¿Estás seguro de que quieres reiniciar el router?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: fi\n"
 | 
			
		||||
@@ -34,40 +34,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -146,7 +191,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -424,3 +469,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: fo\n"
 | 
			
		||||
@@ -34,40 +34,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -146,7 +191,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -424,3 +469,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,9 +6,9 @@
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: Foris JS 6.1.0\n"
 | 
			
		||||
"Project-Id-Version: Foris JS 6.5.0\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: tech.support@turris.cz\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language-Team: LANGUAGE <LL@li.org>\n"
 | 
			
		||||
@@ -33,40 +33,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -94,7 +139,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -145,7 +190,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-07-27 01:09+0000\n"
 | 
			
		||||
"Last-Translator: Moha684 <nahil82466@gmail.com>\n"
 | 
			
		||||
"Language: fr\n"
 | 
			
		||||
@@ -35,42 +35,89 @@ msgstr "Aucun réponse reçue."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Une erreur d’API inconnue s’est produite."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Copié!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Copier"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "La demande de redémarrage a échoué."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Paramètres enregistrés avec succès"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Redémarrer"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Attention !"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Voulez-vous vraiment redémarrer le routeur ?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Annuler"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Confirmer le redémarrage"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -98,7 +145,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Mot de passe"
 | 
			
		||||
 | 
			
		||||
@@ -153,7 +200,7 @@ msgstr "Code QR Wi-Fi"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "Code QR Wi-Fi"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Télécharger le PDF"
 | 
			
		||||
 | 
			
		||||
@@ -415,3 +462,15 @@ msgstr ""
 | 
			
		||||
#~ "        "
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "La demande de redémarrage a échoué."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Redémarrer"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Attention !"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Voulez-vous vraiment redémarrer le routeur ?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2022-09-29 14:17+0000\n"
 | 
			
		||||
"Last-Translator: Milo Ivir <mail@milotype.de>\n"
 | 
			
		||||
"Language: hr\n"
 | 
			
		||||
@@ -36,40 +36,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -97,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Lozinka"
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +193,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -426,3 +471,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2021-01-07 01:26+0000\n"
 | 
			
		||||
"Last-Translator: Zoli <boritek@gmail.com>\n"
 | 
			
		||||
"Language: hu\n"
 | 
			
		||||
@@ -35,40 +35,86 @@ msgstr "Nem érkezett válasz."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Ismeretlen API-hiba történt."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Beállítások sikeresen elmentve"
 | 
			
		||||
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +193,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -419,3 +465,18 @@ msgstr "Nem tartalmaz vesszővel elválasztott e-mail listát."
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2022-12-31 23:48+0000\n"
 | 
			
		||||
"Last-Translator: Anselmo <anselmo@casinadicornia.com>\n"
 | 
			
		||||
"Language: it\n"
 | 
			
		||||
@@ -35,40 +35,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Password"
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +192,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -425,3 +470,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-10-16 10:08+0000\n"
 | 
			
		||||
"Last-Translator: Scott Anecito <scott.anecito@protonmail.com>\n"
 | 
			
		||||
"Language: ja\n"
 | 
			
		||||
@@ -35,40 +35,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "再起動"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +193,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -426,3 +471,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "再起動"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: ko\n"
 | 
			
		||||
@@ -34,40 +34,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -95,7 +140,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -146,7 +191,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -424,3 +469,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:34+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: lt\n"
 | 
			
		||||
@@ -35,40 +35,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +192,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -425,3 +470,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2023-03-02 11:40+0000\n"
 | 
			
		||||
"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
 | 
			
		||||
"Language: nb_NO\n"
 | 
			
		||||
@@ -36,43 +36,89 @@ msgstr "Fikk ikke svar."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Ukjent API-feil."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Kopiert"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Kopier"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Omstart kreves"
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Innstillinger lagret"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Start på ny"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Advarsel!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Er du sikker på at du vil utføre omstart av ruteren?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Avbryt"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Bekreft omstart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
@@ -103,7 +149,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Passord"
 | 
			
		||||
 | 
			
		||||
@@ -161,7 +207,7 @@ msgstr "QR-kode for Wi-Fi"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "QR-kode for Wi-Fi"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Last ned PDF"
 | 
			
		||||
 | 
			
		||||
@@ -403,3 +449,15 @@ msgstr "Inneholder ikke en kommainndelt liste med e-postadresser."
 | 
			
		||||
#~ "gjeldende Wi-Fi-oppsett og tilbakestiller forvalgte verdier.\n"
 | 
			
		||||
#~ "        "
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Omstart kreves"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Start på ny"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Advarsel!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Er du sikker på at du vil utføre omstart av ruteren?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-01-04 21:08+0000\n"
 | 
			
		||||
"Last-Translator: powerburner-nl <peter.mulder.1981@gmail.com>\n"
 | 
			
		||||
"Language: nl\n"
 | 
			
		||||
@@ -35,43 +35,88 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Opnieuw opstarten is vereist"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Opnieuw opstarten"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Waarschuwing!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Weet u zeker dat u de router opnieuw wilt opstarten?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Annuleren"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Opnieuw opstarten bevestigen"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -97,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Wachtwoord"
 | 
			
		||||
 | 
			
		||||
@@ -149,7 +194,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -428,3 +473,15 @@ msgstr "Bevat geen lijst met e-mails gescheiden door komma's."
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Opnieuw opstarten is vereist"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Opnieuw opstarten"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Waarschuwing!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Weet u zeker dat u de router opnieuw wilt opstarten?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2023-03-07 16:37+0000\n"
 | 
			
		||||
"Last-Translator: Arusekk <arek_koz@o2.pl>\n"
 | 
			
		||||
"Language: pl\n"
 | 
			
		||||
@@ -36,42 +36,89 @@ msgstr "Brak odpowiedzi."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Wystąpił nieznany błąd API."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Ustawienia zostały zapisane"
 | 
			
		||||
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Restart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Ostrzeżenie!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Czy na pewno zrestartować router?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Anuluj"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Potwierdź restart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -97,7 +144,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Hasło"
 | 
			
		||||
 | 
			
		||||
@@ -148,7 +195,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -426,3 +473,15 @@ msgstr "Nie zawiera listy e-maili oddzielonych przecinkami."
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Restart"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Ostrzeżenie!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Czy na pewno zrestartować router?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2021-12-21 12:52+0000\n"
 | 
			
		||||
"Last-Translator: c10l <weblate.org@a.c10l.cc>\n"
 | 
			
		||||
"Language: pt_BR\n"
 | 
			
		||||
@@ -35,42 +35,88 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Reinício"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Atenção!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Você tem certeza de que quer reiniciar o roteador?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Cancelar"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Confirma reinício"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr ""
 | 
			
		||||
@@ -96,7 +142,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +193,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -403,3 +449,15 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Reinício"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Atenção!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Você tem certeza de que quer reiniciar o roteador?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2019-02-19 13:35+0100\n"
 | 
			
		||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 | 
			
		||||
"Language: ro\n"
 | 
			
		||||
@@ -35,40 +35,85 @@ msgstr ""
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
@@ -96,7 +141,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -147,7 +192,7 @@ msgstr ""
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
@@ -425,3 +470,18 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Confirm reboot"
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2022-12-07 12:47+0000\n"
 | 
			
		||||
"Last-Translator: Алексей Леньшин <alenshin@gmail.com>\n"
 | 
			
		||||
"Language: ru\n"
 | 
			
		||||
@@ -36,42 +36,89 @@ msgstr "Ответ не получен."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Неизвестная ошибка программного интерфейса приложения."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Скопировано!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Копировать"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Запрос на перезагрузку не выполнен."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Настройки были успешно сохранены"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Перезагрузка"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Предупреждение!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Вы уверены, что хотите перезагрузить маршрутизатор?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Отмена"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Подтвердите перезагрузку"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr "При сбросе настроек Wi-Fi произошла ошибка."
 | 
			
		||||
@@ -100,7 +147,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Пароль"
 | 
			
		||||
 | 
			
		||||
@@ -154,7 +201,7 @@ msgstr "QR-код Wi-Fi"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "QR-код Wi-Fi"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Скачать PDF"
 | 
			
		||||
 | 
			
		||||
@@ -394,3 +441,15 @@ msgstr "Не содержит списка электронных адресов
 | 
			
		||||
#~ "значений по умолчанию.\n"
 | 
			
		||||
#~ "        "
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Запрос на перезагрузку не выполнен."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Перезагрузка"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Предупреждение!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Вы уверены, что хотите перезагрузить маршрутизатор?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,13 +7,13 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"PO-Revision-Date: 2023-01-17 22:51+0000\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2024-09-09 18:09+0000\n"
 | 
			
		||||
"Last-Translator: Atec <dr.atec@gmail.com>\n"
 | 
			
		||||
"Language: sk\n"
 | 
			
		||||
"Language-Team: Slovak <https://hosted.weblate.org/projects/turris/foris-"
 | 
			
		||||
"js/sk/>\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 | 
			
		||||
"Plural-Forms: nplurals=3; plural=((n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2);\n"
 | 
			
		||||
"MIME-Version: 1.0\n"
 | 
			
		||||
"Content-Type: text/plain; charset=utf-8\n"
 | 
			
		||||
"Content-Transfer-Encoding: 8bit\n"
 | 
			
		||||
@@ -35,42 +35,89 @@ msgstr "Nenastala žiadna odozva."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Nastala neznáma chyba v API."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
msgstr "Zatvoriť"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Skopírované!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Kopírovať"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Požiadavka na reštart neúspešná."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr "Nastavenia boli úspešne uložené"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Reštartovať"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Výstraha!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Naozaj sa má router reštartovať?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Zrušiť"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Potvrdiť reštart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr "Pri resete nastavení Wi-Fi nastala chyba."
 | 
			
		||||
@@ -99,7 +146,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Heslo"
 | 
			
		||||
 | 
			
		||||
@@ -145,15 +192,14 @@ msgstr "Povoliť Wi-Fi pre hostí"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:43
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:44
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Show QR code"
 | 
			
		||||
msgstr "Wi-Fi QR kód"
 | 
			
		||||
msgstr "Zobraziť QR kód"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:70
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "Wi-Fi QR kód"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Stiahnuť PDF"
 | 
			
		||||
 | 
			
		||||
@@ -184,7 +230,7 @@ msgstr "Heslo nesmie obsahovať viac ako 63 znakov"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/constants.js:9
 | 
			
		||||
msgid "Disabled"
 | 
			
		||||
msgstr "Zakázané"
 | 
			
		||||
msgstr "Vypnuté"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/constants.js:10
 | 
			
		||||
msgid "802.11n - 20 MHz wide channel"
 | 
			
		||||
@@ -390,3 +436,15 @@ msgstr "Neobsahuje zoznam e-mailov oddelených čiarkami."
 | 
			
		||||
#~ " a obnovia sa východiskové hodnoty.\n"
 | 
			
		||||
#~ "        "
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Požiadavka na reštart neúspešná."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Reštartovať"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Výstraha!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Naozaj sa má router reštartovať?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,7 +7,7 @@ msgid ""
 | 
			
		||||
msgstr ""
 | 
			
		||||
"Project-Id-Version: PROJECT VERSION\n"
 | 
			
		||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
 | 
			
		||||
"POT-Creation-Date: 2024-08-23 14:02+0200\n"
 | 
			
		||||
"POT-Creation-Date: 2024-11-13 14:06+0100\n"
 | 
			
		||||
"PO-Revision-Date: 2023-09-22 21:00+0000\n"
 | 
			
		||||
"Last-Translator: Kristoffer Grundström "
 | 
			
		||||
"<swedishsailfishosuser@tutanota.com>\n"
 | 
			
		||||
@@ -36,42 +36,88 @@ msgstr "Inget svar togs emot."
 | 
			
		||||
msgid "An unknown API error occurred."
 | 
			
		||||
msgstr "Ett okänt API-fel inträffade."
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/Alert.js:51 src/bootstrap/Modal.js:98
 | 
			
		||||
#: src/bootstrap/Alert.js:73 src/bootstrap/Modal.js:101
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:89
 | 
			
		||||
msgid "Close"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copied!"
 | 
			
		||||
msgstr "Kopierades!"
 | 
			
		||||
 | 
			
		||||
#: src/bootstrap/CopyInput.js:57
 | 
			
		||||
#: src/bootstrap/CopyInput.js:56
 | 
			
		||||
msgid "Copy"
 | 
			
		||||
msgstr "Kopiera"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:27
 | 
			
		||||
msgid "Reboot request failed."
 | 
			
		||||
msgstr "Förfrågning för omstart misslyckades."
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:60
 | 
			
		||||
msgid "Action successful."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:51
 | 
			
		||||
msgid "Reboot"
 | 
			
		||||
msgstr "Starta om"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:65
 | 
			
		||||
msgid "Action failed."
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:66
 | 
			
		||||
msgid "Warning!"
 | 
			
		||||
msgstr "Varning!"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:68
 | 
			
		||||
msgid "Are you sure you want to restart the router?"
 | 
			
		||||
msgstr "Är du säker på att du vill starta om routern?"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:71
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:125
 | 
			
		||||
msgid "Cancel"
 | 
			
		||||
msgstr "Avbryt"
 | 
			
		||||
 | 
			
		||||
#: src/common/RebootButton.js:73
 | 
			
		||||
msgid "Confirm reboot"
 | 
			
		||||
#: src/common/ActionButtonWithModal/ActionButtonWithModal.js:128
 | 
			
		||||
#, fuzzy
 | 
			
		||||
msgid "Confirm"
 | 
			
		||||
msgstr "Bekräfta omstart"
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:29
 | 
			
		||||
msgid "Sort ascending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:30
 | 
			
		||||
msgid "Sort descending"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTableHeader.js:31
 | 
			
		||||
msgid "Clear sort"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:65
 | 
			
		||||
msgid "Pagination navigation bar"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:71
 | 
			
		||||
msgid "First page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:77
 | 
			
		||||
msgid "Previous page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:83
 | 
			
		||||
msgid "Next page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:89
 | 
			
		||||
msgid "Last page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:95
 | 
			
		||||
msgid "Page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:98
 | 
			
		||||
msgid "of"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:106
 | 
			
		||||
msgid "Rows per page:"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:109
 | 
			
		||||
msgid "Select rows per page"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/RichTable/RichTablePagination.js:121
 | 
			
		||||
msgid "All"
 | 
			
		||||
msgstr ""
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/ResetWiFiSettings.js:39
 | 
			
		||||
msgid "An error occurred during resetting Wi-Fi settings."
 | 
			
		||||
msgstr "Ett fel inträffade under återställningen av Wi-Fi-inställningarna."
 | 
			
		||||
@@ -100,7 +146,7 @@ msgid "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
msgstr "Wi-Fi ${deviceID + 1}"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiForm.js:132
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:81
 | 
			
		||||
#: src/common/WiFiSettings/WiFiGuestForm.js:78
 | 
			
		||||
msgid "Password"
 | 
			
		||||
msgstr "Lösenord"
 | 
			
		||||
 | 
			
		||||
@@ -154,7 +200,7 @@ msgstr "QR-kod för Wi-Fi"
 | 
			
		||||
msgid "Wi-Fi QR Code"
 | 
			
		||||
msgstr "QR-kod för Wi-Fi"
 | 
			
		||||
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:93
 | 
			
		||||
#: src/common/WiFiSettings/WiFiQRCode.js:102
 | 
			
		||||
msgid "Download PDF"
 | 
			
		||||
msgstr "Ladda ner PDF"
 | 
			
		||||
 | 
			
		||||
@@ -440,3 +486,15 @@ msgstr ""
 | 
			
		||||
#~ "channel."
 | 
			
		||||
#~ msgstr ""
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot request failed."
 | 
			
		||||
#~ msgstr "Förfrågning för omstart misslyckades."
 | 
			
		||||
 | 
			
		||||
#~ msgid "Reboot"
 | 
			
		||||
#~ msgstr "Starta om"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Warning!"
 | 
			
		||||
#~ msgstr "Varning!"
 | 
			
		||||
 | 
			
		||||
#~ msgid "Are you sure you want to restart the router?"
 | 
			
		||||
#~ msgstr "Är du säker på att du vill starta om routern?"
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user