From 24e5931497b372ea7fe04913f5a72cd244316c49 Mon Sep 17 00:00:00 2001 From: Cy-Bert <125924936+Cy-Bert@users.noreply.github.com> Date: Wed, 27 Sep 2023 11:23:20 +0200 Subject: [PATCH 01/44] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index e3b02d5..0e14fd1 100644 --- a/README.md +++ b/README.md @@ -6,9 +6,13 @@ A simple odoo mobile app ```bash npm install ``` +## Install Quasar CLI +```bash +npm install -g @quasar/cli +``` -### Start the app in development mode (hot-code reloading, error reporting, etc.) +## Start the app in development mode (hot-code reloading, error reporting, etc.) ```bash -npm run dev +quasar dev ``` From 5f5e6e013d9052443cc5f655ad2a8d258d91951f Mon Sep 17 00:00:00 2001 From: EvanMlj <120018761+EvanMlj@users.noreply.github.com> Date: Mon, 6 Nov 2023 17:03:34 +0100 Subject: [PATCH 02/44] :lipstick: Ui and theme color and font colors for light and dark theme, ui elements and fonts --- src/css/app.css | 6 +- src/css/colors.module.css | 180 ++++++++++++++++++++++ src/css/theme.dark.css | 32 ++++ src/css/theme.light.css | 32 ++++ src/css/tokens.css | 272 ++++++++++++++++++++++++++++++++++ src/css/typography.module.css | 150 +++++++++++++++++++ 6 files changed, 671 insertions(+), 1 deletion(-) create mode 100644 src/css/colors.module.css create mode 100644 src/css/theme.dark.css create mode 100644 src/css/theme.light.css create mode 100644 src/css/tokens.css create mode 100644 src/css/typography.module.css diff --git a/src/css/app.css b/src/css/app.css index 0fc2c34..60fc4e2 100644 --- a/src/css/app.css +++ b/src/css/app.css @@ -1 +1,5 @@ -/* app global css */ +@import url(tokens.css); +@import url(colors.module.css); +@import url(typography.module.css); +@import url(theme.light.css) (prefers-color-scheme: light); +@import url(theme.dark.css) (prefers-color-scheme: dark); diff --git a/src/css/colors.module.css b/src/css/colors.module.css new file mode 100644 index 0000000..fa072a6 --- /dev/null +++ b/src/css/colors.module.css @@ -0,0 +1,180 @@ +.primary { + background-color: var(--md-sys-color-primary); +} +.primary-text { + color: var(--md-sys-color-primary); +} +.on-primary { + background-color: var(--md-sys-color-on-primary); +} +.on-primary-text { + color: var(--md-sys-color-on-primary); +} +.primary-container { + background-color: var(--md-sys-color-primary-container); +} +.primary-container-text { + color: var(--md-sys-color-primary-container); +} +.on-primary-container { + background-color: var(--md-sys-color-on-primary-container); +} +.on-primary-container-text { + color: var(--md-sys-color-on-primary-container); +} +.secondary { + background-color: var(--md-sys-color-secondary); +} +.secondary-text { + color: var(--md-sys-color-secondary); +} +.on-secondary { + background-color: var(--md-sys-color-on-secondary); +} +.on-secondary-text { + color: var(--md-sys-color-on-secondary); +} +.secondary-container { + background-color: var(--md-sys-color-secondary-container); +} +.secondary-container-text { + color: var(--md-sys-color-secondary-container); +} +.on-secondary-container { + background-color: var(--md-sys-color-on-secondary-container); +} +.on-secondary-container-text { + color: var(--md-sys-color-on-secondary-container); +} +.tertiary { + background-color: var(--md-sys-color-tertiary); +} +.tertiary-text { + color: var(--md-sys-color-tertiary); +} +.on-tertiary { + background-color: var(--md-sys-color-on-tertiary); +} +.on-tertiary-text { + color: var(--md-sys-color-on-tertiary); +} +.tertiary-container { + background-color: var(--md-sys-color-tertiary-container); +} +.tertiary-container-text { + color: var(--md-sys-color-tertiary-container); +} +.on-tertiary-container { + background-color: var(--md-sys-color-on-tertiary-container); +} +.on-tertiary-container-text { + color: var(--md-sys-color-on-tertiary-container); +} +.error { + background-color: var(--md-sys-color-error); +} +.error-text { + color: var(--md-sys-color-error); +} +.error-container { + background-color: var(--md-sys-color-error-container); +} +.error-container-text { + color: var(--md-sys-color-error-container); +} +.on-error { + background-color: var(--md-sys-color-on-error); +} +.on-error-text { + color: var(--md-sys-color-on-error); +} +.on-error-container { + background-color: var(--md-sys-color-on-error-container); +} +.on-error-container-text { + color: var(--md-sys-color-on-error-container); +} +.background { + background-color: var(--md-sys-color-background); +} +.background-text { + color: var(--md-sys-color-background); +} +.on-background { + background-color: var(--md-sys-color-on-background); +} +.on-background-text { + color: var(--md-sys-color-on-background); +} +.surface { + background-color: var(--md-sys-color-surface); +} +.surface-text { + color: var(--md-sys-color-surface); +} +.on-surface { + background-color: var(--md-sys-color-on-surface); +} +.on-surface-text { + color: var(--md-sys-color-on-surface); +} +.surface-variant { + background-color: var(--md-sys-color-surface-variant); +} +.surface-variant-text { + color: var(--md-sys-color-surface-variant); +} +.on-surface-variant { + background-color: var(--md-sys-color-on-surface-variant); +} +.on-surface-variant-text { + color: var(--md-sys-color-on-surface-variant); +} +.outline { + background-color: var(--md-sys-color-outline); +} +.outline-text { + color: var(--md-sys-color-outline); +} +.inverse-on-surface { + background-color: var(--md-sys-color-inverse-on-surface); +} +.inverse-on-surface-text { + color: var(--md-sys-color-inverse-on-surface); +} +.inverse-surface { + background-color: var(--md-sys-color-inverse-surface); +} +.inverse-surface-text { + color: var(--md-sys-color-inverse-surface); +} +.inverse-primary { + background-color: var(--md-sys-color-inverse-primary); +} +.inverse-primary-text { + color: var(--md-sys-color-inverse-primary); +} +.shadow { + background-color: var(--md-sys-color-shadow); +} +.shadow-text { + color: var(--md-sys-color-shadow); +} +.surface-tint { + background-color: var(--md-sys-color-surface-tint); +} +.surface-tint-text { + color: var(--md-sys-color-surface-tint); +} +.outline-variant { + background-color: var(--md-sys-color-outline-variant); +} +.outline-variant-text { + color: var(--md-sys-color-outline-variant); +} +.scrim { + background-color: var(--md-sys-color-scrim); +} +.scrim-text { + color: var(--md-sys-color-scrim); +} diff --git a/src/css/theme.dark.css b/src/css/theme.dark.css new file mode 100644 index 0000000..2cdd786 --- /dev/null +++ b/src/css/theme.dark.css @@ -0,0 +1,32 @@ +:root { + --md-sys-color-primary: var(--md-sys-color-primary-dark); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-dark); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-dark); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-dark); + --md-sys-color-secondary: var(--md-sys-color-secondary-dark); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-dark); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-dark); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-dark); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-dark); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-dark); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-dark); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-dark); + --md-sys-color-error: var(--md-sys-color-error-dark); + --md-sys-color-error-container: var(--md-sys-color-error-container-dark); + --md-sys-color-on-error: var(--md-sys-color-on-error-dark); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-dark); + --md-sys-color-background: var(--md-sys-color-background-dark); + --md-sys-color-on-background: var(--md-sys-color-on-background-dark); + --md-sys-color-surface: var(--md-sys-color-surface-dark); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-dark); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-dark); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-dark); + --md-sys-color-outline: var(--md-sys-color-outline-dark); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-dark); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-dark); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-dark); + --md-sys-color-shadow: var(--md-sys-color-shadow-dark); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-dark); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-dark); + --md-sys-color-scrim: var(--md-sys-color-scrim-dark); +} diff --git a/src/css/theme.light.css b/src/css/theme.light.css new file mode 100644 index 0000000..6186269 --- /dev/null +++ b/src/css/theme.light.css @@ -0,0 +1,32 @@ +:root { + --md-sys-color-primary: var(--md-sys-color-primary-light); + --md-sys-color-on-primary: var(--md-sys-color-on-primary-light); + --md-sys-color-primary-container: var(--md-sys-color-primary-container-light); + --md-sys-color-on-primary-container: var(--md-sys-color-on-primary-container-light); + --md-sys-color-secondary: var(--md-sys-color-secondary-light); + --md-sys-color-on-secondary: var(--md-sys-color-on-secondary-light); + --md-sys-color-secondary-container: var(--md-sys-color-secondary-container-light); + --md-sys-color-on-secondary-container: var(--md-sys-color-on-secondary-container-light); + --md-sys-color-tertiary: var(--md-sys-color-tertiary-light); + --md-sys-color-on-tertiary: var(--md-sys-color-on-tertiary-light); + --md-sys-color-tertiary-container: var(--md-sys-color-tertiary-container-light); + --md-sys-color-on-tertiary-container: var(--md-sys-color-on-tertiary-container-light); + --md-sys-color-error: var(--md-sys-color-error-light); + --md-sys-color-error-container: var(--md-sys-color-error-container-light); + --md-sys-color-on-error: var(--md-sys-color-on-error-light); + --md-sys-color-on-error-container: var(--md-sys-color-on-error-container-light); + --md-sys-color-background: var(--md-sys-color-background-light); + --md-sys-color-on-background: var(--md-sys-color-on-background-light); + --md-sys-color-surface: var(--md-sys-color-surface-light); + --md-sys-color-on-surface: var(--md-sys-color-on-surface-light); + --md-sys-color-surface-variant: var(--md-sys-color-surface-variant-light); + --md-sys-color-on-surface-variant: var(--md-sys-color-on-surface-variant-light); + --md-sys-color-outline: var(--md-sys-color-outline-light); + --md-sys-color-inverse-on-surface: var(--md-sys-color-inverse-on-surface-light); + --md-sys-color-inverse-surface: var(--md-sys-color-inverse-surface-light); + --md-sys-color-inverse-primary: var(--md-sys-color-inverse-primary-light); + --md-sys-color-shadow: var(--md-sys-color-shadow-light); + --md-sys-color-surface-tint: var(--md-sys-color-surface-tint-light); + --md-sys-color-outline-variant: var(--md-sys-color-outline-variant-light); + --md-sys-color-scrim: var(--md-sys-color-scrim-light); +} diff --git a/src/css/tokens.css b/src/css/tokens.css new file mode 100644 index 0000000..8288d67 --- /dev/null +++ b/src/css/tokens.css @@ -0,0 +1,272 @@ +:root { + --md-source: #572b61; + /* primary */ + --md-ref-palette-primary0: #000000; + --md-ref-palette-primary10: #340042; + --md-ref-palette-primary20: #4f155e; + --md-ref-palette-primary25: #5b226a; + --md-ref-palette-primary30: #682e76; + --md-ref-palette-primary35: #753a83; + --md-ref-palette-primary40: #824790; + --md-ref-palette-primary50: #9e5faa; + --md-ref-palette-primary60: #ba79c6; + --md-ref-palette-primary70: #d693e2; + --md-ref-palette-primary80: #f4aeff; + --md-ref-palette-primary90: #fdd6ff; + --md-ref-palette-primary95: #ffebfd; + --md-ref-palette-primary98: #fff7fa; + --md-ref-palette-primary99: #fffbff; + --md-ref-palette-primary100: #ffffff; + /* secondary */ + --md-ref-palette-secondary0: #000000; + --md-ref-palette-secondary10: #390033; + --md-ref-palette-secondary20: #57124e; + --md-ref-palette-secondary25: #641f5a; + --md-ref-palette-secondary30: #722b66; + --md-ref-palette-secondary35: #7f3772; + --md-ref-palette-secondary40: #8d437f; + --md-ref-palette-secondary50: #aa5c99; + --md-ref-palette-secondary60: #c775b4; + --md-ref-palette-secondary70: #e58fd0; + --md-ref-palette-secondary80: #ffacea; + --md-ref-palette-secondary90: #ffd7f1; + --md-ref-palette-secondary95: #ffecf6; + --md-ref-palette-secondary98: #fff7f9; + --md-ref-palette-secondary99: #fffbff; + --md-ref-palette-secondary100: #ffffff; + /* tertiary */ + --md-ref-palette-tertiary0: #000000; + --md-ref-palette-tertiary10: #002022; + --md-ref-palette-tertiary20: #003739; + --md-ref-palette-tertiary25: #004346; + --md-ref-palette-tertiary30: #004f53; + --md-ref-palette-tertiary35: #005c60; + --md-ref-palette-tertiary40: #00696e; + --md-ref-palette-tertiary50: #00848b; + --md-ref-palette-tertiary60: #00a0a8; + --md-ref-palette-tertiary70: #1dbdc6; + --md-ref-palette-tertiary80: #4cd9e2; + --md-ref-palette-tertiary90: #6ff6fe; + --md-ref-palette-tertiary95: #c1fbff; + --md-ref-palette-tertiary98: #e7feff; + --md-ref-palette-tertiary99: #f3ffff; + --md-ref-palette-tertiary100: #ffffff; + /* neutral */ + --md-ref-palette-neutral0: #000000; + --md-ref-palette-neutral10: #1e1a1e; + --md-ref-palette-neutral20: #332f33; + --md-ref-palette-neutral25: #3e3a3e; + --md-ref-palette-neutral30: #4a4549; + --md-ref-palette-neutral35: #565155; + --md-ref-palette-neutral40: #625d61; + --md-ref-palette-neutral50: #7b7579; + --md-ref-palette-neutral60: #958f93; + --md-ref-palette-neutral70: #b0a9ad; + --md-ref-palette-neutral80: #ccc4c9; + --md-ref-palette-neutral90: #e8e0e5; + --md-ref-palette-neutral95: #f7eef3; + --md-ref-palette-neutral98: #fff7fa; + --md-ref-palette-neutral99: #fffbff; + --md-ref-palette-neutral100: #ffffff; + /* neutral-variant */ + --md-ref-palette-neutral-variant0: #000000; + --md-ref-palette-neutral-variant10: #201920; + --md-ref-palette-neutral-variant20: #362e36; + --md-ref-palette-neutral-variant25: #413941; + --md-ref-palette-neutral-variant30: #4d444c; + --md-ref-palette-neutral-variant35: #585058; + --md-ref-palette-neutral-variant40: #655c64; + --md-ref-palette-neutral-variant50: #7e747d; + --md-ref-palette-neutral-variant60: #988e97; + --md-ref-palette-neutral-variant70: #b3a8b1; + --md-ref-palette-neutral-variant80: #cfc3cd; + --md-ref-palette-neutral-variant90: #ecdfe9; + --md-ref-palette-neutral-variant95: #faedf7; + --md-ref-palette-neutral-variant98: #fff7fa; + --md-ref-palette-neutral-variant99: #fffbff; + --md-ref-palette-neutral-variant100: #ffffff; + /* error */ + --md-ref-palette-error0: #000000; + --md-ref-palette-error10: #410002; + --md-ref-palette-error20: #690005; + --md-ref-palette-error25: #7e0007; + --md-ref-palette-error30: #93000a; + --md-ref-palette-error35: #a80710; + --md-ref-palette-error40: #ba1a1a; + --md-ref-palette-error50: #de3730; + --md-ref-palette-error60: #ff5449; + --md-ref-palette-error70: #ff897d; + --md-ref-palette-error80: #ffb4ab; + --md-ref-palette-error90: #ffdad6; + --md-ref-palette-error95: #ffedea; + --md-ref-palette-error98: #fff8f7; + --md-ref-palette-error99: #fffbff; + --md-ref-palette-error100: #ffffff; + /* light */ + --md-sys-color-primary-light: #824790; + --md-sys-color-on-primary-light: #ffffff; + --md-sys-color-primary-container-light: #fdd6ff; + --md-sys-color-on-primary-container-light: #340042; + --md-sys-color-secondary-light: #8d437f; + --md-sys-color-on-secondary-light: #ffffff; + --md-sys-color-secondary-container-light: #ffd7f1; + --md-sys-color-on-secondary-container-light: #390033; + --md-sys-color-tertiary-light: #00696e; + --md-sys-color-on-tertiary-light: #ffffff; + --md-sys-color-tertiary-container-light: #6ff6fe; + --md-sys-color-on-tertiary-container-light: #002022; + --md-sys-color-error-light: #ba1a1a; + --md-sys-color-error-container-light: #ffdad6; + --md-sys-color-on-error-light: #ffffff; + --md-sys-color-on-error-container-light: #410002; + --md-sys-color-background-light: #fffbff; + --md-sys-color-on-background-light: #1e1a1e; + --md-sys-color-surface-light: #fffbff; + --md-sys-color-on-surface-light: #1e1a1e; + --md-sys-color-surface-variant-light: #ecdfe9; + --md-sys-color-on-surface-variant-light: #4d444c; + --md-sys-color-outline-light: #7e747d; + --md-sys-color-inverse-on-surface-light: #f7eef3; + --md-sys-color-inverse-surface-light: #332f33; + --md-sys-color-inverse-primary-light: #f4aeff; + --md-sys-color-shadow-light: #000000; + --md-sys-color-surface-tint-light: #824790; + --md-sys-color-outline-variant-light: #cfc3cd; + --md-sys-color-scrim-light: #000000; + /* dark */ + --md-sys-color-primary-dark: #f4aeff; + --md-sys-color-on-primary-dark: #4f155e; + --md-sys-color-primary-container-dark: #682e76; + --md-sys-color-on-primary-container-dark: #fdd6ff; + --md-sys-color-secondary-dark: #ffacea; + --md-sys-color-on-secondary-dark: #57124e; + --md-sys-color-secondary-container-dark: #722b66; + --md-sys-color-on-secondary-container-dark: #ffd7f1; + --md-sys-color-tertiary-dark: #4cd9e2; + --md-sys-color-on-tertiary-dark: #003739; + --md-sys-color-tertiary-container-dark: #004f53; + --md-sys-color-on-tertiary-container-dark: #6ff6fe; + --md-sys-color-error-dark: #ffb4ab; + --md-sys-color-error-container-dark: #93000a; + --md-sys-color-on-error-dark: #690005; + --md-sys-color-on-error-container-dark: #ffdad6; + --md-sys-color-background-dark: #1e1a1e; + --md-sys-color-on-background-dark: #e8e0e5; + --md-sys-color-surface-dark: #1e1a1e; + --md-sys-color-on-surface-dark: #e8e0e5; + --md-sys-color-surface-variant-dark: #4d444c; + --md-sys-color-on-surface-variant-dark: #cfc3cd; + --md-sys-color-outline-dark: #988e97; + --md-sys-color-inverse-on-surface-dark: #1e1a1e; + --md-sys-color-inverse-surface-dark: #e8e0e5; + --md-sys-color-inverse-primary-dark: #824790; + --md-sys-color-shadow-dark: #000000; + --md-sys-color-surface-tint-dark: #f4aeff; + --md-sys-color-outline-variant-dark: #4d444c; + --md-sys-color-scrim-dark: #000000; + /* display - large */ + --md-sys-typescale-display-large-font-family-name: Roboto; + --md-sys-typescale-display-large-font-family-style: Regular; + --md-sys-typescale-display-large-font-weight: 400px; + --md-sys-typescale-display-large-font-size: 57px; + --md-sys-typescale-display-large-line-height: 64px; + --md-sys-typescale-display-large-letter-spacing: -0.25px; + /* display - medium */ + --md-sys-typescale-display-medium-font-family-name: Roboto; + --md-sys-typescale-display-medium-font-family-style: Regular; + --md-sys-typescale-display-medium-font-weight: 400px; + --md-sys-typescale-display-medium-font-size: 45px; + --md-sys-typescale-display-medium-line-height: 52px; + --md-sys-typescale-display-medium-letter-spacing: 0px; + /* display - small */ + --md-sys-typescale-display-small-font-family-name: Roboto; + --md-sys-typescale-display-small-font-family-style: Regular; + --md-sys-typescale-display-small-font-weight: 400px; + --md-sys-typescale-display-small-font-size: 36px; + --md-sys-typescale-display-small-line-height: 44px; + --md-sys-typescale-display-small-letter-spacing: 0px; + /* headline - large */ + --md-sys-typescale-headline-large-font-family-name: Roboto; + --md-sys-typescale-headline-large-font-family-style: Regular; + --md-sys-typescale-headline-large-font-weight: 400px; + --md-sys-typescale-headline-large-font-size: 32px; + --md-sys-typescale-headline-large-line-height: 40px; + --md-sys-typescale-headline-large-letter-spacing: 0px; + /* headline - medium */ + --md-sys-typescale-headline-medium-font-family-name: Roboto; + --md-sys-typescale-headline-medium-font-family-style: Regular; + --md-sys-typescale-headline-medium-font-weight: 400px; + --md-sys-typescale-headline-medium-font-size: 28px; + --md-sys-typescale-headline-medium-line-height: 36px; + --md-sys-typescale-headline-medium-letter-spacing: 0px; + /* headline - small */ + --md-sys-typescale-headline-small-font-family-name: Roboto; + --md-sys-typescale-headline-small-font-family-style: Regular; + --md-sys-typescale-headline-small-font-weight: 400px; + --md-sys-typescale-headline-small-font-size: 24px; + --md-sys-typescale-headline-small-line-height: 32px; + --md-sys-typescale-headline-small-letter-spacing: 0px; + /* body - large */ + --md-sys-typescale-body-large-font-family-name: Roboto; + --md-sys-typescale-body-large-font-family-style: Regular; + --md-sys-typescale-body-large-font-weight: 400px; + --md-sys-typescale-body-large-font-size: 16px; + --md-sys-typescale-body-large-line-height: 24px; + --md-sys-typescale-body-large-letter-spacing: 0.50px; + /* body - medium */ + --md-sys-typescale-body-medium-font-family-name: Roboto; + --md-sys-typescale-body-medium-font-family-style: Regular; + --md-sys-typescale-body-medium-font-weight: 400px; + --md-sys-typescale-body-medium-font-size: 14px; + --md-sys-typescale-body-medium-line-height: 20px; + --md-sys-typescale-body-medium-letter-spacing: 0.25px; + /* body - small */ + --md-sys-typescale-body-small-font-family-name: Roboto; + --md-sys-typescale-body-small-font-family-style: Regular; + --md-sys-typescale-body-small-font-weight: 400px; + --md-sys-typescale-body-small-font-size: 12px; + --md-sys-typescale-body-small-line-height: 16px; + --md-sys-typescale-body-small-letter-spacing: 0.40px; + /* label - large */ + --md-sys-typescale-label-large-font-family-name: Roboto; + --md-sys-typescale-label-large-font-family-style: Medium; + --md-sys-typescale-label-large-font-weight: 500px; + --md-sys-typescale-label-large-font-size: 14px; + --md-sys-typescale-label-large-line-height: 20px; + --md-sys-typescale-label-large-letter-spacing: 0.10px; + /* label - medium */ + --md-sys-typescale-label-medium-font-family-name: Roboto; + --md-sys-typescale-label-medium-font-family-style: Medium; + --md-sys-typescale-label-medium-font-weight: 500px; + --md-sys-typescale-label-medium-font-size: 12px; + --md-sys-typescale-label-medium-line-height: 16px; + --md-sys-typescale-label-medium-letter-spacing: 0.50px; + /* label - small */ + --md-sys-typescale-label-small-font-family-name: Roboto; + --md-sys-typescale-label-small-font-family-style: Medium; + --md-sys-typescale-label-small-font-weight: 500px; + --md-sys-typescale-label-small-font-size: 11px; + --md-sys-typescale-label-small-line-height: 16px; + --md-sys-typescale-label-small-letter-spacing: 0.50px; + /* title - large */ + --md-sys-typescale-title-large-font-family-name: Roboto; + --md-sys-typescale-title-large-font-family-style: Regular; + --md-sys-typescale-title-large-font-weight: 400px; + --md-sys-typescale-title-large-font-size: 22px; + --md-sys-typescale-title-large-line-height: 28px; + --md-sys-typescale-title-large-letter-spacing: 0px; + /* title - medium */ + --md-sys-typescale-title-medium-font-family-name: Roboto; + --md-sys-typescale-title-medium-font-family-style: Medium; + --md-sys-typescale-title-medium-font-weight: 500px; + --md-sys-typescale-title-medium-font-size: 16px; + --md-sys-typescale-title-medium-line-height: 24px; + --md-sys-typescale-title-medium-letter-spacing: 0.15px; + /* title - small */ + --md-sys-typescale-title-small-font-family-name: Roboto; + --md-sys-typescale-title-small-font-family-style: Medium; + --md-sys-typescale-title-small-font-weight: 500px; + --md-sys-typescale-title-small-font-size: 14px; + --md-sys-typescale-title-small-line-height: 20px; + --md-sys-typescale-title-small-letter-spacing: 0.10px; +} diff --git a/src/css/typography.module.css b/src/css/typography.module.css new file mode 100644 index 0000000..5e2c82f --- /dev/null +++ b/src/css/typography.module.css @@ -0,0 +1,150 @@ +.display-large{ + font-family: var(--md-sys-typescale-display-large-font-family-name); + font-style: var(--md-sys-typescale-display-large-font-family-style); + font-weight: var(--md-sys-typescale-display-large-font-weight); + font-size: var(--md-sys-typescale-display-large-font-size); + letter-spacing: var(--md-sys-typescale-display-large-tracking); + line-height: var(--md-sys-typescale-display-large-height); + text-transform: var(--md-sys-typescale-display-large-text-transform); + text-decoration: var(--md-sys-typescale-display-large-text-decoration); +} +.display-medium{ + font-family: var(--md-sys-typescale-display-medium-font-family-name); + font-style: var(--md-sys-typescale-display-medium-font-family-style); + font-weight: var(--md-sys-typescale-display-medium-font-weight); + font-size: var(--md-sys-typescale-display-medium-font-size); + letter-spacing: var(--md-sys-typescale-display-medium-tracking); + line-height: var(--md-sys-typescale-display-medium-height); + text-transform: var(--md-sys-typescale-display-medium-text-transform); + text-decoration: var(--md-sys-typescale-display-medium-text-decoration); +} +.display-small{ + font-family: var(--md-sys-typescale-display-small-font-family-name); + font-style: var(--md-sys-typescale-display-small-font-family-style); + font-weight: var(--md-sys-typescale-display-small-font-weight); + font-size: var(--md-sys-typescale-display-small-font-size); + letter-spacing: var(--md-sys-typescale-display-small-tracking); + line-height: var(--md-sys-typescale-display-small-height); + text-transform: var(--md-sys-typescale-display-small-text-transform); + text-decoration: var(--md-sys-typescale-display-small-text-decoration); +} +.headline-large{ + font-family: var(--md-sys-typescale-headline-large-font-family-name); + font-style: var(--md-sys-typescale-headline-large-font-family-style); + font-weight: var(--md-sys-typescale-headline-large-font-weight); + font-size: var(--md-sys-typescale-headline-large-font-size); + letter-spacing: var(--md-sys-typescale-headline-large-tracking); + line-height: var(--md-sys-typescale-headline-large-height); + text-transform: var(--md-sys-typescale-headline-large-text-transform); + text-decoration: var(--md-sys-typescale-headline-large-text-decoration); +} +.headline-medium{ + font-family: var(--md-sys-typescale-headline-medium-font-family-name); + font-style: var(--md-sys-typescale-headline-medium-font-family-style); + font-weight: var(--md-sys-typescale-headline-medium-font-weight); + font-size: var(--md-sys-typescale-headline-medium-font-size); + letter-spacing: var(--md-sys-typescale-headline-medium-tracking); + line-height: var(--md-sys-typescale-headline-medium-height); + text-transform: var(--md-sys-typescale-headline-medium-text-transform); + text-decoration: var(--md-sys-typescale-headline-medium-text-decoration); +} +.headline-small{ + font-family: var(--md-sys-typescale-headline-small-font-family-name); + font-style: var(--md-sys-typescale-headline-small-font-family-style); + font-weight: var(--md-sys-typescale-headline-small-font-weight); + font-size: var(--md-sys-typescale-headline-small-font-size); + letter-spacing: var(--md-sys-typescale-headline-small-tracking); + line-height: var(--md-sys-typescale-headline-small-height); + text-transform: var(--md-sys-typescale-headline-small-text-transform); + text-decoration: var(--md-sys-typescale-headline-small-text-decoration); +} +.body-large{ + font-family: var(--md-sys-typescale-body-large-font-family-name); + font-style: var(--md-sys-typescale-body-large-font-family-style); + font-weight: var(--md-sys-typescale-body-large-font-weight); + font-size: var(--md-sys-typescale-body-large-font-size); + letter-spacing: var(--md-sys-typescale-body-large-tracking); + line-height: var(--md-sys-typescale-body-large-height); + text-transform: var(--md-sys-typescale-body-large-text-transform); + text-decoration: var(--md-sys-typescale-body-large-text-decoration); +} +.body-medium{ + font-family: var(--md-sys-typescale-body-medium-font-family-name); + font-style: var(--md-sys-typescale-body-medium-font-family-style); + font-weight: var(--md-sys-typescale-body-medium-font-weight); + font-size: var(--md-sys-typescale-body-medium-font-size); + letter-spacing: var(--md-sys-typescale-body-medium-tracking); + line-height: var(--md-sys-typescale-body-medium-height); + text-transform: var(--md-sys-typescale-body-medium-text-transform); + text-decoration: var(--md-sys-typescale-body-medium-text-decoration); +} +.body-small{ + font-family: var(--md-sys-typescale-body-small-font-family-name); + font-style: var(--md-sys-typescale-body-small-font-family-style); + font-weight: var(--md-sys-typescale-body-small-font-weight); + font-size: var(--md-sys-typescale-body-small-font-size); + letter-spacing: var(--md-sys-typescale-body-small-tracking); + line-height: var(--md-sys-typescale-body-small-height); + text-transform: var(--md-sys-typescale-body-small-text-transform); + text-decoration: var(--md-sys-typescale-body-small-text-decoration); +} +.label-large{ + font-family: var(--md-sys-typescale-label-large-font-family-name); + font-style: var(--md-sys-typescale-label-large-font-family-style); + font-weight: var(--md-sys-typescale-label-large-font-weight); + font-size: var(--md-sys-typescale-label-large-font-size); + letter-spacing: var(--md-sys-typescale-label-large-tracking); + line-height: var(--md-sys-typescale-label-large-height); + text-transform: var(--md-sys-typescale-label-large-text-transform); + text-decoration: var(--md-sys-typescale-label-large-text-decoration); +} +.label-medium{ + font-family: var(--md-sys-typescale-label-medium-font-family-name); + font-style: var(--md-sys-typescale-label-medium-font-family-style); + font-weight: var(--md-sys-typescale-label-medium-font-weight); + font-size: var(--md-sys-typescale-label-medium-font-size); + letter-spacing: var(--md-sys-typescale-label-medium-tracking); + line-height: var(--md-sys-typescale-label-medium-height); + text-transform: var(--md-sys-typescale-label-medium-text-transform); + text-decoration: var(--md-sys-typescale-label-medium-text-decoration); +} +.label-small{ + font-family: var(--md-sys-typescale-label-small-font-family-name); + font-style: var(--md-sys-typescale-label-small-font-family-style); + font-weight: var(--md-sys-typescale-label-small-font-weight); + font-size: var(--md-sys-typescale-label-small-font-size); + letter-spacing: var(--md-sys-typescale-label-small-tracking); + line-height: var(--md-sys-typescale-label-small-height); + text-transform: var(--md-sys-typescale-label-small-text-transform); + text-decoration: var(--md-sys-typescale-label-small-text-decoration); +} +.title-large{ + font-family: var(--md-sys-typescale-title-large-font-family-name); + font-style: var(--md-sys-typescale-title-large-font-family-style); + font-weight: var(--md-sys-typescale-title-large-font-weight); + font-size: var(--md-sys-typescale-title-large-font-size); + letter-spacing: var(--md-sys-typescale-title-large-tracking); + line-height: var(--md-sys-typescale-title-large-height); + text-transform: var(--md-sys-typescale-title-large-text-transform); + text-decoration: var(--md-sys-typescale-title-large-text-decoration); +} +.title-medium{ + font-family: var(--md-sys-typescale-title-medium-font-family-name); + font-style: var(--md-sys-typescale-title-medium-font-family-style); + font-weight: var(--md-sys-typescale-title-medium-font-weight); + font-size: var(--md-sys-typescale-title-medium-font-size); + letter-spacing: var(--md-sys-typescale-title-medium-tracking); + line-height: var(--md-sys-typescale-title-medium-height); + text-transform: var(--md-sys-typescale-title-medium-text-transform); + text-decoration: var(--md-sys-typescale-title-medium-text-decoration); +} +.title-small{ + font-family: var(--md-sys-typescale-title-small-font-family-name); + font-style: var(--md-sys-typescale-title-small-font-family-style); + font-weight: var(--md-sys-typescale-title-small-font-weight); + font-size: var(--md-sys-typescale-title-small-font-size); + letter-spacing: var(--md-sys-typescale-title-small-tracking); + line-height: var(--md-sys-typescale-title-small-height); + text-transform: var(--md-sys-typescale-title-small-text-transform); + text-decoration: var(--md-sys-typescale-title-small-text-decoration); +} From a8ae23e625f9c2a4a989312a232ed505dcdeb721 Mon Sep 17 00:00:00 2001 From: EvanMlj <120018761+EvanMlj@users.noreply.github.com> Date: Tue, 7 Nov 2023 11:27:57 +0100 Subject: [PATCH 03/44] :lipstick: Sass installation installation of sass for front-end developpement and ui ux desi gn --- package-lock.json | 526 +++++++++++++++++++++++++++++++++- package.json | 4 +- public/images/odoo.png | Bin 0 -> 98005 bytes quasar.config.js | 10 + src/css/app.css | 2 +- src/css/app.sass | 1 + src/css/quasar.variables.sass | 188 ++++++++++++ src/css/tokens.css | 138 ++++----- src/pages/core/IndexPage.vue | 2 +- 9 files changed, 793 insertions(+), 78 deletions(-) create mode 100644 public/images/odoo.png create mode 100644 src/css/app.sass create mode 100644 src/css/quasar.variables.sass diff --git a/package-lock.json b/package-lock.json index 1e8dea5..3bc3d12 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,9 @@ "eslint-config-prettier": "^8.1.0", "eslint-plugin-vue": "^9.0.0", "postcss": "^8.4.14", - "prettier": "^2.5.1" + "prettier": "^2.5.1", + "sass": "^1.69.5", + "sass-loader": "^13.3.2" }, "engines": { "node": "^18 || ^16 || ^14.19", @@ -2401,6 +2403,21 @@ } } }, + "node_modules/@quasar/app-vite/node_modules/sass": { + "version": "1.32.12", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz", + "integrity": "sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=8.9.0" + } + }, "node_modules/@quasar/extras": { "version": "1.16.6", "resolved": "https://registry.npmjs.org/@quasar/extras/-/extras-1.16.6.tgz", @@ -2803,6 +2820,28 @@ "integrity": "sha512-rkiiTuf/z2wTd4RxFOb+clE7PF4AEJU0hsczbUdkHHBtkUmpWQpEddynNfJYKYtZFJKbq4F+brfekt1kx85IZA==", "dev": true }, + "node_modules/@types/eslint": { + "version": "8.44.7", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.44.7.tgz", + "integrity": "sha512-f5ORu2hcBbKei97U73mf+l9t4zTGl74IqZ0GQk4oVea/VS8tQZYkUveSYojk+frraAVYId0V2WC9O4PTNru2FQ==", + "dev": true, + "peer": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", @@ -2867,6 +2906,13 @@ "@types/node": "*" } }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "peer": true + }, "node_modules/@types/mime": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", @@ -3285,6 +3331,181 @@ } } }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz", + "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", + "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", + "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz", + "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", + "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", + "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz", + "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", + "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", + "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "dev": true, + "peer": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", + "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", + "dev": true, + "peer": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz", + "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz", + "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz", + "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz", + "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz", + "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==", + "dev": true, + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "peer": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "peer": true + }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -3314,6 +3535,16 @@ "node": ">=0.4.0" } }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peer": true, + "peerDependencies": { + "acorn": "^8" + } + }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -3371,6 +3602,16 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, "node_modules/ansi-colors": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", @@ -4032,6 +4273,16 @@ "node": ">=10" } }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.0" + } + }, "node_modules/ci-info": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", @@ -4880,6 +5131,13 @@ "errno": "cli.js" } }, + "node_modules/es-module-lexer": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.1.tgz", + "integrity": "sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==", + "dev": true, + "peer": true + }, "node_modules/esbuild": { "version": "0.14.51", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz", @@ -5461,6 +5719,16 @@ "node": ">= 0.6" } }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "peer": true, + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -6026,6 +6294,13 @@ "node": ">= 6" } }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "peer": true + }, "node_modules/globals": { "version": "13.21.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", @@ -6323,6 +6598,12 @@ "node": ">= 4" } }, + "node_modules/immutable": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.4.tgz", + "integrity": "sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==", + "devOptional": true + }, "node_modules/import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", @@ -6677,6 +6958,37 @@ "node": ">=0.10.0" } }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, "node_modules/jiti": { "version": "1.19.3", "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.3.tgz", @@ -6718,6 +7030,13 @@ "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", "devOptional": true }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "peer": true + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -6883,6 +7202,16 @@ "listhen": "bin/listhen.mjs" } }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "peer": true, + "engines": { + "node": ">=6.11.5" + } + }, "node_modules/local-pkg": { "version": "0.4.3", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.4.3.tgz", @@ -7307,6 +7636,12 @@ "node": ">= 0.6" } }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, "node_modules/nitropack": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/nitropack/-/nitropack-2.6.2.tgz", @@ -9466,18 +9801,57 @@ "dev": true }, "node_modules/sass": { - "version": "1.32.12", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.32.12.tgz", - "integrity": "sha512-zmXn03k3hN0KaiVTjohgkg98C3UowhL1/VSGdj4/VAAiMKGQOE80PFPxFP2Kyq0OUskPKcY5lImkhBKEHlypJA==", + "version": "1.69.5", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz", + "integrity": "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==", "devOptional": true, "dependencies": { - "chokidar": ">=3.0.0 <4.0.0" + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" }, "bin": { "sass": "sass.js" }, "engines": { - "node": ">=8.9.0" + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.2.tgz", + "integrity": "sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==", + "dev": true, + "dependencies": { + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } } }, "node_modules/sax": { @@ -9486,6 +9860,25 @@ "integrity": "sha512-5f3k2PbGGp+YtKJjOItpg3P99IMD84E4HOvcfleTb5joCHNXYLsR9yWFPOYGgaeMPDubQILTCMdsFb2OMeOjtg==", "dev": true }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "peer": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, "node_modules/scule": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/scule/-/scule-1.0.0.tgz", @@ -9980,6 +10373,41 @@ "node": ">=10" } }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz", + "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==", + "dev": true, + "peer": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -11229,6 +11657,20 @@ "vue": "^3.2.0" } }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "peer": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/wcwidth": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", @@ -11251,6 +11693,54 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/webpack": { + "version": "5.89.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.89.0.tgz", + "integrity": "sha512-qyfIC10pOr70V+jkmud8tMfajraGCZMBWJtrmuBymQKCrLTRejBI8STDp1MCyZu/QTdZSeacCQYpYNQVOzX5kw==", + "dev": true, + "peer": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, "node_modules/webpack-merge": { "version": "5.9.0", "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", @@ -11277,6 +11767,30 @@ "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==" }, + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "peer": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "peer": true, + "engines": { + "node": ">=4.0" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", diff --git a/package.json b/package.json index 992e5ae..96d1344 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,9 @@ "eslint-config-prettier": "^8.1.0", "eslint-plugin-vue": "^9.0.0", "postcss": "^8.4.14", - "prettier": "^2.5.1" + "prettier": "^2.5.1", + "sass": "^1.69.5", + "sass-loader": "^13.3.2" }, "engines": { "node": "^18 || ^16 || ^14.19", diff --git a/public/images/odoo.png b/public/images/odoo.png new file mode 100644 index 0000000000000000000000000000000000000000..a5ff1e57178ce7e72f1a1e4baac0ea7b31be28d7 GIT binary patch literal 98005 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

L0C!V?~lF}g*IU#_X`>wl9QyT@i9 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 literal 0 HcmV?d00001 diff --git a/quasar.config.js b/quasar.config.js index 10b6f53..9bb1940 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -56,6 +56,16 @@ module.exports = configure(function (/* ctx */) { }, vueRouterMode: "hash", // available values: 'hash', 'history' + + viteOption: { // Vite configuration for CSS and Sass + css : { + preprocessorOptions: { // Configure the Sass preprocessor + sass: { + additionalData: `@import 'src/css/app.sass';` // Include custom Sass data, e.g., variables and mixins + } + } + } + } // vueRouterBase, // vueDevtools, // vueOptionsAPI: false, diff --git a/src/css/app.css b/src/css/app.css index 60fc4e2..b47c02e 100644 --- a/src/css/app.css +++ b/src/css/app.css @@ -2,4 +2,4 @@ @import url(colors.module.css); @import url(typography.module.css); @import url(theme.light.css) (prefers-color-scheme: light); -@import url(theme.dark.css) (prefers-color-scheme: dark); +@import url(theme.dark.css) (prefers-color-scheme: dark); \ No newline at end of file diff --git a/src/css/app.sass b/src/css/app.sass new file mode 100644 index 0000000..3d547f6 --- /dev/null +++ b/src/css/app.sass @@ -0,0 +1 @@ +@import "quasar.variables" \ No newline at end of file diff --git a/src/css/quasar.variables.sass b/src/css/quasar.variables.sass new file mode 100644 index 0000000..75ef8a5 --- /dev/null +++ b/src/css/quasar.variables.sass @@ -0,0 +1,188 @@ +$color-primary-light: #824790 +$color-on-primary-light: #ffffff +$color-primary-container-light: #fdd6ff +$color-on-primary-container-light: #340042 + +$color-secondary-light: #00696e +$color-on-secondary-light: #ffffff +$color-secondary-container-light: #6ff6fe +$color-on-secondary-container-light: #002022 + +$color-tertiary-light: #8d437f +$color-on-tertiary-light: #ffffff +$color-tertiary-container-light: #ffd7f1 +$color-on-tertiary-container-light: #390033 + +$color-error-light: #ba1a1a +$color-error-container-light: #ffdad6 +$color-on-error-light: #ffffff +$color-on-error-container-light: #410002 + +$color-background-light: #f8fdff +$color-on-background-light: #001f25 + +$color-surface-light: #f8fdff +$color-on-surface-light: #001f25 + +$color-surface-variant-light: #ecdfe9 +$color-on-surface-variant-light: #4d444c + +$color-outline-light: #7e747d + +$color-inverse-on-surface-light: #d6f6ff +$color-inverse-surface-light: #00363f +$color-inverse-primary-light: #f4aeff + +$color-shadow-light: #000000 +$color-surface-tint-light: #824790 +$color-outline-variant-light: #cfc3cd +$color-scrim-light: #000000 + + +$color-primary-dark: #f4aeff +$color-on-primary-dark: #4f155e +$color-primary-container-dark: #682e76 +$color-on-primary-container-dark: #fdd6ff + +$color-secondary-dark: #4cd9e1 +$color-on-secondary-dark: #003739 +$color-secondary-container-dark: #004f53 +$color-on-secondary-container-dark: #6ff6fe + +$color-tertiary-dark: #ffacea +$color-on-tertiary-dark: #57124e +$color-tertiary-container-dark: #722b66 +$color-on-tertiary-container-dark: #ffd7f1 + +$color-error-dark: #ffb4ab +$color-error-container-dark: #93000a +$color-on-error-dark: #690005 +$color-on-error-container-dark: #ffdad6 + +$color-background-dark: #001f25 +$color-on-background-dark: #a6eeff + +$color-surface-dark: #001f25 +$color-on-surface-dark: #a6eeff + +$color-surface-variant-dark: #4d444c +$color-on-surface-variant-dark: #cfc3cd + +$color-outline-dark: #988e97 + +$color-inverse-on-surface-dark: #001f25 +$color-inverse-surface-dark: #a6eeff +$color-inverse-primary-dark: #824790 + +$color-shadow-dark: #000000 +$color-surface-tint-dark: #f4aeff +$color-outline-variant-dark: #4d444c +$color-scrim-dark: #000000 + +$display-large-font-family-name: Roboto +$display-large-font-family-style: Regular +$display-large-font-weight: 400 +$display-large-font-size: 3.563rem +$display-large-line-height: 4rem +$display-large-letter-spacing: -0.25px + +$display-medium-font-family-name: Roboto +$display-medium-font-family-style: Regular +$display-medium-font-weight: 400 +$display-medium-font-size: 2.813rem +$display-medium-line-height: 3.25rem +$display-medium-letter-spacing: 0 + +$display-small-font-family-name: Roboto +$display-small-font-family-style: Regular +$display-small-font-weight: 400 +$display-small-font-size: 2.25rem +$display-small-line-height: 2.75rem +$display-small-letter-spacing: 0 + +$headline-large-font-family-name: Roboto +$headline-large-font-family-style: Regular +$headline-large-font-weight: 400 +$headline-large-font-size: 2rem +$headline-large-line-height: 2.5rem +$headline-large-letter-spacing: 0 + +$headline-medium-font-family-name: Roboto +$headline-medium-font-family-style: Regular +$headline-medium-font-weight: 400 +$headline-medium-font-size: 1.75rem +$headline-medium-line-height: 2.25rem +$headline-medium-letter-spacing: 0 + +$headline-small-font-family-name: Roboto +$headline-small-font-family-style: Regular +$headline-small-font-weight: 400 +$headline-small-font-size: 1.5rem +$headline-small-line-height: 2rem +$headline-small-letter-spacing: 0 + +$body-large-font-family-name: Roboto +$body-large-font-family-style: Regular +$body-large-font-weight: 400 +$body-large-font-size: 1rem +$body-large-line-height: 1.5rem +$body-large-letter-spacing: 0.05rem + +$body-medium-font-family-name: Roboto +$body-medium-font-family-style: Regular +$body-medium-font-weight: 400 +$body-medium-font-size: 0.875rem +$body-medium-line-height: 1.25rem +$body-medium-letter-spacing: 0.025rem + +$body-small-font-family-name: Roboto +$body-small-font-family-style: Regular +$body-small-font-weight: 400 +$body-small-font-size: 0.75rem +$body-small-line-height: 1rem +$body-small-letter-spacing: 0.04rem + +$label-large-font-family-name: Roboto +$label-large-font-family-style: Medium +$label-large-font-weight: 500 +$label-large-font-size: 0.875rem +$label-large-line-height: 1.25rem +$label-large-letter-spacing: 0.01rem + +$label-medium-font-family-name: Roboto +$label-medium-font-family-style: Medium +$label-medium-font-weight: 500 +$label-medium-font-size: 0.75rem +$label-medium-line-height: 1rem +$label-medium-letter-spacing: 0.025rem + +$label-small-font-family-name: Roboto +$label-small-font-family-style: Medium +$label-small-font-weight: 500 +$label-small-font-size: 0.6875rem +$label-small-line-height: 1rem +$label-small-letter-spacing: 0.025rem + +$title-large-font-family-name: Roboto +$title-large-font-family-style: Regular +$title-large-font-weight: 400 +$title-large-font-size: 1.375rem +$title-large-line-height: 1.75rem +$title-large-letter-spacing: 0 + +$title-medium-font-family-name: Roboto +$title-medium-font-family-style: Medium +$title-medium-font-weight: 500 +$title-medium-font-size: 1rem +$title-medium-line-height: 1.5rem +$title-medium-letter-spacing: 0.015rem + +$title-small-font-family-name: Roboto +$title-small-font-family-style: Medium +$title-small-font-weight: 500 +$title-small-font-size: 0.875rem +$title-small-line-height: 1.25rem +$title-small-letter-spacing: 0.01rem + + + diff --git a/src/css/tokens.css b/src/css/tokens.css index 8288d67..51dddb1 100644 --- a/src/css/tokens.css +++ b/src/css/tokens.css @@ -1,5 +1,5 @@ :root { - --md-source: #572b61; + --md-source: #572B61; /* primary */ --md-ref-palette-primary0: #000000; --md-ref-palette-primary10: #340042; @@ -19,54 +19,54 @@ --md-ref-palette-primary100: #ffffff; /* secondary */ --md-ref-palette-secondary0: #000000; - --md-ref-palette-secondary10: #390033; - --md-ref-palette-secondary20: #57124e; - --md-ref-palette-secondary25: #641f5a; - --md-ref-palette-secondary30: #722b66; - --md-ref-palette-secondary35: #7f3772; - --md-ref-palette-secondary40: #8d437f; - --md-ref-palette-secondary50: #aa5c99; - --md-ref-palette-secondary60: #c775b4; - --md-ref-palette-secondary70: #e58fd0; - --md-ref-palette-secondary80: #ffacea; - --md-ref-palette-secondary90: #ffd7f1; - --md-ref-palette-secondary95: #ffecf6; - --md-ref-palette-secondary98: #fff7f9; - --md-ref-palette-secondary99: #fffbff; + --md-ref-palette-secondary10: #002022; + --md-ref-palette-secondary20: #003739; + --md-ref-palette-secondary25: #004346; + --md-ref-palette-secondary30: #004f53; + --md-ref-palette-secondary35: #005c60; + --md-ref-palette-secondary40: #00696e; + --md-ref-palette-secondary50: #00848a; + --md-ref-palette-secondary60: #00a0a8; + --md-ref-palette-secondary70: #1dbdc5; + --md-ref-palette-secondary80: #4cd9e1; + --md-ref-palette-secondary90: #6ff6fe; + --md-ref-palette-secondary95: #c1fbff; + --md-ref-palette-secondary98: #e7feff; + --md-ref-palette-secondary99: #f2ffff; --md-ref-palette-secondary100: #ffffff; /* tertiary */ --md-ref-palette-tertiary0: #000000; - --md-ref-palette-tertiary10: #002022; - --md-ref-palette-tertiary20: #003739; - --md-ref-palette-tertiary25: #004346; - --md-ref-palette-tertiary30: #004f53; - --md-ref-palette-tertiary35: #005c60; - --md-ref-palette-tertiary40: #00696e; - --md-ref-palette-tertiary50: #00848b; - --md-ref-palette-tertiary60: #00a0a8; - --md-ref-palette-tertiary70: #1dbdc6; - --md-ref-palette-tertiary80: #4cd9e2; - --md-ref-palette-tertiary90: #6ff6fe; - --md-ref-palette-tertiary95: #c1fbff; - --md-ref-palette-tertiary98: #e7feff; - --md-ref-palette-tertiary99: #f3ffff; + --md-ref-palette-tertiary10: #390033; + --md-ref-palette-tertiary20: #57124e; + --md-ref-palette-tertiary25: #641f5a; + --md-ref-palette-tertiary30: #722b66; + --md-ref-palette-tertiary35: #7f3772; + --md-ref-palette-tertiary40: #8d437f; + --md-ref-palette-tertiary50: #aa5c99; + --md-ref-palette-tertiary60: #c775b4; + --md-ref-palette-tertiary70: #e58fd0; + --md-ref-palette-tertiary80: #ffacea; + --md-ref-palette-tertiary90: #ffd7f1; + --md-ref-palette-tertiary95: #ffecf6; + --md-ref-palette-tertiary98: #fff7f9; + --md-ref-palette-tertiary99: #fffbff; --md-ref-palette-tertiary100: #ffffff; /* neutral */ --md-ref-palette-neutral0: #000000; - --md-ref-palette-neutral10: #1e1a1e; - --md-ref-palette-neutral20: #332f33; - --md-ref-palette-neutral25: #3e3a3e; - --md-ref-palette-neutral30: #4a4549; - --md-ref-palette-neutral35: #565155; - --md-ref-palette-neutral40: #625d61; - --md-ref-palette-neutral50: #7b7579; - --md-ref-palette-neutral60: #958f93; - --md-ref-palette-neutral70: #b0a9ad; - --md-ref-palette-neutral80: #ccc4c9; - --md-ref-palette-neutral90: #e8e0e5; - --md-ref-palette-neutral95: #f7eef3; - --md-ref-palette-neutral98: #fff7fa; - --md-ref-palette-neutral99: #fffbff; + --md-ref-palette-neutral10: #001f25; + --md-ref-palette-neutral20: #00363f; + --md-ref-palette-neutral25: #00424d; + --md-ref-palette-neutral30: #004e5b; + --md-ref-palette-neutral35: #005b69; + --md-ref-palette-neutral40: #006878; + --md-ref-palette-neutral50: #008396; + --md-ref-palette-neutral60: #009fb6; + --md-ref-palette-neutral70: #29bbd5; + --md-ref-palette-neutral80: #53d7f1; + --md-ref-palette-neutral90: #a6eeff; + --md-ref-palette-neutral95: #d6f6ff; + --md-ref-palette-neutral98: #effbff; + --md-ref-palette-neutral99: #f8fdff; --md-ref-palette-neutral100: #ffffff; /* neutral-variant */ --md-ref-palette-neutral-variant0: #000000; @@ -107,27 +107,27 @@ --md-sys-color-on-primary-light: #ffffff; --md-sys-color-primary-container-light: #fdd6ff; --md-sys-color-on-primary-container-light: #340042; - --md-sys-color-secondary-light: #8d437f; + --md-sys-color-secondary-light: #00696e; --md-sys-color-on-secondary-light: #ffffff; - --md-sys-color-secondary-container-light: #ffd7f1; - --md-sys-color-on-secondary-container-light: #390033; - --md-sys-color-tertiary-light: #00696e; + --md-sys-color-secondary-container-light: #6ff6fe; + --md-sys-color-on-secondary-container-light: #002022; + --md-sys-color-tertiary-light: #8d437f; --md-sys-color-on-tertiary-light: #ffffff; - --md-sys-color-tertiary-container-light: #6ff6fe; - --md-sys-color-on-tertiary-container-light: #002022; + --md-sys-color-tertiary-container-light: #ffd7f1; + --md-sys-color-on-tertiary-container-light: #390033; --md-sys-color-error-light: #ba1a1a; --md-sys-color-error-container-light: #ffdad6; --md-sys-color-on-error-light: #ffffff; --md-sys-color-on-error-container-light: #410002; - --md-sys-color-background-light: #fffbff; - --md-sys-color-on-background-light: #1e1a1e; - --md-sys-color-surface-light: #fffbff; - --md-sys-color-on-surface-light: #1e1a1e; + --md-sys-color-background-light: #f8fdff; + --md-sys-color-on-background-light: #001f25; + --md-sys-color-surface-light: #f8fdff; + --md-sys-color-on-surface-light: #001f25; --md-sys-color-surface-variant-light: #ecdfe9; --md-sys-color-on-surface-variant-light: #4d444c; --md-sys-color-outline-light: #7e747d; - --md-sys-color-inverse-on-surface-light: #f7eef3; - --md-sys-color-inverse-surface-light: #332f33; + --md-sys-color-inverse-on-surface-light: #d6f6ff; + --md-sys-color-inverse-surface-light: #00363f; --md-sys-color-inverse-primary-light: #f4aeff; --md-sys-color-shadow-light: #000000; --md-sys-color-surface-tint-light: #824790; @@ -138,27 +138,27 @@ --md-sys-color-on-primary-dark: #4f155e; --md-sys-color-primary-container-dark: #682e76; --md-sys-color-on-primary-container-dark: #fdd6ff; - --md-sys-color-secondary-dark: #ffacea; - --md-sys-color-on-secondary-dark: #57124e; - --md-sys-color-secondary-container-dark: #722b66; - --md-sys-color-on-secondary-container-dark: #ffd7f1; - --md-sys-color-tertiary-dark: #4cd9e2; - --md-sys-color-on-tertiary-dark: #003739; - --md-sys-color-tertiary-container-dark: #004f53; - --md-sys-color-on-tertiary-container-dark: #6ff6fe; + --md-sys-color-secondary-dark: #4cd9e1; + --md-sys-color-on-secondary-dark: #003739; + --md-sys-color-secondary-container-dark: #004f53; + --md-sys-color-on-secondary-container-dark: #6ff6fe; + --md-sys-color-tertiary-dark: #ffacea; + --md-sys-color-on-tertiary-dark: #57124e; + --md-sys-color-tertiary-container-dark: #722b66; + --md-sys-color-on-tertiary-container-dark: #ffd7f1; --md-sys-color-error-dark: #ffb4ab; --md-sys-color-error-container-dark: #93000a; --md-sys-color-on-error-dark: #690005; --md-sys-color-on-error-container-dark: #ffdad6; - --md-sys-color-background-dark: #1e1a1e; - --md-sys-color-on-background-dark: #e8e0e5; - --md-sys-color-surface-dark: #1e1a1e; - --md-sys-color-on-surface-dark: #e8e0e5; + --md-sys-color-background-dark: #001f25; + --md-sys-color-on-background-dark: #a6eeff; + --md-sys-color-surface-dark: #001f25; + --md-sys-color-on-surface-dark: #a6eeff; --md-sys-color-surface-variant-dark: #4d444c; --md-sys-color-on-surface-variant-dark: #cfc3cd; --md-sys-color-outline-dark: #988e97; - --md-sys-color-inverse-on-surface-dark: #1e1a1e; - --md-sys-color-inverse-surface-dark: #e8e0e5; + --md-sys-color-inverse-on-surface-dark: #001f25; + --md-sys-color-inverse-surface-dark: #a6eeff; --md-sys-color-inverse-primary-dark: #824790; --md-sys-color-shadow-dark: #000000; --md-sys-color-surface-tint-dark: #f4aeff; diff --git a/src/pages/core/IndexPage.vue b/src/pages/core/IndexPage.vue index 3df5b06..a960efb 100644 --- a/src/pages/core/IndexPage.vue +++ b/src/pages/core/IndexPage.vue @@ -1,6 +1,6 @@ diff --git a/src/components/ContactCard.vue b/src/components/ContactCard.vue index d88185f..01b6ac2 100644 --- a/src/components/ContactCard.vue +++ b/src/components/ContactCard.vue @@ -1,13 +1,53 @@ diff --git a/src/css/app.sass b/src/css/app.sass index 3d547f6..8a82ec7 100644 --- a/src/css/app.sass +++ b/src/css/app.sass @@ -1 +1,4 @@ -@import "quasar.variables" \ No newline at end of file +@import "quasar.variables" + +.body.body--dark + background: $color-background-dark diff --git a/src/layouts/LoginLayout.vue b/src/layouts/LoginLayout.vue index 17373c2..9541be4 100644 --- a/src/layouts/LoginLayout.vue +++ b/src/layouts/LoginLayout.vue @@ -13,6 +13,7 @@ + diff --git a/src/layouts/MainLayout.vue b/src/layouts/MainLayout.vue index 9b460ed..7c2c879 100644 --- a/src/layouts/MainLayout.vue +++ b/src/layouts/MainLayout.vue @@ -10,8 +10,14 @@ {{ pageTitle }} - - + + + +

@@ -25,7 +31,11 @@
- + + + + + @@ -35,7 +45,7 @@ - + @@ -44,7 +54,7 @@ Dashboard - + 12 @@ -58,7 +68,7 @@ - + @@ -70,7 +80,7 @@ - + @@ -99,7 +109,11 @@ - + + + + + @@ -111,9 +125,11 @@ import { ref , onMounted, reactive, watch } from 'vue' import { useRoute, useRouter, } from 'vue-router' import axios from 'axios' -import { useQuasar, Dark } from 'quasar' +import { useQuasar } from 'quasar' + export default { + name: 'MainLayout', setup() { const state = reactive({ Uapikey: 'admin', @@ -123,24 +139,24 @@ export default { rowsApi: ref([]), - }) + }) ; + const $q = useQuasar(); const leftDrawer = ref(false) const settingsDrawerOpen = ref(false) const miniState = ref(true) + const pageTitle = ref(''); const router = useRouter(); const route = useRoute(); - const pageTitle = ref(''); // initialize pageTitle as a ref watch(route, (newRoute) => { pageTitle.value = newRoute.name; // update pageTitle with the new route's name }); - const navigateToPage = (path) => { router.push(path); } - const isActive = (path) => { + const isRouteActive = (path) => { return route.path === path; } const fetchServerList = async () => { @@ -190,23 +206,13 @@ export default { settingsDrawerOpen, miniState, navigateToPage, - isActive, + isRouteActive, fetchServerList, pageTitle, - - - - toggleSettingsDrawer() { settingsDrawerOpen.value = !settingsDrawerOpen.value }, - - - - } - - - + } ; }, -} +} ; diff --git a/src/pages/core/DashboardPage.vue b/src/pages/core/DashboardPage.vue index 42b8357..27d7f21 100644 --- a/src/pages/core/DashboardPage.vue +++ b/src/pages/core/DashboardPage.vue @@ -2,19 +2,21 @@ - 12 + 12 - {{state ? state.countContactResult : ''}} + {{state ? state.countContactResult : ''}} - 24 + 24 + + @@ -34,8 +36,6 @@ export default defineComponent({ }) - - const countContact = async () => { try { @@ -62,7 +62,6 @@ export default defineComponent({ } }; - const responseCountContact = await axios.request(optionsCountContact); state.countContactResult = responseCountContact.data.result; } catch (error) { @@ -78,10 +77,6 @@ export default defineComponent({ } - - - - onMounted(() => { countContact() }) @@ -91,7 +86,6 @@ export default defineComponent({ countContact, navigateToPage, - } } }) diff --git a/src/pages/core/IndexPage.vue b/src/pages/core/IndexPage.vue index a960efb..6f9d54b 100644 --- a/src/pages/core/IndexPage.vue +++ b/src/pages/core/IndexPage.vue @@ -24,6 +24,7 @@ import { useVuelidate } from '@vuelidate/core' import { useRouter } from 'vue-router'; import { useAuthStore } from 'src/stores/authStore'; + export default defineComponent({ name: 'IndexPage', setup() { @@ -46,7 +47,9 @@ export default defineComponent({ const loginError = ref(''); const authStore = useAuthStore(); + + /** @@ -73,13 +76,14 @@ export default defineComponent({ } }; - - - - return { state, v$, submitForm, loginError } } + + }) + + + From 6ad0071d70f5fe0184ae7a161e9f6e5fb96c083e Mon Sep 17 00:00:00 2001 From: EvanMlj <120018761+EvanMlj@users.noreply.github.com> Date: Wed, 8 Nov 2023 16:23:41 +0100 Subject: [PATCH 05/44] :construction: Contact Card contact Card now display the contact image or initial usings the methods from contact Page get AvatarColor, get Initials and getBase64Image --- src/components/ContactCard.vue | 29 +++++++++++++++++++++++++---- src/components/ContactPreview.vue | 25 +++++++++++++++++++++++++ src/pages/contact/ContactPage.vue | 8 ++++---- 3 files changed, 54 insertions(+), 8 deletions(-) create mode 100644 src/components/ContactPreview.vue diff --git a/src/components/ContactCard.vue b/src/components/ContactCard.vue index 01b6ac2..2508d92 100644 --- a/src/components/ContactCard.vue +++ b/src/components/ContactCard.vue @@ -8,11 +8,14 @@

{{ contact.phone }}

{{ contact.email }}

--> - + - + contact picture + + {{ getInitials(contact.name) }} + @@ -43,9 +46,10 @@ + ]" + rounded + label-class="q-btn-toggle-label-custom"/> @@ -58,6 +62,23 @@ export default { type: Object, required: true } + }, + methods: { + getBase64Image(contact) { + return contact.image_1920 ? `data:image/png;base64,${contact.image_1920}` : null; + }, + getAvatarColor(name) { + const hash = [...name].reduce((acc, char) => char.charCodeAt(0) + ((acc << 5) - acc), 0); + + return colors[Math.abs(hash % colors.length)]; + }, + getInitials(name) { + return name.charAt(0).toUpperCase(); + } + } } + + + diff --git a/src/components/ContactPreview.vue b/src/components/ContactPreview.vue new file mode 100644 index 0000000..5d6c324 --- /dev/null +++ b/src/components/ContactPreview.vue @@ -0,0 +1,25 @@ + + + \ No newline at end of file diff --git a/src/pages/contact/ContactPage.vue b/src/pages/contact/ContactPage.vue index e5be8b6..1ea0b5a 100644 --- a/src/pages/contact/ContactPage.vue +++ b/src/pages/contact/ContactPage.vue @@ -75,6 +75,7 @@ import axios from 'axios' import { defineComponent, reactive, onMounted, ref, computed } from "vue"; import { Notify, getCssVar } from 'quasar' +// import ContactPreview from '../../components/ContactPreview.vue'; import ContactCard from '../../components/ContactCard.vue'; @@ -84,7 +85,8 @@ export default defineComponent({ name: 'ContactPage', components: { - ContactCard + ContactCard, + // ContactPreview, }, setup() { const state = reactive({ @@ -93,7 +95,6 @@ export default defineComponent({ myId: '2', rows: [], searchTerm: '', - }) const addNewContactDialog = ref(false); const dialogVisible = ref(false); @@ -167,8 +168,6 @@ const getBorderColor = (name) => { return name.charAt(0).toUpperCase(); } - - const filteredContacts = computed(() => { if (!state.searchTerm) { return state.rows; @@ -254,6 +253,7 @@ const filteredContacts = computed(() => { selectedContact, showContactCard, ContactCard, + // ContactPeview, getBorderColor, filteredContacts From f4683941770e2e897be61805a20478714a4f19d2 Mon Sep 17 00:00:00 2001 From: EvanMlj <120018761+EvanMlj@users.noreply.github.com> Date: Thu, 9 Nov 2023 11:41:27 +0100 Subject: [PATCH 06/44] :heavy_plus_sign: Add sass Changes of files quasar.config.js package.json and update of stylesheet to import sass syntax to the project --- package.json | 6 +- quasar.config.js | 2 +- src/components/ContactCard.vue | 2 +- src/css/app.css | 5 - src/css/app.sass | 4 - src/css/app.scss | 5 + src/css/quasar.variables.sass | 188 --------------------------------- src/css/quasar.variables.scss | 179 +++++++++++++++++++++++++++++++ 8 files changed, 188 insertions(+), 203 deletions(-) delete mode 100644 src/css/app.css delete mode 100644 src/css/app.sass create mode 100644 src/css/app.scss delete mode 100644 src/css/quasar.variables.sass create mode 100644 src/css/quasar.variables.scss diff --git a/package.json b/package.json index 96d1344..9204785 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "private": true, "scripts": { "lint": "eslint --ext .js,.vue ./", - "format": "prettier --write \"**/*.{js,vue,css,html,md,json}\" --ignore-path .gitignore", + "format": "prettier --write \"**/*.{js,vue,scss,html,md,json}\" --ignore-path .gitignore", "test": "echo \"No test specified\" && exit 0", "dev": "quasar dev", "build": "quasar build" @@ -30,9 +30,7 @@ "eslint-config-prettier": "^8.1.0", "eslint-plugin-vue": "^9.0.0", "postcss": "^8.4.14", - "prettier": "^2.5.1", - "sass": "^1.69.5", - "sass-loader": "^13.3.2" + "prettier": "^2.5.1" }, "engines": { "node": "^18 || ^16 || ^14.19", diff --git a/quasar.config.js b/quasar.config.js index 7bbe9d8..7d9ab3e 100644 --- a/quasar.config.js +++ b/quasar.config.js @@ -30,7 +30,7 @@ module.exports = configure(function (/* ctx */) { boot: ["pinia"], // https://v2.quasar.dev/quasar-cli-vite/quasar-config-js#css - css: ["app.css"], + css: ["app.scss"], // https://github.com/quasarframework/quasar/tree/dev/extras extras: [ diff --git a/src/components/ContactCard.vue b/src/components/ContactCard.vue index 2508d92..0eedb5e 100644 --- a/src/components/ContactCard.vue +++ b/src/components/ContactCard.vue @@ -45,7 +45,7 @@ Date: Thu, 9 Nov 2023 17:06:23 +0100 Subject: [PATCH 07/44] :construction: Custom clientCard component --- src/components/ContactCard.vue | 5 +++-- src/css/app.scss | 23 ++++++++++++++++++++++- src/layouts/LoginLayout.vue | 2 +- src/layouts/MainLayout.vue | 9 +++++++++ src/pages/contact/ContactPage.vue | 2 +- 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/components/ContactCard.vue b/src/components/ContactCard.vue index 0eedb5e..dde36d2 100644 --- a/src/components/ContactCard.vue +++ b/src/components/ContactCard.vue @@ -22,8 +22,9 @@ {{ contact.name || "Name not specified" }} - {{ contact.email || "Email not specified" }}, {{ contact.phone || "Phone not specified" }} + {{ contact.email || "Email not specified" }}, {{ contact.phone || "Phone not specified" }} + @@ -31,7 +32,7 @@ - {{ contact.city || "City not specified" }}, {{ contact.zip || "ZIP code not specified" }} + {{ contact.city || "City not specified" }}, {{ contact.zip || "ZIP code not specified" }}, {{ contact.function || "job not specified" }} diff --git a/src/css/app.scss b/src/css/app.scss index d2400d6..08abcc8 100644 --- a/src/css/app.scss +++ b/src/css/app.scss @@ -1,5 +1,26 @@ -@import "quasar.variables"; +@import "quasar.variables"; .body.body--dark { background: $color-background-dark; +} + +.small-screen-only { + @media (max-width: $breakpoint-xs-max) { + display: block + } + @media (max-width: $breakpoint-sm-min) { + display: none + } + +} +.large-screen-only { + @media (max-width: $breakpoint-xs-max) { + display: block + } + @media (max-width: $breakpoint-sm-min) { + display: none + } } + + + diff --git a/src/layouts/LoginLayout.vue b/src/layouts/LoginLayout.vue index 9541be4..ded8964 100644 --- a/src/layouts/LoginLayout.vue +++ b/src/layouts/LoginLayout.vue @@ -1,6 +1,6 @@