UI update
This commit is contained in:
		
							
								
								
									
										366
									
								
								ui/package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										366
									
								
								ui/package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -36,6 +36,7 @@
 | 
			
		||||
        "@angular/language-service": "^14.0.0",
 | 
			
		||||
        "@capacitor/cli": "3.6.0",
 | 
			
		||||
        "@ionic/angular-toolkit": "^6.0.0",
 | 
			
		||||
        "@ionic/lab": "3.2.15",
 | 
			
		||||
        "@types/jasmine": "~3.6.0",
 | 
			
		||||
        "@types/jasminewd2": "~2.0.3",
 | 
			
		||||
        "@types/node": "^12.11.1",
 | 
			
		||||
@@ -2875,6 +2876,32 @@
 | 
			
		||||
        "sourcemap-codec": "^1.4.4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework": {
 | 
			
		||||
      "version": "5.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-T2KN/TurzNoAcc3iDt1KHU6GeEa7x9kXngMnu5xs+DzJv5HhBKjVOoo74b8rgVxdPx+dLOV8aLrorlyvsHR/tQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@ionic/cli-framework-output": "2.2.5",
 | 
			
		||||
        "@ionic/utils-array": "2.1.5",
 | 
			
		||||
        "@ionic/utils-fs": "3.1.6",
 | 
			
		||||
        "@ionic/utils-object": "2.1.5",
 | 
			
		||||
        "@ionic/utils-process": "2.1.10",
 | 
			
		||||
        "@ionic/utils-stream": "3.1.5",
 | 
			
		||||
        "@ionic/utils-subprocess": "2.1.11",
 | 
			
		||||
        "@ionic/utils-terminal": "2.3.3",
 | 
			
		||||
        "chalk": "^4.0.0",
 | 
			
		||||
        "debug": "^4.0.0",
 | 
			
		||||
        "lodash": "^4.17.5",
 | 
			
		||||
        "minimist": "^1.2.0",
 | 
			
		||||
        "rimraf": "^3.0.0",
 | 
			
		||||
        "tslib": "^2.0.1",
 | 
			
		||||
        "write-file-atomic": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework-output": {
 | 
			
		||||
      "version": "2.2.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.5.tgz",
 | 
			
		||||
@@ -2889,6 +2916,76 @@
 | 
			
		||||
        "node": ">=10.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/ansi-styles": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-convert": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/chalk": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": "^4.1.0",
 | 
			
		||||
        "supports-color": "^7.1.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/chalk?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/color-convert": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-name": "~1.1.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=7.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/color-name": {
 | 
			
		||||
      "version": "1.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/has-flag": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/cli-framework/node_modules/supports-color": {
 | 
			
		||||
      "version": "7.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/core": {
 | 
			
		||||
      "version": "6.1.14",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/core/-/core-6.1.14.tgz",
 | 
			
		||||
@@ -2899,6 +2996,95 @@
 | 
			
		||||
        "tslib": "^2.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab": {
 | 
			
		||||
      "version": "3.2.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-3.2.15.tgz",
 | 
			
		||||
      "integrity": "sha512-m6vPnrc5iuLe8CkmAYp/BStsVRkGVQw/IhcN1KMbz/OxB+w9NvGJ3CuF089LyeiWlut1/PWqYRyzIWXr5okc5Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@ionic/cli-framework": "5.1.3",
 | 
			
		||||
        "@ionic/utils-fs": "3.1.6",
 | 
			
		||||
        "chalk": "^4.0.0",
 | 
			
		||||
        "express": "^4.16.2",
 | 
			
		||||
        "tslib": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "ionic-lab": "bin/ionic-lab"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10.3.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/ansi-styles": {
 | 
			
		||||
      "version": "4.3.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
      "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-convert": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/ansi-styles?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/chalk": {
 | 
			
		||||
      "version": "4.1.2",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
      "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": "^4.1.0",
 | 
			
		||||
        "supports-color": "^7.1.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=10"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "url": "https://github.com/chalk/chalk?sponsor=1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/color-convert": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "color-name": "~1.1.4"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=7.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/color-name": {
 | 
			
		||||
      "version": "1.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/has-flag": {
 | 
			
		||||
      "version": "4.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/lab/node_modules/supports-color": {
 | 
			
		||||
      "version": "7.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "has-flag": "^4.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@ionic/utils-array": {
 | 
			
		||||
      "version": "2.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz",
 | 
			
		||||
@@ -15939,6 +16125,15 @@
 | 
			
		||||
      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/typedarray-to-buffer": {
 | 
			
		||||
      "version": "3.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-typedarray": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/typescript": {
 | 
			
		||||
      "version": "4.7.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
 | 
			
		||||
@@ -16832,6 +17027,18 @@
 | 
			
		||||
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/write-file-atomic": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "imurmurhash": "^0.1.4",
 | 
			
		||||
        "is-typedarray": "^1.0.0",
 | 
			
		||||
        "signal-exit": "^3.0.2",
 | 
			
		||||
        "typedarray-to-buffer": "^3.1.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/ws": {
 | 
			
		||||
      "version": "8.2.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
 | 
			
		||||
@@ -18919,6 +19126,80 @@
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@ionic/cli-framework": {
 | 
			
		||||
      "version": "5.1.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/cli-framework/-/cli-framework-5.1.3.tgz",
 | 
			
		||||
      "integrity": "sha512-T2KN/TurzNoAcc3iDt1KHU6GeEa7x9kXngMnu5xs+DzJv5HhBKjVOoo74b8rgVxdPx+dLOV8aLrorlyvsHR/tQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@ionic/cli-framework-output": "2.2.5",
 | 
			
		||||
        "@ionic/utils-array": "2.1.5",
 | 
			
		||||
        "@ionic/utils-fs": "3.1.6",
 | 
			
		||||
        "@ionic/utils-object": "2.1.5",
 | 
			
		||||
        "@ionic/utils-process": "2.1.10",
 | 
			
		||||
        "@ionic/utils-stream": "3.1.5",
 | 
			
		||||
        "@ionic/utils-subprocess": "2.1.11",
 | 
			
		||||
        "@ionic/utils-terminal": "2.3.3",
 | 
			
		||||
        "chalk": "^4.0.0",
 | 
			
		||||
        "debug": "^4.0.0",
 | 
			
		||||
        "lodash": "^4.17.5",
 | 
			
		||||
        "minimist": "^1.2.0",
 | 
			
		||||
        "rimraf": "^3.0.0",
 | 
			
		||||
        "tslib": "^2.0.1",
 | 
			
		||||
        "write-file-atomic": "^3.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": {
 | 
			
		||||
          "version": "4.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-convert": "^2.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "chalk": {
 | 
			
		||||
          "version": "4.1.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "ansi-styles": "^4.1.0",
 | 
			
		||||
            "supports-color": "^7.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-convert": {
 | 
			
		||||
          "version": "2.0.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-name": "~1.1.4"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-name": {
 | 
			
		||||
          "version": "1.1.4",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "has-flag": {
 | 
			
		||||
          "version": "4.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "supports-color": {
 | 
			
		||||
          "version": "7.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "has-flag": "^4.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@ionic/cli-framework-output": {
 | 
			
		||||
      "version": "2.2.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/cli-framework-output/-/cli-framework-output-2.2.5.tgz",
 | 
			
		||||
@@ -18940,6 +19221,70 @@
 | 
			
		||||
        "tslib": "^2.1.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@ionic/lab": {
 | 
			
		||||
      "version": "3.2.15",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/lab/-/lab-3.2.15.tgz",
 | 
			
		||||
      "integrity": "sha512-m6vPnrc5iuLe8CkmAYp/BStsVRkGVQw/IhcN1KMbz/OxB+w9NvGJ3CuF089LyeiWlut1/PWqYRyzIWXr5okc5Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@ionic/cli-framework": "5.1.3",
 | 
			
		||||
        "@ionic/utils-fs": "3.1.6",
 | 
			
		||||
        "chalk": "^4.0.0",
 | 
			
		||||
        "express": "^4.16.2",
 | 
			
		||||
        "tslib": "^2.0.1"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "ansi-styles": {
 | 
			
		||||
          "version": "4.3.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
 | 
			
		||||
          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-convert": "^2.0.1"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "chalk": {
 | 
			
		||||
          "version": "4.1.2",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
 | 
			
		||||
          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "ansi-styles": "^4.1.0",
 | 
			
		||||
            "supports-color": "^7.1.0"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-convert": {
 | 
			
		||||
          "version": "2.0.1",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
 | 
			
		||||
          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "color-name": "~1.1.4"
 | 
			
		||||
          }
 | 
			
		||||
        },
 | 
			
		||||
        "color-name": {
 | 
			
		||||
          "version": "1.1.4",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
 | 
			
		||||
          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "has-flag": {
 | 
			
		||||
          "version": "4.0.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
 | 
			
		||||
          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
 | 
			
		||||
          "dev": true
 | 
			
		||||
        },
 | 
			
		||||
        "supports-color": {
 | 
			
		||||
          "version": "7.2.0",
 | 
			
		||||
          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
 | 
			
		||||
          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
 | 
			
		||||
          "dev": true,
 | 
			
		||||
          "requires": {
 | 
			
		||||
            "has-flag": "^4.0.0"
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@ionic/utils-array": {
 | 
			
		||||
      "version": "2.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@ionic/utils-array/-/utils-array-2.1.5.tgz",
 | 
			
		||||
@@ -28725,6 +29070,15 @@
 | 
			
		||||
      "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "typedarray-to-buffer": {
 | 
			
		||||
      "version": "3.1.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
 | 
			
		||||
      "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "is-typedarray": "^1.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "typescript": {
 | 
			
		||||
      "version": "4.7.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz",
 | 
			
		||||
@@ -29369,6 +29723,18 @@
 | 
			
		||||
      "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
 | 
			
		||||
      "dev": true
 | 
			
		||||
    },
 | 
			
		||||
    "write-file-atomic": {
 | 
			
		||||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "imurmurhash": "^0.1.4",
 | 
			
		||||
        "is-typedarray": "^1.0.0",
 | 
			
		||||
        "signal-exit": "^3.0.2",
 | 
			
		||||
        "typedarray-to-buffer": "^3.1.5"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "ws": {
 | 
			
		||||
      "version": "8.2.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/ws/-/ws-8.2.3.tgz",
 | 
			
		||||
 
 | 
			
		||||
@@ -41,6 +41,7 @@
 | 
			
		||||
    "@angular/language-service": "^14.0.0",
 | 
			
		||||
    "@capacitor/cli": "3.6.0",
 | 
			
		||||
    "@ionic/angular-toolkit": "^6.0.0",
 | 
			
		||||
    "@ionic/lab": "3.2.15",
 | 
			
		||||
    "@types/jasmine": "~3.6.0",
 | 
			
		||||
    "@types/jasminewd2": "~2.0.3",
 | 
			
		||||
    "@types/node": "^12.11.1",
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,10 @@ import { NgModule } from '@angular/core';
 | 
			
		||||
import { PreloadAllModules, RouterModule, Routes } from '@angular/router';
 | 
			
		||||
 | 
			
		||||
const routes: Routes = [
 | 
			
		||||
  {
 | 
			
		||||
    path: '',
 | 
			
		||||
    redirectTo: '/loader', pathMatch: 'full'
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: 'loader',
 | 
			
		||||
    loadChildren: () => import('./pages/loader/loader.module').then( m => m.LoaderPageModule)
 | 
			
		||||
@@ -17,6 +21,10 @@ const routes: Routes = [
 | 
			
		||||
  {
 | 
			
		||||
    path: 'all-songs',
 | 
			
		||||
    loadChildren: () => import('./pages/all-songs/all-songs.module').then( m => m.AllSongsPageModule)
 | 
			
		||||
  },
 | 
			
		||||
  {
 | 
			
		||||
    path: 'register',
 | 
			
		||||
    loadChildren: () => import('./pages/register/register.module').then( m => m.RegisterPageModule)
 | 
			
		||||
  }
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,10 @@ import { Component } from '@angular/core';
 | 
			
		||||
})
 | 
			
		||||
export class AppComponent {
 | 
			
		||||
  public appPages = [
 | 
			
		||||
    { title: 'Login', url: '/login', icon: 'log-in' },
 | 
			
		||||
    { title: 'Register', url: '/register', icon: 'key' },
 | 
			
		||||
    { title: 'Download', url: '/download', icon: 'cloud-download' },
 | 
			
		||||
    { title: 'All Songs', url: '/all-songs', icon: 'musical-notes' },
 | 
			
		||||
  ];
 | 
			
		||||
  constructor() {}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -3,15 +3,39 @@
 | 
			
		||||
    <ion-title>Download</ion-title>
 | 
			
		||||
  </ion-toolbar>
 | 
			
		||||
</ion-header>
 | 
			
		||||
 | 
			
		||||
<ion-content>
 | 
			
		||||
<!-- Input with placeholder -->
 | 
			
		||||
<section>
 | 
			
		||||
  <ion-input expand="full" pattern="url" placeholder="Enter URL Here"></ion-input>
 | 
			
		||||
  <div class="bottom-buttons">
 | 
			
		||||
    <ion-button expand="full" color="secondary">Download to my Device</ion-button>
 | 
			
		||||
    <ion-button expand="full" color="primary">Upload to Music Store</ion-button>
 | 
			
		||||
  <div class="flex-center">
 | 
			
		||||
    <ion-card>
 | 
			
		||||
      <!-- Input with placeholder -->
 | 
			
		||||
      <section>
 | 
			
		||||
        <ion-item fill="solid">
 | 
			
		||||
          <ion-label position="floating">Enter URL</ion-label>
 | 
			
		||||
          <ion-input type="url" expand="full" pattern="url"></ion-input>
 | 
			
		||||
        </ion-item>
 | 
			
		||||
        <div class="bottom-buttons">
 | 
			
		||||
          <ion-label>Download to Device</ion-label>
 | 
			
		||||
          <ion-button expand="full" color="secondary">
 | 
			
		||||
            <ion-icon slot="start" name="musical-note-outline"></ion-icon>
 | 
			
		||||
            MP3 - Download to my Device
 | 
			
		||||
            <ion-icon slot="end" name="download-outline"></ion-icon>
 | 
			
		||||
          </ion-button>
 | 
			
		||||
          <ion-button expand="full" color="secondary">
 | 
			
		||||
            <ion-icon slot="start" name="videocam-outline"></ion-icon>
 | 
			
		||||
            MP4 - Download to my Device
 | 
			
		||||
            <ion-icon slot="end" name="download-outline"></ion-icon>
 | 
			
		||||
          </ion-button>
 | 
			
		||||
          <ion-button expand="full" color="primary">
 | 
			
		||||
            <ion-icon slot="start" name="musical-note-outline"></ion-icon>
 | 
			
		||||
            MP3 - Upload to Music Store
 | 
			
		||||
            <ion-icon slot="end" name="cloud-upload-outline"></ion-icon>
 | 
			
		||||
          </ion-button>
 | 
			
		||||
          <ion-button expand="full" color="primary">
 | 
			
		||||
            <ion-icon slot="start" name="videocam-outline"></ion-icon>
 | 
			
		||||
            MP4 - Upload to Video Store
 | 
			
		||||
            <ion-icon slot="end" name="cloud-upload-outline"></ion-icon>
 | 
			
		||||
          </ion-button>
 | 
			
		||||
        </div>
 | 
			
		||||
      </section>
 | 
			
		||||
    </ion-card>
 | 
			
		||||
  </div>
 | 
			
		||||
  </section>
 | 
			
		||||
</ion-content>
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -1,36 +1,6 @@
 | 
			
		||||
.flex-center {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
section {
 | 
			
		||||
    height: 100%;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ion-button {
 | 
			
		||||
    min-width: max-content;
 | 
			
		||||
    flex-grow: 1;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ion-input {
 | 
			
		||||
    border: solid 0.2em rgba(var(--ion-color-secondary-rgb));
 | 
			
		||||
    border-radius: 1em;
 | 
			
		||||
    margin: 1em;
 | 
			
		||||
    width: auto;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ion-input:hover {
 | 
			
		||||
    border-color: rgba(var(--ion-color-primary-rgb));
 | 
			
		||||
    transition-duration: 1s;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
.bottom-buttons {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    bottom: 0;
 | 
			
		||||
    position: absolute;
 | 
			
		||||
    display: flex;
 | 
			
		||||
    flex-wrap: wrap;
 | 
			
		||||
ion-card {
 | 
			
		||||
    padding: 1em;
 | 
			
		||||
}
 | 
			
		||||
ion-button {
 | 
			
		||||
    margin-top: 1em;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,9 +1,3 @@
 | 
			
		||||
<ion-header>
 | 
			
		||||
  <ion-toolbar>
 | 
			
		||||
    <ion-title>loader</ion-title>
 | 
			
		||||
  </ion-toolbar>
 | 
			
		||||
</ion-header>
 | 
			
		||||
 | 
			
		||||
<ion-content>
 | 
			
		||||
  <div class="flex-center">
 | 
			
		||||
    <ion-spinner name="crescent" color="primary"></ion-spinner>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,10 +0,0 @@
 | 
			
		||||
.flex-center {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
div {
 | 
			
		||||
    width: 100%;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
}
 | 
			
		||||
@@ -1,24 +1,33 @@
 | 
			
		||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
 | 
			
		||||
import { Router } from '@angular/router';
 | 
			
		||||
import { IonicModule } from '@ionic/angular';
 | 
			
		||||
import { AppRoutingModule } from 'src/app/app-routing.module';
 | 
			
		||||
 | 
			
		||||
import { LoaderPage } from './loader.page';
 | 
			
		||||
 | 
			
		||||
describe('LoaderPage', () => {
 | 
			
		||||
  let component: LoaderPage;
 | 
			
		||||
  let fixture: ComponentFixture<LoaderPage>;
 | 
			
		||||
  let router: Router;
 | 
			
		||||
 | 
			
		||||
  beforeEach(waitForAsync(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ LoaderPage ],
 | 
			
		||||
      imports: [IonicModule.forRoot()]
 | 
			
		||||
      imports: [
 | 
			
		||||
        IonicModule.forRoot(),
 | 
			
		||||
        AppRoutingModule
 | 
			
		||||
      ]
 | 
			
		||||
    }).compileComponents();
 | 
			
		||||
 | 
			
		||||
    fixture = TestBed.createComponent(LoaderPage);
 | 
			
		||||
    router = TestBed.get(Router);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  it('should go to login page after load', () => {
 | 
			
		||||
    spyOn(router, 'navigate');
 | 
			
		||||
    component.ngOnInit();
 | 
			
		||||
    expect(router.navigate).toHaveBeenCalledWith(['login']);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
 
 | 
			
		||||
@@ -1,4 +1,5 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
import { Router } from '@angular/router'
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-loader',
 | 
			
		||||
@@ -7,9 +8,10 @@ import { Component, OnInit } from '@angular/core';
 | 
			
		||||
})
 | 
			
		||||
export class LoaderPage implements OnInit {
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
  constructor(private router: Router) { }
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
    // setTimeout(() => { this.router.navigate(['login']); }, 500);  < Could be used if connection would be tested
 | 
			
		||||
    this.router.navigate(['login']);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1,9 +1,35 @@
 | 
			
		||||
<ion-header>
 | 
			
		||||
  <ion-toolbar>
 | 
			
		||||
    <ion-title>login</ion-title>
 | 
			
		||||
  </ion-toolbar>
 | 
			
		||||
</ion-header>
 | 
			
		||||
 | 
			
		||||
<ion-content>
 | 
			
		||||
 | 
			
		||||
  <div class="flex-center">
 | 
			
		||||
    <ion-card>
 | 
			
		||||
      <ion-card-header>
 | 
			
		||||
        <ion-card-title color="primary">Login</ion-card-title>
 | 
			
		||||
        <ion-card-subtitle color="secondary">Please sign in with your credentials</ion-card-subtitle>
 | 
			
		||||
      </ion-card-header>
 | 
			
		||||
      <ion-card-content>
 | 
			
		||||
        <ion-item fill="solid">
 | 
			
		||||
          <ion-label position="floating">Email</ion-label>
 | 
			
		||||
          <ion-input type="email" ngModel email></ion-input>
 | 
			
		||||
          <ion-note slot="helper">Enter a valid email</ion-note>
 | 
			
		||||
          <ion-note slot="error">Invalid email</ion-note>
 | 
			
		||||
          <ion-note slot="success">Valid email</ion-note>
 | 
			
		||||
        </ion-item>
 | 
			
		||||
        <ion-item fill="solid">
 | 
			
		||||
          <ion-label position="floating">Password</ion-label>
 | 
			
		||||
          <ion-input type="Password" ngModel password></ion-input>
 | 
			
		||||
          <ion-note slot="helper">Choose a secure password</ion-note>
 | 
			
		||||
        </ion-item>  
 | 
			
		||||
        <ion-button fill="clear" >
 | 
			
		||||
          Forgot Email/Password
 | 
			
		||||
        </ion-button>
 | 
			
		||||
        <ion-button size="full">
 | 
			
		||||
          Login
 | 
			
		||||
          <ion-icon slot="end" name="log-in-outline"></ion-icon>
 | 
			
		||||
        </ion-button>
 | 
			
		||||
        <ion-button fill="clear" color="secondary" size="full">
 | 
			
		||||
          Register
 | 
			
		||||
          <ion-icon slot="end" name="create-outline"></ion-icon>
 | 
			
		||||
        </ion-button>
 | 
			
		||||
      </ion-card-content>
 | 
			
		||||
    </ion-card>
 | 
			
		||||
  </div>
 | 
			
		||||
</ion-content>
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,3 @@
 | 
			
		||||
ion-button[fill="clear"]{
 | 
			
		||||
    text-transform: initial;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										17
									
								
								ui/src/app/pages/register/register-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								ui/src/app/pages/register/register-routing.module.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import { Routes, RouterModule } from '@angular/router';
 | 
			
		||||
 | 
			
		||||
import { RegisterPage } from './register.page';
 | 
			
		||||
 | 
			
		||||
const routes: Routes = [
 | 
			
		||||
  {
 | 
			
		||||
    path: '',
 | 
			
		||||
    component: RegisterPage
 | 
			
		||||
  }
 | 
			
		||||
];
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  imports: [RouterModule.forChild(routes)],
 | 
			
		||||
  exports: [RouterModule],
 | 
			
		||||
})
 | 
			
		||||
export class RegisterPageRoutingModule {}
 | 
			
		||||
							
								
								
									
										20
									
								
								ui/src/app/pages/register/register.module.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								ui/src/app/pages/register/register.module.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
import { NgModule } from '@angular/core';
 | 
			
		||||
import { CommonModule } from '@angular/common';
 | 
			
		||||
import { FormsModule } from '@angular/forms';
 | 
			
		||||
 | 
			
		||||
import { IonicModule } from '@ionic/angular';
 | 
			
		||||
 | 
			
		||||
import { RegisterPageRoutingModule } from './register-routing.module';
 | 
			
		||||
 | 
			
		||||
import { RegisterPage } from './register.page';
 | 
			
		||||
 | 
			
		||||
@NgModule({
 | 
			
		||||
  imports: [
 | 
			
		||||
    CommonModule,
 | 
			
		||||
    FormsModule,
 | 
			
		||||
    IonicModule,
 | 
			
		||||
    RegisterPageRoutingModule
 | 
			
		||||
  ],
 | 
			
		||||
  declarations: [RegisterPage]
 | 
			
		||||
})
 | 
			
		||||
export class RegisterPageModule {}
 | 
			
		||||
							
								
								
									
										52
									
								
								ui/src/app/pages/register/register.page.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								ui/src/app/pages/register/register.page.html
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
<ion-header>
 | 
			
		||||
  <ion-toolbar>
 | 
			
		||||
    <ion-title>Register</ion-title>
 | 
			
		||||
  </ion-toolbar>
 | 
			
		||||
</ion-header>
 | 
			
		||||
 | 
			
		||||
<ion-content>
 | 
			
		||||
  <ion-content>
 | 
			
		||||
    <div class="flex-center">
 | 
			
		||||
      <ion-card>
 | 
			
		||||
        <ion-card-header>
 | 
			
		||||
          <ion-card-title color="primary">Create an Account</ion-card-title>
 | 
			
		||||
          <ion-card-subtitle color="secondary">Please enter your Information</ion-card-subtitle>
 | 
			
		||||
        </ion-card-header>
 | 
			
		||||
        <ion-card-content>
 | 
			
		||||
          <!-- First/Last Name Password --> 
 | 
			
		||||
          <ion-item fill="solid">
 | 
			
		||||
            <ion-label position="floating">First Name</ion-label>
 | 
			
		||||
            <ion-input type="text"></ion-input>
 | 
			
		||||
            <ion-label position="floating">Last Name</ion-label>
 | 
			
		||||
            <ion-input type="text"></ion-input>
 | 
			
		||||
            <ion-icon slot="end" name="accessibility-outline"></ion-icon>
 | 
			
		||||
          </ion-item>
 | 
			
		||||
          <!-- Set Email --> 
 | 
			
		||||
          <ion-item fill="solid">
 | 
			
		||||
            <ion-label position="floating">Email</ion-label>
 | 
			
		||||
            <ion-input type="email" ngModel email></ion-input>
 | 
			
		||||
            <ion-note slot="helper">Enter a valid email</ion-note>
 | 
			
		||||
            <ion-note slot="error">Invalid email</ion-note>
 | 
			
		||||
            <ion-note slot="success">Valid email</ion-note>
 | 
			
		||||
            <ion-icon slot="end" name="mail-outline"></ion-icon>
 | 
			
		||||
          </ion-item>
 | 
			
		||||
          <!-- Set Password --> 
 | 
			
		||||
          <ion-item fill="solid">
 | 
			
		||||
            <ion-label position="floating">Password</ion-label>
 | 
			
		||||
            <ion-input type="Password" ngModel password></ion-input>
 | 
			
		||||
            <ion-note slot="helper">Choose a secure password</ion-note>
 | 
			
		||||
            <ion-label position="floating">Password Confirmation</ion-label>
 | 
			
		||||
            <ion-input type="Password" ngModel password></ion-input>
 | 
			
		||||
            <ion-icon slot="end" name="key-outline"></ion-icon>
 | 
			
		||||
          </ion-item>
 | 
			
		||||
          <!-- Create Account Button --> 
 | 
			
		||||
          <ion-button size="full">
 | 
			
		||||
            Create Account
 | 
			
		||||
            <ion-icon slot="end" name="key-outline"></ion-icon>
 | 
			
		||||
          </ion-button>
 | 
			
		||||
        </ion-card-content>
 | 
			
		||||
      </ion-card>
 | 
			
		||||
    </div>
 | 
			
		||||
  </ion-content>
 | 
			
		||||
  
 | 
			
		||||
</ion-content>
 | 
			
		||||
							
								
								
									
										0
									
								
								ui/src/app/pages/register/register.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								ui/src/app/pages/register/register.page.scss
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										24
									
								
								ui/src/app/pages/register/register.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								ui/src/app/pages/register/register.page.spec.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,24 @@
 | 
			
		||||
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
 | 
			
		||||
import { IonicModule } from '@ionic/angular';
 | 
			
		||||
 | 
			
		||||
import { RegisterPage } from './register.page';
 | 
			
		||||
 | 
			
		||||
describe('RegisterPage', () => {
 | 
			
		||||
  let component: RegisterPage;
 | 
			
		||||
  let fixture: ComponentFixture<RegisterPage>;
 | 
			
		||||
 | 
			
		||||
  beforeEach(waitForAsync(() => {
 | 
			
		||||
    TestBed.configureTestingModule({
 | 
			
		||||
      declarations: [ RegisterPage ],
 | 
			
		||||
      imports: [IonicModule.forRoot()]
 | 
			
		||||
    }).compileComponents();
 | 
			
		||||
 | 
			
		||||
    fixture = TestBed.createComponent(RegisterPage);
 | 
			
		||||
    component = fixture.componentInstance;
 | 
			
		||||
    fixture.detectChanges();
 | 
			
		||||
  }));
 | 
			
		||||
 | 
			
		||||
  it('should create', () => {
 | 
			
		||||
    expect(component).toBeTruthy();
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
							
								
								
									
										15
									
								
								ui/src/app/pages/register/register.page.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								ui/src/app/pages/register/register.page.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
import { Component, OnInit } from '@angular/core';
 | 
			
		||||
 | 
			
		||||
@Component({
 | 
			
		||||
  selector: 'app-register',
 | 
			
		||||
  templateUrl: './register.page.html',
 | 
			
		||||
  styleUrls: ['./register.page.scss'],
 | 
			
		||||
})
 | 
			
		||||
export class RegisterPage implements OnInit {
 | 
			
		||||
 | 
			
		||||
  constructor() { }
 | 
			
		||||
 | 
			
		||||
  ngOnInit() {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -24,3 +24,10 @@
 | 
			
		||||
@import "~@ionic/angular/css/text-alignment.css";
 | 
			
		||||
@import "~@ionic/angular/css/text-transformation.css";
 | 
			
		||||
@import "~@ionic/angular/css/flex-utils.css";
 | 
			
		||||
 | 
			
		||||
.flex-center {
 | 
			
		||||
    display: flex;
 | 
			
		||||
    justify-content: center;
 | 
			
		||||
    align-items: center;
 | 
			
		||||
    height: 100%;
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user