diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..63f43f8 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,23 @@ +# targo-frontend +FROM node:22 + +# Set working directory inside container +WORKDIR /app + +# Set environment variables +ENV VITE_TARGO_BACKEND_URL="http://targo-backend:3000" + +# Copy package.json & package-lock.json first (for caching) +COPY package*.json ./ + +# Install dependencies +RUN npm install + +# Copy the rest of the code +COPY . . + +# Expose Quasar dev port +EXPOSE 9000 + +# Default command +CMD ["quasar", "dev"] diff --git a/src/boot/axios.ts b/src/boot/axios.ts index 0ad51d2..3ac8c4c 100644 --- a/src/boot/axios.ts +++ b/src/boot/axios.ts @@ -2,10 +2,10 @@ import { defineBoot } from '#q-app/wrappers'; import axios, { type AxiosInstance } from 'axios'; declare module 'vue' { - interface ComponentCustomProperties { - $axios: AxiosInstance; - $api: AxiosInstance; - } + interface ComponentCustomProperties { + $axios: AxiosInstance; + $api: AxiosInstance; + } } // Be careful when using SSR for cross-request state pollution @@ -14,18 +14,21 @@ declare module 'vue' { // good idea to move this instance creation inside of the // "export default () => {}" function below (which runs individually // for each client) -const api = axios.create({ baseURL: import.meta.env.VITE_TARGO_BACKEND_AUTH_URL }); +const api = axios.create({ + baseURL: import.meta.env.VITE_TARGO_BACKEND_URL, + withCredentials: true +}); export default defineBoot(({ app }) => { - // for use inside Vue files (Options API) through this.$axios and this.$api + // for use inside Vue files (Options API) through this.$axios and this.$api - app.config.globalProperties.$axios = axios; - // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) - // so you won't necessarily have to import axios in each vue file + app.config.globalProperties.$axios = axios; + // ^ ^ ^ this will allow you to use this.$axios (for Vue Options API form) + // so you won't necessarily have to import axios in each vue file - app.config.globalProperties.$api = api; - // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) - // so you can easily perform requests against your app's API + app.config.globalProperties.$api = api; + // ^ ^ ^ this will allow you to use this.$api (for Vue Options API form) + // so you can easily perform requests against your app's API }); export { api }; diff --git a/src/css/app.scss b/src/css/app.scss index adfa295..45df8bc 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -1,5 +1,5 @@ // app global css in SCSS form -@each $size in (1, 2, 3, 4, 5, 10, 15, 20, 25, 50, 75, 100) { +@each $size in (1, 2, 3, 4, 5, 10, 15, 20, 25, 50, 75, 100, 200) { .rounded-#{$size} { border-radius: #{$size}px !important; } @@ -25,11 +25,20 @@ } body.body--dark { - --q-secondary: #0f1114; + --q-secondary: #2b2f34; color: $grey-2; } .body--light { --q-dark: #FFF; color: $blue-grey-8; +} + +.shift-highlight { + background: #0195462a; +} + +.frosted-glass { + background-color: #FFFA !important; + backdrop-filter: blur(5px); } \ No newline at end of file diff --git a/src/css/quasar.variables.scss b/src/css/quasar.variables.scss index 2131a9e..f4316d0 100644 --- a/src/css/quasar.variables.scss +++ b/src/css/quasar.variables.scss @@ -16,16 +16,22 @@ $primary : #019547; $secondary : #DAE0E7; $accent : #AAD5C4; -$dark-shadow-color : #019547; +$dark-shadow-color : #00220f; -$elevation-dark-umbra : rgba($dark-shadow-color, 0.4); -$elevation-dark-penumbra : rgba($dark-shadow-color, 0); -$elevation-dark-ambient : rgba($dark-shadow-color, 0); +$elevation-dark-umbra : rgba($dark-shadow-color, 1); +$elevation-dark-penumbra : rgba($dark-shadow-color, 0.2); +$elevation-dark-ambient : rgba($dark-shadow-color, 0.2); $dark-shadow-2 : 0 3px 5px -1px $elevation-dark-umbra, 0 5px 8px $elevation-dark-penumbra, 0 1px 14px $elevation-dark-ambient; $layout-shadow-dark : 0 0 10px 5px rgba($dark-shadow-color, 0.5); -$dark : #333; +$input-text-color : #455A64; +$input-autofill-color : #AAD5C4; +$field-dense-label-top : 5px !default; +$field-dense-label-font-size : 16px !default; + + +$dark : #42444b; $dark-page : #343434; $positive : #21ba45; diff --git a/src/i18n/en-ca/index.ts b/src/i18n/en-ca/index.ts index 922125b..ae81e67 100644 --- a/src/i18n/en-ca/index.ts +++ b/src/i18n/en-ca/index.ts @@ -25,6 +25,10 @@ export default { tooltip: { coming_soon: "coming soon!", }, + error: { + login_failed: "Failed to login", + popups_blocked: "Popups are blocked on this device", + }, }, nav_bar: { diff --git a/src/i18n/fr-ca/index.ts b/src/i18n/fr-ca/index.ts index 213d174..c4ba08a 100644 --- a/src/i18n/fr-ca/index.ts +++ b/src/i18n/fr-ca/index.ts @@ -25,6 +25,10 @@ export default { tooltip: { coming_soon: "à venir!", }, + error: { + login_failed: "Échec à la connexion", + popups_blocked: "Les fenêtres contextuelles sont bloqués sur cet appareil", + }, }, nav_bar: { diff --git a/src/layouts/components/main-layout-header-bar-notification.vue b/src/layouts/components/main-layout-header-bar-notification.vue index 89e7edf..521989d 100644 --- a/src/layouts/components/main-layout-header-bar-notification.vue +++ b/src/layouts/components/main-layout-header-bar-notification.vue @@ -1,26 +1,29 @@ - \ No newline at end of file diff --git a/src/layouts/components/main-layout-left-drawer.vue b/src/layouts/components/main-layout-left-drawer.vue index c34b1eb..4223f04 100644 --- a/src/layouts/components/main-layout-left-drawer.vue +++ b/src/layouts/components/main-layout-left-drawer.vue @@ -1,23 +1,27 @@ -