UI for adding and listing groups.
This commit is contained in:
		
							parent
							
								
									7457b39774
								
							
						
					
					
						commit
						e596e31f15
					
				
					 7 changed files with 477 additions and 8 deletions
				
			
		
							
								
								
									
										349
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										349
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							| 
						 | 
				
			
			@ -8,6 +8,7 @@
 | 
			
		|||
      "name": "cpularp-manager-frontend",
 | 
			
		||||
      "version": "0.0.0",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@tailwindcss/cli": "^4.1.4",
 | 
			
		||||
        "@tailwindcss/vite": "^4.1.4",
 | 
			
		||||
        "tailwindcss": "^4.1.4",
 | 
			
		||||
        "vue": "^3.5.13",
 | 
			
		||||
| 
						 | 
				
			
			@ -1243,6 +1244,313 @@
 | 
			
		|||
        "node": ">= 8"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==",
 | 
			
		||||
      "hasInstallScript": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "detect-libc": "^1.0.3",
 | 
			
		||||
        "is-glob": "^4.0.3",
 | 
			
		||||
        "micromatch": "^4.0.5",
 | 
			
		||||
        "node-addon-api": "^7.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      },
 | 
			
		||||
      "optionalDependencies": {
 | 
			
		||||
        "@parcel/watcher-android-arm64": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-darwin-arm64": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-darwin-x64": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-freebsd-x64": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-arm-glibc": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-arm-musl": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-arm64-glibc": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-arm64-musl": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-x64-glibc": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-linux-x64-musl": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-win32-arm64": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-win32-ia32": "2.5.1",
 | 
			
		||||
        "@parcel/watcher-win32-x64": "2.5.1"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-android-arm64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "android"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-darwin-arm64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-darwin-x64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "darwin"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-freebsd-x64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "freebsd"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-arm-glibc": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-arm-musl": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-arm64-glibc": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-arm64-musl": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-x64-glibc": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-linux-x64-musl": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "linux"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-win32-arm64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "arm64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-win32-ia32": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "ia32"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher-win32-x64": {
 | 
			
		||||
      "version": "2.5.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz",
 | 
			
		||||
      "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==",
 | 
			
		||||
      "cpu": [
 | 
			
		||||
        "x64"
 | 
			
		||||
      ],
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "optional": true,
 | 
			
		||||
      "os": [
 | 
			
		||||
        "win32"
 | 
			
		||||
      ],
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">= 10.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "funding": {
 | 
			
		||||
        "type": "opencollective",
 | 
			
		||||
        "url": "https://opencollective.com/parcel"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@parcel/watcher/node_modules/detect-libc": {
 | 
			
		||||
      "version": "1.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
 | 
			
		||||
      "license": "Apache-2.0",
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "detect-libc": "bin/detect-libc.js"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@pkgr/core": {
 | 
			
		||||
      "version": "0.2.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -1579,6 +1887,24 @@
 | 
			
		|||
        "url": "https://github.com/sponsors/sindresorhus"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@tailwindcss/cli": {
 | 
			
		||||
      "version": "4.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.4.tgz",
 | 
			
		||||
      "integrity": "sha512-gP05Qihh+cZ2FqD5fa0WJXx3KEk2YWUYv/RBKAyiOg0V4vYVDr/xlLc0sacpnVEXM45BVUR9U2hsESufYs6YTA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@parcel/watcher": "^2.5.1",
 | 
			
		||||
        "@tailwindcss/node": "4.1.4",
 | 
			
		||||
        "@tailwindcss/oxide": "4.1.4",
 | 
			
		||||
        "enhanced-resolve": "^5.18.1",
 | 
			
		||||
        "mri": "^1.2.0",
 | 
			
		||||
        "picocolors": "^1.1.1",
 | 
			
		||||
        "tailwindcss": "4.1.4"
 | 
			
		||||
      },
 | 
			
		||||
      "bin": {
 | 
			
		||||
        "tailwindcss": "dist/index.mjs"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@tailwindcss/node": {
 | 
			
		||||
      "version": "4.1.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.4.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -2557,7 +2883,6 @@
 | 
			
		|||
      "version": "3.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "fill-range": "^7.1.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -3354,7 +3679,6 @@
 | 
			
		|||
      "version": "7.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "to-regex-range": "^5.0.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -3587,7 +3911,6 @@
 | 
			
		|||
      "version": "2.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.10.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -3597,7 +3920,6 @@
 | 
			
		|||
      "version": "4.0.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
 | 
			
		||||
      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-extglob": "^2.1.1"
 | 
			
		||||
| 
						 | 
				
			
			@ -3629,7 +3951,6 @@
 | 
			
		|||
      "version": "7.0.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
 | 
			
		||||
      "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=0.12.0"
 | 
			
		||||
| 
						 | 
				
			
			@ -4140,7 +4461,6 @@
 | 
			
		|||
      "version": "4.0.8",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
 | 
			
		||||
      "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "braces": "^3.0.3",
 | 
			
		||||
| 
						 | 
				
			
			@ -4173,6 +4493,15 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/mri": {
 | 
			
		||||
      "version": "1.2.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz",
 | 
			
		||||
      "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=4"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/mrmime": {
 | 
			
		||||
      "version": "2.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4222,6 +4551,12 @@
 | 
			
		|||
      "dev": true,
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-addon-api": {
 | 
			
		||||
      "version": "7.1.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz",
 | 
			
		||||
      "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==",
 | 
			
		||||
      "license": "MIT"
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/node-releases": {
 | 
			
		||||
      "version": "2.0.19",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz",
 | 
			
		||||
| 
						 | 
				
			
			@ -4494,7 +4829,6 @@
 | 
			
		|||
      "version": "2.3.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
 | 
			
		||||
      "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=8.6"
 | 
			
		||||
| 
						 | 
				
			
			@ -4985,7 +5319,6 @@
 | 
			
		|||
      "version": "5.0.1",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
 | 
			
		||||
      "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
 | 
			
		||||
      "dev": true,
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "is-number": "^7.0.0"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -13,6 +13,7 @@
 | 
			
		|||
    "format": "prettier --write src/"
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@tailwindcss/cli": "^4.1.4",
 | 
			
		||||
    "@tailwindcss/vite": "^4.1.4",
 | 
			
		||||
    "tailwindcss": "^4.1.4",
 | 
			
		||||
    "vue": "^3.5.13",
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,6 +23,7 @@
 | 
			
		|||
    --text-3xl--line-height: calc(2.25 / 1.875);
 | 
			
		||||
    --radius-sm: 0.25rem;
 | 
			
		||||
    --drop-shadow-md: 0 3px 3px rgb(0 0 0 / 0.12);
 | 
			
		||||
    --drop-shadow-lg: 0 4px 4px rgb(0 0 0 / 0.15);
 | 
			
		||||
    --default-font-family: var(--font-sans);
 | 
			
		||||
    --default-mono-font-family: var(--font-mono);
 | 
			
		||||
    --color-primary: oklch(0.1 0 0);
 | 
			
		||||
| 
						 | 
				
			
			@ -252,6 +253,13 @@
 | 
			
		|||
      margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .space-y-4 {
 | 
			
		||||
    :where(& > :not(:last-child)) {
 | 
			
		||||
      --tw-space-y-reverse: 0;
 | 
			
		||||
      margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));
 | 
			
		||||
      margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)));
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .space-x-4 {
 | 
			
		||||
    :where(& > :not(:last-child)) {
 | 
			
		||||
      --tw-space-x-reverse: 0;
 | 
			
		||||
| 
						 | 
				
			
			@ -282,9 +290,39 @@
 | 
			
		|||
  .bg-primary {
 | 
			
		||||
    background-color: var(--color-primary);
 | 
			
		||||
  }
 | 
			
		||||
  .bg-primary\/50 {
 | 
			
		||||
    background-color: color-mix(in srgb, oklch(0.1 0 0) 50%, transparent);
 | 
			
		||||
    @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
      background-color: color-mix(in oklab, var(--color-primary) 50%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .bg-secondary {
 | 
			
		||||
    background-color: var(--color-secondary);
 | 
			
		||||
  }
 | 
			
		||||
  .bg-white\/50 {
 | 
			
		||||
    background-color: color-mix(in srgb, #fff 50%, transparent);
 | 
			
		||||
    @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
      background-color: color-mix(in oklab, var(--color-white) 50%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .bg-white\/75 {
 | 
			
		||||
    background-color: color-mix(in srgb, #fff 75%, transparent);
 | 
			
		||||
    @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
      background-color: color-mix(in oklab, var(--color-white) 75%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .bg-white\/80 {
 | 
			
		||||
    background-color: color-mix(in srgb, #fff 80%, transparent);
 | 
			
		||||
    @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
      background-color: color-mix(in oklab, var(--color-white) 80%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .bg-white\/90 {
 | 
			
		||||
    background-color: color-mix(in srgb, #fff 90%, transparent);
 | 
			
		||||
    @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
      background-color: color-mix(in oklab, var(--color-white) 90%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .mask-clip-border {
 | 
			
		||||
    mask-clip: border-box;
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -311,6 +349,9 @@
 | 
			
		|||
  .text-accent {
 | 
			
		||||
    color: var(--color-accent);
 | 
			
		||||
  }
 | 
			
		||||
  .text-primary {
 | 
			
		||||
    color: var(--color-primary);
 | 
			
		||||
  }
 | 
			
		||||
  .text-white {
 | 
			
		||||
    color: var(--color-white);
 | 
			
		||||
  }
 | 
			
		||||
| 
						 | 
				
			
			@ -330,6 +371,11 @@
 | 
			
		|||
      --tw-ring-color: color-mix(in oklab, var(--color-secondary) 80%, transparent);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .drop-shadow-lg {
 | 
			
		||||
    --tw-drop-shadow-size: drop-shadow(0 4px 4px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.15)));
 | 
			
		||||
    --tw-drop-shadow: drop-shadow(var(--drop-shadow-lg));
 | 
			
		||||
    filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
 | 
			
		||||
  }
 | 
			
		||||
  .drop-shadow-md {
 | 
			
		||||
    --tw-drop-shadow-size: drop-shadow(0 3px 3px var(--tw-drop-shadow-color, rgb(0 0 0 / 0.12)));
 | 
			
		||||
    --tw-drop-shadow: drop-shadow(var(--drop-shadow-md));
 | 
			
		||||
| 
						 | 
				
			
			@ -352,6 +398,16 @@
 | 
			
		|||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .hover\:bg-white\/20 {
 | 
			
		||||
    &:hover {
 | 
			
		||||
      @media (hover: hover) {
 | 
			
		||||
        background-color: color-mix(in srgb, #fff 20%, transparent);
 | 
			
		||||
        @supports (color: color-mix(in lab, red, red)) {
 | 
			
		||||
          background-color: color-mix(in oklab, var(--color-white) 20%, transparent);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  .hover\:text-gray-300 {
 | 
			
		||||
    &:hover {
 | 
			
		||||
      @media (hover: hover) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										15
									
								
								src/components/AddGroup.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								src/components/AddGroup.vue
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,15 @@
 | 
			
		|||
<script lang="ts" setup>
 | 
			
		||||
import { add_group } from '@/ts/groups.ts'
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="p-4 bg-primary w-full h-full flex flex-col space-y-4">
 | 
			
		||||
    <input class="p-2 w-full h-full bg-white/75 text-primary" v-model="group_input" type="text" />
 | 
			
		||||
    <div
 | 
			
		||||
      class="drop-shadow-accent drop-shadow-md p-2 m-auto text-md w-full text-center hover:bg-white/20"
 | 
			
		||||
      @click="add_group(group_input)"
 | 
			
		||||
    >
 | 
			
		||||
      > SUBMIT
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
							
								
								
									
										13
									
								
								src/components/ListGroups.vue
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								src/components/ListGroups.vue
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,13 @@
 | 
			
		|||
<script lang="ts" setup>
 | 
			
		||||
import { groups_store } from '@/ts/groups.ts'
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
  <div class="flex flex-col space-y-2 text-md">
 | 
			
		||||
    <div class="p-2 bg-primary w-full h-full" v-for="group in groups_store.groups" :key="group.name">
 | 
			
		||||
      <p class="drop-shadow-accent drop-shadow-md">
 | 
			
		||||
        > {{ group }}
 | 
			
		||||
      </p>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
							
								
								
									
										41
									
								
								src/ts/groups.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								src/ts/groups.ts
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,41 @@
 | 
			
		|||
import { reactive } from 'vue'
 | 
			
		||||
 | 
			
		||||
export const groups_store = reactive({
 | 
			
		||||
  groups: [],
 | 
			
		||||
})
 | 
			
		||||
 | 
			
		||||
export function update_groups() {
 | 
			
		||||
  fetch('http://localhost:31337/get/groups', {
 | 
			
		||||
    credentials: 'include',
 | 
			
		||||
  })
 | 
			
		||||
    .then((res) => {
 | 
			
		||||
      res
 | 
			
		||||
        .json()
 | 
			
		||||
        .then((groupsjson) => {
 | 
			
		||||
          groups_store.groups = groupsjson.groups
 | 
			
		||||
        })
 | 
			
		||||
        .catch(() => {})
 | 
			
		||||
    })
 | 
			
		||||
    .catch(() => {})
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
export function add_group(group: string) {
 | 
			
		||||
  fetch('http://localhost:31337/post/group?name=' + group, {
 | 
			
		||||
    credentials: 'include',
 | 
			
		||||
    method: 'POST',
 | 
			
		||||
    body: JSON.stringify({ name: group }),
 | 
			
		||||
    headers: {
 | 
			
		||||
      'Content-Type': 'application/json',
 | 
			
		||||
    },
 | 
			
		||||
  })
 | 
			
		||||
    .then((res) => {
 | 
			
		||||
      if (res.status === 400) {
 | 
			
		||||
        console.log('Group submitted is invalid.')
 | 
			
		||||
      } else if (res.status === 401) {
 | 
			
		||||
        console.log("You aren't logged in.")
 | 
			
		||||
      } else {
 | 
			
		||||
        update_groups()
 | 
			
		||||
      }
 | 
			
		||||
    })
 | 
			
		||||
    .catch(() => {})
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,9 +1,13 @@
 | 
			
		|||
<script lang="ts" setup>
 | 
			
		||||
import UserInfo from '@/components/UserInfo.vue'
 | 
			
		||||
import ListGroups from '@/components/ListGroups.vue'
 | 
			
		||||
import AddGroup from '@/components/AddGroup.vue'
 | 
			
		||||
import { onMounted } from 'vue'
 | 
			
		||||
import { update_info } from '@/ts/user_info'
 | 
			
		||||
import { update_groups } from '@/ts/groups'
 | 
			
		||||
 | 
			
		||||
onMounted(update_info)
 | 
			
		||||
onMounted(update_groups)
 | 
			
		||||
</script>
 | 
			
		||||
 | 
			
		||||
<template>
 | 
			
		||||
| 
						 | 
				
			
			@ -24,6 +28,12 @@ onMounted(update_info)
 | 
			
		|||
        <div class="p-2 bg-secondary md:p-4 ring-2 ring-secondary/80">
 | 
			
		||||
          <UserInfo></UserInfo>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="p-2 bg-secondary md:p-4 ring-2 ring-secondary/80">
 | 
			
		||||
          <ListGroups></ListGroups>
 | 
			
		||||
        </div>
 | 
			
		||||
        <div class="p-2 bg-secondary md:p-4 ring-2 ring-secondary/80">
 | 
			
		||||
          <AddGroup></AddGroup>
 | 
			
		||||
        </div>
 | 
			
		||||
        <a
 | 
			
		||||
          class="flex w-full p-2 font-mono text-lg md:p-4 md:text-2xl bg-secondary ring-2 ring-secondary/80 h-fit0 hover:bg-secondary/50"
 | 
			
		||||
          href="http://localhost:31337/auth/logout"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue