diff --git a/packages/hoppscotch-sh-admin/assets/icons/auth/email.svg b/packages/hoppscotch-sh-admin/assets/icons/auth/email.svg new file mode 100644 index 000000000..ac21b3d07 --- /dev/null +++ b/packages/hoppscotch-sh-admin/assets/icons/auth/email.svg @@ -0,0 +1,15 @@ + + + + + diff --git a/packages/hoppscotch-sh-admin/assets/icons/auth/github.svg b/packages/hoppscotch-sh-admin/assets/icons/auth/github.svg new file mode 100644 index 000000000..a4a47b020 --- /dev/null +++ b/packages/hoppscotch-sh-admin/assets/icons/auth/github.svg @@ -0,0 +1,12 @@ + + + + diff --git a/packages/hoppscotch-sh-admin/assets/icons/auth/google.svg b/packages/hoppscotch-sh-admin/assets/icons/auth/google.svg new file mode 100644 index 000000000..5cdb447fa --- /dev/null +++ b/packages/hoppscotch-sh-admin/assets/icons/auth/google.svg @@ -0,0 +1,24 @@ + + + + + + + diff --git a/packages/hoppscotch-sh-admin/assets/icons/auth/microsoft.svg b/packages/hoppscotch-sh-admin/assets/icons/auth/microsoft.svg new file mode 100644 index 000000000..dcc6cd287 --- /dev/null +++ b/packages/hoppscotch-sh-admin/assets/icons/auth/microsoft.svg @@ -0,0 +1,12 @@ + + + + + + + diff --git a/packages/hoppscotch-sh-admin/assets/icons/logo.svg b/packages/hoppscotch-sh-admin/assets/icons/logo.svg new file mode 100644 index 000000000..00fdee045 --- /dev/null +++ b/packages/hoppscotch-sh-admin/assets/icons/logo.svg @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/hoppscotch-sh-admin/assets/scss/themes.scss b/packages/hoppscotch-sh-admin/assets/scss/themes.scss index 7f1a4baaf..b995447a7 100644 --- a/packages/hoppscotch-sh-admin/assets/scss/themes.scss +++ b/packages/hoppscotch-sh-admin/assets/scss/themes.scss @@ -1,249 +1,191 @@ @mixin base-theme { - --font-sans: "Inter", sans-serif; - --font-mono: "Roboto Mono", monospace; - --font-icon: "Material Icons"; + --font-sans: 'Inter', sans-serif; + --font-mono: 'Roboto Mono', monospace; + --font-icon: 'Material Icons'; --font-size-tiny: calc(var(--font-size-body) - 0.062rem); } @mixin dark-theme { - --primary-color: theme("colors.neutral.900"); - --primary-light-color: theme("colors.dark.600"); - --primary-dark-color: theme("colors.neutral.800"); + --primary-color: theme('colors.neutral.900'); + --primary-light-color: theme('colors.dark.600'); + --primary-dark-color: theme('colors.neutral.800'); --primary-contrast-color: #161616; - --secondary-color: theme("colors.neutral.400"); - --secondary-light-color: theme("colors.neutral.500"); - --secondary-dark-color: theme("colors.neutral.100"); - --divider-color: theme("colors.neutral.800"); - --divider-light-color: theme("colors.dark.500"); - --divider-dark-color: theme("colors.dark.300"); - --error-color: theme("colors.stone.800"); - --tooltip-color: theme("colors.neutral.100"); - --popover-color: theme("colors.dark.700"); - --editor-theme: "merbivore_soft"; + --secondary-color: theme('colors.neutral.400'); + --secondary-light-color: theme('colors.neutral.500'); + --secondary-dark-color: theme('colors.neutral.100'); + --divider-color: theme('colors.neutral.800'); + --divider-light-color: theme('colors.dark.500'); + --divider-dark-color: theme('colors.dark.300'); + --error-color: theme('colors.stone.800'); + --tooltip-color: theme('colors.neutral.100'); + --popover-color: theme('colors.dark.700'); + --editor-theme: 'merbivore_soft'; } @mixin light-theme { - --primary-color: theme("colors.white"); - --primary-light-color: theme("colors.neutral.50"); - --primary-dark-color: theme("colors.neutral.100"); + --primary-color: theme('colors.white'); + --primary-light-color: theme('colors.neutral.50'); + --primary-dark-color: theme('colors.neutral.100'); --primary-contrast-color: #fefefe; - --secondary-color: theme("colors.neutral.500"); - --secondary-light-color: theme("colors.neutral.400"); - --secondary-dark-color: theme("colors.neutral.900"); - --divider-color: theme("colors.gray.100"); - --divider-light-color: theme("colors.neutral.100"); - --divider-dark-color: theme("colors.neutral.300"); - --error-color: theme("colors.yellow.100"); - --tooltip-color: theme("colors.neutral.800"); - --popover-color: theme("colors.white"); - --editor-theme: "textmate"; + --secondary-color: theme('colors.neutral.500'); + --secondary-light-color: theme('colors.neutral.400'); + --secondary-dark-color: theme('colors.neutral.900'); + --divider-color: theme('colors.gray.100'); + --divider-light-color: theme('colors.neutral.100'); + --divider-dark-color: theme('colors.neutral.300'); + --error-color: theme('colors.yellow.100'); + --tooltip-color: theme('colors.neutral.800'); + --popover-color: theme('colors.white'); + --editor-theme: 'textmate'; } @mixin black-theme { - --primary-color: theme("colors.dark.900"); - --primary-light-color: theme("colors.neutral.900"); - --primary-dark-color: theme("colors.dark.800"); + --primary-color: theme('colors.dark.900'); + --primary-light-color: theme('colors.neutral.900'); + --primary-dark-color: theme('colors.dark.800'); --primary-contrast-color: #0e0e0e; - --secondary-color: theme("colors.neutral.400"); - --secondary-light-color: theme("colors.neutral.500"); - --secondary-dark-color: theme("colors.neutral.100"); - --divider-color: theme("colors.neutral.800"); - --divider-light-color: theme("colors.dark.800"); - --divider-dark-color: theme("colors.dark.300"); - --error-color: theme("colors.stone.900"); - --tooltip-color: theme("colors.neutral.100"); - --popover-color: theme("colors.dark.600"); - --editor-theme: "twilight"; + --secondary-color: theme('colors.neutral.400'); + --secondary-light-color: theme('colors.neutral.500'); + --secondary-dark-color: theme('colors.neutral.100'); + --divider-color: theme('colors.neutral.800'); + --divider-light-color: theme('colors.dark.800'); + --divider-dark-color: theme('colors.dark.300'); + --error-color: theme('colors.stone.900'); + --tooltip-color: theme('colors.neutral.100'); + --popover-color: theme('colors.dark.600'); + --editor-theme: 'twilight'; } @mixin dark-editor-theme { - --editor-type-color: theme("colors.purple.400"); - --editor-name-color: theme("colors.blue.400"); - --editor-operator-color: theme("colors.indigo.400"); - --editor-invalid-color: theme("colors.red.400"); - --editor-separator-color: theme("colors.gray.400"); - --editor-meta-color: theme("colors.gray.400"); - --editor-variable-color: theme("colors.green.400"); - --editor-link-color: theme("colors.cyan.400"); - --editor-process-color: theme("colors.fuchsia.400"); - --editor-constant-color: theme("colors.violet.400"); - --editor-keyword-color: theme("colors.pink.400"); + --editor-type-color: theme('colors.purple.400'); + --editor-name-color: theme('colors.blue.400'); + --editor-operator-color: theme('colors.indigo.400'); + --editor-invalid-color: theme('colors.red.400'); + --editor-separator-color: theme('colors.gray.400'); + --editor-meta-color: theme('colors.gray.400'); + --editor-variable-color: theme('colors.green.400'); + --editor-link-color: theme('colors.cyan.400'); + --editor-process-color: theme('colors.fuchsia.400'); + --editor-constant-color: theme('colors.violet.400'); + --editor-keyword-color: theme('colors.pink.400'); } @mixin light-editor-theme { - --editor-type-color: theme("colors.purple.600"); - --editor-name-color: theme("colors.red.600"); - --editor-operator-color: theme("colors.indigo.600"); - --editor-invalid-color: theme("colors.red.600"); - --editor-separator-color: theme("colors.gray.600"); - --editor-meta-color: theme("colors.gray.600"); - --editor-variable-color: theme("colors.green.600"); - --editor-link-color: theme("colors.cyan.600"); - --editor-process-color: theme("colors.blue.600"); - --editor-constant-color: theme("colors.fuchsia.600"); - --editor-keyword-color: theme("colors.pink.600"); + --editor-type-color: theme('colors.purple.600'); + --editor-name-color: theme('colors.red.600'); + --editor-operator-color: theme('colors.indigo.600'); + --editor-invalid-color: theme('colors.red.600'); + --editor-separator-color: theme('colors.gray.600'); + --editor-meta-color: theme('colors.gray.600'); + --editor-variable-color: theme('colors.green.600'); + --editor-link-color: theme('colors.cyan.600'); + --editor-process-color: theme('colors.blue.600'); + --editor-constant-color: theme('colors.fuchsia.600'); + --editor-keyword-color: theme('colors.pink.600'); } @mixin black-editor-theme { - --editor-type-color: theme("colors.purple.400"); - --editor-name-color: theme("colors.fuchsia.400"); - --editor-operator-color: theme("colors.indigo.400"); - --editor-invalid-color: theme("colors.red.400"); - --editor-separator-color: theme("colors.gray.400"); - --editor-meta-color: theme("colors.gray.400"); - --editor-variable-color: theme("colors.green.400"); - --editor-link-color: theme("colors.cyan.400"); - --editor-process-color: theme("colors.violet.400"); - --editor-constant-color: theme("colors.blue.400"); - --editor-keyword-color: theme("colors.pink.400"); + --editor-type-color: theme('colors.purple.400'); + --editor-name-color: theme('colors.fuchsia.400'); + --editor-operator-color: theme('colors.indigo.400'); + --editor-invalid-color: theme('colors.red.400'); + --editor-separator-color: theme('colors.gray.400'); + --editor-meta-color: theme('colors.gray.400'); + --editor-variable-color: theme('colors.green.400'); + --editor-link-color: theme('colors.cyan.400'); + --editor-process-color: theme('colors.violet.400'); + --editor-constant-color: theme('colors.blue.400'); + --editor-keyword-color: theme('colors.pink.400'); } @mixin green-theme { - --accent-color: theme("colors.green.500"); - --accent-light-color: theme("colors.green.400"); - --accent-dark-color: theme("colors.green.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.green.200"); - --gradient-via-color: theme("colors.green.400"); - --gradient-to-color: theme("colors.green.600"); + --accent-color: theme('colors.green.500'); + --accent-light-color: theme('colors.green.400'); + --accent-dark-color: theme('colors.green.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.green.200'); + --gradient-via-color: theme('colors.green.400'); + --gradient-to-color: theme('colors.green.600'); } @mixin teal-theme { - --accent-color: theme("colors.teal.500"); - --accent-light-color: theme("colors.teal.400"); - --accent-dark-color: theme("colors.teal.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.teal.200"); - --gradient-via-color: theme("colors.teal.400"); - --gradient-to-color: theme("colors.teal.600"); + --accent-color: theme('colors.teal.500'); + --accent-light-color: theme('colors.teal.400'); + --accent-dark-color: theme('colors.teal.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.teal.200'); + --gradient-via-color: theme('colors.teal.400'); + --gradient-to-color: theme('colors.teal.600'); } @mixin blue-theme { - --accent-color: theme("colors.blue.500"); - --accent-light-color: theme("colors.blue.400"); - --accent-dark-color: theme("colors.blue.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.blue.200"); - --gradient-via-color: theme("colors.blue.400"); - --gradient-to-color: theme("colors.blue.600"); + --accent-color: theme('colors.blue.500'); + --accent-light-color: theme('colors.blue.400'); + --accent-dark-color: theme('colors.blue.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.blue.200'); + --gradient-via-color: theme('colors.blue.400'); + --gradient-to-color: theme('colors.blue.600'); } @mixin indigo-theme { - --accent-color: theme("colors.indigo.500"); - --accent-light-color: theme("colors.indigo.400"); - --accent-dark-color: theme("colors.indigo.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.indigo.200"); - --gradient-via-color: theme("colors.indigo.400"); - --gradient-to-color: theme("colors.indigo.600"); + --accent-color: theme('colors.indigo.500'); + --accent-light-color: theme('colors.indigo.400'); + --accent-dark-color: theme('colors.indigo.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.indigo.200'); + --gradient-via-color: theme('colors.indigo.400'); + --gradient-to-color: theme('colors.indigo.600'); } @mixin purple-theme { - --accent-color: theme("colors.purple.500"); - --accent-light-color: theme("colors.purple.400"); - --accent-dark-color: theme("colors.purple.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.purple.200"); - --gradient-via-color: theme("colors.purple.400"); - --gradient-to-color: theme("colors.purple.600"); + --accent-color: theme('colors.purple.500'); + --accent-light-color: theme('colors.purple.400'); + --accent-dark-color: theme('colors.purple.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.purple.200'); + --gradient-via-color: theme('colors.purple.400'); + --gradient-to-color: theme('colors.purple.600'); } @mixin yellow-theme { - --accent-color: theme("colors.yellow.500"); - --accent-light-color: theme("colors.yellow.400"); - --accent-dark-color: theme("colors.yellow.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.yellow.200"); - --gradient-via-color: theme("colors.yellow.400"); - --gradient-to-color: theme("colors.yellow.600"); + --accent-color: theme('colors.yellow.500'); + --accent-light-color: theme('colors.yellow.400'); + --accent-dark-color: theme('colors.yellow.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.yellow.200'); + --gradient-via-color: theme('colors.yellow.400'); + --gradient-to-color: theme('colors.yellow.600'); } @mixin orange-theme { - --accent-color: theme("colors.orange.500"); - --accent-light-color: theme("colors.orange.400"); - --accent-dark-color: theme("colors.orange.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.orange.200"); - --gradient-via-color: theme("colors.orange.400"); - --gradient-to-color: theme("colors.orange.600"); + --accent-color: theme('colors.orange.500'); + --accent-light-color: theme('colors.orange.400'); + --accent-dark-color: theme('colors.orange.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.orange.200'); + --gradient-via-color: theme('colors.orange.400'); + --gradient-to-color: theme('colors.orange.600'); } @mixin red-theme { - --accent-color: theme("colors.red.500"); - --accent-light-color: theme("colors.red.400"); - --accent-dark-color: theme("colors.red.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.red.200"); - --gradient-via-color: theme("colors.red.400"); - --gradient-to-color: theme("colors.red.600"); + --accent-color: theme('colors.red.500'); + --accent-light-color: theme('colors.red.400'); + --accent-dark-color: theme('colors.red.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.red.200'); + --gradient-via-color: theme('colors.red.400'); + --gradient-to-color: theme('colors.red.600'); } @mixin pink-theme { - --accent-color: theme("colors.pink.500"); - --accent-light-color: theme("colors.pink.400"); - --accent-dark-color: theme("colors.pink.600"); - --accent-contrast-color: theme("colors.white"); - --gradient-from-color: theme("colors.pink.200"); - --gradient-via-color: theme("colors.pink.400"); - --gradient-to-color: theme("colors.pink.600"); -} - -:root { - @include base-theme; - @include dark-theme; - @include green-theme; - @include dark-editor-theme; -} - -:root.light { - @include light-theme; - @include light-editor-theme; -} - -:root.dark { - @include dark-theme; - @include dark-editor-theme; -} - -:root.black { - @include black-theme; - @include black-editor-theme; -} - -:root[data-accent="blue"] { - @include blue-theme; -} - -:root[data-accent="green"] { - @include green-theme; -} - -:root[data-accent="teal"] { - @include teal-theme; -} - -:root[data-accent="indigo"] { - @include indigo-theme; -} - -:root[data-accent="purple"] { - @include purple-theme; -} - -:root[data-accent="orange"] { - @include orange-theme; -} - -:root[data-accent="pink"] { - @include pink-theme; -} - -:root[data-accent="red"] { - @include red-theme; -} - -:root[data-accent="yellow"] { - @include yellow-theme; + --accent-color: theme('colors.pink.500'); + --accent-light-color: theme('colors.pink.400'); + --accent-dark-color: theme('colors.pink.600'); + --accent-contrast-color: theme('colors.white'); + --gradient-from-color: theme('colors.pink.200'); + --gradient-via-color: theme('colors.pink.400'); + --gradient-to-color: theme('colors.pink.600'); } @mixin font-small { @@ -294,14 +236,73 @@ --sidebar-primary-sticky-fold: 2.5rem; } -:root[data-font-size="small"] { - @include font-small; -} - -:root[data-font-size="medium"] { +:root { + @include base-theme; + @include dark-theme; + @include green-theme; + @include dark-editor-theme; @include font-medium; } -:root[data-font-size="large"] { +:root.light { + @include light-theme; + @include light-editor-theme; +} + +:root.dark { + @include dark-theme; + @include dark-editor-theme; +} + +:root.black { + @include black-theme; + @include black-editor-theme; +} + +:root[data-accent='blue'] { + @include blue-theme; +} + +:root[data-accent='green'] { + @include green-theme; +} + +:root[data-accent='teal'] { + @include teal-theme; +} + +:root[data-accent='indigo'] { + @include indigo-theme; +} + +:root[data-accent='purple'] { + @include purple-theme; +} + +:root[data-accent='orange'] { + @include orange-theme; +} + +:root[data-accent='pink'] { + @include pink-theme; +} + +:root[data-accent='red'] { + @include red-theme; +} + +:root[data-accent='yellow'] { + @include yellow-theme; +} + +:root[data-font-size='small'] { + @include font-small; +} + +:root[data-font-size='medium'] { + @include font-medium; +} + +:root[data-font-size='large'] { @include font-large; } diff --git a/packages/hoppscotch-sh-admin/package.json b/packages/hoppscotch-sh-admin/package.json index b551f5804..1edb33271 100644 --- a/packages/hoppscotch-sh-admin/package.json +++ b/packages/hoppscotch-sh-admin/package.json @@ -6,7 +6,7 @@ "scripts": { "dev": "pnpm exec npm-run-all -p -l dev:*", "dev:vite": "vite", - "dev:gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml --watch dotenv_config_path=\"../../.env\"", + "dev:gql-codegen": "graphql-codegen --require dotenv/config --config gql-codegen.yml --watch dotenv_config_path=\".env\"", "build": "vue-tsc && vite build", "preview": "vite preview" }, @@ -18,11 +18,15 @@ "@types/express": "^4.17.15", "@urql/vue": "^1.0.4", "@vueuse/core": "^9.10.0", + "axios": "^0.21.4", "cors": "^2.8.5", "date-fns": "^2.29.3", "express": "^4.18.2", "express-graphql": "^0.12.0", + "fp-ts": "^2.13.1", "graphql": "^16.6.0", + "lodash-es": "^4.17.21", + "rxjs": "^7.8.0", "ts-node-dev": "^2.0.0", "unplugin-icons": "^0.14.9", "unplugin-vue-components": "^0.21.0", @@ -38,14 +42,14 @@ "@graphql-codegen/typescript-document-nodes": "3.0.0", "@graphql-codegen/typescript-operations": "3.0.0", "@graphql-codegen/urql-introspection": "2.2.1", - "@vitejs/plugin-vue": "^1.6.0", + "@vitejs/plugin-vue": "^3.1.0", "@vue/compiler-sfc": "^3.2.6", "graphql-tag": "^2.12.6", "npm-run-all": "^4.1.5", "sass": "^1.57.1", "ts-node": "^10.9.1", "typescript": "^4.9.3", - "vite": "^2.5.1", + "vite": "^3.1.4", "vite-plugin-pages": "^0.26.0", "vite-plugin-vue-layouts": "^0.7.0", "vite-plugin-windicss": "^1.8.8", diff --git a/packages/hoppscotch-sh-admin/src/App.vue b/packages/hoppscotch-sh-admin/src/App.vue index 630f83112..cb647e8d0 100644 --- a/packages/hoppscotch-sh-admin/src/App.vue +++ b/packages/hoppscotch-sh-admin/src/App.vue @@ -5,9 +5,10 @@