diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..5a23aa6a --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +/node_modules/* diff --git a/.env.example b/.env.example index d4bd3fab..db5f1317 100644 --- a/.env.example +++ b/.env.example @@ -1,31 +1,26 @@ -FEATURE_CREDIT= -FEATURE_SUBSCRIPTION=1 -FEATURE_AUTHORIZATION=1 +NUXT_APP_CDN_URL= -AUTH_MAX_AGE="2592000" -AUTH_SECRET= +NUXT_APP_FEEDBACK_URL= +NUXT_APP_SUPPORT_URL= + +NUXT_PUBLIC_API_BASE_URL="https://thecodeorigin-nuxt.vercel.app" +NUXT_PUBLIC_APP_BASE_URL="https://thecodeorigin-nuxt.vercel.app" +NUXT_PUBLIC_APP_NAME="nuxt-template" AWS_CLOUDFRONT_DOMAIN= + AWS_S3_ACCESS_KEY= AWS_S3_BUCKET="nuxt-template" AWS_S3_REGION= AWS_S3_SECRET_ACCESS_KEY= -DOPPLER_CONFIG="dev_personal" -DOPPLER_ENVIRONMENT="dev" -DOPPLER_PROJECT="nuxt-template" - -FACEBOOK_CLIENT_ID= -FACEBOOK_CLIENT_SECRET= +FEATURE_AUTHORIZATION="1" +FEATURE_CREDIT="1" +FEATURE_SUBSCRIPTION="1" FIREBASE_API_KEY= FIREBASE_APP_ID= -FIREBASE_AUTH_DOMAIN= -FIREBASE_AUTH_PROVIDER_X509_CERT_URL="https://www.googleapis.com/oauth2/v1/certs" -FIREBASE_AUTH_URI="https://accounts.google.com/o/oauth2/auth" -FIREBASE_CLIENT_EMAIL= FIREBASE_CLIENT_ID= -FIREBASE_CLIENT_X509_CERT_URL= FIREBASE_DB_URL= FIREBASE_KEY_PAIR= FIREBASE_MEASUREMENT_ID= @@ -33,30 +28,19 @@ FIREBASE_MESSAGING_SENDER_ID= FIREBASE_PRIVATE_KEY= FIREBASE_PRIVATE_KEY_ID= FIREBASE_PROJECT_ID= -FIREBASE_STORAGE_BUCKET= -FIREBASE_TOKEN_URI="https://oauth2.googleapis.com/token" -FIREBASE_TYPE="service_account" -FIREBASE_UNIVERSE_DOMAIN="googleapis.com" -GITHUB_CLIENT_ID= -GITHUB_CLIENT_SECRET= -GITHUB_TOKEN= +LOGTO_APP_ID= +LOGTO_APP_SECRET= +LOGTO_COOKIE_ENCRYPTION_KEY= +LOGTO_ENDPOINT="" -GOOGLE_CLIENT_ID= -GOOGLE_CLIENT_SECRET= +LOGTO_ADMIN_APP_ID="" +LOGTO_ADMIN_APP_SECRET="" MONGODB_COLLECTION_NAME="nuxt-template-cache" -MONGODB_CONNECTION_STRING= +MONGODB_CONNECTION_STRING="mongodb://root:password@localhost:27017/nuxt-template?authSource=admin" MONGODB_DATABASE_NAME="nuxt-template" -NODE_AUTH_TOKEN= - -NUXT_PUBLIC_API_BASE_URL="/api" -NUXT_PUBLIC_APP_BASE_URL="http://localhost:3000" -NUXT_PUBLIC_APP_NAME="nuxt-template" -NUXT_PUBLIC_THEME_PRIMARY_COLOR="#e87f23" -NUXT_PUBLIC_THEME_PRIMARY_DARKEN_COLOR="#d97721" - POSTGRES_DB="postgres" POSTGRES_HOST="localhost" POSTGRES_HOSTNAME="nuxt-pg" @@ -64,12 +48,12 @@ POSTGRES_PASSWORD="postgres" POSTGRES_PORT="54321" POSTGRES_USER="postgres" -REDIS_HOST= -REDIS_PASSWORD= -REDIS_PORT="14381" +REDIS_HOST="localhost" +REDIS_PASSWORD="secret" +REDIS_PORT="6379" REDIS_USER="default" -SMTP_FROM="noreply@example.com" +SMTP_FROM="noreply@thecodeorigin.com" SMTP_PASS="" SMTP_PORT="1025" SMTP_SERVER="localhost" @@ -81,4 +65,15 @@ STRIPE_PRODUCT_LOOKUP_KEY= STRIPE_PUBLISHABLE_KEY= STRIPE_SECRET_KEY= STRIPE_WEBHOOK_SECRET= -HOTJAR_ID= + +VERCEL_ORG_ID= +VERCEL_PROJECT_ID= +VERCEL_TOKEN= + +VNPAY_DISABLE_TEST_MODE= +VNPAY_HASHSECRET= +VNPAY_TMNCODE= + +PAYOS_CLIENT_ID= +PAYOS_API_KEY= +PAYOS_CHECKSUM_KEY= diff --git a/.github/workflows/deploy-next.yml b/.github/workflows/deploy-next.yml new file mode 100644 index 00000000..4f616dec --- /dev/null +++ b/.github/workflows/deploy-next.yml @@ -0,0 +1,51 @@ +name: Vercel Preview Deployment +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + +on: + push: + branches: + - next + +jobs: + Deploy-Next: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Corepack + shell: bash + run: corepack enable + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - name: Install dependencies + run: pnpm install + + - name: Link Vercel Project + run: npx vercel link --yes --scope=${{ secrets.VERCEL_ORG_ID }} --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} + + - name: Pull Vercel Environment Information + run: npx vercel env pull .env --yes --environment=preview --git-branch=next --token=${{ secrets.VERCEL_TOKEN }} + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY }} + aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_S3_REGION }} + + - name: Build Project Artifacts + run: npx vercel build --yes --token=${{ secrets.VERCEL_TOKEN }} + + - name: Upload assets to S3 + run: aws s3 sync ./.vercel/output/static s3://${{ secrets.AWS_S3_BUCKET }}/assets --delete + + - name: Deploy Project Artifacts to Vercel + run: npx vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 00000000..7ea9ec47 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,50 @@ +name: Vercel Production Deployment +env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} + VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} +on: + push: + branches: + - main +jobs: + Deploy-Preview: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Corepack + shell: bash + run: corepack enable + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + registry-url: 'https://npm.pkg.github.com' + scope: '@thecodeorigin' + + - name: Install dependencies + run: pnpm install + + - name: Link Vercel Project + run: npx vercel link --yes --scope=${{ secrets.VERCEL_ORG_ID }} --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} + + - name: Pull Vercel Environment Information + run: npx vercel pull .env --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }} + + - name: Configure AWS Credentials + uses: aws-actions/configure-aws-credentials@v4 + with: + aws-access-key-id: ${{ secrets.AWS_S3_ACCESS_KEY }} + aws-secret-access-key: ${{ secrets.AWS_S3_SECRET_ACCESS_KEY }} + aws-region: ${{ secrets.AWS_S3_REGION }} + + - name: Build Project Artifacts + run: npx vercel build --yes --prod --token=${{ secrets.VERCEL_TOKEN }} + + - name: Upload assets to S3 + run: aws s3 sync ./.vercel/output/static s3://${{ secrets.AWS_S3_BUCKET }}/assets --delete + + - name: Deploy Project Artifacts to Vercel + run: npx vercel deploy --prebuilt --prod --token=${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml deleted file mode 100644 index 5704a2e2..00000000 --- a/.github/workflows/release.yml +++ /dev/null @@ -1,39 +0,0 @@ -name: Release to GitHub Packages - -on: - push: - branches: - - main - -env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} - -jobs: - release: - permissions: - contents: write - packages: write - runs-on: ubuntu-latest - - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Corepack - shell: bash - run: corepack enable - - - uses: actions/setup-node@v4 - with: - node-version: 20 - cache: 'pnpm' - registry-url: "https://npm.pkg.github.com" - scope: "@thecodeorigin" - - - name: Install dependencies - run: pnpm install - - - name: Publish to GitHub Packages - run: pnpm -r publish --publish-branch main --access public - diff --git a/.gitignore b/.gitignore index d401338a..1c00bdc1 100644 --- a/.gitignore +++ b/.gitignore @@ -28,7 +28,7 @@ logs # Editor directories and files .vscode/* !.vscode/extensions.json -!.vscode/settings.json +!.vscode/app/settings.json !.vscode/*.code-snippets !.vscode/tours .idea @@ -53,12 +53,11 @@ public/mockServiceWorker.js # Ignore the build directory public/firebase-config.json -docker/postgres -docker/pgadmin - -server/db/schemas/cjs -server/db/schemas/mjs +docker/* +!docker/.gitkeep server/db/migrations areas + +.nx diff --git a/.npmignore b/.npmignore index 0f114ca5..f7845514 100644 --- a/.npmignore +++ b/.npmignore @@ -28,7 +28,7 @@ logs # Editor directories and files .vscode/* !.vscode/extensions.json -!.vscode/settings.json +!.vscode/app/settings.json !.vscode/*.code-snippets !.vscode/tours .idea @@ -55,5 +55,8 @@ public/firebase-config.json docker/postgres docker/pgadmin +docker/redis areas + +drizzle.config.ts diff --git a/.npmrc b/.npmrc index 66fe15f8..221a2fe7 100644 --- a/.npmrc +++ b/.npmrc @@ -1,4 +1,3 @@ -@thecodeorigin:registry=https://npm.pkg.github.com/ auto-install-peers=true shamefully-hoist=true package-manager-strict=false diff --git a/.stylelintrc.json b/.stylelintrc.json index 815fe5d8..63f626e3 100644 --- a/.stylelintrc.json +++ b/.stylelintrc.json @@ -7,20 +7,6 @@ "plugins": [ "@stylistic/stylelint-plugin" ], - "overrides": [ - { - "files": [ - "**/*.scss" - ], - "customSyntax": "postcss-scss" - }, - { - "files": [ - "**/*.vue" - ], - "customSyntax": "postcss-html" - } - ], "rules": { "@stylistic/max-line-length": [ 220, diff --git a/.vscode/settings.json b/.vscode/settings.json index 918970ce..231e6df1 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -48,7 +48,6 @@ "stylelint", "touchless", "triggerer", - "vuetify", "nuxt" ], "commentAnchors.tags.anchors": { diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..aa75f992 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,48 @@ +# Dockerfile +# Production-grade Dockerfile for Nuxt 3 with PNPM and Node 22 Alpine, multi-stage build +# --- Stage 1: Base Image Setup --- +FROM node:22-alpine AS base + +# Set working directory +WORKDIR /app + +# --- Stage 2: Dependencies Installation --- +FROM base AS builder + +# Install pnpm globally +RUN npm install -g pnpm@latest + +COPY patches ./ +COPY scripts/ ./scripts +COPY .npmrc ./ +COPY .nuxtignore ./ +COPY package*.json ./ +COPY pnpm-*.yaml ./ +COPY *.config.ts ./ +COPY tsconfig.json ./ +COPY public/ ./public +COPY . . + +# Install dependencies +RUN pnpm install +RUN NODE_OPTIONS="--max-old-space-size=4096" pnpm build + +FROM node:22-alpine AS production + +# Set working directory +WORKDIR /app + +RUN apk add --no-cache curl + +# Copy the .output directory from the builder stage +COPY --from=builder /app/.output ./.output + +COPY --from=builder /app/.env ./.env + +ENV NITRO_HOST=0.0.0.0 +ENV NITRO_PORT=3000 + +EXPOSE 3000 + +# Command to run the Nuxt application +CMD ["node", ".output/server/index.mjs"] diff --git a/README.md b/README.md index 63ff1d8c..4e92244a 100644 --- a/README.md +++ b/README.md @@ -3,12 +3,16 @@ [![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) +> **Note:** This template is for development purposes only. It is not recommended to use this template in production without purchasing Nuxt UI Pro. You can purchase it [here](https://ui.nuxt.com/pro/pricing) + +> The first version of the template using Nuxt Materialize theme will be kept permanently free and open-source. + Nuxt 3 template is a opinionated template for Nuxt 3 project. It includes the following features: -- [UnoCSS](https://unocss.com) for utility-first CSS -- [Vuetify](https://vuetifyjs.com) for component library +- [Tailwindcss](https://tailwindcss.com/) for utility-first CSS +- [Nuxt UI](https://ui.nuxt.com/) for component library - [Nuxt i18n](https://i18n.nuxtjs.org) for internationalization -- [Nuxt Auth](https://auth.sidebase.io) for authentication +- [LogTo](https://logto.io/) for user management and authentication - [Drizzle ORM](https://orm.drizzle.team) for Database communication - [CASL](https://casl.js.org) for Access Control - [Firebase Notification](https://firebase.google.com) for push notification @@ -52,12 +56,8 @@ You can use a remote database and fill in all the environment variables in the ` pnpm db:start pnpm db:migrate - -pnpm db:seed ``` -> Please checkout the `server/db/seeds` folder to review all the seed data, especially the `users.seed.ts` file to get the default user credentials. - You can stop or reset the database with the following commands: ```bash diff --git a/app/@core/components/AppBarSearch.vue b/app/@core/components/AppBarSearch.vue deleted file mode 100644 index 0994fb17..00000000 --- a/app/@core/components/AppBarSearch.vue +++ /dev/null @@ -1,279 +0,0 @@ - - - - - - - diff --git a/app/@core/components/AppDrawerHeaderSection.vue b/app/@core/components/AppDrawerHeaderSection.vue deleted file mode 100644 index 2b7174d8..00000000 --- a/app/@core/components/AppDrawerHeaderSection.vue +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/app/@core/components/AppStepper.vue b/app/@core/components/AppStepper.vue deleted file mode 100644 index 42a05aa9..00000000 --- a/app/@core/components/AppStepper.vue +++ /dev/null @@ -1,404 +0,0 @@ - - - - - diff --git a/app/@core/components/BuyNow.vue b/app/@core/components/BuyNow.vue deleted file mode 100644 index 328ebbc0..00000000 --- a/app/@core/components/BuyNow.vue +++ /dev/null @@ -1,87 +0,0 @@ - - - - - diff --git a/app/@core/components/CustomizerSection.vue b/app/@core/components/CustomizerSection.vue deleted file mode 100644 index 58f9bede..00000000 --- a/app/@core/components/CustomizerSection.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/app/@core/components/DialogCloseBtn.vue b/app/@core/components/DialogCloseBtn.vue deleted file mode 100644 index 2b615b61..00000000 --- a/app/@core/components/DialogCloseBtn.vue +++ /dev/null @@ -1,20 +0,0 @@ - - - diff --git a/app/@core/components/DropZone.vue b/app/@core/components/DropZone.vue deleted file mode 100644 index 57ab17b9..00000000 --- a/app/@core/components/DropZone.vue +++ /dev/null @@ -1,134 +0,0 @@ - - - - - diff --git a/app/@core/components/MoreBtn.vue b/app/@core/components/MoreBtn.vue deleted file mode 100644 index 3dbfd398..00000000 --- a/app/@core/components/MoreBtn.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/app/@core/components/NavBarI18n.vue b/app/@core/components/NavBarI18n.vue deleted file mode 100644 index 2fc26902..00000000 --- a/app/@core/components/NavBarI18n.vue +++ /dev/null @@ -1,46 +0,0 @@ - - - diff --git a/app/@core/components/ScrollToTop.vue b/app/@core/components/ScrollToTop.vue deleted file mode 100644 index 1ea1b06a..00000000 --- a/app/@core/components/ScrollToTop.vue +++ /dev/null @@ -1,40 +0,0 @@ - - - - - diff --git a/app/@core/components/Shortcuts.vue b/app/@core/components/Shortcuts.vue deleted file mode 100644 index e6338203..00000000 --- a/app/@core/components/Shortcuts.vue +++ /dev/null @@ -1,131 +0,0 @@ - - - - - diff --git a/app/@core/components/TheCustomizer.vue b/app/@core/components/TheCustomizer.vue deleted file mode 100644 index 63445871..00000000 --- a/app/@core/components/TheCustomizer.vue +++ /dev/null @@ -1,646 +0,0 @@ - - - - - diff --git a/app/@core/components/ThemeSwitcher.vue b/app/@core/components/ThemeSwitcher.vue deleted file mode 100644 index fa146caa..00000000 --- a/app/@core/components/ThemeSwitcher.vue +++ /dev/null @@ -1,62 +0,0 @@ - - - diff --git a/app/@core/components/TiptapEditor.vue b/app/@core/components/TiptapEditor.vue deleted file mode 100644 index 3a196070..00000000 --- a/app/@core/components/TiptapEditor.vue +++ /dev/null @@ -1,163 +0,0 @@ - - - - - - - diff --git a/app/@core/components/app-form-elements/AppDateTimePicker.vue b/app/@core/components/app-form-elements/AppDateTimePicker.vue deleted file mode 100644 index dafcf051..00000000 --- a/app/@core/components/app-form-elements/AppDateTimePicker.vue +++ /dev/null @@ -1,471 +0,0 @@ - - - - - diff --git a/app/@core/components/app-form-elements/CustomCheckboxes.client.vue b/app/@core/components/app-form-elements/CustomCheckboxes.client.vue deleted file mode 100644 index 61e975be..00000000 --- a/app/@core/components/app-form-elements/CustomCheckboxes.client.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/app/@core/components/app-form-elements/CustomCheckboxesWithIcon.client.vue b/app/@core/components/app-form-elements/CustomCheckboxesWithIcon.client.vue deleted file mode 100644 index 9a272363..00000000 --- a/app/@core/components/app-form-elements/CustomCheckboxesWithIcon.client.vue +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - diff --git a/app/@core/components/app-form-elements/CustomCheckboxesWithImage.client.vue b/app/@core/components/app-form-elements/CustomCheckboxesWithImage.client.vue deleted file mode 100644 index 51a67a05..00000000 --- a/app/@core/components/app-form-elements/CustomCheckboxesWithImage.client.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - diff --git a/app/@core/components/app-form-elements/CustomRadios.client.vue b/app/@core/components/app-form-elements/CustomRadios.client.vue deleted file mode 100644 index 686d7640..00000000 --- a/app/@core/components/app-form-elements/CustomRadios.client.vue +++ /dev/null @@ -1,79 +0,0 @@ - - - - - diff --git a/app/@core/components/app-form-elements/CustomRadiosWithIcon.client.vue b/app/@core/components/app-form-elements/CustomRadiosWithIcon.client.vue deleted file mode 100644 index 687b5324..00000000 --- a/app/@core/components/app-form-elements/CustomRadiosWithIcon.client.vue +++ /dev/null @@ -1,91 +0,0 @@ - - - - - - - diff --git a/app/@core/components/app-form-elements/CustomRadiosWithImage.client.vue b/app/@core/components/app-form-elements/CustomRadiosWithImage.client.vue deleted file mode 100644 index 352435af..00000000 --- a/app/@core/components/app-form-elements/CustomRadiosWithImage.client.vue +++ /dev/null @@ -1,101 +0,0 @@ - - - - - diff --git a/app/@core/components/cards/AppCardActions.vue b/app/@core/components/cards/AppCardActions.vue deleted file mode 100644 index 8552dd77..00000000 --- a/app/@core/components/cards/AppCardActions.vue +++ /dev/null @@ -1,170 +0,0 @@ - - - - - diff --git a/app/@core/components/cards/CardStatisticsHorizontal.vue b/app/@core/components/cards/CardStatisticsHorizontal.vue deleted file mode 100644 index 33db6c4f..00000000 --- a/app/@core/components/cards/CardStatisticsHorizontal.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - diff --git a/app/@core/components/cards/CardStatisticsVertical.vue b/app/@core/components/cards/CardStatisticsVertical.vue deleted file mode 100644 index 134dd5f0..00000000 --- a/app/@core/components/cards/CardStatisticsVertical.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - diff --git a/app/@core/components/cards/CardStatisticsWithIcon.vue b/app/@core/components/cards/CardStatisticsWithIcon.vue deleted file mode 100644 index 4eeb0aad..00000000 --- a/app/@core/components/cards/CardStatisticsWithIcon.vue +++ /dev/null @@ -1,47 +0,0 @@ - - - diff --git a/app/@core/components/cards/CardStatisticsWithImages.vue b/app/@core/components/cards/CardStatisticsWithImages.vue deleted file mode 100644 index 228b34bb..00000000 --- a/app/@core/components/cards/CardStatisticsWithImages.vue +++ /dev/null @@ -1,64 +0,0 @@ - - - - - diff --git a/app/@core/composable/useGenerateImageVariant.ts b/app/@core/composable/useGenerateImageVariant.ts deleted file mode 100644 index f91221d5..00000000 --- a/app/@core/composable/useGenerateImageVariant.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { useTheme } from 'vuetify' -import { useConfigStore } from '@base/@core/stores/config' - -// composable function to return the image variant as per the current theme and skin -export function useGenerateImageVariant(imgLight: string, imgDark: string, imgLightBordered?: string, imgDarkBordered?: string, bordered = false) { - const configStore = useConfigStore() - const { global } = useTheme() - - return computed(() => { - if (global.name.value === 'light') { - if (configStore.skin === 'bordered' && bordered) - return imgLightBordered - - else - return imgLight - } - if (global.name.value === 'dark') { - if (configStore.skin === 'bordered' && bordered) - return imgDarkBordered - - else - return imgDark - } - - // Add a default return statement - return imgLight - }) -} diff --git a/app/@core/composable/useResponsiveSidebar.ts b/app/@core/composable/useResponsiveSidebar.ts deleted file mode 100644 index 7a409a42..00000000 --- a/app/@core/composable/useResponsiveSidebar.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { Ref } from 'vue' -import { useDisplay } from 'vuetify' - -export function useResponsiveLeftSidebar(mobileBreakpoint: Ref | undefined = undefined) { - const { mdAndDown, name: currentBreakpoint } = useDisplay() - - const _mobileBreakpoint = mobileBreakpoint || mdAndDown - - const isLeftSidebarOpen = ref(true) - - const setInitialValue = () => { - isLeftSidebarOpen.value = !_mobileBreakpoint.value - } - - // Set the initial value of sidebar - setInitialValue() - - watch( - currentBreakpoint, - () => { - // Reset left sidebar - isLeftSidebarOpen.value = !_mobileBreakpoint.value - }, - ) - - return { - isLeftSidebarOpen, - } -} diff --git a/app/@core/composable/useSkins.ts b/app/@core/composable/useSkins.ts deleted file mode 100644 index cba2aac7..00000000 --- a/app/@core/composable/useSkins.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { VThemeProvider } from 'vuetify/components/VThemeProvider' -import { useConfigStore } from '@base/@core/stores/config' -import { AppContentLayoutNav } from '@base/@layouts/enums' - -// TODO: Use `VThemeProvider` from dist instead of lib (Using this component from dist causes navbar to loose sticky positioning) - -export function useSkins() { - const configStore = useConfigStore() - - const layoutAttrs = computed(() => ({ - verticalNavAttrs: { - wrapper: h(VThemeProvider, { tag: 'div' }), - wrapperProps: { - withBackground: true, - theme: (configStore.isVerticalNavSemiDark && configStore.appContentLayoutNav === AppContentLayoutNav.Vertical) - ? 'dark' - : undefined, - }, - }, - })) - - const injectSkinClasses = () => { - if (typeof document !== 'undefined') { - const bodyClasses = document.body.classList - const genSkinClass = (_skin?: string) => `skin--${_skin}` - - watch( - () => configStore.skin, - (val, oldVal) => { - bodyClasses.remove(genSkinClass(oldVal)) - bodyClasses.add(genSkinClass(val)) - }, - { immediate: true }, - ) - } - } - - return { - injectSkinClasses, - layoutAttrs, - } -} diff --git a/app/@core/enums.ts b/app/@core/enums.ts deleted file mode 100644 index bd3674b9..00000000 --- a/app/@core/enums.ts +++ /dev/null @@ -1,21 +0,0 @@ -export const Skins = { - Default: 'default', - Bordered: 'bordered', -} as const - -export const Theme = { - Light: 'light', - Dark: 'dark', - System: 'system', -} as const - -export const Layout = { - Vertical: 'vertical', - Horizontal: 'horizontal', - Collapsed: 'collapsed', -} as const - -export const Direction = { - Ltr: 'ltr', - Rtl: 'rtl', -} as const diff --git a/app/@core/index.ts b/app/@core/index.ts deleted file mode 100644 index 06f59581..00000000 --- a/app/@core/index.ts +++ /dev/null @@ -1,38 +0,0 @@ -import type { LayoutConfig } from '@base/@layouts/types' -import type { UserThemeConfig } from './types' - -export function defineThemeConfig(userConfig: UserThemeConfig): { themeConfig: UserThemeConfig, layoutConfig: LayoutConfig } { - return { - themeConfig: userConfig, - layoutConfig: { - app: { - contentWidth: userConfig.app.contentWidth, - contentLayoutNav: userConfig.app.contentLayoutNav, - overlayNavFromBreakpoint: userConfig.app.overlayNavFromBreakpoint, - iconRenderer: userConfig.app.iconRenderer, - }, - navbar: { - type: userConfig.navbar.type, - navbarBlur: userConfig.navbar.navbarBlur, - }, - footer: { type: userConfig.footer.type }, - verticalNav: { - isVerticalNavCollapsed: userConfig.verticalNav.isVerticalNavCollapsed, - defaultNavItemIconProps: userConfig.verticalNav.defaultNavItemIconProps, - }, - horizontalNav: { - type: userConfig.horizontalNav.type, - transition: userConfig.horizontalNav.transition, - popoverOffset: userConfig.horizontalNav.popoverOffset, - }, - icons: { - chevronDown: userConfig.icons.chevronDown, - chevronRight: userConfig.icons.chevronRight, - close: userConfig.icons.close, - verticalNavPinned: userConfig.icons.verticalNavPinned, - verticalNavUnPinned: userConfig.icons.verticalNavUnPinned, - sectionTitlePlaceholder: userConfig.icons.sectionTitlePlaceholder, - }, - }, - } -} diff --git a/app/@core/initCore.ts b/app/@core/initCore.ts deleted file mode 100644 index 6f9c57f1..00000000 --- a/app/@core/initCore.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { useStorage } from '@vueuse/core' -import { useTheme } from 'vuetify' -import { useConfigStore } from '@base/@core/stores/config' -import { namespaceConfig } from '@base/@layouts/stores/config' - -function _syncAppRtl() { - const configStore = useConfigStore() - - const { locale, localeProperties } = useI18n({ useScope: 'global' }) - - // watch and change lang attribute of html on language change - watch( - locale, - (val) => { - // Update lang attribute of html tag - if (typeof document !== 'undefined') - document.documentElement.setAttribute('lang', val as string) - - configStore.isAppRTL = localeProperties.value.dir === 'rtl' - }, - { immediate: true }, - ) -} - -function _handleSkinChanges() { - const { themes } = useTheme() - const configStore = useConfigStore() - - // Create skin default color so that we can revert back to original (default skin) color when switch to default skin from bordered skin - Object.values(themes.value).forEach((t) => { - t.colors['skin-default-background'] = t.colors.background - t.colors['skin-default-surface'] = t.colors.surface - }) - - watch( - () => configStore.skin, - (val) => { - Object.values(themes.value).forEach((t) => { - t.colors.background = t.colors[`skin-${val}-background`]! - t.colors.surface = t.colors[`skin-${val}-surface`]! - }) - }, - { immediate: true }, - ) -} - -/* - â„šī¸ Set current theme's surface color in localStorage - - Why? Because when initial loader is shown (before vue is ready) we need to what's the current theme's surface color. - We will use color stored in localStorage to set the initial loader's background color. - - With this we will be able to show correct background color for the initial loader even before vue identify the current theme. - */ -function _syncInitialLoaderTheme() { - const vuetifyTheme = useTheme() - - watch( - () => useConfigStore().theme, - () => { - // â„šī¸ We are not using theme.current.colors.surface because watcher is independent and when this watcher is ran `theme` computed is not updated - useStorage(namespaceConfig('initial-loader-bg'), null).value = vuetifyTheme.current.value.colors.surface - useStorage(namespaceConfig('initial-loader-color'), null).value = vuetifyTheme.current.value.colors.primary - }, - { immediate: true }, - ) -} - -function initCore() { - _syncInitialLoaderTheme() - _handleSkinChanges() - - _syncAppRtl() -} - -export default initCore diff --git a/app/@core/libs/apex-chart/apexCharConfig.ts b/app/@core/libs/apex-chart/apexCharConfig.ts deleted file mode 100644 index 967ae121..00000000 --- a/app/@core/libs/apex-chart/apexCharConfig.ts +++ /dev/null @@ -1,701 +0,0 @@ -import type { ThemeInstance } from 'vuetify' -import { hexToRgb } from '@base/@core/utils/colorConverter' - -// 👉 Colors variables -function colorVariables(themeColors: ThemeInstance['themes']['value']['colors']) { - const themeSecondaryTextColor = `rgba(${hexToRgb(themeColors.colors['on-surface'])},${themeColors.variables['medium-emphasis-opacity']})` - const themeDisabledTextColor = `rgba(${hexToRgb(themeColors.colors['on-surface'])},${themeColors.variables['disabled-opacity']})` - const themeBorderColor = `rgba(${hexToRgb(String(themeColors.variables['border-color']))},${themeColors.variables['border-opacity']})` - const themePrimaryTextColor = `rgba(${hexToRgb(themeColors.colors['on-surface'])},${themeColors.variables['high-emphasis-opacity']})` - - return { themeSecondaryTextColor, themeDisabledTextColor, themeBorderColor, themePrimaryTextColor } -} - -export function getScatterChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const scatterColors = { - series1: '#ff9f43', - series2: '#7367f0', - series3: '#28c76f', - } - - const { themeSecondaryTextColor, themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - zoom: { - type: 'xy', - enabled: true, - }, - }, - legend: { - position: 'top', - horizontalAlign: 'left', - markers: { offsetX: -3 }, - - labels: { colors: themeSecondaryTextColor }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - colors: [scatterColors.series1, scatterColors.series2, scatterColors.series3], - grid: { - borderColor: themeBorderColor, - xaxis: { - lines: { show: true }, - }, - }, - yaxis: { - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - tickAmount: 10, - axisBorder: { show: false }, - - axisTicks: { color: themeBorderColor }, - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - formatter: (val: string) => Number.parseFloat(val).toFixed(1), - }, - }, - } -} -export function getLineChartSimpleConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - zoom: { enabled: false }, - toolbar: { show: false }, - }, - colors: ['#ff9f43'], - stroke: { curve: 'straight' }, - dataLabels: { enabled: false }, - markers: { - strokeWidth: 7, - strokeOpacity: 1, - colors: ['#ff9f43'], - strokeColors: ['#fff'], - }, - grid: { - padding: { top: -10 }, - - borderColor: themeBorderColor, - xaxis: { - lines: { show: true }, - }, - }, - tooltip: { - custom(data: any) { - return `
- ${data.series[data.seriesIndex][data.dataPointIndex]}% -
` - }, - }, - yaxis: { - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - axisBorder: { show: false }, - - axisTicks: { color: themeBorderColor }, - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - }, - categories: [ - '7/12', - '8/12', - '9/12', - '10/12', - '11/12', - '12/12', - '13/12', - '14/12', - '15/12', - '16/12', - '17/12', - '18/12', - '19/12', - '20/12', - '21/12', - ], - }, - } -} - -export function getBarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - }, - colors: ['#00cfe8'], - dataLabels: { enabled: false }, - plotOptions: { - bar: { - borderRadius: 8, - barHeight: '30%', - horizontal: true, - }, - }, - grid: { - borderColor: themeBorderColor, - xaxis: { - lines: { show: false }, - }, - padding: { - top: -10, - }, - }, - yaxis: { - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - axisBorder: { show: false }, - axisTicks: { color: themeBorderColor }, - categories: ['MON, 11', 'THU, 14', 'FRI, 15', 'MON, 18', 'WED, 20', 'FRI, 21', 'MON, 23'], - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - } -} - -export function getCandlestickChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const candlestickColors = { - series1: '#28c76f', - series2: '#ea5455', - } - - const { themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - }, - plotOptions: { - bar: { columnWidth: '40%' }, - candlestick: { - colors: { - upward: candlestickColors.series1, - downward: candlestickColors.series2, - }, - }, - }, - grid: { - padding: { top: -10 }, - borderColor: themeBorderColor, - xaxis: { - lines: { show: true }, - }, - }, - yaxis: { - tooltip: { enabled: true }, - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - type: 'datetime', - axisBorder: { show: false }, - axisTicks: { color: themeBorderColor }, - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - } -} -export function getRadialBarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const radialBarColors = { - series1: '#fdd835', - series2: '#32baff', - series3: '#00d4bd', - series4: '#7367f0', - series5: '#FFA1A1', - } - - const { themeSecondaryTextColor, themePrimaryTextColor } = colorVariables(themeColors) - - return { - stroke: { lineCap: 'round' }, - labels: ['Comments', 'Replies', 'Shares'], - legend: { - show: true, - position: 'bottom', - labels: { - colors: themeSecondaryTextColor, - }, - markers: { - offsetX: -3, - }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - colors: [radialBarColors.series1, radialBarColors.series2, radialBarColors.series4], - plotOptions: { - radialBar: { - hollow: { size: '30%' }, - track: { - margin: 15, - background: themeColors.colors['grey-100'], - }, - dataLabels: { - name: { - fontSize: '2rem', - }, - value: { - fontSize: '1rem', - color: themeSecondaryTextColor, - }, - total: { - show: true, - fontWeight: 400, - label: 'Comments', - fontSize: '1.125rem', - - color: themePrimaryTextColor, - - formatter(w: { globals: { seriesTotals: any[], series: string | any[] } }) { - const totalValue - = w.globals.seriesTotals.reduce((a: number, b: number) => { - return a + b - }, 0) / w.globals.series.length - - if (totalValue % 1 === 0) - return `${totalValue}%` - else - return `${totalValue.toFixed(2)}%` - }, - }, - }, - }, - }, - grid: { - padding: { - top: -30, - bottom: -25, - }, - }, - } -} - -export function getDonutChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const donutColors = { - series1: '#fdd835', - series2: '#00d4bd', - series3: '#826bf8', - series4: '#32baff', - series5: '#ffa1a1', - } - - const { themeSecondaryTextColor, themePrimaryTextColor } = colorVariables(themeColors) - - return { - stroke: { width: 0 }, - labels: ['Operational', 'Networking', 'Hiring', 'R&D'], - colors: [donutColors.series1, donutColors.series5, donutColors.series3, donutColors.series2], - dataLabels: { - enabled: true, - formatter: (val: string) => `${Number.parseInt(val, 10)}%`, - }, - legend: { - position: 'bottom', - markers: { offsetX: -3 }, - labels: { colors: themeSecondaryTextColor }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - plotOptions: { - pie: { - donut: { - labels: { - show: true, - name: { - fontSize: '1.5rem', - }, - value: { - fontSize: '1.5rem', - color: themeSecondaryTextColor, - formatter: (val: string) => `${Number.parseInt(val, 10)}`, - }, - total: { - show: true, - fontSize: '1.5rem', - label: 'Operational', - formatter: () => '31%', - color: themePrimaryTextColor, - }, - }, - }, - }, - }, - responsive: [ - { - breakpoint: 992, - options: { - chart: { - height: 380, - }, - legend: { - position: 'bottom', - }, - }, - }, - { - breakpoint: 576, - options: { - chart: { - height: 320, - }, - plotOptions: { - pie: { - donut: { - labels: { - show: true, - name: { - fontSize: '1rem', - }, - value: { - fontSize: '1rem', - }, - total: { - fontSize: '1rem', - }, - }, - }, - }, - }, - }, - }, - ], - } -} - -export function getAreaChartSplineConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const areaColors = { - series3: '#e0cffe', - series2: '#b992fe', - series1: '#ab7efd', - } - - const { themeSecondaryTextColor, themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - }, - tooltip: { shared: false }, - dataLabels: { enabled: false }, - stroke: { - show: false, - curve: 'straight', - }, - legend: { - position: 'top', - horizontalAlign: 'left', - - labels: { colors: themeSecondaryTextColor }, - markers: { - offsetY: 1, - offsetX: -3, - }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - - colors: [areaColors.series3, areaColors.series2, areaColors.series1], - fill: { - opacity: 1, - type: 'solid', - }, - grid: { - show: true, - borderColor: themeBorderColor, - xaxis: { - lines: { show: true }, - }, - }, - yaxis: { - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - axisBorder: { show: false }, - - axisTicks: { color: themeBorderColor }, - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - }, - categories: [ - '7/12', - '8/12', - '9/12', - '10/12', - '11/12', - '12/12', - '13/12', - '14/12', - '15/12', - '16/12', - '17/12', - '18/12', - '19/12', - ], - }, - } -} - -export function getColumnChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const columnColors = { - series1: '#826af9', - series2: '#d2b0ff', - bg: '#f8d3ff', - } - - const { themeSecondaryTextColor, themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - offsetX: -10, - stacked: true, - parentHeightOffset: 0, - toolbar: { show: false }, - }, - fill: { opacity: 1 }, - dataLabels: { enabled: false }, - - colors: [columnColors.series1, columnColors.series2], - legend: { - position: 'top', - horizontalAlign: 'left', - - labels: { colors: themeSecondaryTextColor }, - markers: { - offsetY: 1, - offsetX: -3, - }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - stroke: { - show: true, - colors: ['transparent'], - }, - plotOptions: { - bar: { - columnWidth: '15%', - colors: { - backgroundBarRadius: 10, - - backgroundBarColors: [columnColors.bg, columnColors.bg, columnColors.bg, columnColors.bg, columnColors.bg], - }, - }, - }, - grid: { - borderColor: themeBorderColor, - xaxis: { - lines: { show: true }, - }, - }, - yaxis: { - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - xaxis: { - axisBorder: { show: false }, - - axisTicks: { color: themeBorderColor }, - categories: ['7/12', '8/12', '9/12', '10/12', '11/12', '12/12', '13/12', '14/12', '15/12'], - crosshairs: { - stroke: { color: themeBorderColor }, - }, - labels: { - style: { colors: themeDisabledTextColor }, - }, - }, - responsive: [ - { - breakpoint: 600, - options: { - plotOptions: { - bar: { - columnWidth: '35%', - }, - }, - }, - }, - ], - } -} - -export function getHeatMapChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { themeSecondaryTextColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - }, - dataLabels: { enabled: false }, - stroke: { - colors: [themeColors.colors.surface], - }, - legend: { - position: 'bottom', - labels: { - colors: themeSecondaryTextColor, - }, - markers: { - offsetY: 0, - offsetX: -3, - }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - plotOptions: { - heatmap: { - enableShades: false, - colorScale: { - ranges: [ - { to: 10, from: 0, name: '0-10', color: '#b9b3f8' }, - { to: 20, from: 11, name: '10-20', color: '#aba4f6' }, - { to: 30, from: 21, name: '20-30', color: '#9d95f5' }, - { to: 40, from: 31, name: '30-40', color: '#8f85f3' }, - { to: 50, from: 41, name: '40-50', color: '#8176f2' }, - { to: 60, from: 51, name: '50-60', color: '#7367f0' }, - ], - }, - }, - }, - grid: { - padding: { top: -20 }, - }, - yaxis: { - labels: { - style: { - colors: themeDisabledTextColor, - }, - }, - }, - xaxis: { - labels: { show: false }, - axisTicks: { show: false }, - axisBorder: { show: false }, - }, - } -} - -export function getRadarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const radarColors = { - series1: '#9b88fa', - series2: '#ffa1a1', - } - - const { themeSecondaryTextColor, themeBorderColor, themeDisabledTextColor } = colorVariables(themeColors) - - return { - chart: { - parentHeightOffset: 0, - toolbar: { show: false }, - dropShadow: { - top: 1, - blur: 8, - left: 1, - opacity: 0.2, - enabled: false, - }, - }, - markers: { size: 0 }, - fill: { opacity: [1, 0.8] }, - colors: [radarColors.series1, radarColors.series2], - stroke: { - width: 0, - show: false, - }, - legend: { - labels: { - colors: themeSecondaryTextColor, - }, - markers: { - offsetX: -3, - }, - itemMargin: { - vertical: 3, - horizontal: 10, - }, - }, - plotOptions: { - radar: { - polygons: { - strokeColors: themeBorderColor, - connectorColors: themeBorderColor, - }, - }, - }, - grid: { - show: false, - padding: { - top: -20, - bottom: -20, - }, - }, - yaxis: { show: false }, - xaxis: { - categories: ['Battery', 'Brand', 'Camera', 'Memory', 'Storage', 'Display', 'OS', 'Price'], - labels: { - style: { - colors: [ - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - themeDisabledTextColor, - ], - }, - }, - }, - } -} diff --git a/app/@core/libs/chartjs/chartjsConfig.ts b/app/@core/libs/chartjs/chartjsConfig.ts deleted file mode 100644 index 637fedc2..00000000 --- a/app/@core/libs/chartjs/chartjsConfig.ts +++ /dev/null @@ -1,372 +0,0 @@ -import type { ThemeInstance } from 'vuetify' -import { hexToRgb } from '@base/@core/utils/colorConverter' - -// 👉 Colors variables -function colorVariables(themeColors: ThemeInstance['themes']['value']['colors']) { - const themeSecondaryTextColor = `rgba(${hexToRgb(themeColors.colors['on-surface'])},${themeColors.variables['medium-emphasis-opacity']})` - const themeDisabledTextColor = `rgba(${hexToRgb(themeColors.colors['on-surface'])},${themeColors.variables['disabled-opacity']})` - const themeBorderColor = `rgba(${hexToRgb(String(themeColors.variables['border-color']))},${themeColors.variables['border-opacity']})` - - return { labelColor: themeDisabledTextColor, borderColor: themeBorderColor, legendColor: themeSecondaryTextColor } -} - -// SECTION config - -// 👉 Latest Bar Chart Config -export function getLatestBarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - animation: { duration: 500 }, - scales: { - x: { - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - ticks: { color: labelColor }, - }, - y: { - min: 0, - max: 400, - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - ticks: { - stepSize: 100, - color: labelColor, - }, - }, - }, - plugins: { - legend: { display: false }, - }, - } -} - -// 👉 Horizontal Bar Chart Config -export function getHorizontalBarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor, legendColor } = colorVariables(themeColors) - - return { - indexAxis: 'y', - responsive: true, - maintainAspectRatio: false, - animation: { duration: 500 }, - elements: { - bar: { - borderRadius: { - topRight: 15, - bottomRight: 15, - }, - }, - }, - layout: { - padding: { top: -4 }, - }, - scales: { - x: { - min: 0, - grid: { - drawTicks: false, - drawBorder: false, - color: borderColor, - }, - ticks: { color: labelColor }, - }, - y: { - grid: { - borderColor, - display: false, - drawBorder: false, - }, - ticks: { color: labelColor }, - }, - }, - plugins: { - legend: { - align: 'end', - position: 'top', - labels: { color: legendColor }, - }, - }, - } -} - -// 👉 Line Chart Config -export function getLineChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor, legendColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - ticks: { color: labelColor }, - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - }, - y: { - min: 0, - max: 400, - ticks: { - stepSize: 100, - color: labelColor, - }, - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - }, - }, - plugins: { - legend: { - align: 'end', - position: 'top', - labels: { - padding: 25, - boxWidth: 10, - color: legendColor, - usePointStyle: true, - }, - }, - }, - } -} - -// 👉 Radar Chart Config -export function getRadarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor, legendColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - animation: { duration: 500 }, - layout: { - padding: { top: -20 }, - }, - scales: { - r: { - ticks: { - display: false, - maxTicksLimit: 1, - color: labelColor, - }, - grid: { color: borderColor }, - pointLabels: { color: labelColor }, - angleLines: { color: borderColor }, - }, - }, - plugins: { - legend: { - position: 'top', - labels: { - padding: 25, - color: legendColor, - }, - }, - }, - } -} - -// 👉 Polar Chart Config -export function getPolarChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { legendColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - animation: { duration: 500 }, - layout: { - padding: { - top: -5, - bottom: -45, - }, - }, - scales: { - r: { - grid: { display: false }, - ticks: { display: false }, - }, - }, - plugins: { - legend: { - position: 'right', - labels: { - padding: 25, - boxWidth: 9, - color: legendColor, - usePointStyle: true, - }, - }, - }, - } -} - -// 👉 Bubble Chart Config -export function getBubbleChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - scales: { - x: { - min: 0, - max: 140, - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - ticks: { - stepSize: 10, - color: labelColor, - }, - }, - y: { - min: 0, - max: 400, - grid: { - borderColor, - drawBorder: false, - color: borderColor, - }, - ticks: { - stepSize: 100, - color: labelColor, - }, - }, - }, - plugins: { - legend: { display: false }, - }, - } -} - -// 👉 Doughnut Chart Config -export function getDoughnutChartConfig() { - return { - responsive: true, - maintainAspectRatio: false, - animation: { duration: 500 }, - cutout: 80, - plugins: { - legend: { - display: false, - }, - }, - } -} - -// 👉 Scatter Chart Config -export function getScatterChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor, legendColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - animation: { duration: 800 }, - layout: { - padding: { top: -20 }, - }, - scales: { - x: { - min: 0, - max: 140, - grid: { - borderColor, - drawTicks: false, - drawBorder: false, - color: borderColor, - }, - ticks: { - stepSize: 10, - color: labelColor, - }, - }, - y: { - min: 0, - max: 400, - grid: { - borderColor, - drawTicks: false, - drawBorder: false, - color: borderColor, - }, - ticks: { - stepSize: 100, - color: labelColor, - }, - }, - }, - plugins: { - legend: { - align: 'start', - position: 'top', - labels: { - padding: 25, - boxWidth: 9, - color: legendColor, - usePointStyle: true, - }, - }, - }, - } -} - -// 👉 Line Area Chart Config -export function getLineAreaChartConfig(themeColors: ThemeInstance['themes']['value']['colors']) { - const { borderColor, labelColor, legendColor } = colorVariables(themeColors) - - return { - responsive: true, - maintainAspectRatio: false, - layout: { - padding: { top: -20 }, - }, - scales: { - x: { - grid: { - borderColor, - color: 'transparent', - }, - ticks: { color: labelColor }, - }, - y: { - min: 0, - max: 400, - grid: { - borderColor, - color: 'transparent', - }, - ticks: { - stepSize: 100, - color: labelColor, - }, - }, - }, - plugins: { - legend: { - align: 'start', - position: 'top', - labels: { - padding: 25, - boxWidth: 9, - color: legendColor, - usePointStyle: true, - }, - }, - }, - } -} -// !SECTION diff --git a/app/@core/libs/chartjs/components/BarChart.ts b/app/@core/libs/chartjs/components/BarChart.ts deleted file mode 100644 index 84a5c7d6..00000000 --- a/app/@core/libs/chartjs/components/BarChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { BarElement, CategoryScale, Chart as ChartJS, Legend, LinearScale, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Bar } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, BarElement, CategoryScale, LinearScale) - -export default defineComponent({ - name: 'BarChart', - props: { - chartId: { - type: String, - default: 'bar-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => ([]), - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Bar), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/BubbleChart.ts b/app/@core/libs/chartjs/components/BubbleChart.ts deleted file mode 100644 index 1f11e379..00000000 --- a/app/@core/libs/chartjs/components/BubbleChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { Chart as ChartJS, Legend, LinearScale, PointElement, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Bubble } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, PointElement, LinearScale) - -export default defineComponent({ - name: 'BubbleChart', - props: { - chartId: { - type: String, - default: 'bubble-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Bubble), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/DoughnutChart.ts b/app/@core/libs/chartjs/components/DoughnutChart.ts deleted file mode 100644 index bd13c183..00000000 --- a/app/@core/libs/chartjs/components/DoughnutChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { ArcElement, CategoryScale, Chart as ChartJS, Legend, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Doughnut } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, ArcElement, CategoryScale) - -export default defineComponent({ - name: 'DoughnutChart', - props: { - chartId: { - type: String, - default: 'doughnut-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Doughnut), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/LineChart.ts b/app/@core/libs/chartjs/components/LineChart.ts deleted file mode 100644 index c86d8e7c..00000000 --- a/app/@core/libs/chartjs/components/LineChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { CategoryScale, Chart as ChartJS, Legend, LineElement, LinearScale, PointElement, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Line } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, LineElement, LinearScale, PointElement, CategoryScale) - -export default defineComponent({ - name: 'LineChart', - props: { - chartId: { - type: String, - default: 'line-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Line), { - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - options: props.chartOptions, - data: props.chartData, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/PolarAreaChart.ts b/app/@core/libs/chartjs/components/PolarAreaChart.ts deleted file mode 100644 index c15b9a3e..00000000 --- a/app/@core/libs/chartjs/components/PolarAreaChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { ArcElement, Chart as ChartJS, Legend, RadialLinearScale, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { PolarArea } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, ArcElement, RadialLinearScale) - -export default defineComponent({ - name: 'PolarAreaChart', - props: { - chartId: { - type: String, - default: 'line-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(PolarArea), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/RadarChart.ts b/app/@core/libs/chartjs/components/RadarChart.ts deleted file mode 100644 index 499bced0..00000000 --- a/app/@core/libs/chartjs/components/RadarChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { Chart as ChartJS, Filler, Legend, LineElement, PointElement, RadialLinearScale, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Radar } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, PointElement, RadialLinearScale, LineElement, Filler) - -export default defineComponent({ - name: 'RadarChart', - props: { - chartId: { - type: String, - default: 'radar-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Radar), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/libs/chartjs/components/ScatterChart.ts b/app/@core/libs/chartjs/components/ScatterChart.ts deleted file mode 100644 index 35136b86..00000000 --- a/app/@core/libs/chartjs/components/ScatterChart.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { PluginOptionsByType } from 'chart.js' -import { CategoryScale, Chart as ChartJS, Legend, LineElement, LinearScale, PointElement, Title, Tooltip } from 'chart.js' -import type { PropType } from 'vue' -import { defineComponent } from 'vue' -import { Scatter } from 'vue-chartjs' - -ChartJS.register(Title, Tooltip, Legend, PointElement, LineElement, CategoryScale, LinearScale) - -export default defineComponent({ - name: 'ScatterChart', - props: { - chartId: { - type: String, - default: 'scatter-chart', - }, - width: { - type: Number, - default: 400, - }, - height: { - type: Number, - default: 400, - }, - cssClasses: { - default: '', - type: String, - }, - styles: { - type: Object as PropType>, - default: () => ({}), - }, - plugins: { - type: Array as PropType[]>, - default: () => [], - }, - chartData: { - type: Object, - default: () => ({}), - }, - chartOptions: { - type: Object, - default: () => ({}), - }, - }, - setup(props) { - return () => - h(h(Scatter), { - data: props.chartData, - options: props.chartOptions, - chartId: props.chartId, - width: props.width, - height: props.height, - cssClasses: props.cssClasses, - styles: props.styles, - plugins: props.plugins, - }) - }, -}) diff --git a/app/@core/scss/base/_components.scss b/app/@core/scss/base/_components.scss deleted file mode 100644 index 6af7eea3..00000000 --- a/app/@core/scss/base/_components.scss +++ /dev/null @@ -1,191 +0,0 @@ -@use "mixins"; -@use "@base/@layouts/styles/placeholders"; -@use "@base/@layouts/styles/mixins" as layoutMixins; -@use "@base/configured-variables" as variables; -@use "@base/styles/variables/_vuetify.scss" as vuetify; - -// 👉 Avatar group -.v-avatar-group { - display: flex; - align-items: center; - - > * { - &:not(:first-child) { - margin-inline-start: -0.8rem; - } - - transition: transform 0.25s ease, box-shadow 0.15s ease; - - &:hover { - z-index: 2; - transform: translateY(-5px) scale(1.05); - - @include mixins.elevation(3); - } - } - - > .v-avatar { - border: 2px solid rgb(var(--v-theme-surface)); - transition: transform 0.15s ease; - } -} - -// 👉 Button outline with default color border color -.v-alert--variant-outlined, -.v-avatar--variant-outlined, -.v-btn.v-btn--variant-outlined, -.v-card--variant-outlined, -.v-chip--variant-outlined, -.v-list-item--variant-outlined { - &:not([class*="text-"]) { - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - } - - &.text-default { - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - } -} - -// 👉 Custom Input -.v-label.custom-input { - padding: 1rem; - border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - opacity: 1; - white-space: normal; - - &:hover { - border-color: rgba(var(--v-border-color), 0.25); - } - - &.active { - border-color: rgb(var(--v-theme-primary)); - - .v-icon { - color: rgb(var(--v-theme-primary)) !important; - } - } - - &.custom-checkbox, - &.custom-radio { - .v-input__control { - grid-area: none; - } - } -} - -// 👉 Datatable -.v-data-table-footer__pagination { - @include layoutMixins.rtl { - .v-btn { - .v-icon { - transform: rotate(180deg); - } - } - } -} - -// Dialog responsive width -.v-dialog { - // dialog custom close btn - .v-dialog-close-btn { - position: absolute; - z-index: 1; - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)) !important; - inset-block-start: 0.5rem; - inset-inline-end: 0.5rem; - - .v-btn__overlay { - display: none; - } - } - - .v-card { - @extend %style-scroll-bar; - } -} - -@media (min-width: 600px) { - .v-dialog { - &.v-dialog-sm, - &.v-dialog-lg, - &.v-dialog-xl { - .v-overlay__content { - inline-size: 565px !important; - } - } - } -} - -@media (min-width: 960px) { - .v-dialog { - &.v-dialog-lg, - &.v-dialog-xl { - .v-overlay__content { - inline-size: 865px !important; - } - } - } -} - -@media (min-width: 1264px) { - .v-dialog.v-dialog-xl { - .v-overlay__content { - inline-size: 1165px !important; - } - } -} - -// 👉 Expansion panel -.v-expansion-panels.customized-panels { - border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - border-radius: vuetify.$border-radius-root; - - .v-expansion-panel-title { - background-color: rgb(var(--v-theme-expansion-panel-text-custom-bg)); - border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - margin-block-end: -1px; - } - - .v-expansion-panel-text__wrapper { - padding: 20px; - } -} - -// v-tab with pill support -.v-tabs.v-tabs-pill { - .v-tab.v-btn { - border-radius: 0.25rem !important; - transition: none; - - .v-tab__slider { - visibility: hidden; - } - } -} - -// loop for all colors bg -@each $color-name in variables.$theme-colors-name { - body .v-tabs.v-tabs-pill { - .v-slide-group__content { - gap: 0.25rem; - } - .v-tab--selected.text-#{$color-name} { - background-color: rgb(var(--v-theme-#{$color-name})); - color: rgb(var(--v-theme-on-#{$color-name})) !important; - } - } -} - -// â„šī¸ We are make even width of all v-timeline body -.v-timeline--vertical.v-timeline { - .v-timeline-item { - .v-timeline-item__body { - justify-self: stretch !important; - } - } -} - -// 👉 Switch -.v-switch .v-selection-control:not(.v-selection-control--dirty) .v-switch__thumb { - color: #fff !important; -} diff --git a/app/@core/scss/base/_dark.scss b/app/@core/scss/base/_dark.scss deleted file mode 100644 index 4d2facd1..00000000 --- a/app/@core/scss/base/_dark.scss +++ /dev/null @@ -1,16 +0,0 @@ -@use "@base/configured-variables" as variables; - -// ———————————————————————————————————— -// * ——— Perfect Scrollbar -// ———————————————————————————————————— - -body.v-theme--dark { - .ps__rail-y, - .ps__rail-x { - background-color: transparent !important; - } - - .ps__thumb-y { - background-color: variables.$plugin-ps-thumb-y-dark; - } -} diff --git a/app/@core/scss/base/_default-layout-w-horizontal-nav.scss b/app/@core/scss/base/_default-layout-w-horizontal-nav.scss deleted file mode 100644 index bce9f4de..00000000 --- a/app/@core/scss/base/_default-layout-w-horizontal-nav.scss +++ /dev/null @@ -1,45 +0,0 @@ -@use "@base/@core/scss/base/placeholders" as *; -@use "@base/@core/scss/template/placeholders" as *; -@use "@base/@core/scss/base/mixins"; - -.layout-wrapper.layout-nav-type-horizontal { - .layout-navbar-and-nav-container { - @extend %default-layout-horizontal-nav-navbar-and-nav-container; - } - - // 👉 Navbar - .layout-navbar { - @extend %default-layout-horizontal-nav-navbar; - } - - // 👉 Layout content container - .navbar-content-container { - display: flex; - align-items: center; - block-size: 100%; - } - - .layout-horizontal-nav { - @extend %default-layout-horizontal-nav-nav; - - .nav-items { - @extend %default-layout-horizontal-nav-nav-items-list; - } - } - - // 👉 App footer - .layout-footer { - @at-root { - .layout-footer-sticky#{&} { - background-color: rgb(var(--v-theme-surface)); - - @include mixins.elevation(3); - } - } - } - - // TODO: Use Vuetify grid sass variable here - .layout-page-content { - padding-block: 1.5rem; - } -} diff --git a/app/@core/scss/base/_default-layout-w-vertical-nav.scss b/app/@core/scss/base/_default-layout-w-vertical-nav.scss deleted file mode 100644 index 623e34a2..00000000 --- a/app/@core/scss/base/_default-layout-w-vertical-nav.scss +++ /dev/null @@ -1,103 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "@base/@core/scss/base/placeholders" as *; -@use "@base/@core/scss/template/placeholders" as *; -@use "misc"; -@use "@base/@core/scss/base/mixins"; - -$header: ".layout-navbar"; - -@if variables.$layout-vertical-nav-navbar-is-contained { - $header: ".layout-navbar .navbar-content-container"; -} - -.layout-wrapper.layout-nav-type-vertical { - // SECTION Layout Navbar - // 👉 Elevated navbar - @if variables.$vertical-nav-navbar-style == "elevated" { - // Add transition - #{$header} { - transition: padding 0.2s ease, background-color 0.18s ease; - } - - // If navbar is contained => Add border radius to header - @if variables.$layout-vertical-nav-navbar-is-contained { - #{$header} { - border-radius: 0 0 variables.$default-layout-with-vertical-nav-navbar-footer-roundness variables.$default-layout-with-vertical-nav-navbar-footer-roundness; - } - } - - // Scrolled styles for sticky navbar - @at-root { - /* â„šī¸ This html selector with not selector is required when: - dialog is opened and window don't have any scroll. This removes window-scrolled class from layout and our style broke - */ - html.v-overlay-scroll-blocked:not([style*="--v-body-scroll-y: 0px;"]) .layout-navbar-sticky, - &.window-scrolled.layout-navbar-sticky { - - #{$header} { - @extend %default-layout-vertical-nav-scrolled-sticky-elevated-nav; - @extend %default-layout-vertical-nav-floating-navbar-and-sticky-elevated-navbar-scrolled; - } - - .navbar-blur#{$header} { - @extend %blurry-bg; - } - } - } - } - - // 👉 Floating navbar - @else if variables.$vertical-nav-navbar-style == "floating" { - // â„šī¸ Regardless of navbar is contained or not => Apply overlay to .layout-navbar - .layout-navbar { - &.navbar-blur { - @extend %default-layout-vertical-nav-floating-navbar-overlay; - } - } - - &:not(.layout-navbar-sticky) { - #{$header} { - margin-block-start: variables.$vertical-nav-floating-navbar-top; - } - } - - #{$header} { - @if variables.$layout-vertical-nav-navbar-is-contained { - border-radius: variables.$default-layout-with-vertical-nav-navbar-footer-roundness; - } - - background-color: rgb(var(--v-theme-surface)); - - @extend %default-layout-vertical-nav-floating-navbar-and-sticky-elevated-navbar-scrolled; - } - - .navbar-blur#{$header} { - @extend %blurry-bg; - } - } - - // !SECTION - - // 👉 Layout footer - .layout-footer { - $ele-layout-footer: &; - - .footer-content-container { - border-radius: variables.$default-layout-with-vertical-nav-navbar-footer-roundness variables.$default-layout-with-vertical-nav-navbar-footer-roundness 0 0; - - // Sticky footer - @at-root { - // â„šī¸ .layout-footer-sticky#{$ele-layout-footer} => .layout-footer-sticky.layout-wrapper.layout-nav-type-vertical .layout-footer - .layout-footer-sticky#{$ele-layout-footer} { - .footer-content-container { - background-color: rgb(var(--v-theme-surface)); - padding-block: 0; - padding-inline: 1.2rem; - - @include mixins.elevation(3); - } - } - } - } - } -} diff --git a/app/@core/scss/base/_default-layout.scss b/app/@core/scss/base/_default-layout.scss deleted file mode 100644 index e2420956..00000000 --- a/app/@core/scss/base/_default-layout.scss +++ /dev/null @@ -1,16 +0,0 @@ -@use "@base/@core/scss/base/placeholders"; -@use "@base/@core/scss/base/variables"; - -.layout-vertical-nav, -.layout-horizontal-nav { - ol, - ul { - list-style: none; - } -} - -.layout-navbar { - @if variables.$navbar-high-emphasis-text { - @extend %layout-navbar; - } -} diff --git a/app/@core/scss/base/_horizontal-nav.scss b/app/@core/scss/base/_horizontal-nav.scss deleted file mode 100644 index 498eeae9..00000000 --- a/app/@core/scss/base/_horizontal-nav.scss +++ /dev/null @@ -1,194 +0,0 @@ -@use "@base/@core/scss/base/placeholders" as *; -@use "@base/@core/scss/template/placeholders" as *; -@use "@base/configured-variables" as variables; -@use "@base/@layouts/styles/mixins" as layoutsMixins; -@use "@base/@core/scss/base/mixins"; -@use "vuetify/lib/styles/tools/states" as vuetifyStates; - -.layout-horizontal-nav { - @extend %nav; - - // 👉 Icon styles - .nav-item-icon { - @extend %horizontal-nav-item-icon; - } - - // 👉 Common styles for nav group & nav link - .nav-link, - .nav-group { - // 👉 Disabled nav items - &.disabled { - @extend %horizontal-nav-disabled; - } - - // Set width of inner nav group and link - &.sub-item { - @extend %horizontal-nav-subitem; - } - } - - // SECTION Nav Link - .nav-link { - @extend %nav-link; - - a { - @extend %horizontal-nav-item; - - // Adds before psudo element to style hover state - @include mixins.before-pseudo; - - // Adds vuetify states - @include vuetifyStates.states($active: false); - } - - // 👉 Top level nav link - &:not(.sub-item) { - a { - @extend %horizontal-nav-top-level-item; - - &.router-link-active { - @extend %nav-link-active; - } - } - } - - // 👉 Sub link - &.sub-item { - a { - &.router-link-active { - // â„šī¸ We will not use active styles from material here because we want to use primary color for active link - @extend %horizontal-nav-sub-nav-link-active; - } - } - } - } - - // !SECTION - - // SECTION Nav Group - .nav-group { - .popper-triggerer { - .nav-group-label { - @extend %horizontal-nav-item; - } - } - - > .popper-triggerer > .nav-group-label { - // Adds before psudo element to style hover state - @include mixins.before-pseudo; - - // Adds vuetify states - @include vuetifyStates.states($active: false); - } - - .popper-content { - @extend %horizontal-nav-popper-content-hidden; - @extend %horizontal-nav-popper-content; - - background-color: rgb(var(--v-theme-surface)); - - // Set max-height for the popper content - > div { - max-block-size: variables.$horizontal-nav-popper-content-max-height; - } - } - - // 👉 Top level group - &:not(.sub-item) { - > .popper-triggerer { - position: relative; - - /* - â„šī¸ The Bridge - This after pseudo will work as bridge when we have space between popper triggerer and popper content - Initially it will have pointer events none for normal behavior and once the content is shown it will - work as bridge by setting pointer events to `auto` - */ - &::after { - position: absolute; - block-size: variables.$horizontal-nav-popper-content-top; - content: ""; - inline-size: 100%; - inset-block-start: 100%; - inset-inline-start: 0; - pointer-events: none; - } - } - - // Enable the pseudo bridge when content is shown by setting pointer events to `auto` - &.show-content > .popper-triggerer::after { - /* - â„šī¸ We have added `z-index: 2` because when there is horizontal nav item below the popper trigger (group) - without this style nav item below popper trigger (group) gets focus hence closes the popper content - */ - z-index: 2; - pointer-events: auto; - } - - > .popper-triggerer > .nav-group-label { - @extend %horizontal-nav-top-level-item; - } - - &.active { - > .popper-triggerer > .nav-group-label { - @extend %nav-link-active; - } - } - - // â„šī¸ Add space between popper wrapper & content - > .popper-content { - margin-block-start: variables.$horizontal-nav-popper-content-top !important; - } - } - - // 👉 Sub group - &.sub-item { - &.active { - @include mixins.selected-states("> .popper-triggerer > .nav-group-label::before"); - } - - // Reduce the icon's size of nested group's nav links (Top level group > Sub group > [Nav links]) - .sub-item { - .nav-item-icon { - @extend %third-level-nav-item-icon; - } - } - } - - .nav-group-arrow { - font-size: variables.$horizontal-nav-group-arrow-icon-size; - - /* - â„šī¸ ml-auto won't matter in top level group (because we haven't specified fixed width for top level groups) - but we wrote generally because we don't want to become so specific - */ - margin-inline-start: auto; - } - - &.popper-inline-end { - .nav-group-arrow { - transform: rotateZ(270deg); - - @include layoutsMixins.rtl { - transform: rotateZ(90deg); - } - } - } - - .nav-item-title { - @extend %horizontal-nav-item-title; - } - - &.show-content { - > .popper-content { - @extend %horizontal-nav-popper-content-visible; - } - - &:not(.active) { - @include mixins.selected-states("> .popper-triggerer > .nav-group-label::before"); - } - } - } - - // !SECTION -} diff --git a/app/@core/scss/base/_index.scss b/app/@core/scss/base/_index.scss deleted file mode 100644 index 8f5bb5be..00000000 --- a/app/@core/scss/base/_index.scss +++ /dev/null @@ -1,48 +0,0 @@ -@use "sass:map"; - -// Layout -@use "vertical-nav"; -@use "horizontal-nav"; -@use "default-layout"; -@use "default-layout-w-vertical-nav"; -@use "default-layout-w-horizontal-nav"; - -// Layouts package -@use "layouts"; - -// Skins -@use "skins"; - -// Components -@use "components"; - -// Utilities -@use "utilities"; - -// Route Transitions -@use "route-transitions"; - -// Misc -@use "misc"; - -// Dark -@use "dark"; - -// libs -@use "libs/perfect-scrollbar"; - -a { - color: rgb(var(--v-theme-primary)); - text-decoration: none; -} - -// Vuetify 3 don't provide margin bottom style like vuetify 2 -p { - margin-block-end: 1rem; -} - -// Iconify icon size -svg.iconify { - block-size: 1em; - inline-size: 1em; -} diff --git a/app/@core/scss/base/_layouts.scss b/app/@core/scss/base/_layouts.scss deleted file mode 100644 index c0082e58..00000000 --- a/app/@core/scss/base/_layouts.scss +++ /dev/null @@ -1,63 +0,0 @@ -@use "@base/configured-variables" as variables; - -/* â„šī¸ This styles extends the existing layout package's styles for handling cases that aren't related to layouts package */ - -/* - â„šī¸ When we use v-layout as immediate first child of `.page-content-container`, it adds display:flex and page doesn't get contained height -*/ -// .layout-wrapper.layout-nav-type-vertical { -// &.layout-content-height-fixed { -// .page-content-container { -// > .v-layout:first-child > :not(.v-navigation-drawer):first-child { -// flex-grow: 1; -// block-size: 100%; -// } -// } -// } -// } -.layout-wrapper.layout-nav-type-vertical { - &.layout-content-height-fixed { - .page-content-container { - > .v-layout:first-child { - overflow: hidden; - min-block-size: 100%; - - > .v-main { - // overflow-y: auto; - - .v-main__wrap > :first-child { - block-size: 100%; - overflow-y: auto; - } - } - } - } - } -} - -// â„šī¸ Let div/v-layout take full height. E.g. Email App -.layout-wrapper.layout-nav-type-horizontal { - &.layout-content-height-fixed { - > .layout-page-content { - display: flex; - } - } -} - -// 👉 Floating navbar styles -@if variables.$vertical-nav-navbar-style == "floating" { - // â„šī¸ Add spacing above navbar if navbar is floating (was in %layout-navbar-sticky placeholder) - body .layout-wrapper.layout-nav-type-vertical.layout-navbar-sticky { - .layout-navbar { - inset-block-start: variables.$vertical-nav-floating-navbar-top; - } - - /* - â„šī¸ If it's floating navbar - Add `vertical-nav-floating-navbar-top` as margin top to .layout-page-content - */ - .layout-page-content { - margin-block-start: variables.$vertical-nav-floating-navbar-top; - } - } -} diff --git a/app/@core/scss/base/_misc.scss b/app/@core/scss/base/_misc.scss deleted file mode 100644 index cee983b3..00000000 --- a/app/@core/scss/base/_misc.scss +++ /dev/null @@ -1,20 +0,0 @@ -// â„šī¸ scrollable-content allows creating fixed header and scrollable content for VNavigationDrawer (Used when perfect scrollbar is used) -.scrollable-content { - &.v-navigation-drawer { - .v-navigation-drawer__content { - display: flex; - overflow: hidden; - flex-direction: column; - } - } -} - -// â„šī¸ adding styling for code tag -code { - border-radius: 3px; - color: rgb(var(--v-code-color)); - font-size: 90%; - font-weight: 400; - padding-block: 0.2em; - padding-inline: 0.4em; -} diff --git a/app/@core/scss/base/_mixins.scss b/app/@core/scss/base/_mixins.scss deleted file mode 100644 index df99b2a4..00000000 --- a/app/@core/scss/base/_mixins.scss +++ /dev/null @@ -1,63 +0,0 @@ -@use "sass:map"; -@use "@base/styles/variables/vuetify.scss"; - -@mixin elevation($z, $important: false) { - box-shadow: map.get(vuetify.$shadow-key-umbra, $z), map.get(vuetify.$shadow-key-penumbra, $z), map.get(vuetify.$shadow-key-ambient, $z) if($important, !important, null); -} - -// #region before-pseudo -// â„šī¸ This mixin is inspired from vuetify for adding hover styles via before pseudo element -@mixin before-pseudo() { - position: relative; - - &::before { - position: absolute; - border-radius: inherit; - background: currentcolor; - block-size: 100%; - content: ""; - inline-size: 100%; - inset: 0; - opacity: 0; - pointer-events: none; - } -} - -// #endregion before-pseudo - -@mixin bordered-skin($component, $border-property: "border", $important: false) { - #{$component} { - box-shadow: none !important; - // stylelint-disable-next-line annotation-no-unknown - #{$border-property}: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)) if($important, !important, null); - } -} - -// #region selected-states -// â„šī¸ Inspired from vuetify's active-states mixin -// focus => 0.12 & selected => 0.08 -@mixin selected-states($selector) { - #{$selector} { - opacity: calc(var(--v-selected-opacity) * var(--v-theme-overlay-multiplier)); - } - - &:hover - #{$selector} { - opacity: calc(var(--v-selected-opacity) + var(--v-hover-opacity) * var(--v-theme-overlay-multiplier)); - } - - &:focus-visible - #{$selector} { - opacity: calc(var(--v-selected-opacity) + var(--v-focus-opacity) * var(--v-theme-overlay-multiplier)); - } - - @supports not selector(:focus-visible) { - &:focus { - #{$selector} { - opacity: calc(var(--v-selected-opacity) + var(--v-focus-opacity) * var(--v-theme-overlay-multiplier)); - } - } - } -} - -// #endregion selected-states diff --git a/app/@core/scss/base/_route-transitions.scss b/app/@core/scss/base/_route-transitions.scss deleted file mode 100644 index 39c388a6..00000000 --- a/app/@core/scss/base/_route-transitions.scss +++ /dev/null @@ -1,70 +0,0 @@ -// 👉 Zoom fade -.app-transition-zoom-fade-enter-active, -.app-transition-zoom-fade-leave-active { - transition: transform 0.35s, opacity 0.28s ease-in-out; -} - -.app-transition-zoom-fade-enter-from { - opacity: 0; - transform: scale(0.98); -} - -.app-transition-zoom-fade-leave-to { - opacity: 0; - transform: scale(1.02); -} - -// 👉 Fade -.app-transition-fade-enter-active, -.app-transition-fade-leave-active { - transition: opacity 0.25s ease-in-out; -} - -.app-transition-fade-enter-from, -.app-transition-fade-leave-to { - opacity: 0; -} - -// 👉 Fade bottom -.app-transition-fade-bottom-enter-active, -.app-transition-fade-bottom-leave-active { - transition: opacity 0.3s, transform 0.35s; -} - -.app-transition-fade-bottom-enter-from { - opacity: 0; - transform: translateY(-0.6rem); -} - -.app-transition-fade-bottom-leave-to { - opacity: 0; - transform: translateY(0.6rem); -} - -// 👉 Slide fade -.app-transition-slide-fade-enter-active, -.app-transition-slide-fade-leave-active { - transition: opacity 0.3s, transform 0.35s; -} - -.app-transition-slide-fade-enter-from { - opacity: 0; - transform: translateX(-0.6rem); -} - -.app-transition-slide-fade-leave-to { - opacity: 0; - transform: translateX(0.6rem); -} - -// 👉 Zoom out -.app-transition-zoom-out-enter-active, -.app-transition-zoom-out-leave-active { - transition: opacity 0.26s ease-in-out, transform 0.3s ease-out; -} - -.app-transition-zoom-out-enter-from, -.app-transition-zoom-out-leave-to { - opacity: 0; - transform: scale(0.98); -} diff --git a/app/@core/scss/base/_utilities.scss b/app/@core/scss/base/_utilities.scss deleted file mode 100644 index 15c969ab..00000000 --- a/app/@core/scss/base/_utilities.scss +++ /dev/null @@ -1,183 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "@base/@layouts/styles/mixins" as layoutsMixins; - -/* 👉 Demo spacers */ - -/* TODO: Use vuetify SCSS variable here; */ -$card-spacer-content: 16px; - -.demo-space-x { - display: flex; - flex-wrap: wrap; - align-items: center; - margin-block-start: -$card-spacer-content; - - & > * { - margin-block-start: $card-spacer-content; - margin-inline-end: $card-spacer-content; - } -} - -.demo-space-y { - & > * { - margin-block-end: $card-spacer-content; - - &:last-child { - margin-block-end: 0; - } - } -} - -// 👉 Card match height -.match-height.v-row { - .v-card { - block-size: 100%; - } -} - -// 👉 Whitespace -.whitespace-no-wrap { - white-space: nowrap; -} - -// 👉 Colors - -/* - â„šī¸ Vuetify is applying `.text-white` class to badge icon but don't provide its styles - Moreover, we also use this class in some places - - â„šī¸ In vuetify 2 with `$color-pack: false` SCSS var config this class was getting generated but this is not the case in v3 - - â„šī¸ We also need !important to get correct color in badge icon -*/ -.text-white { - color: #fff !important; -} - -.text-white-variant { - color: rgba(255, 255, 255, var(--v-high-emphasis-opacity)); -} - -.text-link { - &:not(:hover) { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - } -} - -.bg-var-theme-background { - background-color: rgba(var(--v-theme-on-background), var(--v-hover-opacity)) !important; -} - -.bg-global-primary { - background-color: rgb(var(--v-global-theme-primary)) !important; - color: rgb(var(--v-theme-on-primary)) !important; -} - -// [/^bg-light-(\w+)$/, ([, w]) => ({ backgroundColor: `rgba(var(--v-theme-${w}), var(--v-activated-opacity))` })], -@each $color-name in variables.$theme-colors-name { - .bg-light-#{$color-name} { - background-color: rgba(var(--v-theme-#{$color-name}), var(--v-activated-opacity)) !important; - } -} - -// 👉 clamp text -.clamp-text { - display: -webkit-box; - overflow: hidden; - -webkit-box-orient: vertical; - -webkit-line-clamp: 2; - text-overflow: ellipsis; -} - -.custom-badge { - .v-badge__badge { - border-radius: 6px !important; - block-size: 12px !important; - inline-size: 12px !important; - } -} - -.leading-normal { - line-height: normal !important; -} - -// 👉 for rtl only -.flip-in-rtl { - @include layoutsMixins.rtl { - transform: scaleX(-1); - } -} - -// 👉 Carousel -.carousel-delimiter-top-end { - .v-carousel__controls { - justify-content: end; - block-size: 40px; - inset-block-start: 0; - padding-inline: 1rem; - - .v-btn--icon.v-btn--density-default { - block-size: calc(var(--v-btn-height) + -10px); - inline-size: calc(var(--v-btn-height) + -8px); - - &.v-btn--active { - color: #fff; - } - - .v-btn__overlay { - opacity: 0; - } - - .v-ripple__container { - display: none; - } - - .v-btn__content { - .v-icon { - block-size: 8px !important; - font-size: 8px !important; - inline-size: 8px !important; - } - } - } - } - - @each $color-name in variables.$theme-colors-name { - - &.dots-active-#{$color-name} { - .v-carousel__controls { - .v-btn--active { - color: rgb(var(--v-theme-#{$color-name})) !important; - } - } - } - } -} - -.v-timeline-item { - .app-timeline-title { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-size: 16px; - font-weight: 500; - line-height: 1.3125rem; - } - - .app-timeline-meta { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - font-size: 12px; - line-height: 0.875rem; - } - - .app-timeline-text { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - font-size: 14px; - line-height: 1.25rem; - } - - .timeline-chip { - border-radius: 6px; - background: rgba(var(--v-theme-on-surface), var(--v-hover-opacity)); - padding-block: 5px; - padding-inline: 10px; - } -} diff --git a/app/@core/scss/base/_utils.scss b/app/@core/scss/base/_utils.scss deleted file mode 100644 index 17838a3c..00000000 --- a/app/@core/scss/base/_utils.scss +++ /dev/null @@ -1,90 +0,0 @@ -@use "sass:map"; -@use "sass:list"; -@use "@base/configured-variables" as variables; - -// Thanks: https://css-tricks.com/snippets/sass/deep-getset-maps/ -@function map-deep-get($map, $keys...) { - @each $key in $keys { - $map: map.get($map, $key); - } - - @return $map; -} - -@function map-deep-set($map, $keys, $value) { - $maps: ($map,); - $result: null; - - // If the last key is a map already - // Warn the user we will be overriding it with $value - @if type-of(nth($keys, -1)) == "map" { - @warn "The last key you specified is a map; it will be overrided with `#{$value}`."; - } - - // If $keys is a single key - // Just merge and return - @if length($keys) == 1 { - @return map-merge($map, ($keys: $value)); - } - - // Loop from the first to the second to last key from $keys - // Store the associated map to this key in the $maps list - // If the key doesn't exist, throw an error - @for $i from 1 through length($keys) - 1 { - $current-key: list.nth($keys, $i); - $current-map: list.nth($maps, -1); - $current-get: map.get($current-map, $current-key); - - @if not $current-get { - @error "Key `#{$key}` doesn't exist at current level in map."; - } - - $maps: list.append($maps, $current-get); - } - - // Loop from the last map to the first one - // Merge it with the previous one - @for $i from length($maps) through 1 { - $current-map: list.nth($maps, $i); - $current-key: list.nth($keys, $i); - $current-val: if($i == list.length($maps), $value, $result); - $result: map.map-merge($current-map, ($current-key: $current-val)); - } - - // Return result - @return $result; -} - -// font size utility classes -@each $name, $size in variables.$font-sizes { - .text-#{$name} { - font-size: $size; - line-height: map.get(variables.$font-line-height, $name); - } -} - -// truncate utility class -.truncate { - overflow: hidden; - text-overflow: ellipsis; - white-space: nowrap; -} - -// gap utility class -@each $name, $size in variables.$gap { - .gap-#{$name} { - gap: $size; - } - - .gap-x-#{$name} { - column-gap: $size; - } - - .gap-y-#{$name} { - row-gap: $size; - } -} - -.list-none { - list-style-type: none; -} diff --git a/app/@core/scss/base/_variables.scss b/app/@core/scss/base/_variables.scss deleted file mode 100644 index c8d1544d..00000000 --- a/app/@core/scss/base/_variables.scss +++ /dev/null @@ -1,198 +0,0 @@ -@use "vuetify/lib/styles/tools/functions" as *; - -/* - TODO: Add docs on when to use placeholder vs when to use SASS variable - - Placeholder - - When we want to keep customization to our self between templates use it - - Variables - - When we want to allow customization from both user and our side - - You can also use variable for consistency (e.g. mx 1 rem should be applied to both vertical nav items and vertical nav header) -*/ - -@forward "@base/@layouts/styles/variables" with ( - // Adjust z-index so vertical nav & overlay stays on top of v-layout in v-main. E.g. Email app - $layout-vertical-nav-z-index: 1003, - $layout-overlay-z-index: 1002, -); -@use "@base/@layouts/styles/variables" as *; - -// 👉 Default layout - -$navbar-high-emphasis-text: true !default; - -// @forward "@base/@layouts/styles/variables" with ( -// $layout-vertical-nav-width: 350px !default, -// ); - -$theme-colors-name: ( - "primary", - "secondary", - "error", - "info", - "success", - "warning" -) !default; - -// 👉 Default layout with vertical nav - -$default-layout-with-vertical-nav-navbar-footer-roundness: 10px !default; - -// 👉 Vertical nav -$vertical-nav-background-color-rgb: var(--v-theme-background) !default; -$vertical-nav-background-color: rgb(#{$vertical-nav-background-color-rgb}) !default; - -// â„šī¸ This is used to keep consistency between nav items and nav header left & right margin -// This is used by nav items & nav header -$vertical-nav-horizontal-spacing: 1rem !default; -$vertical-nav-horizontal-padding: 0.75rem !default; - -// Vertical nav header height. Mostly we will align it with navbar height; -$vertical-nav-header-height: $layout-vertical-nav-navbar-height !default; -$vertical-nav-navbar-elevation: 3 !default; -$vertical-nav-navbar-style: "elevated" !default; // options: elevated, floating -$vertical-nav-floating-navbar-top: 1rem !default; - -// Vertical nav header padding -$vertical-nav-header-padding: 1rem $vertical-nav-horizontal-padding !default; -$vertical-nav-header-inline-spacing: $vertical-nav-horizontal-spacing !default; - -// Move logo when vertical nav is mini (collapsed but not hovered) -$vertical-nav-header-logo-translate-x-when-vertical-nav-mini: -4px !default; - -// Space between logo and title -$vertical-nav-header-logo-title-spacing: 0.9rem !default; - -// Section title margin top (when its not first child) -$vertical-nav-section-title-mt: 1.5rem !default; - -// Section title margin bottom -$vertical-nav-section-title-mb: 0.5rem !default; - -// Vertical nav icons -$vertical-nav-items-icon-size: 1.5rem !default; -$vertical-nav-items-nested-icon-size: 0.9rem !default; -$vertical-nav-items-icon-margin-inline-end: 0.5rem !default; - -// Transition duration for nav group arrow -$vertical-nav-nav-group-arrow-transition-duration: 0.15s !default; - -// Timing function for nav group arrow -$vertical-nav-nav-group-arrow-transition-timing-function: ease-in-out !default; - -// 👉 Horizontal nav - -/* - ❗ Heads up - ================== - Here we assume we will always use shorthand property which will apply same padding on four side - This is because this have been used as value of top property by `.popper-content` -*/ -$horizontal-nav-padding: 0.6875rem !default; - -// Gap between top level horizontal nav items -$horizontal-nav-top-level-items-gap: 4px !default; - -// Horizontal nav icons -$horizontal-nav-items-icon-size: 1.5rem !default; -$horizontal-nav-third-level-icon-size: 0.9rem !default; -$horizontal-nav-items-icon-margin-inline-end: 0.625rem !default; -$horizontal-nav-group-arrow-icon-size: 1.375rem !default; - -// â„šī¸ We used SCSS variable because we want to allow users to update max height of popper content -// 120px is combined height of navbar & horizontal nav -$horizontal-nav-popper-content-max-height: calc(100dvh - 120px - 4rem) !default; - -// â„šī¸ This variable is used for horizontal nav popper content's `margin-top` and "The bridge"'s height. We need to sync both values. -$horizontal-nav-popper-content-top: calc($horizontal-nav-padding + 0.375rem) !default; - -// 👉 Plugins - -$plugin-ps-thumb-y-dark: rgba(var(--v-theme-surface-variant), 0.35) !default; - -// 👉 Vuetify - -// Used in src/@base/@core/scss/base/libs/vuetify/_overrides.scss -$vuetify-reduce-default-compact-button-icon-size: true !default; - -// 👉 Custom variables -// for utility classes -$font-sizes: () !default; -$font-sizes: map-deep-merge( - ( - "xs": 0.75rem, - "sm": 0.875rem, - "base": 1rem, - "lg": 1.125rem, - "xl": 1.25rem, - "2xl": 1.5rem, - "3xl": 1.875rem, - "4xl": 2.25rem, - "5xl": 3rem, - "6xl": 3.75rem, - "7xl": 4.5rem, - "8xl": 6rem, - "9xl": 8rem - ), - $font-sizes -); - -// line height -$font-line-height: () !default; -$font-line-height: map-deep-merge( - ( - "xs": 1rem, - "sm": 1.25rem, - "base": 1.5rem, - "lg": 1.75rem, - "xl": 1.75rem, - "2xl": 2rem, - "3xl": 2.25rem, - "4xl": 2.5rem, - "5xl": 1, - "6xl": 1, - "7xl": 1, - "8xl": 1, - "9xl": 1 - ), - $font-line-height -); - -// gap utility class -$gap: () !default; -$gap: map-deep-merge( - ( - "0": 0, - "1": 0.25rem, - "2": 0.5rem, - "3": 0.75rem, - "4": 1rem, - "5": 1.25rem, - "6":1.5rem, - "7": 1.75rem, - "8": 2rem, - "9": 2.25rem, - "10": 2.5rem, - "11": 2.75rem, - "12": 3rem, - "14": 3.5rem, - "16": 4rem, - "20": 5rem, - "24": 6rem, - "28": 7rem, - "32": 8rem, - "36": 9rem, - "40": 10rem, - "44": 11rem, - "48": 12rem, - "52": 13rem, - "56": 14rem, - "60": 15rem, - "64": 16rem, - "72": 18rem, - "80": 20rem, - "96": 24rem - ), - $gap -); diff --git a/app/@core/scss/base/_vertical-nav.scss b/app/@core/scss/base/_vertical-nav.scss deleted file mode 100644 index 2a8a0e0a..00000000 --- a/app/@core/scss/base/_vertical-nav.scss +++ /dev/null @@ -1,261 +0,0 @@ -@use "@base/@core/scss/base/placeholders" as *; -@use "@base/@core/scss/template/placeholders" as *; -@use "@base/@layouts/styles/mixins" as layoutsMixins; -@use "@base/configured-variables" as variables; -@use "@base/@core/scss/base/mixins" as mixins; -@use "vuetify/lib/styles/tools/states" as vuetifyStates; - -.layout-nav-type-vertical { - // 👉 Layout Vertical nav - .layout-vertical-nav { - $sl-layout-nav-type-vertical: &; - - @extend %nav; - - @at-root { - // â„šī¸ Add styles for collapsed vertical nav - .layout-vertical-nav-collapsed#{$sl-layout-nav-type-vertical}.hovered { - @include mixins.elevation(6); - } - } - - background-color: variables.$vertical-nav-background-color; - - // 👉 Nav header - .nav-header { - overflow: hidden; - padding: variables.$vertical-nav-header-padding; - margin-inline: variables.$vertical-nav-header-inline-spacing; - min-block-size: variables.$vertical-nav-header-height; - - // TEMPLATE: Check if we need to move this to master - .app-logo { - flex-shrink: 0; - transition: transform 0.25s ease-in-out; - - @at-root { - // Move logo a bit to align center with the icons in vertical nav mini variant - .layout-vertical-nav-collapsed#{$sl-layout-nav-type-vertical}:not(.hovered) .nav-header .app-logo { - transform: translateX(variables.$vertical-nav-header-logo-translate-x-when-vertical-nav-mini); - - @include layoutsMixins.rtl { - transform: translateX(-(variables.$vertical-nav-header-logo-translate-x-when-vertical-nav-mini)); - } - } - } - } - - .app-title { - margin-inline-start: variables.$vertical-nav-header-logo-title-spacing; - } - - .header-action { - @extend %nav-header-action; - } - } - - // 👉 Nav items shadow - .vertical-nav-items-shadow { - position: absolute; - z-index: 1; - background: - linear-gradient( - rgb(#{variables.$vertical-nav-background-color-rgb}) 5%, - rgba(#{variables.$vertical-nav-background-color-rgb}, 75%) 45%, - rgba(#{variables.$vertical-nav-background-color-rgb}, 20%) 80%, - transparent - ); - block-size: 55px; - inline-size: 100%; - inset-block-start: calc(#{variables.$vertical-nav-header-height} - 2px); - opacity: 0; - pointer-events: none; - transition: opacity 0.15s ease-in-out; - will-change: opacity; - - @include layoutsMixins.rtl { - transform: translateX(8px); - } - } - - &.scrolled { - .vertical-nav-items-shadow { - opacity: 1; - } - } - - // â„šī¸ Setting z-index 1 will make perfect scrollbar thumb appear on top of vertical nav items shadow; - .ps__rail-y { - z-index: 1; - } - - // 👉 Nav section title - .nav-section-title { - @extend %vertical-nav-item; - @extend %vertical-nav-section-title; - - margin-block-end: variables.$vertical-nav-section-title-mb; - - &:not(:first-child) { - margin-block-start: variables.$vertical-nav-section-title-mt; - } - - .placeholder-icon { - margin-inline: auto; - } - } - - // Nav item badge - .nav-item-badge { - @extend %vertical-nav-item-badge; - } - - // 👉 Nav group & Link - .nav-link, - .nav-group { - overflow: hidden; - - > :first-child { - @extend %vertical-nav-item; - @extend %vertical-nav-item-interactive; - } - - .nav-item-icon { - @extend %vertical-nav-items-icon; - } - - &.disabled { - opacity: var(--v-disabled-opacity); - pointer-events: none; - } - - a { - outline: none; - } - } - - // 👉 Vertical nav link - .nav-link { - @extend %nav-link; - - > .router-link-exact-active { - @extend %nav-link-active; - } - - > a { - // Adds before psudo element to style hover state - @include mixins.before-pseudo; - - // Adds vuetify states - - &:not(.router-link-active, .router-link-exact-active) { - @include vuetifyStates.states($active: false); - } - } - } - - // 👉 Vertical nav group - .nav-group { - // Reduce the size of icon if link/group is inside group - .nav-group, - .nav-link { - .nav-item-icon { - @extend %vertical-nav-items-nested-icon; - - font-size: 1rem; - } - } - - // Hide icons after 2nd level - & .nav-group { - .nav-link, - .nav-group { - .nav-item-icon { - @extend %vertical-nav-items-icon-after-2nd-level; - } - } - } - - .nav-group-arrow { - flex-shrink: 0; - transform-origin: center; - transition: transform variables.$vertical-nav-nav-group-arrow-transition-duration variables.$vertical-nav-nav-group-arrow-transition-timing-function; - will-change: transform; - } - - // Rotate arrow icon if group is opened - &.open { - > .nav-group-label .nav-group-arrow { - transform: rotateZ(90deg); - } - } - - // Nav group label - > :first-child { - // Adds before psudo element to style hover state - @include mixins.before-pseudo; - } - - &:not(.active,.open) > :first-child { - // Adds vuetify states - @include vuetifyStates.states($active: false); - } - - // Active & open states for nav group label - &.active, - &.open { - > :first-child { - @extend %vertical-nav-group-open-active; - } - } - } - } -} - -// SECTION: Transitions -.vertical-nav-section-title-enter-active, -.vertical-nav-section-title-leave-active { - transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; -} - -.vertical-nav-section-title-enter-from, -.vertical-nav-section-title-leave-to { - opacity: 0; - transform: translateX(15px); - - @include layoutsMixins.rtl { - transform: translateX(-15px); - } -} - -.transition-slide-x-enter-active, -.transition-slide-x-leave-active { - transition: opacity 0.1s ease-in-out, transform 0.12s ease-in-out; -} - -.transition-slide-x-enter-from, -.transition-slide-x-leave-to { - opacity: 0; - transform: translateX(-15px); - - @include layoutsMixins.rtl { - transform: translateX(15px); - } -} - -.vertical-nav-app-title-enter-active, -.vertical-nav-app-title-leave-active { - transition: opacity 0.1s ease-in-out, transform 0.12s ease-in-out; -} - -.vertical-nav-app-title-enter-from, -.vertical-nav-app-title-leave-to { - opacity: 0; - transform: translateX(-15px); - - @include layoutsMixins.rtl { - transform: translateX(15px); - } -} - -// !SECTION diff --git a/app/@core/scss/base/libs/_perfect-scrollbar.scss b/app/@core/scss/base/libs/_perfect-scrollbar.scss deleted file mode 100644 index 126aea2a..00000000 --- a/app/@core/scss/base/libs/_perfect-scrollbar.scss +++ /dev/null @@ -1,35 +0,0 @@ -$ps-size: 0.25rem; -$ps-hover-size: 0.375rem; -$ps-track-size: 0.5rem; - -.ps__thumb-y { - inline-size: $ps-size !important; - inset-inline-end: 0.0625rem; -} - -.ps__thumb-y, -.ps__thumb-x { - background-color: rgb(var(--v-theme-perfect-scrollbar-thumb)) !important; -} - -.ps__thumb-x { - block-size: $ps-size !important; -} - -.ps__rail-x { - background: transparent !important; - block-size: $ps-track-size; -} - -.ps__rail-y { - background: transparent !important; - inline-size: $ps-track-size !important; - inset-inline-end: 0.125rem !important; - inset-inline-start: unset !important; -} - -.ps__rail-y.ps--clicking .ps__thumb-y, -.ps__rail-y:focus > .ps__thumb-y, -.ps__rail-y:hover > .ps__thumb-y { - inline-size: $ps-hover-size !important; -} diff --git a/app/@core/scss/base/libs/vuetify/_index.scss b/app/@core/scss/base/libs/vuetify/_index.scss deleted file mode 100644 index f33ef3f4..00000000 --- a/app/@core/scss/base/libs/vuetify/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@use "overrides"; diff --git a/app/@core/scss/base/libs/vuetify/_overrides.scss b/app/@core/scss/base/libs/vuetify/_overrides.scss deleted file mode 100644 index aa6880e4..00000000 --- a/app/@core/scss/base/libs/vuetify/_overrides.scss +++ /dev/null @@ -1,257 +0,0 @@ -@use "@base/@core/scss/base/utils"; -@use "@base/configured-variables" as variables; - -// 👉 Application -// â„šī¸ We need accurate vh in mobile devices as well -.v-application__wrap { - /* stylelint-disable-next-line liberty/use-logical-spec */ - min-height: 100dvh; -} - -// 👉 Typography -h1, -h2, -h3, -h4, -h5, -h6, -.text-h1, -.text-h2, -.text-h3, -.text-h4, -.text-h5, -.text-h6, -.text-button, -.text-overline, -.v-card-title { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); -} - -body, -.text-body-1, -.text-body-2, -.text-subtitle-1, -.text-subtitle-2 { - color: rgba(var(--v-theme-on-background), var(--v-medium-emphasis-opacity)); -} - -// 👉 Grid -// Remove margin-bottom of v-input_details inside grid (validation error message) -.v-row { - .v-col, - [class^="v-col-*"] { - .v-input__details { - margin-block-end: 0; - } - } -} - -// 👉 Button -@if variables.$vuetify-reduce-default-compact-button-icon-size { - .v-btn--density-compact.v-btn--size-default { - .v-btn__content > svg { - block-size: 22px; - font-size: 22px; - inline-size: 22px; - } - } -} - -// 👉 Card -// Removes padding-top for immediately placed v-card-text after itself -.v-card-text { - & + & { - padding-block-start: 0 !important; - } -} - -/* - 👉 Checkbox & Radio Ripple - - TODO Checkbox and switch component. Remove it when vuetify resolve the extra spacing: https://github.com/vuetifyjs/vuetify/issues/15519 - We need this because form elements likes checkbox and switches are by default set to height of textfield height which is way big than we want - Tested with checkbox & switches -*/ -.v-checkbox.v-input, -.v-switch.v-input { - --v-input-control-height: auto; - - flex: unset; -} - -.v-radio-group { - .v-selection-control-group { - .v-radio:not(:last-child) { - margin-inline-end: 0.9rem; - } - } -} - -/* - 👉 Tabs - Disable tab transition - - This is for tabs where we don't have card wrapper to tabs and have multiple cards as tab content. - - This class will disable transition and adds `overflow: unset` on `VWindow` to allow spreading shadow -*/ -.disable-tab-transition { - overflow: unset !important; - - .v-window__container { - block-size: auto !important; - } - - .v-window-item:not(.v-window-item--active) { - display: none !important; - } - - .v-window__container .v-window-item { - transform: none !important; - } -} - -// 👉 List -.v-list { - // Set icons opacity to .87 - .v-list-item__prepend > .v-icon, - .v-list-item__append > .v-icon { - opacity: var(--v-high-emphasis-opacity); - } -} - -// 👉 Card list - -/* - â„šī¸ Custom class - - Remove list spacing inside card - - This is because card title gets padding of 20px and list item have padding of 16px. Moreover, list container have padding-bottom as well. -*/ -.card-list { - --v-card-list-gap: 20px; - - &.v-list { - padding-block: 0; - } - - .v-list-item { - min-block-size: unset; - min-block-size: auto !important; - padding-block: 0 !important; - padding-inline: 0 !important; - - > .v-ripple__container { - opacity: 0; - } - - &:not(:last-child) { - padding-block-end: var(--v-card-list-gap) !important; - } - } - - .v-list-item:hover, - .v-list-item:focus, - .v-list-item:active, - .v-list-item.active { - > .v-list-item__overlay { - opacity: 0 !important; - } - } -} - -// 👉 Divider -.v-divider { - color: rgb(var(--v-border-color)); -} - -.v-divider.v-divider--vertical { - block-size: inherit; -} - -// 👉 DataTable -.v-data-table { - /* stylelint-disable-next-line no-descending-specificity */ - .v-checkbox-btn .v-selection-control__wrapper { - margin-inline-start: 0 !important; - } - - .v-selection-control { - display: flex !important; - } - - .v-pagination { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - } -} - -// 👉 v-field -.v-field:hover .v-field__outline { - --v-field-border-opacity: var(--v-medium-emphasis-opacity); -} - -// 👉 VLabel -.v-label { - opacity: 1 !important; - - &:not(.v-field-label--floating) { - color: rgba(var(--v-theme-on-background), var(--v-medium-emphasis-opacity)); - } -} - -// 👉 Overlay -.v-overlay__scrim, -.v-navigation-drawer__scrim { - background: rgba(var(--v-overlay-scrim-background), var(--v-overlay-scrim-opacity)) !important; - opacity: 1 !important; -} - -// 👉 VMessages -.v-messages { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - opacity: 1 !important; -} - -// 👉 Alert close btn -.v-alert__close { - .v-btn--icon .v-icon { - --v-icon-size-multiplier: 1.5; - } -} - -// 👉 Badge icon alignment -.v-badge__badge { - display: flex; - align-items: center; -} - -// 👉 Btn focus outline style removed -.v-btn:focus-visible::after { - opacity: 0 !important; -} - -// .v-select chip spacing for slot -.v-input:not(.v-select--chips) .v-select__selection { - .v-chip { - margin-block: 2px var(--select-chips-margin-bottom); - } -} - -// 👉 VCard and VList subtitle color -.v-card-subtitle, -.v-list-item-subtitle { - color: rgba(var(--v-theme-on-background), var(--v-medium-emphasis-opacity)); -} - -// 👉 placeholders -.v-field__input { - @at-root { - & input::placeholder, - input#{&}::placeholder, - textarea#{&}::placeholder { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)) !important; - opacity: 1 !important; - } - } -} diff --git a/app/@core/scss/base/libs/vuetify/_variables.scss b/app/@core/scss/base/libs/vuetify/_variables.scss deleted file mode 100644 index 0719d005..00000000 --- a/app/@core/scss/base/libs/vuetify/_variables.scss +++ /dev/null @@ -1,64 +0,0 @@ -@use "sass:map"; - -/* 👉 Shadow opacities */ -$shadow-key-umbra-opacity-custom: var(--v-shadow-key-umbra-opacity); -$shadow-key-penumbra-opacity-custom: var(--v-shadow-key-penumbra-opacity); -$shadow-key-ambient-opacity-custom: var(--v-shadow-key-ambient-opacity); - -/* 👉 Card transition properties */ -$card-transition-property-custom: box-shadow, opacity; - -@forward "vuetify/settings" with ( - // 👉 General settings - $color-pack: false !default, - - // 👉 Shadow opacity - $shadow-key-umbra-opacity: $shadow-key-umbra-opacity-custom !default, - $shadow-key-penumbra-opacity: $shadow-key-penumbra-opacity-custom !default, - $shadow-key-ambient-opacity: $shadow-key-ambient-opacity-custom !default, - - // 👉 Card - $card-color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)) !default, - $card-elevation: 6 !default, - $card-title-line-height: 1.6 !default, - $card-actions-min-height: unset !default, - $card-text-padding: 1.25rem !default, - $card-item-padding: 1.25rem !default, - $card-actions-padding: 0 12px 12px !default, - $card-transition-property: $card-transition-property-custom !default, - $card-subtitle-opacity: 1 !default, - - // 👉 Expansion Panel - $expansion-panel-active-title-min-height: 48px !default, - - // 👉 List - $list-item-icon-margin-end: 16px !default, - $list-item-icon-margin-start: 16px !default, - $list-item-subtitle-opacity: 1 !default, - - // 👉 Navigation Drawer - $navigation-drawer-content-overflow-y: hidden !default, - - // 👉 Tooltip - $tooltip-background-color: rgba(59, 55, 68, 0.9) !default, - $tooltip-text-color: rgb(var(--v-theme-on-primary)) !default, - $tooltip-font-size: 0.75rem !default, - - $button-icon-density: ("default": 2, "comfortable": 0, "compact": -1 ) !default, - - // 👉 VTimeline - $timeline-dot-size: 34px !default, - - // 👉 table - $table-transition-property: height !default, - - // 👉 VOverlay - $overlay-opacity: 1 !default, - - // 👉 VContainer - $container-max-widths: ( - "xl": 1440px, - "xxl": 1440px - ) !default, - -); diff --git a/app/@core/scss/base/placeholders/_default-layout-horizontal-nav.scss b/app/@core/scss/base/placeholders/_default-layout-horizontal-nav.scss deleted file mode 100644 index c18d80f3..00000000 --- a/app/@core/scss/base/placeholders/_default-layout-horizontal-nav.scss +++ /dev/null @@ -1,27 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "misc"; -@use "@base/@core/scss/base/mixins"; - -%default-layout-horizontal-nav-navbar-and-nav-container { - @include mixins.elevation(3); - - // â„šī¸ 1000 is v-window z-index - z-index: 1001; - background-color: rgb(var(--v-theme-surface)); - - &.header-blur { - @extend %blurry-bg; - } -} - -%default-layout-horizontal-nav-navbar { - border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); -} - -%default-layout-horizontal-nav-nav { - padding-block: variables.$horizontal-nav-padding; -} - -%default-layout-horizontal-nav-nav-items-list { - gap: variables.$horizontal-nav-top-level-items-gap; -} diff --git a/app/@core/scss/base/placeholders/_default-layout-vertical-nav.scss b/app/@core/scss/base/placeholders/_default-layout-vertical-nav.scss deleted file mode 100644 index eb38177f..00000000 --- a/app/@core/scss/base/placeholders/_default-layout-vertical-nav.scss +++ /dev/null @@ -1,45 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "misc"; -@use "@base/@core/scss/base/mixins"; - -%default-layout-vertical-nav-scrolled-sticky-elevated-nav { - background-color: rgb(var(--v-theme-surface)); -} - -%default-layout-vertical-nav-floating-navbar-and-sticky-elevated-navbar-scrolled { - @include mixins.elevation(variables.$vertical-nav-navbar-elevation); - - // If navbar is contained => Squeeze navbar content on scroll - @if variables.$layout-vertical-nav-navbar-is-contained { - padding-inline: 1.2rem; - } -} - -%default-layout-vertical-nav-floating-navbar-overlay { - isolation: isolate; - - &::after { - position: absolute; - z-index: -1; - /* stylelint-disable property-no-vendor-prefix */ - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - /* stylelint-enable */ - background: - linear-gradient( - 180deg, - rgba(var(--v-theme-background), 70%) 44%, - rgba(var(--v-theme-background), 43%) 73%, - rgba(var(--v-theme-background), 0%) - ); - background-repeat: repeat; - block-size: calc(variables.$layout-vertical-nav-navbar-height + variables.$vertical-nav-floating-navbar-top + 0.5rem); - content: ""; - inset-block-start: -(variables.$vertical-nav-floating-navbar-top); - inset-inline: 0; - /* stylelint-disable property-no-vendor-prefix */ - -webkit-mask: linear-gradient(black, black 18%, transparent 100%); - mask: linear-gradient(black, black 18%, transparent 100%); - /* stylelint-enable */ - } -} diff --git a/app/@core/scss/base/placeholders/_default-layout.scss b/app/@core/scss/base/placeholders/_default-layout.scss deleted file mode 100644 index 8e5e9906..00000000 --- a/app/@core/scss/base/placeholders/_default-layout.scss +++ /dev/null @@ -1,3 +0,0 @@ -%layout-navbar { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); -} diff --git a/app/@core/scss/base/placeholders/_horizontal-nav.scss b/app/@core/scss/base/placeholders/_horizontal-nav.scss deleted file mode 100644 index 34b1b8d9..00000000 --- a/app/@core/scss/base/placeholders/_horizontal-nav.scss +++ /dev/null @@ -1,98 +0,0 @@ -@use "@base/@layouts/styles/mixins" as layoutsMixins; -@use "@base/@core/scss/base/variables"; -@use "@base/@layouts/styles/placeholders"; -@use "@base/@core/scss/base/mixins"; - -// Horizontal nav item styles (including nested) -%horizontal-nav-item { - padding-block: 0.6rem; - padding-inline: 1rem; -} - -// Top level horizontal nav item styles (`a` tag & group label) -%horizontal-nav-top-level-item { - border-radius: 0.4rem; -} - -%horizontal-nav-disabled { - opacity: var(--v-disabled-opacity); - pointer-events: none; -} - -// Active styles for sub nav link -%horizontal-nav-sub-nav-link-active { - background: rgba(var(--v-theme-primary), 0.1); - color: rgb(var(--v-theme-primary)); -} - -/* - â„šī¸ This style is required when you don't provide any transition to horizontal nav items via themeConfig `themeConfig.horizontalNav.transition` - Also, you have to disable it if you are using transition -*/ -// Popper content styles when it's hidden -%horizontal-nav-popper-content-hidden { - // display: none; - - // opacity: 0; - // pointer-events: none; - // transform: translateY(7px); - // transition: transform 0.25s ease-in-out, opacity 0.15s ease-in-out; -} - -/* - â„šī¸ This style is required when you don't provide any transition to horizontal nav items via themeConfig `themeConfig.horizontalNav.transition` - Also, you have to disable it if you are using transition -*/ -// Popper content styles when it's shown -%horizontal-nav-popper-content-visible { - // display: block; - - // opacity: 1; - // pointer-events: auto; - // pointer-events: auto; - // transform: translateY(0); -} - -// Horizontal nav item icon (Including sub nav items) -%horizontal-nav-item-icon { - font-size: variables.$horizontal-nav-items-icon-size; - margin-inline-end: variables.$horizontal-nav-items-icon-margin-inline-end; -} - -// Horizontal nav subitem -%horizontal-nav-subitem { - min-inline-size: 12rem; - - .nav-item-title { - margin-inline-end: 1rem; - } -} - -// Styles for third level item icon/ (e.g. Reduce the icon's size of nested group's nav links (Top level group > Sub group > [Nav links])) -%third-level-nav-item-icon { - font-size: variables.$horizontal-nav-third-level-icon-size; - margin-inline: calc((variables.$horizontal-nav-items-icon-size - variables.$horizontal-nav-third-level-icon-size) / 2) 0.75rem; - - /* - â„šī¸ `margin-inline` will be (normal icon font-size - small icon font-size) / 2 - (1.5rem - 0.9rem) / 2 => 0.6rem / 2 => 0.3rem - */ -} - -// Horizontal nav item title -%horizontal-nav-item-title { - margin-inline-end: 0.3rem; - white-space: nowrap; -} - -// Popper content styles -%horizontal-nav-popper-content { - @include mixins.elevation(4); - - border-radius: 6px; - padding-block: 0.3rem; - - > div { - @extend %style-scroll-bar; - } -} diff --git a/app/@core/scss/base/placeholders/_index.scss b/app/@core/scss/base/placeholders/_index.scss deleted file mode 100644 index e2ad1776..00000000 --- a/app/@core/scss/base/placeholders/_index.scss +++ /dev/null @@ -1,7 +0,0 @@ -@forward "horizontal-nav"; -@forward "vertical-nav"; -@forward "nav"; -@forward "default-layout"; -@forward "default-layout-vertical-nav"; -@forward "default-layout-horizontal-nav"; -@forward "misc"; diff --git a/app/@core/scss/base/placeholders/_misc.scss b/app/@core/scss/base/placeholders/_misc.scss deleted file mode 100644 index 0a26f993..00000000 --- a/app/@core/scss/base/placeholders/_misc.scss +++ /dev/null @@ -1,7 +0,0 @@ -%blurry-bg { - /* stylelint-disable property-no-vendor-prefix */ - -webkit-backdrop-filter: blur(6px); - backdrop-filter: blur(6px); - /* stylelint-enable */ - background-color: rgb(var(--v-theme-surface), 0.7); -} diff --git a/app/@core/scss/base/placeholders/_nav.scss b/app/@core/scss/base/placeholders/_nav.scss deleted file mode 100644 index 40abadd2..00000000 --- a/app/@core/scss/base/placeholders/_nav.scss +++ /dev/null @@ -1,33 +0,0 @@ -@use "@base/@core/scss/base/mixins"; - -// â„šī¸ This is common style that needs to be applied to both navs -%nav { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - - .nav-item-title { - letter-spacing: 0.15px; - } - - .nav-section-title { - letter-spacing: 0.4px; - } -} - -/* - Active nav link styles for horizontal & vertical nav - - For horizontal nav it will be only applied to top level nav items - For vertical nav it will be only applied to nav links (not nav groups) -*/ -%nav-link-active { - background-color: rgb(var(--v-global-theme-primary)); - color: rgb(var(--v-theme-on-primary)); - - @include mixins.elevation(3); -} - -%nav-link { - a { - color: inherit; - } -} diff --git a/app/@core/scss/base/placeholders/_vertical-nav.scss b/app/@core/scss/base/placeholders/_vertical-nav.scss deleted file mode 100644 index 8c7b9b23..00000000 --- a/app/@core/scss/base/placeholders/_vertical-nav.scss +++ /dev/null @@ -1,80 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; -@use "vuetify/lib/styles/tools/states" as vuetifyStates; - -%nav-header-action { - font-size: 1.25rem; -} - -// Nav items styles (including section title) -%vertical-nav-item { - margin-block: 0; - margin-inline: variables.$vertical-nav-horizontal-spacing; - padding-block: 0; - padding-inline: variables.$vertical-nav-horizontal-padding; - white-space: nowrap; -} - -// This is same as `%vertical-nav-item` except section title is excluded -%vertical-nav-item-interactive { - border-radius: 0.4rem; - block-size: 2.75rem; - - /* - â„šī¸ We will use `margin-block-end` instead of `margin-block` to give more space for shadow to appear. - With `margin-block`, due to small space (space gets divided between top & bottom) shadow cuts - */ - margin-block-end: 0.375rem; -} - -// Common styles for nav item icon styles -// â„šī¸ Nav group's children icon styles are not here (Adjusts height, width & margin) -%vertical-nav-items-icon { - flex-shrink: 0; - font-size: variables.$vertical-nav-items-icon-size; - margin-inline-end: variables.$vertical-nav-items-icon-margin-inline-end; -} - -// â„šī¸ Icon styling for icon nested inside another nav item (2nd level) -%vertical-nav-items-nested-icon { - /* - â„šī¸ `margin-inline` will be (normal icon font-size - small icon font-size) / 2 - (1.5rem - 0.9rem) / 2 => 0.6rem / 2 => 0.3rem - */ - $vertical-nav-items-nested-icon-margin-inline: calc((variables.$vertical-nav-items-icon-size - variables.$vertical-nav-items-nested-icon-size) / 2); - - font-size: variables.$vertical-nav-items-nested-icon-size; - margin-inline: $vertical-nav-items-nested-icon-margin-inline $vertical-nav-items-nested-icon-margin-inline + variables.$vertical-nav-items-icon-margin-inline-end; -} - -%vertical-nav-items-icon-after-2nd-level { - visibility: hidden; -} - -// Open & Active nav group styles -%vertical-nav-group-open-active { - @include mixins.selected-states("&::before"); -} - -// Section title -// â„šī¸ Setting height will prevent jerking when text & icon is toggled -%vertical-nav-section-title { - block-size: 1.5rem; - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - font-size: 0.75rem; - text-transform: uppercase; -} - -// Vertical nav item badge styles -%vertical-nav-item-badge { - display: inline-block; - border-radius: 1.5rem; - font-size: 0.8em; - font-weight: 500; - line-height: 1; - padding-block: 0.25em; - padding-inline: 0.55em; - text-align: center; - vertical-align: baseline; - white-space: nowrap; -} diff --git a/app/@core/scss/base/skins/_bordered.scss b/app/@core/scss/base/skins/_bordered.scss deleted file mode 100644 index ade00d92..00000000 --- a/app/@core/scss/base/skins/_bordered.scss +++ /dev/null @@ -1,72 +0,0 @@ -@use "sass:map"; -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; -@use "../utils"; - -$header: ".layout-navbar"; - -@if variables.$layout-vertical-nav-navbar-is-contained { - $header: ".layout-navbar .navbar-content-container"; -} - -.skin--bordered { - @include mixins.bordered-skin(".v-card:not(.v-card--flat)"); - @include mixins.bordered-skin(".v-menu .v-overlay__content > .v-card, .v-menu .v-overlay__content > .v-sheet, .v-menu .v-overlay__content > .v-list"); - @include mixins.bordered-skin(".popper-content"); - - // Navbar - // -- Horizontal - @include mixins.bordered-skin(".layout-navbar-and-nav-container", "border-bottom"); - - // -- Vertical - // â„šī¸ We have added `.layout-navbar-sticky` as well in selector because we don't want to add borders if navbar is static - @if variables.$layout-vertical-nav-navbar-is-contained { - @include mixins.bordered-skin(".layout-nav-type-vertical.window-scrolled.layout-navbar-sticky #{$header}"); - .layout-nav-type-vertical.window-scrolled #{$header} { - border-block-start: none !important; - } - } - // stylelint-disable-next-line @stylistic/indentation - @else { - @include mixins.bordered-skin(".layout-nav-type-vertical.window-scrolled.layout-navbar-sticky #{$header}", "border-bottom"); - } - - // Footer - // -- Vertical - @include mixins.bordered-skin(".layout-nav-type-vertical.layout-footer-sticky .layout-footer .footer-content-container"); - - .layout-nav-type-vertical.layout-footer-sticky .layout-footer .footer-content-container { - border-block-end: none; - } - - // -- Horizontal - @include mixins.bordered-skin(".layout-nav-type-horizontal.layout-footer-sticky .layout-footer"); - - .layout-nav-type-horizontal.layout-footer-sticky .layout-footer { - border-block-end: none; - } - - // Vertical Nav - .layout-vertical-nav { - border-inline-end: thin solid rgba(var(--v-border-color), var(--v-border-opacity)); - } - - // Expansion Panels - .v-expansion-panels:not(.customized-panels) { - .v-expansion-panel__shadow { - box-shadow: none !important; - } - - .v-expansion-panel { - border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - - &:not(:last-child) { - margin-block-end: -1px; - } - - &::after { - content: none; - } - } - } -} diff --git a/app/@core/scss/base/skins/_index.scss b/app/@core/scss/base/skins/_index.scss deleted file mode 100644 index 19f609f4..00000000 --- a/app/@core/scss/base/skins/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@use "bordered"; diff --git a/app/@core/scss/template/_default-layout-w-horizontal-nav.scss b/app/@core/scss/template/_default-layout-w-horizontal-nav.scss deleted file mode 100644 index 0be0672f..00000000 --- a/app/@core/scss/template/_default-layout-w-horizontal-nav.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "@base/@core/scss/base/placeholders" as *; -@use "@base/@core/scss/template/placeholders" as *; -@use "@base/@core/scss/base/mixins"; - -.layout-wrapper.layout-nav-type-horizontal { - // 👉 App footer - .layout-footer { - @at-root { - .layout-footer-sticky#{&} { - box-shadow: 0 -4px 8px -4px rgba(var(--v-shadow-key-umbra-color), 42%); - } - } - } - - // TODO: Use Vuetify grid sass variable here - .layout-page-content { - padding-block: 1.5rem; - } -} diff --git a/app/@core/scss/template/_default-layout-w-vertical-nav.scss b/app/@core/scss/template/_default-layout-w-vertical-nav.scss deleted file mode 100644 index 6ba9ae84..00000000 --- a/app/@core/scss/template/_default-layout-w-vertical-nav.scss +++ /dev/null @@ -1,28 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "@base/@core/scss/base/mixins"; - -$header: ".layout-navbar"; - -@if variables.$layout-vertical-nav-navbar-is-contained { - $header: ".layout-navbar .navbar-content-container"; -} - -.layout-wrapper.layout-nav-type-vertical { - // 👉 Layout footer - .layout-footer { - $ele-layout-footer: &; - - .footer-content-container { - // Sticky footer - @at-root { - // â„šī¸ .layout-footer-sticky#{$ele-layout-footer} => .layout-footer-sticky.layout-wrapper.layout-nav-type-vertical .layout-footer - .layout-footer-sticky#{$ele-layout-footer} { - .footer-content-container { - box-shadow: 0 -4px 8px -4px rgba(var(--v-shadow-key-umbra-color), 42%); - padding-inline: 1.5rem; - } - } - } - } - } -} diff --git a/app/@core/scss/template/_utilities.scss b/app/@core/scss/template/_utilities.scss deleted file mode 100644 index 2c7956ba..00000000 --- a/app/@core/scss/template/_utilities.scss +++ /dev/null @@ -1,68 +0,0 @@ -.v-timeline { - .v-timeline-item { - .app-timeline-title { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-size: 15px; - font-weight: 500; - letter-spacing: 0.15px; - line-height: 1.375rem; - } - - .app-timeline-meta { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - font-size: 13px; - letter-spacing: 0.4px; - line-height: 1.125rem; - } - - .app-timeline-text { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - font-size: 1rem; - line-height: 1.375rem; - } - } -} - -.per-page-select { - margin-block: auto; - - .v-field__input { - align-items: center; - padding: 2px; - } - - .v-field__append-inner { - align-items: center; - padding: 0; - - .v-icon { - margin-inline-start: 0 !important; - } - } -} - -.leading-normal { - font-weight: 600; - letter-spacing: 0.0094rem; -} - -.bg-custom-background { - background-color: rgb(var(--v-table-header-color)) !important; -} - -// Badge Custom Padding -.badge-custom-padding { - .v-badge__badge { - padding-block: 4px; - padding-inline: 8px; - } -} - -// carousel -.carousel-delimiter-top-end { - .v-carousel__controls { - .v-btn--icon.v-btn--density-default { - inline-size: calc(var(--v-btn-height) + -20px); - } - } -} diff --git a/app/@core/scss/template/_utils.scss b/app/@core/scss/template/_utils.scss deleted file mode 100644 index 2969c214..00000000 --- a/app/@core/scss/template/_utils.scss +++ /dev/null @@ -1,41 +0,0 @@ -@use "sass:string"; - -/* - â„šī¸ This function is helpful when we have multi dimensional value - - Assume we have padding variable `$nav-padding-horizontal: 10px;` - With above variable let's say we use it in some style: - ```scss - .selector { - margin-left: $nav-padding-horizontal; - } - ``` - - Now, problem is we can also have value as `$nav-padding-horizontal: 10px 15px;` - In this case above style will be invalid. - - This function will extract the left most value from the variable value. - - $nav-padding-horizontal: 10px; => 10px; - $nav-padding-horizontal: 10px 15px; => 10px; - - This is safe: - ```scss - .selector { - margin-left: get-first-value($nav-padding-horizontal); - } - ``` -*/ -@function get-first-value($var) { - $start-at: string.index(#{$var}, " "); - - @if $start-at { - @return string.slice( - #{$var}, - 0, - $start-at - ); - } @else { - @return $var; - } -} diff --git a/app/@core/scss/template/_variables.scss b/app/@core/scss/template/_variables.scss deleted file mode 100644 index de60f6d6..00000000 --- a/app/@core/scss/template/_variables.scss +++ /dev/null @@ -1,54 +0,0 @@ -@use "sass:map"; -@use "utils"; - -$vertical-nav-horizontal-padding-custom: 0.75rem; - -/* â„šī¸ We created this SCSS var to extract the start padding - Docs: https://sass-lang.com/documentation/modules/string - $vertical-nav-horizontal-padding => 0 8px; - string.slice(0 8px, 2, -1) => 8px => $card-actions-padding-x */ - -$vertical-nav-horizontal-padding-start: utils.get-first-value($vertical-nav-horizontal-padding-custom) !default; -$vertical-nav-items-icon-margin-inline-end: 0 !default; - -@forward "@base/@core/scss/base/variables" with ( - $layout-vertical-nav-collapsed-width: 70px !default, - // â„šī¸ This is used to keep consistency between nav items and nav header left & right margin - // This is used by nav items & nav header - $vertical-nav-horizontal-spacing: 0 !default, - $vertical-nav-header-inline-spacing: 0 !default, - $vertical-nav-horizontal-padding: $vertical-nav-horizontal-padding-custom !default, - // Vertical nav header padding - $vertical-nav-header-padding: 1.25rem 0 1.25rem $vertical-nav-horizontal-padding-start !default, - - // Vertical nav icons - $vertical-nav-items-icon-size: 1.375rem !default, - $vertical-nav-items-nested-icon-size: 0.5rem !default, - - // Section title margin top (when its not first child) - $vertical-nav-section-title-mt: 1.5rem !default, - - $layout-vertical-nav-footer-height: 54px !default, - - // Horizontal nav icons - $horizontal-nav-items-icon-size: 1.375rem !default, - $horizontal-nav-items-icon-margin-inline-end: 0.5rem !default, - - // 👉 Horizontal nav - $horizontal-nav-padding: 0.5rem !default, - $horizontal-nav-third-level-icon-size: 0.5rem !default, - - // Gap between top level horizontal nav items - $horizontal-nav-top-level-items-gap: 0.25rem !default, - - // â„šī¸ This variable is used for horizontal nav popper content's `margin-top` and "The bridge"'s height. We need to sync both values. - $horizontal-nav-popper-content-top: calc(0.625rem) !default, - - $font-sizes: ( - "sm": 0.8125rem, - "base": 1rem, - ), - $font-line-height: ( - "base": 1.375rem, - ), -); diff --git a/app/@core/scss/template/_vertical-nav.scss b/app/@core/scss/template/_vertical-nav.scss deleted file mode 100644 index 6fa40845..00000000 --- a/app/@core/scss/template/_vertical-nav.scss +++ /dev/null @@ -1,59 +0,0 @@ -@use "@base/@layouts/styles/mixins" as layoutsMixins; - -.layout-nav-type-vertical { - // 👉 Layout Vertical nav - .layout-vertical-nav { - .nav-items { - padding-block: 0.25rem; - padding-inline: 0.75rem; - } - - // 👉 Vertical nav group - .nav-group { - .nav-group-arrow { - font-size: 1.375rem; - } - } - - // 👉 Nav group & Link - // shadow cut issue fix - .nav-link, - .nav-group { - margin-block-end: -0.5rem; - padding-block-end: 0.5rem; - - a { - outline: none; - } - } - - // 👉 Nav section title - .nav-section-title { - .placeholder-icon { - margin-inline-start: 1px; - transform: scaleX(1.6); - } - } - - // 👉 Nav header - .nav-header { - padding-block: 1.25rem; - padding-inline: 1.375rem 1rem; - } - } - - &.layout-vertical-nav-collapsed { - .layout-vertical-nav:not(.hovered) { - .nav-header { - .header-action { - opacity: 0; - } - } - } - } -} - -// 👉 Overlay -.layout-overlay { - touch-action: none; -} diff --git a/app/@core/scss/template/index.scss b/app/@core/scss/template/index.scss deleted file mode 100644 index eab6f0c3..00000000 --- a/app/@core/scss/template/index.scss +++ /dev/null @@ -1,13 +0,0 @@ -@use "sass:map"; -@use "@base/@core/scss/base"; - -// layouts -@use "vertical-nav"; -@use "default-layout-w-vertical-nav"; -@use "default-layout-w-horizontal-nav"; - -// Utilities -@use "utilities"; - -// Skins -@use "skins"; diff --git a/app/@core/scss/template/libs/apex-chart.scss b/app/@core/scss/template/libs/apex-chart.scss deleted file mode 100644 index 7e94d560..00000000 --- a/app/@core/scss/template/libs/apex-chart.scss +++ /dev/null @@ -1,108 +0,0 @@ -@use "@base/styles/variables/_vuetify.scss" as vuetify; -@use "@base/@layouts/styles/mixins" as layoutsMixins; -@use "@base/@core/scss/base/mixins"; - -body .apexcharts-canvas { - &line[stroke="transparent"] { - display: "none"; - } - - .apexcharts-tooltip { - @include mixins.elevation(3); - - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - background: rgb(var(--v-theme-surface)); - - .apexcharts-tooltip-title { - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - background: rgb(var(--v-theme-surface)); - font-weight: 500; - padding-inline: 10px; - } - - &.apexcharts-theme-light { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - } - - &.apexcharts-theme-dark { - color: white; - } - - .apexcharts-tooltip-series-group:first-of-type { - padding-block-end: 0; - } - } - - .apexcharts-xaxistooltip { - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - background: rgb(var(--v-theme-grey-50)); - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - - &::after { - border-block-end-color: rgb(var(--v-theme-grey-50)); - } - - &::before { - border-block-end-color: rgba(var(--v-border-color), var(--v-border-opacity)); - } - } - - .apexcharts-yaxistooltip { - border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - background: rgb(var(--v-theme-grey-50)); - - &::after { - border-inline-start-color: rgb(var(--v-theme-grey-50)); - } - - &::before { - border-inline-start-color: rgba(var(--v-border-color), var(--v-border-opacity)); - } - } - - .apexcharts-xaxistooltip-text, - .apexcharts-yaxistooltip-text { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - } - - .apexcharts-yaxis .apexcharts-yaxis-texts-g .apexcharts-yaxis-label { - @include layoutsMixins.rtl { - text-anchor: start; - } - } - - .apexcharts-text, - .apexcharts-tooltip-text, - .apexcharts-datalabel-label, - .apexcharts-datalabel, - .apexcharts-xaxistooltip-text, - .apexcharts-yaxistooltip-text, - .apexcharts-legend-text { - font-family: vuetify.$body-font-family !important; - } - - .apexcharts-pie-label { - fill: white; - filter: none; - } - - .apexcharts-marker { - box-shadow: none; - } - - .apexcharts-tooltip-marker { - margin-inline-end: 0.625rem; - - @include layoutsMixins.rtl { - margin-inline: 0 0.625rem !important; - } - } - - .apexcharts-legend-marker { - margin-inline-end: 0.3875rem !important; - - @include layoutsMixins.rtl { - margin-inline-end: 0.75rem !important; - } - } -} diff --git a/app/@core/scss/template/libs/full-calendar.scss b/app/@core/scss/template/libs/full-calendar.scss deleted file mode 100644 index 5ef51291..00000000 --- a/app/@core/scss/template/libs/full-calendar.scss +++ /dev/null @@ -1,395 +0,0 @@ -/* stylelint-disable no-descending-specificity */ -/* stylelint-disable no-duplicate-selectors */ -@use "@base/@core/scss/base/mixins"; -@use "@base/styles/variables/vuetify.scss"; - -body .fc { - --fc-today-bg-color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity)); - --fc-border-color: rgba(var(--v-border-color), var(--v-border-opacity)); - --fc-neutral-bg-color: rgb(var(--v-theme-background)); - --fc-list-event-hover-bg-color: rgba(var(--v-theme-on-surface), 0.02); - --fc-page-bg-color: rgb(var(--v-theme-surface)); - --fc-event-border-color: currentcolor; - - a { - color: inherit; - } - - .fc-timegrid-divider { - padding: 0; - } - - th.fc-col-header-cell { - border-inline-end-color: transparent; - } - - .fc-day-other .fc-daygrid-day-top { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - opacity: 1; - } - - .fc-daygrid-event { - border-radius: 999px; - margin-inline: 0 !important; - } - - .fc-col-header-cell-cushion { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-size: 1rem; - font-weight: 500; - line-height: 1.375rem; - } - - .fc-toolbar .fc-toolbar-title { - margin-inline-start: 0.5rem; - } - - .fc-event-time { - font-size: 0.8125rem; - font-weight: 500 !important; - line-height: 14px; - } - - .fc-event-title { - font-size: 0.75rem; - font-weight: 500 !important; - line-height: 14px; - } - - .fc-timegrid-event { - box-shadow: none; - - .fc-event-title { - font-size: 0.8125rem; - line-height: 1.25rem; - } - - .fc-event-time { - margin-block-end: 2px; - } - } - - .fc-event-title-container { - .fc-event-title { - font-size: 0.8125rem; - } - } - - .fc-prev-button, - .fc-next-button { - border: 1px solid rgb(var(--v-theme-secondary)); - border-radius: 6px !important; - block-size: 34px; - color: rgb(var(--v-theme-secondary)); - inline-size: 34px; - margin-inline-end: 0.5rem; - min-block-size: 34px; - padding-block: 0 !important; - padding-inline: 7px !important; - - &:hover, - &:focus { - border: 1px solid rgb(var(--v-theme-secondary)) !important; - background-color: rgba(var(--v-theme-secondary), var(--v-activated-opacity)) !important; - } - - .fc-icon { - position: relative; - inset-block-start: -1px; - } - } - - .fc-prev-button { - .fc-icon { - position: relative; - inset-inline-start: -2px; - } - } - - .fc-col-header .fc-col-header-cell .fc-col-header-cell-cushion { - padding: 0.5rem; - text-decoration: none !important; - } - - .fc-timegrid .fc-timegrid-slots .fc-timegrid-slot { - block-size: 3rem; - } - - // Removed double border in list view - .fc-list { - border-block-end: none; - border-inline: none; - font-size: 0.8125rem; - - .fc-list-day-cushion.fc-cell-shaded { - background-color: rgba(var(--v-theme-on-surface), var(--v-hover-opacity)); - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-weight: 500; - padding-block: 8px; - padding-inline: 16px; - } - - .fc-list-event td { - padding-block: 8px; - padding-inline: 16px; - - &.fc-list-event-graphic { - padding: 0.5rem; - } - } - - .fc-list-event-time, - .fc-list-event-title { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - font-size: 1rem; - line-height: 22px; - } - - .fc-list-event-title { - padding-inline-start: 0 !important; - } - - .fc-list-day .fc-list-day-text, - .fc-list-day .fc-list-day-side-text { - font-size: 1rem; - line-height: 22px; - text-decoration: none; - } - } - - .fc-timegrid-axis { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - font-size: 0.8125rem; - text-transform: capitalize; - } - - .fc-timegrid-slot-label-frame { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-size: 0.8125rem; - text-align: center; - text-transform: uppercase; - } - - .fc-header-toolbar { - flex-wrap: wrap; - padding: 1.25rem; - gap: 1rem 0.5rem; - margin-block-end: 0 !important; - } - - .fc-toolbar-chunk { - display: flex; - align-items: center; - - .fc-button-group { - .fc-button { - &:first-child { - border-end-end-radius: 0; - border-end-start-radius: 0.5rem; - border-start-end-radius: 0; - border-start-start-radius: 0.5rem; - } - - &:last-child { - border-end-end-radius: 0.5rem; - border-end-start-radius: 0; - border-start-end-radius: 0.5rem; - border-start-start-radius: 0; - } - } - - .fc-button-primary { - &, - &:hover, - &:not(.disabled):active { - background-color: transparent; - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - } - - &:focus { - box-shadow: none !important; - } - } - } - - &:last-child { - .fc-button-group { - border-radius: 0.375rem; - - .fc-button, - .fc-button:active { - border: 1px solid rgb(var(--v-theme-primary)); - color: rgb(var(--v-theme-primary)); - font-size: 1rem; - font-weight: 500; - line-height: 22px; - padding-block: 0.4375rem; - padding-inline: 1rem; - text-transform: capitalize; - - &:not(:last-child) { - border-inline-end: 0.0625rem solid rgba(var(--v-border-color), var(--v-border-opacity)); - } - - &.fc-button-active { - background-color: rgba(var(--v-theme-primary), var(--v-activated-opacity)); - color: rgb(var(--v-theme-primary)); - } - } - - .fc-button:hover:not(.fc-button-active) { - background-color: rgba(var(--v-theme-primary), 0.08); - } - } - } - } - - .fc-toolbar-title { - display: inline-block; - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - font-size: 1.5rem; - font-weight: 500; - line-height: 38px; - } - - // Calendar content container - .fc-view-harness { - min-block-size: 40.625rem; - } - - .fc-event { - border-color: transparent; - cursor: pointer; - margin-block: 0 0.625rem; - padding-block: 0.125rem; - padding-inline: 0.5rem; - } - - .fc-event-main { - color: inherit; - font-weight: 500; - line-height: 14px; - } - - tbody[role="rowgroup"] { - > tr > td[role="presentation"] { - border: none; - } - } - - .fc-scrollgrid { - border-inline-start: none; - } - - .fc-daygrid-day { - padding: 0.5rem !important; - - .fc-daygrid-day-top { - flex-direction: row; - } - } - - .fc-daygrid-day-number { - padding-block: 0 0.625rem; - padding-inline: 0; - } - - .fc-daygrid-day { - padding: 0.3125rem; - } - - .fc-scrollgrid-section > * { - border-inline-end-width: 0; - border-inline-start-width: 0; - } - - .fc-list-event-dot { - color: inherit; - - --fc-event-border-color: currentcolor; - - margin-block-start: 6px; - } - - .fc-list-event { - background-color: transparent !important; - } - - .fc-popover { - @include mixins.elevation(3); - - border-radius: 6px; - - .fc-popover-header, - .fc-popover-body { - padding: 0.5rem; - } - - .fc-popover-title { - margin: 0; - font-size: 1rem; - font-weight: 500; - } - } - - // 👉 sidebar toggler - .fc-toolbar-chunk { - .fc-button-group { - align-items: center; - - .fc-button .fc-icon { - font-size: 1.25rem; - vertical-align: bottom; - } - - // â„šī¸ Below two `background-image` styles contains static color due to browser limitation of not parsing the css var inside CSS url() - .fc-drawerToggler-button { - display: none; - border: none; - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke='rgba(38, 43, 67, 0.9)' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cpath d='M3 12h18M3 6h18M3 18h18'/%3E%3C/svg%3E"); - background-position: 50%; - background-repeat: no-repeat; - block-size: 1.5625rem; - font-size: 0; - inline-size: 1.5625rem; - margin-inline-end: 1rem; - - @media (max-width: 1279px) { - display: block !important; - } - } - } - } - - // â„šī¸ Workaround of https://github.com/fullcalendar/fullcalendar/issues/6407 - .fc-col-header, - .fc-daygrid-body, - .fc-scrollgrid-sync-table, - .fc-timegrid-body, - .fc-timegrid-body table { - inline-size: 100% !important; - } - - // Remove event margin in week view inside day column - .fc-timegrid-col-events { - margin: 0 !important; - - .fc-event { - padding-block: 8px !important; - } - } - - .fc-timeGridWeek-view .fc-timegrid-slot-minor { - border-block-start-style: none; - } - - // Set button border radius - .fc .fc-button { - border-radius: vuetify.$card-border-radius; - min-block-size: vuetify.$button-height; - } -} - -.v-theme--dark .fc .fc-toolbar-chunk .fc-button-group .fc-drawerToggler-button { - background-image: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24' stroke='rgba(234, 234, 255, 0.7)' stroke-width='2' fill='none' stroke-linecap='round' stroke-linejoin='round' class='css-i6dzq1'%3E%3Cpath d='M3 12h18M3 6h18M3 18h18'/%3E%3C/svg%3E"); -} diff --git a/app/@core/scss/template/libs/shepherd.scss b/app/@core/scss/template/libs/shepherd.scss deleted file mode 100644 index e3019ca6..00000000 --- a/app/@core/scss/template/libs/shepherd.scss +++ /dev/null @@ -1,98 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "shepherd.js/dist/css/shepherd.css"; -@use "@base/styles/variables/_vuetify.scss" as variables; - -.shepherd-button { - border-radius: 6px; - block-size: 2.125rem; - color: #fff; - font-size: 13px; - font-weight: variables.$button-font-weight; - margin-inline-end: 1rem; - padding-inline: 0.75rem; - - &:not(:disabled):hover { - color: #fff; - } - - @include mixins.elevation(4); -} - -.shepherd-footer { - background: rgb(var(--v-theme-surface)); - border-end-end-radius: 0.625rem; - border-end-start-radius: 0.625rem; - padding-block: 0 1.25rem; - padding-inline: 1.25rem; -} - -.shepherd-element .shepherd-content .shepherd-header { - background: rgb(var(--v-theme-surface)); - border-start-end-radius: 0.625rem; - border-start-start-radius: 0.625rem; - padding-block: 1.25rem 0; - padding-inline: 1.25rem; -} - -.shepherd-element .shepherd-content .shepherd-header .shepherd-title { - color: rgb(var(--v-theme-on-background)); - font-size: 1.125rem; - font-weight: 600; -} - -.shepherd-text { - padding: 1.25rem; - background: rgb(var(--v-theme-surface)); - color: rgb(var(--v-theme-surface), var(--v-theme-high-emphasis)); - font-size: variables.$card-text-font-size; -} - -.shepherd-cancel-icon { - color: rgba(var(--v-theme-on-background), var(--v-disabled-opacity)) !important; - font-size: 1.5rem; -} - -.shepherd-element[data-popper-placement^="bottom"] { - margin-block-start: 0.75rem !important; -} - -.shepherd-element[data-popper-placement^="top"] { - margin-block-start: -0.75rem !important; -} - -.shepherd-element[data-popper-placement^="right"] { - margin-inline-start: 0.75rem !important; -} - -.shepherd-element[data-popper-placement^="left"] { - margin-inline-end: 0.75rem !important; -} - -.shepherd-element[data-popper-placement] { - .shepherd-arrow::before { - background: rgb(var(--v-theme-background)) !important; - } -} - -.shepherd-element { - @include mixins.elevation(8); - - border-radius: variables.$card-border-radius; - background: transparent; -} - -.nextBtnClass, -.nextBtnClass:not(:disabled):hover { - background: rgb(var(--v-theme-primary)); -} - -.backBtnClass, -.backBtnClass:not(:disabled):hover { - background: rgba(var(--v-theme-secondary), var(--v-medium-emphasis-opacity)); -} - -@media screen and (max-width: 600px) { - .shepherd-element { - max-inline-size: 75vw; - } -} diff --git a/app/@core/scss/template/libs/swiper.scss b/app/@core/scss/template/libs/swiper.scss deleted file mode 100644 index 064d04da..00000000 --- a/app/@core/scss/template/libs/swiper.scss +++ /dev/null @@ -1,5 +0,0 @@ -swiper-container { - --swiper-navigation-color: rgb(var(--v-theme-primary)); - --swiper-navigation-size: 1.75rem; - --swiper-pagination-color: rgb(var(--v-theme-primary)); -} diff --git a/app/@core/scss/template/libs/vuetify/_overrides.scss b/app/@core/scss/template/libs/vuetify/_overrides.scss deleted file mode 100644 index 0961b68f..00000000 --- a/app/@core/scss/template/libs/vuetify/_overrides.scss +++ /dev/null @@ -1,54 +0,0 @@ -@use "@base/@core/scss/base/utils"; -@use "@base/configured-variables" as variables; - -// 👉 Body -// set body font size 15px -body { - font-size: 15px !important; - - // 👉 Button outline with default color border color - .v-alert--variant-outlined, - .v-avatar--variant-outlined, - .v-btn.v-btn--variant-outlined, - .v-card--variant-outlined, - .v-chip--variant-outlined, - .v-list-item--variant-outlined { - &:not([class*="text-"]) { - border-color: rgba(var(--v-border-color), 0.22); - } - - &.text-default { - border-color: rgba(var(--v-border-color), 0.22); - } - } -} - -// 👉 Typography -.text-h1, -.text-h2, -.text-h3, -.text-h4, -.text-h5, -.text-h6, -.text-overline, -.v-input { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); -} - -.text-caption { - color: rgba(var(--v-theme-on-background), var(--v-disabled-opacity)); -} - -.v-card-subtitle, -.text-subtitle-1, -.text-subtitle-2 { - color: rgba(var(--v-theme-on-background), 0.55); -} - -// 👉 Input placeholder alignment -.v-input--density-compact { - input::placeholder { - position: relative; - inset-block-start: 1px; - } -} diff --git a/app/@core/scss/template/libs/vuetify/_variables.scss b/app/@core/scss/template/libs/vuetify/_variables.scss deleted file mode 100644 index 7808b8fe..00000000 --- a/app/@core/scss/template/libs/vuetify/_variables.scss +++ /dev/null @@ -1,357 +0,0 @@ -$font-family-custom: "Inter", sans-serif, -apple-system, blinkmacsystemfont, "Segoe UI", roboto, - "Helvetica Neue", arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; -/* stylelint-disable length-zero-no-unit */ -@forward "../../../base/libs/vuetify/variables" with ( - $body-font-family: $font-family-custom !default, - $border-radius-root: 6px, - - $rounded: ( - "xs": 2px, - "sm": 4px, - "shaped": 25px 0, - "lg":8px, - "xl": 10px, - ) !default, - - // 👉 Typography - $typography: ( - "h1": ( - "size": 2.875rem, - "weight": 500, - "line-height": 4.25rem, - "letter-spacing": normal, - ), - "h2": ( - "size": 2.375rem, - "weight": 500, - "line-height": 3.5rem, - "letter-spacing": normal, - ), - "h3": ( - "size": 1.75rem, - "weight": 500, - "line-height": 2.625rem, - "letter-spacing": normal, - ), - "h4": ( - "size": 1.5rem, - "weight": 500, - "line-height": 2.375rem, - "letter-spacing": normal, - ), - "h5": ( - "size": 1.125rem, - "weight": 500, - "line-height": 1.75rem, - "letter-spacing": normal, - ), - "h6": ( - "size": 1rem, - "weight": 500, - "line-height": 1.375rem, - "letter-spacing": normal, - ), - "subtitle-1": ( - "size": 1rem, - "line-height": 1.375rem, - "letter-spacing": normal, - ), - "subtitle-2": ( - "size": 0.8125rem, - "line-height": 1.25rem, - "letter-spacing": normal, - ), - "body-1": ( - "size": 1rem, - "line-height": 1.375rem, - "letter-spacing": normal, - ), - "body-2": ( - "size": 0.8125rem, - "line-height": 1.25rem, - "letter-spacing": normal, - ), - "caption": ( - "size": 0.8125rem, - "line-height": 1.125rem, - "letter-spacing": 0.025rem, - ), - "overline": ( - "size": 0.75rem, - "weight": 400, - "line-height": 0.875rem, - "letter-spacing": 0.05rem, - "text-transform": uppercase, - ), - "button": ( - "size": 1rem, - "weight": 500, - "letter-spacing": normal, - "font-family": $font-family-custom, - "text-transform": capitalize, - ), - )!default, - - // 👉 Shadows - $shadow-key-umbra: ( - 0: (0 0 0 0 rgba(var(--v-shadow-key-umbra-color), 1)), - 1: (0 2px 4px rgba(var(--v-shadow-key-umbra-color), 0.12)), - 2: (0 2px 6px 0 rgba(var(--v-shadow-key-umbra-color), var(--v-shadow-xs-opacity))), - 3: (0 3px 8px rgba(var(--v-shadow-key-umbra-color), 0.14)), - 4: (0 2px 10px 0 rgba(var(--v-shadow-key-umbra-color), var(--v-shadow-sm-opacity))), - 5: (0 4px 10px rgba(var(--v-shadow-key-umbra-color), 0.15)), - 6: (0 4px 14px 0 rgba(var(--v-shadow-key-umbra-color), var(--v-shadow-md-opacity))), - 7: (0 4px 18px rgba(var(--v-shadow-key-umbra-color), 0.1)), - 8: (0 6px 20px 0 rgba(var(--v-shadow-key-umbra-color), var(--v-shadow-lg-opacity))), - 9: (0 5px 14px rgba(var(--v-shadow-key-umbra-color), 0.18)), - 10: (0 8px 26px 0 rgba(var(--v-shadow-key-umbra-color), var(--v-shadow-xl-opacity))), - 11: (0 5px 16px rgba(var(--v-shadow-key-umbra-color), 0.2)), - 12: (0 6px 17px rgba(var(--v-shadow-key-umbra-color), 0.22)), - 13: (0 6px 18px rgba(var(--v-shadow-key-umbra-color), 0.22)), - 14: (0 6px 19px rgba(var(--v-shadow-key-umbra-color), 0.24)), - 15: (0 7px 20px rgba(var(--v-shadow-key-umbra-color), 0.24)), - 16: (0 7px 21px rgba(var(--v-shadow-key-umbra-color), 0.26)), - 17: (0 7px 22px rgba(var(--v-shadow-key-umbra-color), 0.26)), - 18: (0 8px 23px rgba(var(--v-shadow-key-umbra-color), 0.28)), - 19: (0 8px 24px 6px rgba(var(--v-shadow-key-umbra-color), 0.28)), - 20: (0 9px 25px rgba(var(--v-shadow-key-umbra-color), 0.3)), - 21: (0 9px 26px rgba(var(--v-shadow-key-umbra-color), 0.32)), - 22: (0 9px 27px rgba(var(--v-shadow-key-umbra-color), 0.32)), - 23: (0 10px 28px rgba(var(--v-shadow-key-umbra-color), 0.34)), - 24: (0 10px 30px rgba(var(--v-shadow-key-umbra-color), 0.34)) - ) !default, - - $shadow-key-penumbra: ( - 0: (0 0 transparent), - 1: (0 0 transparent), - 2: (0 0 transparent), - 3: (0 0 transparent), - 4: (0 0 transparent), - 5: (0 0 transparent), - 6: (0 0 transparent), - 7: (0 0 transparent), - 8: (0 0 transparent), - 9: (0 0 transparent), - 10: (0 0 transparent), - 11: (0 0 transparent), - 12: (0 0 transparent), - 13: (0 0 transparent), - 14: (0 0 transparent), - 15: (0 0 transparent), - 16: (0 0 transparent), - 17: (0 0 transparent), - 18: (0 0 transparent), - 19: (0 0 transparent), - 20: (0 0 transparent), - 21: (0 0 transparent), - 22: (0 0 transparent), - 23: (0 0 transparent), - 24: (0 0 transparent), - ) !default, - - $shadow-key-ambient: ( - 0: (0 0 transparent), - 1: (0 0 transparent), - 2: (0 0 transparent), - 3: (0 0 transparent), - 4: (0 0 transparent), - 5: (0 0 transparent), - 6: (0 0 transparent), - 7: (0 0 transparent), - 8: (0 0 transparent), - 9: (0 0 transparent), - 10: (0 0 transparent), - 11: (0 0 transparent), - 12: (0 0 transparent), - 13: (0 0 transparent), - 14: (0 0 transparent), - 15: (0 0 transparent), - 16: (0 0 transparent), - 17: (0 0 transparent), - 18: (0 0 transparent), - 19: (0 0 transparent), - 20: (0 0 transparent), - 21: (0 0 transparent), - 22: (0 0 transparent), - 23: (0 0 transparent), - 24: (0 0 transparent), - ) !default, - - // 👉 Avatar - $avatar-color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)) !default, - - // 👉 Alert - $alert-title-font-size: 1.125rem !default, - $alert-border-radius: 8px !default, - - // 👉 Autocomplete - $autocomplete-content-elevation: 8 !default, - $combobox-content-elevation: 8 !default, - $select-content-elevation: 8 !default, - - // 👉 Badge - $badge-height: 1.375rem !default, - $badge-min-width: 1.375rem !default, - $badge-dot-height: 8px !default, - $badge-dot-width: 8px !default, - $badge-dot-border-width: 2px !default, - $badge-border-radius: 50px !default, - $badge-font-size: 0.8125rem !default, - $badge-border-color: rgb(var(--v-theme-surface)) !default, - $badge-border-transform: scale(1.5) !default, - - // 👉 Buttons - $button-height: 38px !default, - $button-padding-ratio: 1.673 !default, - $button-margin-start: 0 !default, - $button-disabled-opacity: 0.45 !default, - $button-elevation: ("default": 2, "hover": 2, "active": 0) !default, - $button-density: ("default": 0, "comfortable": -1, "compact": -2) !default, - $button-line-height: 1.375rem !default, - $button-margin-end: 0.5rem !default, - $button-border-radius: 0.5rem !default, - $button-card-actions-padding: 0 18px !default, - $button-pagination-border-radius: 8px !default, - - // 👉 Carousel - $carousel-dot-inactive-opacity: 1 !default, - $carousel-dot-margin: 0 !default, - $carousel-controls-color: rgba(var(--v-theme-on-surface), var(--v-selected-opacity)) !default, - - // 👉 Chip - $chip-font-size: 13px !default, - $chip-close-size: 20px !default, - $chip-font-weight: 500 !default, - $chip-height: 32px !default, - $chip-elevation: 0 !default, - - // 👉 Cards - $card-actions-padding: 0 8px 8px !default, - $card-title-font-size: 1.125rem !default, - $card-title-line-height: 1.75rem !default, - $card-text-font-size: 1rem !default, - $card-text-line-height: 1.375rem !default, - $card-subtitle-font-size: 1rem !default, - $card-subtitle-line-height: 1.375rem !default, - $card-subtitle-font-weight: 400 !default, - $card-subtitle-header-padding: 0 !default, - $card-border-radius: 10px !default, - - // 👉 Dialog - $dialog-elevation: 8 !default, - $dialog-border-radius: 10px !default, - $dialog-card-header-padding: 20px 20px 0 !default, - $dialog-card-header-text-padding-top: 20px !default, - $dialog-card-text-padding: 20px !default, - - // 👉 Expansion Panel - $expansion-panel-active-margin: 0.5rem !default, - $expansion-panel-border-radius: 10px !default, - $expansion-panel-text-padding: 0 20px 20px !default, - $expansion-panel-title-padding: 12px 20px !default, - $expansion-panel-title-min-height: 46px !default, - $expansion-panel-active-title-min-height: 46px !default, - - // 👉 Field - $field-outline-opacity: 0.22 !default, - $field-control-affixed-padding: 16px !default, - $field-control-affixed-inner-padding: 10px !default, - $field-overlay-filled-opacity: var(--v-hover-opacity) !default, - $field-border-radius: 0.5rem !default, - $field-font-size: 15px !default, - $input-details-padding-above: 0.25rem !default, - $input-details-font-size: 0.8125rem !default, - - // 👉 Label - $label-font-size: 1rem !default, - $label-letter-spacing: normal !default, - - // 👉 List - $list-item-one-line-min-height: 38px !default, - $list-item-padding: 8px 20px !default, - $list-item-min-height: 38px !default, - $list-subheader-font-size: 13px !default, - $list-subheader-line-height: 1.25rem !default, - $list-subheader-padding-start: 20px !default, - $list-subheader-padding-end: 20px !default, - $list-subheader-min-height: 40px !default, - $list-disabled-opacity: 0.4 !default, - $list-item-icon-margin-start: 12px !default, - $list-item-icon-margin-end: 12px !default, - $list-item-avatar-margin-start: 12px !default, - $list-item-avatar-margin-end: 12px !default, - $list-item-nav-title-font-size: 1rem !default, - $list-item-nav-title-font-weight: 400 !default, - $list-item-nav-subtitle-font-size: 0.8125rem !default, - $list-item-subtitle-line-height: 1.25rem !default, - - // 👉 label - $field-label-floating-scale: 0.8125 !default, - - // 👉 Menu - $menu-content-border-radius: 10px !default, - - // 👉 Snackbar - $snackbar-background: rgb(var(--v-tooltip-background)) !default, - $snackbar-color: rgb(var(--v-theme-surface)) !default, - $snackbar-content-padding: 12px 16px !default, - $snackbar-wrapper-padding: 0 !default, - $snackbar-wrapper-min-height: 44px !default, - $snackbar-elevation: 2 !default, - $snackbar-action-margin: 16px !default, - $snackbar-border-radius: 8px !default, - - // 👉 Slider - $slider-thumb-hover-opacity: var(--v-activated-opacity) !default, - - // 👉 Tooltip - $tooltip-background-color: rgb(var(--v-tooltip-background)) !default, - $tooltip-text-color: rgb(var(--v-theme-surface)) !default, - $tooltip-font-size: 0.8125rem !default, - $tooltip-padding: 4px 12px !default, - $tooltip-line-height: 1.25rem !default, - - // 👉 VPagination - $pagination-item-margin: 0.1875rem !default, - - // 👉 Progress Linear - $progress-linear-background-opacity: var(--v-activated-opacity) !default, - - // 👉 Tabs - $tabs-height: 38px !default, - $tab-min-width: 60px !default, - - // 👉 Timeline - $timeline-divider-line-background: rgba(var(--v-border-color), var(--v-border-opacity)) !default, - $timeline-divider-line-thickness: 2px !default, - $timeline-item-padding: 16px !default, - - // 👉 Slider - $slider-track-active-size-offset: 0px !default, - $slider-thumb-label-border-radius: 6px !default, - $slider-thumb-label-height: 28px !default, - $slider-thumb-label-padding: 4px 10px !default, - - // 👉 Switch - $switch-inset-track-width: 1.875rem !default, - $switch-inset-track-height: 1.125rem !default, - - // 👉 Table - $table-row-height: 50px !default, - $table-header-height: 64px !default, - $table-header-font-weight: 500 !default, - $table-color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)) !default, - $table-font-size: 15px !default, - $table-column-padding: 0 20px !default, - $data-table-footer-padding: 16px 20px !default, - - // 👉 Radio - $radio-group-label-selection-group-padding-inline: 0 !default, - - // 👉 navigation drawer - $navigation-drawer-temporary-elevation: 8 !default, - $navigation-drawer-transition-duration: 0.4s !default, - - // 👉 Messages - $messages-font-size: 13px !default, -); diff --git a/app/@core/scss/template/libs/vuetify/components/_alert.scss b/app/@core/scss/template/libs/vuetify/components/_alert.scss deleted file mode 100644 index e542f835..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_alert.scss +++ /dev/null @@ -1,100 +0,0 @@ -// 👉 Alert -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -.v-alert { - .v-alert__content { - font-size: 1rem; - font-weight: 400; - line-height: 1.375rem; - - .v-alert-title { - margin-block-end: 0.25rem; - } - } - - &:not(.v-alert--prominent) .v-alert__prepend { - border-radius: 0.375rem; - block-size: 1.875rem; - inline-size: 1.875rem; - - .v-icon { - margin: auto; - block-size: 1.375rem !important; - font-size: 1.375rem !important; - inline-size: 1.375rem !important; - } - } - - &:not(.v-alert--prominent) { - &.v-alert--variant-flat, - &.v-alert--variant-elevated { - .v-alert__prepend { - background-color: #fff; - - @include mixins.elevation(2); - } - } - - &.v-alert--variant-tonal { - .v-alert__prepend { - z-index: 1; - } - } - } - - .v-alert__close { - .v-btn--icon { - --v-btn-height: 34px; - - .v-btn__content { - padding: 0.4375rem; - - .v-icon { - block-size: 1.25rem; - font-size: 1.25rem; - inline-size: 1.25rem; - } - } - } - } -} - -@each $color-name in variables.$theme-colors-name { - .v-alert { - &:not(.v-alert--prominent) { - &.bg-#{$color-name}, - &.text-#{$color-name} { - .v-alert__prepend .v-icon { - color: rgb(var(--v-theme-#{$color-name})) !important; - } - } - - &.v-alert--variant-tonal { - &.text-#{$color-name}, - &.bg-#{$color-name} { - .v-alert__underlay { - background: rgb(var(--v-theme-#{$color-name})) !important; - } - - .v-alert__prepend { - background-color: rgb(var(--v-theme-#{$color-name})); - - .v-icon { - color: #fff !important; - } - } - } - } - - &.v-alert--variant-outlined { - &.text-#{$color-name}, - &.bg-#{$color-name} { - .v-alert__prepend { - background-color: rgba(var(--v-theme-#{$color-name}), 0.16); - } - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_avatar.scss b/app/@core/scss/template/libs/vuetify/components/_avatar.scss deleted file mode 100644 index b8ffd3b3..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_avatar.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 Avatar -body { - .v-avatar { - font-size: 1rem; - - .v-icon { - block-size: 1.5rem; - font-size: 1.5rem; - inline-size: 1.5rem; - } - - &.v-avatar--variant-tonal:not([class*="text-"]) { - .v-avatar__underlay { - --v-activated-opacity: 0.08; - } - } - } - - .v-avatar-group { - > * { - &:hover { - @include mixins.elevation(6); - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_badge.scss b/app/@core/scss/template/libs/vuetify/components/_badge.scss deleted file mode 100644 index da6a35f8..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_badge.scss +++ /dev/null @@ -1,28 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 VBadge -.v-badge { - .v-badge__badge .v-icon { - font-size: 1rem; - } - - &.v-badge--bordered:not(.v-badge--dot) { - .v-badge__badge { - &::after { - transform: scale(1.05); - } - } - } - - &.v-badge--tonal { - @each $color-name in variables.$theme-colors-name { - .v-badge__wrapper { - .v-badge__badge.bg-#{$color-name} { - background-color: rgba(var(--v-theme-#{$color-name}), var(--v-activated-opacity)) !important; - color: rgb(var(--v-theme-#{$color-name})) !important; - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_button.scss b/app/@core/scss/template/libs/vuetify/components/_button.scss deleted file mode 100644 index 05772003..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_button.scss +++ /dev/null @@ -1,308 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 Button -.v-btn { - &:not(.v-btn--block) { - min-inline-size: auto; - } - - &--variant-elevated, - &--variant-flat { - &.v-btn--disabled { - .v-btn__overlay { - opacity: 0.45; - } - } - } - - // Default (elevated) button - /* stylelint-disable-next-line no-duplicate-selectors */ - &--variant-elevated, - &--variant-flat { - // We want darker background on hover instead of light - - &:hover { - .v-btn__overlay { - opacity: 0; - } - } - - &:not(.v-btn--loading, .v-btn--disabled) { - @each $color-name in variables.$theme-colors-name { - &.bg-#{$color-name} { - &:hover, - &:active, - &:focus { - background-color: rgb(var(--v-theme-#{$color-name}-darken-1)) !important; - } - } - } - } - } - - /* stylelint-disable-next-line no-descending-specificity */ - &--variant-elevated { - &:active { - box-shadow: none; - } - } - - // Outlined variant - &--variant-outlined, - &--variant-text { - /* stylelint-disable-next-line no-descending-specificity */ - .v-btn__overlay { - --v-hover-opacity: 0.08; - } - - &:active { - .v-btn__overlay { - opacity: var(--v-hover-opacity); - } - } - - &:focus { - .v-btn__overlay { - opacity: var(--v-hover-opacity); - } - } - } - - // Tonal variant - &--variant-tonal { - &:hover { - .v-btn__underlay { - opacity: 0; - } - - .v-btn__overlay { - --v-hover-opacity: 0.24; - } - } - - &:active { - .v-btn__overlay { - --v-hover-opacity: 0.24; - - opacity: var(--v-hover-opacity); - } - - .v-btn__underlay { - opacity: 0; - } - } - - &:focus { - .v-btn__overlay { - --v-hover-opacity: 0.24; - - opacity: var(--v-hover-opacity); - } - - .v-btn__underlay { - opacity: 0; - } - } - } - - &:not(.v-btn--icon) .v-icon { - --v-icon-size-multiplier: 0.7115; - - inline-size: auto; - } - - &.v-btn--variant-text, - &.v-btn--variant-plain { - &:not(.v-btn--icon) { - padding-inline: 12px; - } - - &:not(.v-btn--icon).v-btn--size-small { - padding-inline: 9px; - } - - &:not(.v-btn--icon).v-btn--size-large { - padding-inline: 22px; - } - } - - // Icon Button - &--icon.v-btn--density-default { - block-size: var(--v-btn-height); - inline-size: var(--v-btn-height); - padding-inline: 6px; - - &.v-btn--size-default { - .v-icon { - --v-icon-size-multiplier: 1 !important; - - block-size: 22px; - font-size: 22px; - inline-size: 22px; - } - } - - &.v-btn--size-small { - .v-icon { - block-size: 20px; - font-size: 20px; - inline-size: 20px; - } - } - - &.v-btn--size-large { - .v-icon { - block-size: 24px; - font-size: 24px; - inline-size: 24px; - } - } - } - - // Button Size - &--size-x-small { - --v-btn-height: 28px; - --v-btn-size: 11px; - - &:not(.v-btn--icon) { - border-radius: 0.125rem; - } - - line-height: 14px; - padding-block: 0; - padding-inline: 10px; - } - - &--size-small { - --v-btn-height: 34px; - --v-btn-size: 13px; - - &:not(.v-btn--icon) { - border-radius: 0.375rem; - line-height: 18px; - padding-block: 0; - padding-inline: 12px; - - /* stylelint-disable-next-line no-descending-specificity */ - .v-icon { - --v-icon-size-multiplier: 0.718; - } - - .v-btn__prepend, - .v-btn__content > .v-icon--start { - margin-inline: 0 0.375rem; - } - - .v-btn__append, - .v-btn__content > .v-icon--end { - margin-inline: 0.375rem 0; - } - } - } - - &--size-large { - --v-btn-height: 42px; - --v-btn-size: 17px; - - &:not(.v-btn--icon) { - border-radius: 0.625rem; - line-height: 26px; - padding-block: 0; - padding-inline: 26px; - - /* stylelint-disable-next-line no-descending-specificity */ - .v-icon { - --v-icon-size-multiplier: 0.7848; - } - - .v-btn__prepend, - .v-btn__content > .v-icon--start { - margin-inline: 0 0.625rem; - } - - .v-btn__append, - .v-btn__content > .v-icon--end { - margin-inline: 0.625rem 0; - } - } - } - - &--size-x-large { - --v-btn-height: 48px; - --v-btn-size: 19px; - - &:not(.v-btn--icon) { - border-radius: 0.625rem; - } - - line-height: 30px; - padding-block: 0; - padding-inline: 26px; - } - - // Toggle Button - &-toggle { - .v-btn { - border-radius: 0.375rem; - block-size: 52px !important; - border-inline-end: none; - inline-size: 52px !important; - - &.v-btn--density-comfortable { - block-size: 44px !important; - inline-size: 44px !important; - } - - &.v-btn--density-compact { - block-size: 36px !important; - inline-size: 36px !important; - } - - /* stylelint-disable-next-line no-descending-specificity */ - .v-icon { - block-size: 24px !important; - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - font-size: 24px !important; - inline-size: 24px !important; - } - - &--active { - /* stylelint-disable-next-line no-descending-specificity */ - .v-icon { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - } - } - } - - &.v-btn-group { - align-items: center; - padding: 7px; - border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - block-size: 66px; - - .v-btn.v-btn--active { - .v-btn__overlay { - --v-activated-opacity: 0.08; - } - } - - &.v-btn-group--density-compact { - block-size: 50px; - } - - &.v-btn-group--density-comfortable { - block-size: 58px; - } - } - } -} - -// 👉 Btn group -.v-btn-group { - border: none; - - &.v-btn-group--divided .v-btn:not(:last-child) { - border-inline-end-color: unset; - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_checkbox.scss b/app/@core/scss/template/libs/vuetify/components/_checkbox.scss deleted file mode 100644 index 48587fae..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_checkbox.scss +++ /dev/null @@ -1,37 +0,0 @@ -// 👉 checkbox box shadow -.v-checkbox-btn { - &.v-selection-control--dirty { - .v-selection-control__input { - .v-icon.custom-checkbox-checked, - .v-icon.custom-checkbox-indeterminate { - /* â„šī¸ Using filter: drop-shadow() instead of box-shadow because box-shadow creates white background for SVG; */ - filter: drop-shadow(rgba(var(--v-shadow-key-umbra-color), 14%) 0 2px 6px); - } - } - } - - &.v-selection-control { - .v-label { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - } - - .v-selection-control__input { - svg { - font-size: 1.5rem; - } - } - } - - &:not(.v-selection-control--dirty) { - .v-selection-control__input { - > .v-icon { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - opacity: 1; - } - - > .custom-checkbox-indeterminate { - color: rgb(var(--v-theme-primary)); - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_chip.scss b/app/@core/scss/template/libs/vuetify/components/_chip.scss deleted file mode 100644 index 818e75b8..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_chip.scss +++ /dev/null @@ -1,113 +0,0 @@ -// 👉 Chip -.v-chip { - line-height: 1.25rem !important; - - .v-chip__content { - overflow: hidden; - } - - &:not(.v-chip--variant-elevated) { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - } - - &.v-chip--variant-elevated { - background-color: rgba(var(--v-theme-on-surface), var(--v-activated-opacity)); - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - } - - .v-chip__close { - margin-inline: 4px -6px !important; - - .v-icon { - opacity: 0.7; - } - } - - &:not([class*="text-"]) { - --v-activated-opacity: 0.08; - } - - &.v-chip--size-small { - --v-chip-height: 24px !important; - - font-size: 13px !important; - padding-block: 0 !important; - padding-inline: 8px !important; - - .v-chip__prepend { - .v-icon--start { - font-size: 1rem; - margin-inline: -4px 4px; - } - - .v-avatar { - --v-avatar-height: 16px; - } - - .v-avatar--start { - margin-inline: -4px 4px; - } - } - - .v-chip__append { - .v-icon--end { - font-size: 1rem; - margin-inline: 4px -4px; - } - - .v-avatar { - --v-avatar-height: 16px; - } - - .v-avatar--end { - margin-inline: 4px -4px; - } - } - - .v-chip__close { - font-size: 16px; - margin-inline: 4px -4px !important; - max-block-size: 16px; - max-inline-size: 16px; - } - } - - &.v-chip--size-default { - padding-block: 0 !important; - padding-inline: 12px !important; - - .v-icon { - font-size: 1.25rem; - } - - .v-chip__prepend { - .v-icon--start { - font-size: 1.25rem; - margin-inline: -6px 4px; - } - - .v-avatar { - --v-avatar-height: 20px; - } - - .v-avatar--start { - margin-inline: -6px 4px; - } - } - - .v-chip__append { - .v-icon--end { - font-size: 1.25rem; - margin-inline: 4px -6px; - } - - .v-avatar { - --v-avatar-height: 20px; - } - - .v-avatar--end { - margin-inline: 4px -6px; - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_dialog.scss b/app/@core/scss/template/libs/vuetify/components/_dialog.scss deleted file mode 100644 index 03f871a9..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_dialog.scss +++ /dev/null @@ -1,24 +0,0 @@ -// 👉 Dialog -body { - .v-dialog { - font-size: 1rem; - line-height: 1.375rem; - - .v-dialog-close-btn { - color: rgb(var(--v-theme-secondary)) !important; - inset-block-start: 1rem; - inset-inline-end: 1.125rem; - } - - .v-card::-webkit-scrollbar { - inline-size: 7px; - } - - @media (max-width: 500px) { - .v-dialog-close-btn { - inset-block-start: 0.375rem; - inset-inline-end: 0.5rem; - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_expansion-panels.scss b/app/@core/scss/template/libs/vuetify/components/_expansion-panels.scss deleted file mode 100644 index 1ae2d662..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_expansion-panels.scss +++ /dev/null @@ -1,54 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 Expansion Panel -body { - .v-expansion-panels { - &.customized-panels { - border-radius: 10px; - } - - .v-expansion-panel { - .v-expansion-panel-title { - font-weight: 500; - - &--active { - .v-expansion-panel-title__overlay, - &:hover .v-expansion-panel-title__overlay { - opacity: 0 !important; - } - } - - .v-expansion-panel-title__icon { - .v-icon { - block-size: 1.25rem; - font-size: 1.25rem; - inline-size: 1.25rem; - } - } - - &:hover { - .v-expansion-panel-title__overlay { - opacity: 0 !important; - } - } - } - - .v-expansion-panel-text { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - font-size: 15px; - line-height: 1.375rem; - } - } - - &:not(.v-expansion-panels--variant-accordion) { - .v-expansion-panel { - &.v-expansion-panel--active { - .v-expansion-panel__shadow { - @include mixins.elevation(6); - } - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_field.scss b/app/@core/scss/template/libs/vuetify/components/_field.scss deleted file mode 100644 index db358fbd..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_field.scss +++ /dev/null @@ -1,102 +0,0 @@ -// 👉 VField -// Override Vuetify's default outline color for text fields to match the theme -// â„šī¸ We cannot override directly border color because it does not work with dirty or focus state -.v-field__outline { - color: rgba(var(--v-theme-on-surface)); - - &:not([class*="text-"]) .v-label { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - } - - .v-field__outline__start { - flex: 0 0 10px !important; - } -} - -// override input height on comfortable and compact density -.v-text-field, -.v-autocomplete, -.v-combobox, -.v-file-input, -.v-select { - &.v-input { - .v-field__input { - line-height: 1.375rem; - } - } - - &.v-input.v-input--density-default:not(.v-textarea) { - .v-field__input { - min-block-size: 56px; - } - - .v-field { - border-radius: 10px; - } - } - - &.v-input.v-input--density-comfortable:not(.v-textarea) { - .v-field__input { - min-block-size: 48px; - } - } - - &.v-input.v-input--density-compact:not(.v-textarea) { - .v-field__input { - min-block-size: 40px; - } - - .v-field { - border-radius: 6px; - } - } -} - -.v-field.v-field--focused .v-field__outline, -.v-input.v-input--error .v-field__outline { - --v-field-border-opacity: 1 !important; -} - -// hover state outline color -@media (hover: hover) { - .v-field:not(.v-field--focused, .v-field--error):hover .v-field__outline { - --v-field-border-opacity: 0.6 !important; - } -} - -.v-field__prepend-inner, -.v-field__append-inner, -.v-field__clearable, -.v-input__prepend, -.v-input__append { - > .v-icon { - font-size: 20px; - opacity: var(--v-high-emphasis-opacity) !important; - } -} - -/* stylelint-disable-next-line no-descending-specificity */ -.v-field { - // margin for floating label - &.v-field--variant-outlined { - .v-label.v-field-label { - &.v-field-label--floating { - margin-block: 0; - margin-inline: 6px; - } - } - } - - // filled variant - &.v-field--variant-filled { - .v-field__outline::before { - opacity: var(--v-medium-emphasis-opacity); - } - - &:hover { - .v-field__outline::before { - opacity: var(--v-high-emphasis-opacity); - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_list.scss b/app/@core/scss/template/libs/vuetify/components/_list.scss deleted file mode 100644 index ff8757be..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_list.scss +++ /dev/null @@ -1,23 +0,0 @@ -// 👉 VList -.v-list { - .v-list-item { - &.v-list-item--active:not(.v-list-group__header) { - .v-list-item__content, - .v-list-item__prepend { - * { - color: rgb(var(--v-theme-primary)); - } - } - - .v-list-item__overlay { - background: rgb(var(--v-theme-primary)); - } - } - - .v-icon:not(.v-btn .v-icon,.v-radio .v-icon,.v-checkbox .v-icon) { - block-size: 22px; - font-size: 22px; - inline-size: 22px; - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_otp-input.scss b/app/@core/scss/template/libs/vuetify/components/_otp-input.scss deleted file mode 100644 index 5ba275f3..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_otp-input.scss +++ /dev/null @@ -1,15 +0,0 @@ -// otp input -.v-otp-input { - .v-otp-input__content { - max-inline-size: 100%; - - .v-field.v-field--focused { - .v-field__outline { - .v-field__outline__start, - .v-field__outline__end { - border-color: rgb(var(--v-theme-primary)) !important; - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_pagination.scss b/app/@core/scss/template/libs/vuetify/components/_pagination.scss deleted file mode 100644 index a39c9996..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_pagination.scss +++ /dev/null @@ -1,115 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 VPagination -.v-pagination { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - - .v-pagination__list { - .v-pagination__item, - .v-pagination__next, - .v-pagination__last, - .v-pagination__first, - .v-pagination__prev { - .v-btn { - font-weight: 400; - - &--size-default { - --v-btn-size: 13px; - } - - &--size-large { - --v-btn-size: 15px; - } - - &--variant-tonal { - --v-activated-opacity: 0.08; - - &:hover { - .v-btn__overlay { - --v-hover-opacity: 0.16; - } - } - } - - @each $color-name in variables.$theme-colors-name { - &--variant-tonal.text-#{$color-name} { - .v-btn__underlay { - background: rgb(var(--v-theme-on-surface)); - } - - .v-btn__content { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - } - - &:hover { - .v-btn__content { - color: rgb(var(--v-theme-#{$color-name})); - } - } - } - } - - &--variant-outlined { - &:hover { - .v-btn__overlay { - --v-hover-opacity: 0.06; - } - } - } - } - } - - .v-pagination__item--is-active { - .v-btn.v-btn--variant-tonal { - .v-btn__overlay { - --v-hover-opacity: 0.16; - - background: rgb(var(--v-theme-primary)); - opacity: var(--v-hover-opacity); - } - - color: rgb(var(--v-theme-primary)); - - .v-btn__underlay { - opacity: 0; - } - - &:hover { - .v-btn__overlay { - --v-hover-opacity: 0.24; - } - } - } - - @each $color-name in variables.$theme-colors-name { - .v-btn.v-btn--variant-tonal.text-#{$color-name} { - @include mixins.elevation(2); - - .v-btn__overlay { - background: rgb(var(--v-theme-#{$color-name})); - opacity: 1; - } - - .v-btn__content { - z-index: 1; - color: #fff; - } - } - } - - .v-btn.v-btn--variant-outlined { - border-color: rgb(var(--v-theme-primary)); - color: rgb(var(--v-theme-primary)); - - /* stylelint-disable-next-line no-descending-specificity */ - .v-btn__overlay { - --v-hover-opacity: 0.16; - - background: rgb(var(--v-theme-primary)); - opacity: var(--v-hover-opacity); - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_radio.scss b/app/@core/scss/template/libs/vuetify/components/_radio.scss deleted file mode 100644 index fb7ab6d8..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_radio.scss +++ /dev/null @@ -1,44 +0,0 @@ -// 👉 Radio -.v-radio, -.v-radio-btn { - &.v-selection-control--dirty { - .v-selection-control__input { - .custom-radio-checked { - filter: drop-shadow(rgba(var(--v-shadow-key-umbra-color), 14%) 0 2px 6px); - } - } - } - - &.v-selection-control { - .v-selection-control__input { - svg { - font-size: 1.5rem; - } - } - - .v-label { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - } - } - - &:not(.v-selection-control--dirty) { - .v-selection-control__input > .v-icon { - color: rgba(var(--v-theme-on-surface), var(--v-medium-emphasis-opacity)); - opacity: 1; - } - } -} - -.v-radio-group.v-input > .v-input__control > .v-label { - font-size: 1rem; - line-height: 22px; - margin-inline-start: 0; -} - -.v-radio-group { - .v-selection-control-group { - .v-radio:not(:last-child) { - margin-inline-end: 0; - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_slider.scss b/app/@core/scss/template/libs/vuetify/components/_slider.scss deleted file mode 100644 index 51a9a876..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_slider.scss +++ /dev/null @@ -1,28 +0,0 @@ -// 👉 Slider - -.v-slider { - .v-slider-track__background--opacity { - opacity: 0.16; - } -} - -.v-slider-thumb { - .v-slider-thumb__surface::after { - border-radius: 50%; - background-color: #fff; - block-size: calc(var(--v-slider-thumb-size) - 8px); - inline-size: calc(var(--v-slider-thumb-size) - 8px); - } - - .v-slider-thumb__label { - background-color: rgb(var(--v-tooltip-background)); - color: rgb(var(--v-theme-surface)); - font-weight: 500; - letter-spacing: 0.15px; - line-height: 1.25rem; - - &::before { - content: none; - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_switch.scss b/app/@core/scss/template/libs/vuetify/components/_switch.scss deleted file mode 100644 index a7578fcf..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_switch.scss +++ /dev/null @@ -1,58 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 Switch -.v-switch { - .v-label { - color: rgba(var(--v-theme-on-background), var(--v-high-emphasis-opacity)); - line-height: 22px; - } -} - -.v-switch.v-switch--inset { - .v-ripple__container { - opacity: 0; - } - - .v-switch__track { - background-color: rgba(var(--v-theme-on-surface), var(--v-focus-opacity)); - box-shadow: 0 0 4px 0 rgba(0, 0, 0, 16%) inset; - opacity: 1; - } - - .v-selection-control__input { - transform: translateX(-6px) !important; - - --v-selection-control-size: 1.125rem; - - .v-switch__thumb { - background-color: #fff; - block-size: 0.875rem; - box-shadow: none; - filter: drop-shadow(0 2px 6px rgba(var(--v-shadow-key-umbra-color), 14%)); - inline-size: 0.875rem; - transform: scale(1); - } - } - - .v-selection-control { - &.v-selection-control--disabled { - --v-disabled-opacity: 0.45; - } - } - - .v-selection-control--dirty { - @each $color-name in variables.$theme-colors-name { - .text-#{$color-name} { - .v-switch__track { - border-color: rgb(var(--v-theme-#{$color-name})); - background-color: rgb(var(--v-theme-#{$color-name})); - } - } - } - - .v-selection-control__input { - transform: translateX(6px) !important; - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_table.scss b/app/@core/scss/template/libs/vuetify/components/_table.scss deleted file mode 100644 index f606d673..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_table.scss +++ /dev/null @@ -1,38 +0,0 @@ -// 👉 Datatable - -.v-data-table { - table { - tbody { - tr { - &.v-data-table-group-header-row { - td { - background: none; - } - } - } - } - } -} - -// 👉 Table -.v-table { - .v-table__wrapper { - border-radius: 0; - - table { - thead { - tr { - th { - background: rgb(var(--v-table-header-color)) !important; - border-block-end: none !important; - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)) !important; - font-size: 0.8125rem; - letter-spacing: 0.2px; - line-height: 24px; - text-transform: uppercase; - } - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_tabs.scss b/app/@core/scss/template/libs/vuetify/components/_tabs.scss deleted file mode 100644 index 03dcd06a..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_tabs.scss +++ /dev/null @@ -1,119 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 VTabs - -body { - .v-tabs { - .v-tab.v-btn { - color: rgba(var(--v-theme-on-surface), var(--v-high-emphasis-opacity)); - padding-block: 0; - padding-inline: 1.375rem; - - .v-icon { - block-size: 1.125rem; - font-size: 1.125rem; - inline-size: 1.125rem; - } - - &.v-btn--stacked { - .v-icon { - block-size: 1.5rem !important; - font-size: 1.5rem !important; - inline-size: 1.5rem !important; - } - } - } - - &:not(.v-tabs-pill) { - &.v-tabs--vertical { - border-inline-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - - .v-tab__slider { - inset-inline-end: 0; - inset-inline-start: unset; - } - } - - &.v-tabs--horizontal { - border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - - .v-tab__slider { - inset-block-end: 1px; - inset-block-start: unset; - } - } - - .v-tab { - &.v-tab--selected { - &.v-btn.v-btn--variant-text { - &:hover, - &:active, - &:focus { - .v-btn__overlay { - --v-hover-opacity: 0; - } - } - } - } - - &:not(.v-tab--selected) { - &.v-btn.v-btn--variant-text { - &:hover, - &:active, - &:focus { - color: rgb(var(--v-theme-primary)); - - .v-btn__overlay { - --v-hover-opacity: 0; - } - - .v-btn__content { - .v-tab__slider { - opacity: var(--v-activated-opacity); - } - } - } - } - } - } - } - - &.v-tabs-pill { - .v-slide-group__content { - gap: 0.25rem; - } - - &.v-slide-group, - .v-slide-group__container { - box-sizing: content-box; - padding: 1rem; - margin: -1rem; - } - - /* stylelint-disable-next-line no-descending-specificity */ - .v-tab { - &.v-btn { - border-radius: 0.5rem !important; - } - - &:not(.v-tab--selected) { - /* stylelint-disable-next-line no-descending-specificity */ - &.v-btn.v-btn--variant-text { - &:hover { - color: rgb(var(--v-theme-primary)); - - .v-btn__overlay { - --v-hover-opacity: 0.16; - } - } - } - } - - &.v-tab--selected { - @include mixins.elevation(2); - } - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_timeline.scss b/app/@core/scss/template/libs/vuetify/components/_timeline.scss deleted file mode 100644 index 3f59d381..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_timeline.scss +++ /dev/null @@ -1,57 +0,0 @@ -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -// 👉 Timeline - -.v-timeline { - &:not(.v-timeline--variant-outlined) .v-timeline-divider__dot { - background: none !important; - - .v-timeline-divider__inner-dot { - box-shadow: 0 0 0 0.1875rem rgb(var(--v-theme-on-surface-variant)); - - @each $color-name in variables.$theme-colors-name { - - &.bg-#{$color-name} { - box-shadow: 0 0 0 0.1875rem rgba(var(--v-theme-#{$color-name}), 0.12); - } - } - } - } - - .v-timeline-item { - .timeline-chip { - border-radius: 8px; - background: rgba(var(--v-theme-on-surface), var(--v-hover-opacity)); - padding-block: 5px; - padding-inline: 10px; - } - } - - &.v-timeline--variant-outlined { - .v-timeline-item { - .v-timeline-divider { - .v-timeline-divider__dot { - background: none !important; - } - } - - .v-timeline-divider__after { - border: 1px dashed rgba(var(--v-border-color), var(--v-border-opacity)); - background: none; - } - - .v-timeline-divider__before { - background: none; - } - } - } - - &.v-timeline--vertical { - .v-timeline-item:last-child { - .v-timeline-item__body { - padding-block-end: 0 !important; - } - } - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/_tooltip.scss b/app/@core/scss/template/libs/vuetify/components/_tooltip.scss deleted file mode 100644 index f25195cc..00000000 --- a/app/@core/scss/template/libs/vuetify/components/_tooltip.scss +++ /dev/null @@ -1,6 +0,0 @@ -// 👉 Tooltip -.v-tooltip.v-overlay { - .v-overlay__content { - font-weight: 500 !important; - } -} diff --git a/app/@core/scss/template/libs/vuetify/components/index.scss b/app/@core/scss/template/libs/vuetify/components/index.scss deleted file mode 100644 index 38f7a2a8..00000000 --- a/app/@core/scss/template/libs/vuetify/components/index.scss +++ /dev/null @@ -1,19 +0,0 @@ -@use "alert"; -@use "avatar"; -@use "button"; -@use "badge"; -@use "chip"; -@use "dialog"; -@use "expansion-panels"; -@use "list"; -@use "pagination"; -@use "slider"; -@use "table"; -@use "tabs"; -@use "timeline"; -@use "tooltip"; -@use "otp-input"; -@use "field"; -@use "checkbox"; -@use "radio"; -@use "switch"; diff --git a/app/@core/scss/template/libs/vuetify/index.scss b/app/@core/scss/template/libs/vuetify/index.scss deleted file mode 100644 index 6022d1d0..00000000 --- a/app/@core/scss/template/libs/vuetify/index.scss +++ /dev/null @@ -1,3 +0,0 @@ -@use "@base/@core/scss/base/libs/vuetify"; -@use "overrides"; -@use "components/index.scss"; diff --git a/app/@core/scss/template/pages/misc.scss b/app/@core/scss/template/pages/misc.scss deleted file mode 100644 index fabc052b..00000000 --- a/app/@core/scss/template/pages/misc.scss +++ /dev/null @@ -1,35 +0,0 @@ -.layout-blank { - .misc-wrapper { - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - padding: 1.25rem; - min-block-size: calc(var(--vh, 1vh) * 100); - } - - .misc-avatar { - z-index: 1; - } -} - -.misc-wrapper .footer-coming-soon { - position: absolute; - z-index: -1; - inline-size: 100%; - inset-block-end: 0; - inset-inline-start: 0; -} - -.misc-wrapper .footer-coming-soon-obj { - position: absolute; - inline-size: 100%; - inset-block-end: 12%; - inset-inline-start: 15%; -} - -@media (max-width: 1200px) { - .misc-wrapper .footer-coming-soon-obj { - inset-block-end: 5%; - } -} diff --git a/app/@core/scss/template/pages/page-auth.scss b/app/@core/scss/template/pages/page-auth.scss deleted file mode 100644 index 1442b9ad..00000000 --- a/app/@core/scss/template/pages/page-auth.scss +++ /dev/null @@ -1,66 +0,0 @@ -.layout-blank { - .auth-wrapper { - min-block-size: calc(var(--vh, 1vh) * 100); - } - - .auth-card { - z-index: 1 !important; - } - - @media (min-width: 1264px), (max-width: 959px) and (min-width: 450px) { - .v-otp-input .v-otp-input__content { - gap: 1.25rem; - } - } -} - -@media (min-width: 960px) { - .skin--bordered { - .auth-card-v2 { - border-inline-start: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)) !important; - } - } -} - -@media (max-width: 1200px) { - .auth-footer-mask { - inset-block-end: 10% !important; - } -} - -.auth-logo { - position: absolute; - z-index: 1; - inset-block-start: 2.5rem; - inset-inline-start: 2.5rem; -} - -.auth-wrapper .auth-illustration { - z-index: 1; - max-inline-size: 48rem; -} - -.auth-wrapper .auth-footer-mask { - position: absolute; - inline-size: 100%; - inset-block-end: 5%; -} - -// App logo and App title -.app-logo { - display: flex; - align-items: center; - column-gap: 0.5rem; - - .app-logo-title { - font-size: 1.25rem; - font-weight: 600; - letter-spacing: 0.27px; - line-height: 1.5rem; - } -} - -.resend-email { - color: rgb(var(--v-theme-on-warning)) !important; - text-decoration: underline; -} diff --git a/app/@core/scss/template/placeholders/_default-layout-horizontal-nav.scss b/app/@core/scss/template/placeholders/_default-layout-horizontal-nav.scss deleted file mode 100644 index c27bfbcc..00000000 --- a/app/@core/scss/template/placeholders/_default-layout-horizontal-nav.scss +++ /dev/null @@ -1,10 +0,0 @@ -@use "misc"; -@use "@base/@core/scss/base/mixins.scss"; - -%default-layout-horizontal-nav-navbar-and-nav-container { - @include mixins.elevation(2); - - &.header-blur { - @extend %blurry-bg; - } -} diff --git a/app/@core/scss/template/placeholders/_default-layout-vertical-nav.scss b/app/@core/scss/template/placeholders/_default-layout-vertical-nav.scss deleted file mode 100644 index 33fb30fb..00000000 --- a/app/@core/scss/template/placeholders/_default-layout-vertical-nav.scss +++ /dev/null @@ -1,11 +0,0 @@ -@use "@base/configured-variables" as variables; -@use "@base/@core/scss/base/mixins"; - -%default-layout-vertical-nav-floating-navbar-and-sticky-elevated-navbar-scrolled { - box-shadow: 0 4px 8px -4px rgba(var(--v-shadow-key-umbra-color), 42%); - - // If navbar is contained => Squeeze navbar content on scroll - @if variables.$layout-vertical-nav-navbar-is-contained { - padding-inline: 1.5rem; - } -} diff --git a/app/@core/scss/template/placeholders/_horizontal-nav.scss b/app/@core/scss/template/placeholders/_horizontal-nav.scss deleted file mode 100644 index 71231717..00000000 --- a/app/@core/scss/template/placeholders/_horizontal-nav.scss +++ /dev/null @@ -1,37 +0,0 @@ -@use "@base/@core/scss/base/mixins"; - -// Add border radius to top level nav item -%horizontal-nav-top-level-item { - border-radius: 0.625rem !important; -} - -// Horizontal nav item styles (including nested) -%horizontal-nav-item { - padding-block: 0.5rem; -} - -// Horizontal nav item title -%horizontal-nav-item-title { - margin-inline-end: 0.5rem; -} - -// Popper content styles -%horizontal-nav-popper-content { - padding-block: 0.5rem; - - @include mixins.elevation(8); -} - -// Styles for third level item icon/ (e.g. Reduce the icon's size of nested group's nav links (Top level group > Sub group > [Nav links])) -%third-level-nav-item-icon { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - margin-inline: 0 0.5rem; -} - -// Active styles for sub nav link -%horizontal-nav-sub-nav-link-active { - background: rgba(var(--v-theme-primary), 0.16); - color: rgb(var(--v-theme-primary)); - - i { color: rgb(var(--v-theme-primary)) !important; } -} diff --git a/app/@core/scss/template/placeholders/_index.scss b/app/@core/scss/template/placeholders/_index.scss deleted file mode 100644 index 925cc168..00000000 --- a/app/@core/scss/template/placeholders/_index.scss +++ /dev/null @@ -1,6 +0,0 @@ -@forward "horizontal-nav"; -@forward "nav"; -@forward "default-layout-vertical-nav"; -@forward "default-layout-horizontal-nav"; -@forward "vertical-nav"; -@forward "misc"; diff --git a/app/@core/scss/template/placeholders/_misc.scss b/app/@core/scss/template/placeholders/_misc.scss deleted file mode 100644 index 966a871b..00000000 --- a/app/@core/scss/template/placeholders/_misc.scss +++ /dev/null @@ -1,7 +0,0 @@ -%blurry-bg { - /* stylelint-disable property-no-vendor-prefix */ - -webkit-backdrop-filter: blur(10px); - backdrop-filter: blur(10px); - /* stylelint-enable */ - background-color: rgb(var(--v-theme-surface), 0.7); -} diff --git a/app/@core/scss/template/placeholders/_nav.scss b/app/@core/scss/template/placeholders/_nav.scss deleted file mode 100644 index d889ae0c..00000000 --- a/app/@core/scss/template/placeholders/_nav.scss +++ /dev/null @@ -1,16 +0,0 @@ -@use "@base/@core/scss/base/mixins"; - -%nav-link-active { - - i { color: rgb(var(--v-theme-on-primary)) !important; } - - @include mixins.elevation(2); -} - -// â„šī¸ This is common style that needs to be applied to both navs -%nav { - .nav-item-title { - letter-spacing: normal; - line-height: 1.375rem; - } -} diff --git a/app/@core/scss/template/placeholders/_vertical-nav.scss b/app/@core/scss/template/placeholders/_vertical-nav.scss deleted file mode 100644 index 6785193e..00000000 --- a/app/@core/scss/template/placeholders/_vertical-nav.scss +++ /dev/null @@ -1,92 +0,0 @@ -@use "@base/configured-variables" as variables; - -%nav-header-action { - color: rgb(var(--v-theme-on-surface)); - font-size: 0; -} - -// â„šī¸ Add divider around section title -%vertical-nav-section-title { - block-size: 2rem; - font-size: 0.8125rem; - line-height: 1.125rem; - - /* - â„šī¸ We will use this to add gap between divider and text. - Moreover, we will use this to adjust the `flex-basis` property of left divider - */ - $divider-gap: 0.625rem; - - // Thanks: https://stackoverflow.com/a/62359101/10796681 - .title-text { - display: flex; - flex-wrap: nowrap; - align-items: center; - justify-content: flex-start; - column-gap: $divider-gap; - - &::before, - &::after { - border-block-end: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - content: ""; - } - - &::after { - flex: 1 1 auto; - } - - &::before { - flex: 0 1 0.875rem; - margin-inline-start: -#{variables.$vertical-nav-horizontal-padding-start}; - } - } - - // â„šī¸ Update the margin-inline-end when vertical nav is in mini state. We done same for link & group. - @at-root { - .layout-nav-type-vertical.layout-vertical-nav-collapsed .layout-vertical-nav:not(.hovered) .nav-section-title { - margin-inline: auto; - } - } -} - -%vertical-nav-item-interactive { - border-radius: 0.5rem; - - /* Add pill shape styles */ - block-size: 2.375rem !important; - margin-block-end: 0.25rem !important; - - /* â„šī¸ Wobble effect */ - transition: margin-inline 0.15s ease-in-out; - will-change: margin-inline; - - // Reduce margin inline end when vertical nav is in collapsed mode and not hovered - .layout-nav-type-vertical.layout-vertical-nav-collapsed .layout-vertical-nav:not(.hovered) & { - margin-inline: 0; - } -} - -// Vertical nav item badge styles -%vertical-nav-item-badge { - font-size: 0.8125rem; - line-height: 20px; - padding-block: 0.125rem; - padding-inline: 0.5rem; -} - -// Nav items styles (including section title) -%vertical-nav-item { - gap: 0.5rem; - padding-block: 0.5rem; -} - -// â„šī¸ Icon styling for icon nested inside another nav item (2nd level) -%vertical-nav-items-nested-icon { - color: rgba(var(--v-theme-on-surface), var(--v-disabled-opacity)); - margin-inline: 0.375rem; -} - -%vertical-nav-items-icon-after-2nd-level { - margin-inline-start: 1rem; - visibility: visible; -} diff --git a/app/@core/scss/template/skins/_bordered.scss b/app/@core/scss/template/skins/_bordered.scss deleted file mode 100644 index 755251a0..00000000 --- a/app/@core/scss/template/skins/_bordered.scss +++ /dev/null @@ -1,38 +0,0 @@ -@use "sass:map"; -@use "@base/@core/scss/base/mixins"; -@use "@base/configured-variables" as variables; - -$header: ".layout-navbar"; - -@if variables.$layout-vertical-nav-navbar-is-contained { - $header: ".layout-navbar .navbar-content-container"; -} - -.skin--bordered { - .flatpickr-calendar { - border: 1px solid rgba(var(--v-border-color), var(--v-border-opacity)); - box-shadow: none; - } - - // select remove box shadow - .v-select__content, - .v-combobox__content, - .v-autocomplete__content { - box-shadow: none; - } - - // snackbar - .v-snackbar--variant-elevated { - box-shadow: none; - } - - // Calendar - .fc .fc-popover { - box-shadow: none; - } - - // Tour - .shepherd-element { - box-shadow: none; - } -} diff --git a/app/@core/scss/template/skins/_index.scss b/app/@core/scss/template/skins/_index.scss deleted file mode 100644 index 19f609f4..00000000 --- a/app/@core/scss/template/skins/_index.scss +++ /dev/null @@ -1 +0,0 @@ -@use "bordered"; diff --git a/app/@core/stores/config.ts b/app/@core/stores/config.ts deleted file mode 100644 index e4a6af75..00000000 --- a/app/@core/stores/config.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { storeToRefs } from 'pinia' -import { useTheme } from 'vuetify' -import { cookieRef, useLayoutConfigStore } from '@base/@layouts/stores/config' -import { themeConfig } from '@base/config' - -// SECTION Store -export const useConfigStore = defineStore('config', () => { - // 👉 Theme - const userPreferredColorScheme = usePreferredColorScheme() - const cookieColorScheme = cookieRef<'light' | 'dark'>('color-scheme', 'light') - - watch( - userPreferredColorScheme, - (val) => { - if (val !== 'no-preference') - cookieColorScheme.value = val - }, - { immediate: true }, - ) - - const theme = cookieRef('theme', themeConfig.app.theme) - - // 👉 isVerticalNavSemiDark - const isVerticalNavSemiDark = cookieRef('isVerticalNavSemiDark', themeConfig.verticalNav.isVerticalNavSemiDark) - - // 👉 isVerticalNavSemiDark - const skin = cookieRef('skin', themeConfig.app.skin) - - // â„šī¸ We need to use `storeToRefs` to forward the state - const { - isLessThanOverlayNavBreakpoint, - appContentWidth, - navbarType, - isNavbarBlurEnabled, - appContentLayoutNav, - isVerticalNavCollapsed, - footerType, - isAppRTL, - } = storeToRefs(useLayoutConfigStore()) - - return { - theme, - isVerticalNavSemiDark, - skin, - - // @layouts exports - isLessThanOverlayNavBreakpoint, - appContentWidth, - navbarType, - isNavbarBlurEnabled, - appContentLayoutNav, - isVerticalNavCollapsed, - footerType, - isAppRTL, - } -}) -// !SECTION - -// SECTION Init -export function initConfigStore() { - const userPreferredColorScheme = usePreferredColorScheme() - const vuetifyTheme = useTheme() - const configStore = useConfigStore() - - watch( - [() => configStore.theme, userPreferredColorScheme], - () => { - vuetifyTheme.global.name.value = configStore.theme === 'system' - ? userPreferredColorScheme.value === 'dark' - ? 'dark' - : 'light' - : configStore.theme - }, - ) - - onMounted(() => { - if (configStore.theme === 'system') - vuetifyTheme.global.name.value = userPreferredColorScheme.value - }) -} -// !SECTION diff --git a/app/@core/types.ts b/app/@core/types.ts deleted file mode 100644 index 21c028e1..00000000 --- a/app/@core/types.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { LiteralUnion, ValueOf } from 'type-fest' -import type { LayoutConfig } from '@base/@layouts/types' -import type { Skins } from './enums' - -interface ExplicitThemeConfig { - app: { - theme: LiteralUnion<'light' | 'dark' | 'system', string> - skin: ValueOf - } - verticalNav: { - isVerticalNavSemiDark: boolean - } -} - -export type UserThemeConfig = LayoutConfig & ExplicitThemeConfig - -// SECTION Custom Input -export interface CustomInputContent { - title: string - desc?: string - value: string - subtitle?: string - icon?: string - images?: string -} - -export interface GridColumn { - cols?: string - sm?: string - md?: string - lg?: string - xl?: string - xxl?: string -} - -// Data table -export interface SortItem { key: string, order?: boolean | 'asc' | 'desc' } - -export interface Options { - page: number - itemsPerPage: number - sortBy: readonly SortItem[] - groupBy: readonly SortItem[] - search: string | undefined -} diff --git a/app/@core/utils/colorConverter.ts b/app/@core/utils/colorConverter.ts deleted file mode 100644 index 1fd2baf6..00000000 --- a/app/@core/utils/colorConverter.ts +++ /dev/null @@ -1,35 +0,0 @@ -/** - * Convert Hex color to rgb - * @param hex - */ - -export function hexToRgb(hex: string) { - // Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF") - const shorthandRegex = /^#?([a-f\d])([a-f\d])([a-f\d])$/i - - hex = hex.replace(shorthandRegex, (m: string, r: string, g: string, b: string) => { - return r + r + g + g + b + b - }) - - const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex) - - return result ? `${Number.parseInt(result[1]!, 16)},${Number.parseInt(result[2]!, 16)},${Number.parseInt(result[3]!, 16)}` : null -} - -/** - *RGBA color to Hex color with / without opacity - */ -export function rgbaToHex(rgba: string, forceRemoveAlpha = false) { - return ( - `#${ - rgba - .replace(/^rgba?\(|\s+|\)$/g, '') // Get's rgba / rgb string values - .split(',') // splits them at "," - .filter((string, index) => !forceRemoveAlpha || index !== 3) - .map(string => Number.parseFloat(string)) // Converts them to numbers - .map((number, index) => (index === 3 ? Math.round(number * 255) : number)) // Converts alpha to 255 number - .map(number => number.toString(16)) // Converts numbers to hex - .map(string => (string.length === 1 ? `0${string}` : string)) // Adds 0 when length of one number is 1 - .join('')}` - ) -} diff --git a/app/@core/utils/createUrl.ts b/app/@core/utils/createUrl.ts deleted file mode 100644 index 7c338777..00000000 --- a/app/@core/utils/createUrl.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { stringifyQuery } from 'ufo' -import type { MaybeRefOrGetter } from 'vue' - -interface Options { - query: MaybeRefOrGetter> -} - -export function createUrl(url: MaybeRefOrGetter, options?: Options) { - return computed(() => { - if (!options?.query) - return toValue(url) - - const _url = toValue(url) - const _query = toValue(options?.query) - - const queryObj = Object.fromEntries( - Object.entries(_query).map(([key, val]) => [key, toValue(val)]), - ) - - return `${_url}${queryObj ? `?${stringifyQuery(queryObj)}` : ''}` - }) -} diff --git a/app/@core/utils/formatDistanceToNow.ts b/app/@core/utils/formatDistanceToNow.ts deleted file mode 100644 index 293db9d3..00000000 --- a/app/@core/utils/formatDistanceToNow.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { enGB, vi } from 'date-fns/locale' -import { formatDistanceToNow as _formatDistanceToNow } from 'date-fns' - -export function formatDistanceToNow(date: string) { - const { locale } = useI18n() - - return _formatDistanceToNow( - new Date(date), - { - locale: locale.value === 'en' - ? enGB - : vi, - }, - ) -} diff --git a/app/@core/utils/formatters.ts b/app/@core/utils/formatters.ts deleted file mode 100644 index 97124adf..00000000 --- a/app/@core/utils/formatters.ts +++ /dev/null @@ -1,48 +0,0 @@ -import { isToday } from './helpers' - -export function avatarText(value: string) { - if (!value) - return '' - const nameArray = value.split(' ') - - return nameArray.map(word => word.charAt(0).toUpperCase()).join('') -} - -// TODO: Try to implement this: https://twitter.com/fireship_dev/status/1565424801216311297 -export function kFormatter(num: number) { - const regex = /\B(?=(\d{3})+(?!\d))/g - - return Math.abs(num) > 9999 ? `${Math.sign(num) * +((Math.abs(num) / 1000).toFixed(1))}k` : Math.abs(num).toFixed(0).replace(regex, ',') -} - -/** - * Format and return date in Humanize format - * Intl docs: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/format - * Intl Constructor: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/DateTimeFormat/DateTimeFormat - * @param {string} value date to format - * @param {Intl.DateTimeFormatOptions} formatting Intl object to format with - */ -export function formatDate(value: string, formatting: Intl.DateTimeFormatOptions = { month: 'short', day: 'numeric', year: 'numeric' }) { - if (!value) - return value - - return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value)) -} - -/** - * Return short human friendly month representation of date - * Can also convert date to only time if date is of today (Better UX) - * @param {string} value date to format - * @param {boolean} toTimeForCurrentDay Shall convert to time if day is today/current - */ -export function formatDateToMonthShort(value: string, toTimeForCurrentDay = true) { - const date = new Date(value) - let formatting: Record = { month: 'short', day: 'numeric' } - - if (toTimeForCurrentDay && isToday(date)) - formatting = { hour: 'numeric', minute: 'numeric' } - - return new Intl.DateTimeFormat('en-US', formatting).format(new Date(value)) -} - -export const prefixWithPlus = (value: number) => value > 0 ? `+${value}` : value diff --git a/app/@core/utils/helpers.ts b/app/@core/utils/helpers.ts deleted file mode 100644 index b45d626c..00000000 --- a/app/@core/utils/helpers.ts +++ /dev/null @@ -1,33 +0,0 @@ -// 👉 IsEmpty -export function isEmpty(value: unknown): boolean { - if (value === null || value === undefined || value === '') - return true - - return !!(Array.isArray(value) && value.length === 0) -} - -// 👉 IsNullOrUndefined -export function isNullOrUndefined(value: unknown): value is undefined | null { - return value === null || value === undefined -} - -// 👉 IsEmptyArray -export function isEmptyArray(arr: unknown): boolean { - return Array.isArray(arr) && arr.length === 0 -} - -// 👉 IsObject -export function isObject(obj: unknown): obj is Record { - return obj !== null && !!obj && typeof obj === 'object' && !Array.isArray(obj) -} - -// 👉 IsToday -export function isToday(date: Date) { - const today = new Date() - - return ( - date.getDate() === today.getDate() - && date.getMonth() === today.getMonth() - && date.getFullYear() === today.getFullYear() - ) -} diff --git a/app/@core/utils/plugins.ts b/app/@core/utils/plugins.ts deleted file mode 100644 index 840951fd..00000000 --- a/app/@core/utils/plugins.ts +++ /dev/null @@ -1,54 +0,0 @@ -import type { App } from 'vue' - -/** - * This is helper function to register plugins like a nuxt - * To register a plugin just export a const function `defineVuePlugin` that takes `app` as argument and call `app.use` - * For Scanning plugins it will include all files in `src/plugins` and `src/plugins/**\/index.ts` - * - * - * @param {App} app Vue app instance - * @returns void - * - * @example - * ```ts - * // File: src/plugins/vuetify/index.ts - * - * import type { App } from 'vue' - * import { createVuetify } from 'vuetify' - * - * const vuetify = createVuetify({ ... }) - * - * export default function (app: App) { - * app.use(vuetify) - * } - * ``` - * - * All you have to do is use this helper function in `main.ts` file like below: - * ```ts - * // File: src/main.ts - * import { registerPlugins } from '@base/@core/utils/plugins' - * import { createApp } from 'vue' - * import App from '@/App.vue' - * - * // Create vue app - * const app = createApp(App) - * - * // Register plugins - * registerPlugins(app) // [!code focus] - * - * // Mount vue app - * app.mount('#app') - * ``` - */ - -export function registerPlugins(app: App) { - const imports = import.meta.glob<{ default: (app: App) => void }>(['../../plugins/*.{ts,js}', '../../plugins/*/index.{ts,js}'], { eager: true }) - - const importPaths = Object.keys(imports).sort() - - importPaths.forEach((path) => { - const pluginImportModule = imports[path] - - pluginImportModule?.default?.(app) - }) -} diff --git a/app/@core/utils/validators.ts b/app/@core/utils/validators.ts deleted file mode 100644 index d8b765a5..00000000 --- a/app/@core/utils/validators.ts +++ /dev/null @@ -1,105 +0,0 @@ -import { isEmpty, isEmptyArray, isNullOrUndefined } from './helpers' - -// 👉 Required Validator -export function requiredValidator(value: unknown, message?: string) { - if (isNullOrUndefined(value) || isEmptyArray(value) || value === false) - return message || 'This field is required' - - return !!String(value).trim().length || message || 'This field is required' -} - -// 👉 Email Validator -export function emailValidator(value: unknown, message?: string) { - if (isEmpty(value)) - return true - - const re = /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\])|(([a-z\-0-9]+\.)+[a-z]{2,}))$/i - - if (Array.isArray(value)) - return value.every(val => re.test(String(val))) || message || 'The Email field must be a valid email' - - return re.test(String(value)) || message || 'The Email field must be a valid email' -} - -// 👉 Password Validator -export function passwordValidator(password: string, message?: string) { - const regExp = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%&*()]).{8,}/ - - const validPassword = regExp.test(password) - - return validPassword || message || 'Field must contain at least one uppercase, lowercase, special character and digit with min 8 chars' -} - -// 👉 Confirm Password Validator -export function confirmedValidator(value: string, target: string, message?: string) { - return value === target || message || 'The Confirm Password field confirmation does not match' -} - -// 👉 Between Validator -export function betweenValidator(value: unknown, min: number, max: number, message?: string) { - const valueAsNumber = Number(value) - - return (Number(min) <= valueAsNumber && Number(max) >= valueAsNumber) || message || `Enter number between ${min} and ${max}` -} - -// 👉 Integer Validator -export function integerValidator(value: unknown, message?: string) { - if (isEmpty(value)) - return true - - if (Array.isArray(value)) - return value.every(val => /^-?\d+$/.test(String(val))) || message || 'This field must be an integer' - - return /^-?\d+$/.test(String(value)) || message || 'This field must be an integer' -} - -// 👉 Regex Validator -export function regexValidator(value: unknown, regex: RegExp | string, message?: string): string | boolean { - if (isEmpty(value)) - return true - - let regeX = regex - if (typeof regeX === 'string') - regeX = new RegExp(regeX) - - if (Array.isArray(value)) - return value.every(val => regexValidator(val, regeX, message)) - - return regeX.test(String(value)) || message || 'The Regex field format is invalid' -} - -// 👉 Alpha Validator -export function alphaValidator(value: unknown, message?: string) { - if (isEmpty(value)) - return true - - return /^[A-Z]*$/i.test(String(value)) || message || 'The Alpha field may only contain alphabetic characters' -} - -// 👉 URL Validator -export function urlValidator(value: unknown, message?: string) { - if (isEmpty(value)) - return true - - const re = /^(https?):\/\/[^\s$.?#].\S*$/ - - return re.test(String(value)) || message || 'URL is invalid' -} - -// 👉 Length Validator -export function lengthValidator(value: unknown, length: number, message?: string) { - if (isEmpty(value)) - return true - - return String(value).length === length || message || `The Min Character field must be at least ${length} characters` -} - -// 👉 Alpha-dash Validator -export function alphaDashValidator(value: unknown, message?: string) { - if (isEmpty(value)) - return true - - const valueAsString = String(value) - - return /^[\w-]*$/.test(valueAsString) || message || 'All Character are not valid' -} diff --git a/app/@core/utils/vuetify.ts b/app/@core/utils/vuetify.ts deleted file mode 100644 index 2e726bb3..00000000 --- a/app/@core/utils/vuetify.ts +++ /dev/null @@ -1,13 +0,0 @@ -import type { LiteralUnion } from 'type-fest' -import { cookieRef } from '@base/@layouts/stores/config' - -export function resolveVuetifyTheme(defaultTheme: LiteralUnion<'light' | 'dark' | 'system', string>): 'light' | 'dark' { - const cookieColorScheme = cookieRef<'light' | 'dark'>('color-scheme', 'light') - const storedTheme = cookieRef('theme', defaultTheme).value - - return storedTheme === 'system' - ? cookieColorScheme.value === 'dark' - ? 'dark' - : 'light' - : storedTheme as 'light' | 'dark' -} diff --git a/app/@layouts/components/NavBarNotifications.vue b/app/@layouts/components/NavBarNotifications.vue deleted file mode 100644 index 2f4543b2..00000000 --- a/app/@layouts/components/NavBarNotifications.vue +++ /dev/null @@ -1,282 +0,0 @@ - - - - - diff --git a/app/@layouts/components/NavSearchBar.vue b/app/@layouts/components/NavSearchBar.vue deleted file mode 100644 index 1f30e395..00000000 --- a/app/@layouts/components/NavSearchBar.vue +++ /dev/null @@ -1,232 +0,0 @@ - - - - - diff --git a/app/@layouts/components/NavbarShortcuts.vue b/app/@layouts/components/NavbarShortcuts.vue deleted file mode 100644 index 38eca5f1..00000000 --- a/app/@layouts/components/NavbarShortcuts.vue +++ /dev/null @@ -1,41 +0,0 @@ - - - diff --git a/app/@layouts/components/NavbarThemeSwitcher.vue b/app/@layouts/components/NavbarThemeSwitcher.vue deleted file mode 100644 index 506fd133..00000000 --- a/app/@layouts/components/NavbarThemeSwitcher.vue +++ /dev/null @@ -1,29 +0,0 @@ - - - diff --git a/app/@layouts/components/UserProfile.vue b/app/@layouts/components/UserProfile.vue deleted file mode 100644 index 62d0f3fd..00000000 --- a/app/@layouts/components/UserProfile.vue +++ /dev/null @@ -1,185 +0,0 @@ - - - - - diff --git a/app/@layouts/components/VNodeRenderer.tsx b/app/@layouts/components/VNodeRenderer.tsx deleted file mode 100644 index 5f68f4da..00000000 --- a/app/@layouts/components/VNodeRenderer.tsx +++ /dev/null @@ -1,12 +0,0 @@ -export const VNodeRenderer = defineComponent({ - name: 'VNodeRenderer', - props: { - nodes: { - type: [Array, Object] as PropType, - required: true, - }, - }, - setup(props) { - return () => props.nodes - }, -}) diff --git a/app/@layouts/components/error/ErrorInternalServerError.vue b/app/@layouts/components/error/ErrorInternalServerError.vue deleted file mode 100644 index 1dbc584b..00000000 --- a/app/@layouts/components/error/ErrorInternalServerError.vue +++ /dev/null @@ -1,76 +0,0 @@ - - - - - diff --git a/app/@layouts/components/error/ErrorNotFound.vue b/app/@layouts/components/error/ErrorNotFound.vue deleted file mode 100644 index 0966a2be..00000000 --- a/app/@layouts/components/error/ErrorNotFound.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - - diff --git a/app/@layouts/components/error/ErrorUnauthorized.vue b/app/@layouts/components/error/ErrorUnauthorized.vue deleted file mode 100644 index 35a4045c..00000000 --- a/app/@layouts/components/error/ErrorUnauthorized.vue +++ /dev/null @@ -1,55 +0,0 @@ - - - - - diff --git a/app/@layouts/components/error/ErrorUnderMaintenance.vue b/app/@layouts/components/error/ErrorUnderMaintenance.vue deleted file mode 100644 index 513b4132..00000000 --- a/app/@layouts/components/error/ErrorUnderMaintenance.vue +++ /dev/null @@ -1,57 +0,0 @@ - - - - - diff --git a/app/@layouts/components/layout/DefaultLayoutWithHorizontalNav.vue b/app/@layouts/components/layout/DefaultLayoutWithHorizontalNav.vue deleted file mode 100644 index ecd89e3d..00000000 --- a/app/@layouts/components/layout/DefaultLayoutWithHorizontalNav.vue +++ /dev/null @@ -1,65 +0,0 @@ - - - - - diff --git a/app/@layouts/components/layout/DefaultLayoutWithVerticalNav.vue b/app/@layouts/components/layout/DefaultLayoutWithVerticalNav.vue deleted file mode 100644 index 4e128fe1..00000000 --- a/app/@layouts/components/layout/DefaultLayoutWithVerticalNav.vue +++ /dev/null @@ -1,84 +0,0 @@ - - - - - diff --git a/app/@layouts/components/layout/Footer.vue b/app/@layouts/components/layout/Footer.vue deleted file mode 100644 index 9d4f88d7..00000000 --- a/app/@layouts/components/layout/Footer.vue +++ /dev/null @@ -1,34 +0,0 @@ - - - diff --git a/app/@layouts/components/navigation/HorizontalNav.vue b/app/@layouts/components/navigation/HorizontalNav.vue deleted file mode 100644 index 55e1aa08..00000000 --- a/app/@layouts/components/navigation/HorizontalNav.vue +++ /dev/null @@ -1,35 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/HorizontalNavGroup.vue b/app/@layouts/components/navigation/HorizontalNavGroup.vue deleted file mode 100644 index e9af7f4d..00000000 --- a/app/@layouts/components/navigation/HorizontalNavGroup.vue +++ /dev/null @@ -1,105 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/HorizontalNavLayout.vue b/app/@layouts/components/navigation/HorizontalNavLayout.vue deleted file mode 100644 index 3d83c7c2..00000000 --- a/app/@layouts/components/navigation/HorizontalNavLayout.vue +++ /dev/null @@ -1,149 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/HorizontalNavLink.vue b/app/@layouts/components/navigation/HorizontalNavLink.vue deleted file mode 100644 index f5e83704..00000000 --- a/app/@layouts/components/navigation/HorizontalNavLink.vue +++ /dev/null @@ -1,66 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/HorizontalNavPopper.vue b/app/@layouts/components/navigation/HorizontalNavPopper.vue deleted file mode 100644 index 21d61805..00000000 --- a/app/@layouts/components/navigation/HorizontalNavPopper.vue +++ /dev/null @@ -1,174 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/VerticalNav.vue b/app/@layouts/components/navigation/VerticalNav.vue deleted file mode 100644 index d584c5a3..00000000 --- a/app/@layouts/components/navigation/VerticalNav.vue +++ /dev/null @@ -1,243 +0,0 @@ - - - - - - - diff --git a/app/@layouts/components/navigation/VerticalNavGroup.vue b/app/@layouts/components/navigation/VerticalNavGroup.vue deleted file mode 100644 index 3afb44fa..00000000 --- a/app/@layouts/components/navigation/VerticalNavGroup.vue +++ /dev/null @@ -1,225 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/VerticalNavLayout.vue b/app/@layouts/components/navigation/VerticalNavLayout.vue deleted file mode 100644 index 7dc0ccf2..00000000 --- a/app/@layouts/components/navigation/VerticalNavLayout.vue +++ /dev/null @@ -1,216 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/VerticalNavLink.vue b/app/@layouts/components/navigation/VerticalNavLink.vue deleted file mode 100644 index 0542e6cc..00000000 --- a/app/@layouts/components/navigation/VerticalNavLink.vue +++ /dev/null @@ -1,77 +0,0 @@ - - - - - diff --git a/app/@layouts/components/navigation/VerticalNavSectionTitle.vue b/app/@layouts/components/navigation/VerticalNavSectionTitle.vue deleted file mode 100644 index b1389bf3..00000000 --- a/app/@layouts/components/navigation/VerticalNavSectionTitle.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/app/@layouts/components/transition/TransitionExpand.vue b/app/@layouts/components/transition/TransitionExpand.vue deleted file mode 100644 index e734429c..00000000 --- a/app/@layouts/components/transition/TransitionExpand.vue +++ /dev/null @@ -1,94 +0,0 @@ - - - - - - - diff --git a/app/@layouts/enums.ts b/app/@layouts/enums.ts deleted file mode 100644 index 434a1aa5..00000000 --- a/app/@layouts/enums.ts +++ /dev/null @@ -1,27 +0,0 @@ -export const ContentWidth = { - Fluid: 'fluid', - Boxed: 'boxed', -} as const - -export const NavbarType = { - Sticky: 'sticky', - Static: 'static', - Hidden: 'hidden', -} as const - -export const FooterType = { - Sticky: 'sticky', - Static: 'static', - Hidden: 'hidden', -} as const - -export const AppContentLayoutNav = { - Vertical: 'vertical', - Horizontal: 'horizontal', -} as const - -export const HorizontalNavType = { - Sticky: 'sticky', - Static: 'static', - Hidden: 'hidden', -} as const diff --git a/app/@layouts/index.ts b/app/@layouts/index.ts deleted file mode 100644 index f90ec2dc..00000000 --- a/app/@layouts/index.ts +++ /dev/null @@ -1,45 +0,0 @@ -import type { PartialDeep } from 'type-fest' -import type { Plugin } from 'vue' -import { layoutConfig } from '@base/config' -import { cookieRef, useLayoutConfigStore } from '@base/@layouts/stores/config' -import type { LayoutConfig } from '@base/@layouts/types' -import { _setDirAttr } from '@base/@layouts/utils' - -// 🔌 Plugin -export function createLayouts(userConfig: PartialDeep): Plugin { - return (): void => { - const configStore = useLayoutConfigStore() - - // Non reactive Values - layoutConfig.app.overlayNavFromBreakpoint = userConfig.app?.overlayNavFromBreakpoint ?? layoutConfig.app.overlayNavFromBreakpoint - layoutConfig.app.iconRenderer = userConfig.app?.iconRenderer as LayoutConfig['app']['iconRenderer'] ?? layoutConfig.app.iconRenderer - - layoutConfig.verticalNav.defaultNavItemIconProps = userConfig.verticalNav?.defaultNavItemIconProps as LayoutConfig['verticalNav']['defaultNavItemIconProps'] ?? layoutConfig.verticalNav.defaultNavItemIconProps - - layoutConfig.icons.chevronDown = userConfig.icons?.chevronDown ?? layoutConfig.icons.chevronDown - layoutConfig.icons.chevronRight = userConfig.icons?.chevronRight ?? layoutConfig.icons.chevronRight - layoutConfig.icons.close = userConfig.icons?.close ?? layoutConfig.icons.close - layoutConfig.icons.verticalNavPinned = userConfig.icons?.verticalNavPinned ?? layoutConfig.icons.verticalNavPinned - layoutConfig.icons.verticalNavUnPinned = userConfig.icons?.verticalNavUnPinned ?? layoutConfig.icons.verticalNavUnPinned - layoutConfig.icons.sectionTitlePlaceholder = userConfig.icons?.sectionTitlePlaceholder ?? layoutConfig.icons.sectionTitlePlaceholder - - // Reactive Values (Store) - configStore.$patch({ - appContentLayoutNav: cookieRef('appContentLayoutNav', userConfig.app?.contentLayoutNav ?? layoutConfig.app.contentLayoutNav).value, - appContentWidth: cookieRef('appContentWidth', userConfig.app?.contentWidth ?? layoutConfig.app.contentWidth).value, - footerType: cookieRef('footerType', userConfig.footer?.type ?? layoutConfig.footer.type).value, - navbarType: cookieRef('navbarType', userConfig.navbar?.type ?? layoutConfig.navbar.type).value, - isNavbarBlurEnabled: cookieRef('isNavbarBlurEnabled', userConfig.navbar?.navbarBlur ?? layoutConfig.navbar.navbarBlur).value, - isVerticalNavCollapsed: cookieRef('isVerticalNavCollapsed', userConfig.verticalNav?.isVerticalNavCollapsed ?? layoutConfig.verticalNav.isVerticalNavCollapsed).value, - - // isAppRTL: userConfig.app?.isRTL ?? config.app.isRTL, - // isLessThanOverlayNavBreakpoint: false, - horizontalNavType: cookieRef('horizontalNavType', userConfig.horizontalNav?.type ?? layoutConfig.horizontalNav.type).value, - }) - - // _setDirAttr(config.app.isRTL ? 'rtl' : 'ltr') - _setDirAttr(configStore.isAppRTL ? 'rtl' : 'ltr') - } -} - -export { layoutConfig } diff --git a/app/@layouts/plugins/casl.ts b/app/@layouts/plugins/casl.ts deleted file mode 100644 index 6149e543..00000000 --- a/app/@layouts/plugins/casl.ts +++ /dev/null @@ -1,15 +0,0 @@ -import type { RouteLocationNormalized } from 'vue-router' - -export function canNavigate(to: RouteLocationNormalized) { - const config = useRuntimeConfig() - - if (!config.public.features.authorization) - return true - - const { can } = useAbility() - - if (!to.meta.action || !to.meta.subject) - return true - - return can(to.meta.action, to.meta.subject) -} diff --git a/app/@layouts/stores/config.ts b/app/@layouts/stores/config.ts deleted file mode 100644 index 4bef6352..00000000 --- a/app/@layouts/stores/config.ts +++ /dev/null @@ -1,121 +0,0 @@ -import { AppContentLayoutNav, NavbarType } from '@base/@layouts/enums' -import { injectionKeyIsVerticalNavHovered } from '@base/@layouts/symbols' -import { _setDirAttr } from '@base/@layouts/utils' -import { layoutConfig } from '@base/config' - -// â„šī¸ We should not import themeConfig here but in urgency we are doing it for now - -export const namespaceConfig = (str: string) => `${useRuntimeConfig().public.theme.appName}-${str}` - -export function cookieRef(key: string, defaultValue: T) { - return useCookie( - namespaceConfig(key), - { - default: () => defaultValue, - maxAge: Number(import.meta.env.AUTH_MAX_AGE) || 60 * 60 * 24 * 30, - }, - ) -} - -export const useLayoutConfigStore = defineStore('layoutConfig', () => { - const route = useRoute() - - // 👉 Navbar Type - const navbarType = ref(layoutConfig.navbar.type) - - // 👉 Navbar Type - const isNavbarBlurEnabled = cookieRef('isNavbarBlurEnabled', layoutConfig.navbar.navbarBlur) - - // 👉 Vertical Nav Collapsed - const isVerticalNavCollapsed = cookieRef('isVerticalNavCollapsed', layoutConfig.verticalNav.isVerticalNavCollapsed) - - // 👉 App Content Width - const appContentWidth = cookieRef('appContentWidth', layoutConfig.app.contentWidth) - - // 👉 App Content Layout Nav - const appContentLayoutNav = ref(layoutConfig.app.contentLayoutNav) - - watch(appContentLayoutNav, (val) => { - // If Navbar type is hidden while switching to horizontal nav => Reset it to sticky - if (val === AppContentLayoutNav.Horizontal) { - if (navbarType.value === NavbarType.Hidden) - navbarType.value = NavbarType.Sticky - - isVerticalNavCollapsed.value = false - } - }) - - // 👉 Horizontal Nav Type - const horizontalNavType = ref(layoutConfig.horizontalNav.type) - - // 👉 Horizontal Nav Popover Offset - const horizontalNavPopoverOffset = ref(layoutConfig.horizontalNav.popoverOffset) - - // 👉 Footer Type - const footerType = ref(layoutConfig.footer.type) - - // 👉 Misc - const isLessThanOverlayNavBreakpoint = computed(() => useMediaQuery(`(max-width: ${layoutConfig.app.overlayNavFromBreakpoint}px)`).value) - - // 👉 Layout Classes - const _layoutClasses = computed(() => { - const { y: windowScrollY } = useWindowScroll() - - return [ - `layout-nav-type-${appContentLayoutNav.value}`, - `layout-navbar-${navbarType.value}`, - `layout-footer-${footerType.value}`, - { - 'layout-vertical-nav-collapsed': - isVerticalNavCollapsed.value - && appContentLayoutNav.value === 'vertical' - && !isLessThanOverlayNavBreakpoint.value, - }, - { [`horizontal-nav-${horizontalNavType.value}`]: appContentLayoutNav.value === 'horizontal' }, - `layout-content-width-${appContentWidth.value}`, - { 'layout-overlay-nav': isLessThanOverlayNavBreakpoint.value }, - { 'window-scrolled': unref(windowScrollY) }, - route.meta.layoutWrapperClasses ? route.meta.layoutWrapperClasses : null, - ] - }) - - // 👉 RTL - // const isAppRTL = ref(layoutConfig.app.isRTL) - const isAppRTL = ref(false) - - watch(isAppRTL, (val) => { - _setDirAttr(val ? 'rtl' : 'ltr') - }) - - // 👉 Is Vertical Nav Mini - /* - This function will return true if current state is mini. Mini state means vertical nav is: - - Collapsed - - Isn't hovered by mouse - - nav is not less than overlay breakpoint (hence, isn't overlay menu) - - â„šī¸ We are getting `isVerticalNavHovered` as param instead of via `inject` because - we are using this in `VerticalNav.vue` component which provide it and I guess because - same component is providing & injecting we are getting undefined error - */ - const isVerticalNavMini = (isVerticalNavHovered: Ref | null = null) => { - const isVerticalNavHoveredLocal = isVerticalNavHovered || inject(injectionKeyIsVerticalNavHovered) || ref(false) - - return computed(() => isVerticalNavCollapsed.value && !isVerticalNavHoveredLocal.value && !isLessThanOverlayNavBreakpoint.value) - } - - return { - appContentWidth, - appContentLayoutNav, - navbarType, - isNavbarBlurEnabled, - isVerticalNavCollapsed, - horizontalNavType, - horizontalNavPopoverOffset, - footerType, - isLessThanOverlayNavBreakpoint, - isAppRTL, - _layoutClasses, - isVerticalNavMini, - } -}) diff --git a/app/@layouts/styles/_classes.scss b/app/@layouts/styles/_classes.scss deleted file mode 100644 index 70074d60..00000000 --- a/app/@layouts/styles/_classes.scss +++ /dev/null @@ -1,3 +0,0 @@ -.cursor-pointer { - cursor: pointer; -} diff --git a/app/@layouts/styles/_default-layout.scss b/app/@layouts/styles/_default-layout.scss deleted file mode 100644 index 71f53a55..00000000 --- a/app/@layouts/styles/_default-layout.scss +++ /dev/null @@ -1,35 +0,0 @@ -// These are styles which are both common in layout w/ vertical nav & horizontal nav -@use "@base/@layouts/styles/rtl"; -@use "@base/@layouts/styles/placeholders"; -@use "@base/@layouts/styles/mixins"; -@use "@base/configured-variables" as variables; - -html, -body { - min-block-size: 100%; -} - -.layout-page-content { - @include mixins.boxed-content(true); - - flex-grow: 1; - - // TODO: Use grid gutter variable here - padding-block: 1.5rem; -} - -.layout-footer { - .footer-content-container { - block-size: variables.$layout-vertical-nav-footer-height; - } - - .layout-footer-sticky & { - position: sticky; - inset-block-end: 0; - will-change: transform; - } - - .layout-footer-hidden & { - display: none; - } -} diff --git a/app/@layouts/styles/_global.scss b/app/@layouts/styles/_global.scss deleted file mode 100644 index eb6d8348..00000000 --- a/app/@layouts/styles/_global.scss +++ /dev/null @@ -1,10 +0,0 @@ -*, -::before, -::after { - box-sizing: inherit; - background-repeat: no-repeat; -} - -html { - box-sizing: border-box; -} diff --git a/app/@layouts/styles/_mixins.scss b/app/@layouts/styles/_mixins.scss deleted file mode 100644 index ad956090..00000000 --- a/app/@layouts/styles/_mixins.scss +++ /dev/null @@ -1,29 +0,0 @@ -@use "placeholders"; -@use "@base/configured-variables" as variables; - -@mixin rtl { - @if variables.$enable-rtl-styles { - [dir="rtl"] & { - @content; - } - } -} - -@mixin boxed-content($nest-selector: false) { - & { - @extend %boxed-content-spacing; - - @at-root { - @if $nest-selector == false { - .layout-content-width-boxed#{&} { - @extend %boxed-content; - } - } - @else { - .layout-content-width-boxed & { - @extend %boxed-content; - } - } - } - } -} diff --git a/app/@layouts/styles/_placeholders.scss b/app/@layouts/styles/_placeholders.scss deleted file mode 100644 index f3fa317d..00000000 --- a/app/@layouts/styles/_placeholders.scss +++ /dev/null @@ -1,53 +0,0 @@ -// placeholders -@use "@base/configured-variables" as variables; - -%boxed-content { - @at-root #{&}-spacing { - // TODO: Use grid gutter variable here - padding-inline: 1.5rem; - } - - inline-size: 100%; - margin-inline: auto; - max-inline-size: variables.$layout-boxed-content-width; -} - -%layout-navbar-hidden { - display: none; -} - -// â„šī¸ We created this placeholder even it is being used in just layout w/ vertical nav because in future we might apply style to both navbar & horizontal nav separately -%layout-navbar-sticky { - position: sticky; - inset-block-start: 0; - - // will-change: transform; - // inline-size: 100%; -} - -%style-scroll-bar { - /* width */ - - &::-webkit-scrollbar { - background: rgb(var(--v-theme-surface)); - block-size: 8px; - border-end-end-radius: 14px; - border-start-end-radius: 14px; - inline-size: 4px; - } - - /* Track */ - &::-webkit-scrollbar-track { - background: transparent; - } - - /* Handle */ - &::-webkit-scrollbar-thumb { - border-radius: 0.5rem; - background: rgb(var(--v-theme-perfect-scrollbar-thumb)); - } - - &::-webkit-scrollbar-corner { - display: none; - } -} diff --git a/app/@layouts/styles/_rtl.scss b/app/@layouts/styles/_rtl.scss deleted file mode 100644 index 5031d56f..00000000 --- a/app/@layouts/styles/_rtl.scss +++ /dev/null @@ -1,7 +0,0 @@ -@use "./mixins"; - -.layout-vertical-nav .nav-group-arrow { - @include mixins.rtl { - transform: rotate(180deg); - } -} diff --git a/app/@layouts/styles/_variables.scss b/app/@layouts/styles/_variables.scss deleted file mode 100644 index 9e8c977e..00000000 --- a/app/@layouts/styles/_variables.scss +++ /dev/null @@ -1,29 +0,0 @@ -// @use "@base/styles/style.scss"; - -/* 👉 Vertical nav */ -$layout-vertical-nav-z-index: 12 !default; -$layout-vertical-nav-width: 260px !default; -$layout-vertical-nav-collapsed-width: 80px !default; -$selector-vertical-nav-mini: ".layout-vertical-nav-collapsed .layout-vertical-nav:not(:hover)"; - -/* 👉 Horizontal nav */ -$layout-horizontal-nav-z-index: 11 !default; -$layout-horizontal-nav-navbar-height: 64px !default; - -/* 👉 Navbar */ -$layout-vertical-nav-navbar-height: 64px !default; -$layout-vertical-nav-navbar-is-contained: true !default; -$layout-vertical-nav-layout-navbar-z-index: 11 !default; -$layout-horizontal-nav-layout-navbar-z-index: 11 !default; - -/* 👉 Main content */ -$layout-boxed-content-width: 1440px !default; - -/* 👉Footer */ -$layout-vertical-nav-footer-height: 56px !default; - -/* 👉 Layout overlay */ -$layout-overlay-z-index: 11 !default; - -/* 👉 RTL */ -$enable-rtl-styles: true !default; diff --git a/app/@layouts/styles/index.scss b/app/@layouts/styles/index.scss deleted file mode 100644 index 4e766d8e..00000000 --- a/app/@layouts/styles/index.scss +++ /dev/null @@ -1,3 +0,0 @@ -@use "global"; -@use "vue3-perfect-scrollbar/style.css"; -@use "classes"; diff --git a/app/@layouts/symbols.ts b/app/@layouts/symbols.ts deleted file mode 100644 index 4bed3df8..00000000 --- a/app/@layouts/symbols.ts +++ /dev/null @@ -1 +0,0 @@ -export const injectionKeyIsVerticalNavHovered: InjectionKey> = Symbol('isVerticalNavHovered') diff --git a/app/@layouts/types.ts b/app/@layouts/types.ts deleted file mode 100644 index 1cca776b..00000000 --- a/app/@layouts/types.ts +++ /dev/null @@ -1,115 +0,0 @@ -import type { OffsetOptions } from '@floating-ui/dom' -import type { RouteLocationRaw } from 'vue-router' -import type { AppContentLayoutNav, ContentWidth, FooterType, HorizontalNavType, NavbarType } from '@base/@layouts/enums' -import type { Component } from 'vue' -import type { Actions } from '~/stores/casl' - -export interface LayoutConfig { - app: { - contentWidth: typeof ContentWidth[keyof typeof ContentWidth] - contentLayoutNav: typeof AppContentLayoutNav[keyof typeof AppContentLayoutNav] - overlayNavFromBreakpoint: number - - iconRenderer: Component - } - navbar: { - type: typeof NavbarType[keyof typeof NavbarType] - navbarBlur: boolean - } - footer: { - type: typeof FooterType[keyof typeof FooterType] - } - verticalNav: { - isVerticalNavCollapsed: boolean - defaultNavItemIconProps: { icon: string } - } - horizontalNav: { - type: typeof HorizontalNavType[keyof typeof HorizontalNavType] - transition: string | Component - popoverOffset?: OffsetOptions - } - icons: { - chevronDown: any - chevronRight: any - close: any - verticalNavPinned: any - verticalNavUnPinned: any - sectionTitlePlaceholder: any - } -} - -export interface AclProperties { - action: Actions - subject: string -} - -// 👉 Vertical nav link -declare type ATagTargetAttrValues = '_blank' | '_self' | '_parent' | '_top' | 'framename' -declare type ATagRelAttrValues = - | 'alternate' - | 'author' - | 'bookmark' - | 'external' - | 'help' - | 'license' - | 'next' - | 'nofollow' - | 'noopener' - | 'noreferrer' - | 'prev' - | 'search' - | 'tag' - -export interface NavLinkProps { - to?: RouteLocationRaw | string | null - href?: string - target?: ATagTargetAttrValues - rel?: ATagRelAttrValues -} - -// 👉 Vertical nav group -export interface NavItem extends Partial { - order?: number - title: string - heading?: string - icon?: { icon: string } - badgeContent?: string - badgeClass?: string - children?: NavItem[] - disable?: boolean - to?: RouteLocationRaw - href?: string - target?: ATagTargetAttrValues - rel?: ATagRelAttrValues - group?: NavGroupType -} - -export enum NavGroupType { - POPULAR, - APP, - SETTINGS, -} - -// 👉 Components ======================== - -// avatar | text | icon -// Thanks: https://stackoverflow.com/a/60617060/10796681 -export type Notification = { - id: number - title: string - subtitle: string - time: string - color?: string - isSeen: boolean -} & ( - | { img: string, text?: never, icon?: never } - | { img?: never, text: string, icon?: never } - | { img?: never, text?: never, icon: string } -) - -export interface ThemeSwitcherTheme { - label: string - value: string - icon: string - data?: string -} diff --git a/app/@layouts/utils.ts b/app/@layouts/utils.ts deleted file mode 100644 index a40c9ac2..00000000 --- a/app/@layouts/utils.ts +++ /dev/null @@ -1,157 +0,0 @@ -import type { RouteRecordNormalized, Router } from 'vue-router' -import { AppContentLayoutNav } from '@base/@layouts/enums' -import { useLayoutConfigStore } from '@base/@layouts/stores/config' -import type { NavItem, NavLinkProps } from '@base/@layouts/types' - -export const openGroups = ref([]) - -/** - * Return nav link props to use - // @param {Object, String} item navigation routeName or route Object provided in navigation data - */ - -export const getComputedNavLinkToProp = computed(() => (link: NavItem) => { - const props: NavLinkProps = { - target: link.target, - rel: link.rel, - } - - // If route is string => it assumes string is route name => Create route object from route name - // If route is not string => It assumes it's route object => returns passed route object - if (link.to) - props.to = (typeof link.to === 'string' ? { name: link.to } : link.to) as RouteRecordNormalized - else props.href = link.href - - return props -}) - -/** - * Return route name for navigation link - * If link is string then it will assume it is route-name - * IF link is object it will resolve the object and will return the link - // @param {Object, String} link navigation link object/string - */ -export function resolveNavLinkRouteName(link: NavItem, router: Router) { - if (!link.to) - return null - - if (typeof link.to === 'string') - return link.to - - return router.resolve(link.to).name -} - -/** - * Check if nav-link is active - * @param {object} link nav-link object - */ -export function isNavLinkActive(link: NavItem, router: Router) { - // Matched routes array of current route - const matchedRoutes = router.currentRoute.value.matched - - // Check if provided route matches route's matched route - const resolveRoutedName = resolveNavLinkRouteName(link, router) - - if (!resolveRoutedName) - return false - - return matchedRoutes.some((route) => { - return route.name === resolveRoutedName || route.meta.navActiveLink === resolveRoutedName - }) -} - -/** - * Check if nav group is active - * @param {Array} children Group children - */ -export function isNavGroupActive(children: (NavItem | NavItem)[], router: Router): boolean { - return children.some((child) => { - // If child have children => It's group => Go deeper(recursive) - if (child.children?.length) - return isNavGroupActive(child.children, router) - - // else it's link => Check for matched Route - return isNavLinkActive(child, router) - }) -} - -/** - * Change `dir` attribute based on direction - * @param dir 'ltr' | 'rtl' - */ -export function _setDirAttr(dir: 'ltr' | 'rtl') { - // Check if document exists for SSR - if (typeof document !== 'undefined') - document.documentElement.setAttribute('dir', dir) -} - -/** - * Return dynamic i18n props based on i18n plugin is enabled or not - * @param key i18n translation key - * @param tag tag to wrap the translation with - */ -export function getDynamicI18nProps(key: string, tag = 'span') { - return { - keypath: key, - tag, - scope: 'global' as const, - } -} - -export function switchToVerticalNavOnLtOverlayNavBreakpoint() { - const configStore = useLayoutConfigStore() - - /* - â„šī¸ This is flag will hold nav type need to render when switching between lgAndUp from mdAndDown window width - - Requirement: When we nav is set to `horizontal` and we hit the `mdAndDown` breakpoint nav type shall change to `vertical` nav - Now if we go back to `lgAndUp` breakpoint from `mdAndDown` how we will know which was previous nav type in large device? - - Let's assign value of `appContentLayoutNav` as default value of lgAndUpNav. Why 🤔? - If template is viewed in lgAndUp - We will assign `appContentLayoutNav` value to `lgAndUpNav` because at this point both constant is same - Hence, for `lgAndUpNav` it will take value from theme config file - else - It will always show vertical nav and if user increase the window width it will fallback to `appContentLayoutNav` value - But `appContentLayoutNav` will be value set in theme config file - */ - const lgAndUpNav = ref(configStore.appContentLayoutNav) - - /* - There might be case where we manually switch from vertical to horizontal nav and vice versa in `lgAndUp` screen - So when user comes back from `mdAndDown` to `lgAndUp` we can set updated nav type - For this we need to update the `lgAndUpNav` value if screen is `lgAndUp` - */ - watch( - () => configStore.appContentLayoutNav, - (value) => { - if (!configStore.isLessThanOverlayNavBreakpoint) - lgAndUpNav.value = value - }, - ) - - /* - This is layout switching part - If it's `mdAndDown` => We will use vertical nav no matter what previous nav type was - Or if it's `lgAndUp` we need to switch back to `lgAndUp` nav type. For this we will tracker property `lgAndUpNav` - */ - const shouldChangeContentLayoutNav = refAutoReset(true, 500) - - shouldChangeContentLayoutNav.value = false - - watch(() => configStore.isLessThanOverlayNavBreakpoint, (val) => { - if (!val) { - configStore.appContentLayoutNav = lgAndUpNav.value - } - else { - if (!shouldChangeContentLayoutNav.value) { - setTimeout(() => { - configStore.appContentLayoutNav = AppContentLayoutNav.Vertical - }, 500) - } - else { - configStore.appContentLayoutNav = AppContentLayoutNav.Vertical - } - } - }, { immediate: true }) -} diff --git a/app/api/auth.ts b/app/api/auth.ts new file mode 100644 index 00000000..50709c87 --- /dev/null +++ b/app/api/auth.ts @@ -0,0 +1,20 @@ +export function useApiAuth() { + function updateProfile(payload: Partial<{ username: string, name: string, avatar: string }>) { + return $api('/api/auth/me', { + method: 'PATCH', + body: payload, + }) + } + + function updatePassword(payload: Partial<{ password: string }>) { + return $api('/api/auth/password', { + method: 'POST', + body: payload, + }) + } + + return { + updateProfile, + updatePassword, + } +} diff --git a/app/api/casl.ts b/app/api/casl.ts new file mode 100644 index 00000000..6a0eae10 --- /dev/null +++ b/app/api/casl.ts @@ -0,0 +1,9 @@ +export function useApiCasl() { + function fetchScopes() { + return $api('/api/scopes') + } + + return { + fetchScopes, + } +} diff --git a/app/api/credit.ts b/app/api/credit.ts new file mode 100644 index 00000000..20ccaee2 --- /dev/null +++ b/app/api/credit.ts @@ -0,0 +1,12 @@ +import type { User } from '@base/server/types/models' + +export function useApiCredit() { + function fetchCredit() { + // Get user credit from our database instead of depending on Logto data + return $api<{ data: User }>('/api/auth/me') + } + + return { + fetchCredit, + } +} diff --git a/app/api/health.ts b/app/api/health.ts new file mode 100644 index 00000000..97ff6d67 --- /dev/null +++ b/app/api/health.ts @@ -0,0 +1,9 @@ +export function useApiHealth() { + function fetchHealthCheck() { + return $api<{ success: true }>('/api/health') + } + + return { + fetchHealthCheck, + } +} diff --git a/app/api/notification.ts b/app/api/notification.ts new file mode 100644 index 00000000..0aba443a --- /dev/null +++ b/app/api/notification.ts @@ -0,0 +1,90 @@ +import type { ParsedFilterQuery } from '@base/server/utils/filter' +import type { CountNotifications, Notification } from '@base/types' + +export function useApiNotification() { + function fetchNotifications(query?: Partial) { + return $api(`/api/notifications`, { + query, + }) + } + + function markRead(id: string) { + return $api(`/api/notifications/${id}`, { + method: 'PATCH', + body: { + read_at: new Date(), + }, + }) + } + + function markUnread(id: string) { + return $api(`/api/notifications/${id}`, { + method: 'PATCH', + body: { + read_at: null, + }, + }) + } + + function markAllRead() { + return $api(`/api/notifications/read`, { + method: 'PATCH', + }) + } + + function markAllUnread() { + return $api(`/api/notifications/unread`, { + method: 'PATCH', + }) + } + + function deleteNotification(id: string) { + return $api(`/api/notifications/${id}`, { + method: 'DELETE', + }) + } + + function countUnreadNotifications() { + return $api(`/api/notifications/unread`) + } + + function createTokenDevice(token: string) { + return $api(`/api/devices`, { + method: 'POST', + body: { token }, + }) + } + + function deleteTokenDevice(token: string) { + return $api(`/api/devices`, { + method: 'DELETE', + body: { token }, + }) + } + + function updateSettings(payload: Partial<{ + email: boolean | null + desktop: boolean | null + product_updates: boolean | null + weekly_digest: boolean | null + important_updates: boolean | null + }>) { + return $api('/api/auth/notification', { + method: 'PATCH', + body: payload, + }) + } + + return { + fetchNotifications, + markRead, + markUnread, + markAllRead, + markAllUnread, + deleteNotification, + countUnreadNotifications, + createTokenDevice, + deleteTokenDevice, + updateSettings, + } +} diff --git a/app/api/payment.ts b/app/api/payment.ts new file mode 100644 index 00000000..3de49948 --- /dev/null +++ b/app/api/payment.ts @@ -0,0 +1,37 @@ +import type { PaymentStatus } from '@base/server/db/schemas' + +export function useApiPayment() { + function checkout(type: 'payos' | 'vnpay' | 'sepay', productIdentifier: string) { + if (type !== 'payos' && type !== 'vnpay' && type !== 'sepay') + throw new Error('Invalid payment provider') + + return $api<{ + data: { + message: string + paymentUrl: string + } + }>(`api/payments/${type}/checkout`, { + method: 'POST', + body: { + productIdentifier, + }, + }) + } + + function checkStatus(type: 'payos' | 'vnpay' | 'sepay', description: string) { + return $api<{ + data: { + status: PaymentStatus + } + }>(`api/payments/${type}/status`, { + params: { + description, + }, + }) + } + + return { + checkout, + checkStatus, + } +} diff --git a/app/api/product.ts b/app/api/product.ts new file mode 100644 index 00000000..1b3f594e --- /dev/null +++ b/app/api/product.ts @@ -0,0 +1,19 @@ +import type { productTable } from '@base/server/db/schemas' +import type { InferSelectModel } from 'drizzle-orm' + +export type Product = InferSelectModel + +export function useApiProduct() { + function fetchProducts() { + return $api<{ data: Product[] }>('/api/products') + } + + function fetchCreditPackages() { + return $api<{ data: Product[] }>('/api/products/credit-packages') + } + + return { + fetchProducts, + fetchCreditPackages, + } +} diff --git a/app/stores/s3.ts b/app/api/s3.ts similarity index 52% rename from app/stores/s3.ts rename to app/api/s3.ts index 79ef61ba..f2325c12 100644 --- a/app/stores/s3.ts +++ b/app/api/s3.ts @@ -1,6 +1,6 @@ -export const useS3Store = defineStore('s3', () => { +export function useApiS3() { function getSignedUrl(filename: string) { - return $api<{ uploadUrl: string, assetUrl: string }>('/s3', { + return $api<{ uploadUrl: string, assetUrl: string }>('/api/s3', { method: 'PUT', body: { filename }, }) @@ -9,4 +9,4 @@ export const useS3Store = defineStore('s3', () => { return { getSignedUrl, } -}) +} diff --git a/app/api/stripe.ts b/app/api/stripe.ts new file mode 100644 index 00000000..40354dad --- /dev/null +++ b/app/api/stripe.ts @@ -0,0 +1,30 @@ +export function useApiStripe() { + function fetchStripeProducts() { + return $api('/api/payments/stripe/products') + } + + function fetchStripePrices(productId: string) { + return $api(`/api/payments/stripe/products/${productId}/prices`) + } + + function fetchStripeSubscription() { + return $api('/api/payments/stripe/me') + } + + async function createSubscriptionCheckoutUrl(customerId: string, priceId: string) { + return $api<{ url: string }>(`/api/payments/stripe/customers/${customerId}/checkout`, { + method: 'POST', + body: { + priceId, + redirectPath: '/settings/billing-plans', + }, + }) + } + + return { + fetchStripeProducts, + fetchStripePrices, + fetchStripeSubscription, + createSubscriptionCheckoutUrl, + } +} diff --git a/app/app.config.ts b/app/app.config.ts new file mode 100644 index 00000000..ca703625 --- /dev/null +++ b/app/app.config.ts @@ -0,0 +1,8 @@ +export default defineAppConfig({ + ui: { + colors: { + primary: 'blue', + neutral: 'slate', + }, + }, +}) diff --git a/app/app.vue b/app/app.vue index dd3e647e..0f87b4c7 100644 --- a/app/app.vue +++ b/app/app.vue @@ -1,52 +1,70 @@ diff --git a/server/api/payments/.gitkeep b/app/assets/.gitkeep similarity index 100% rename from server/api/payments/.gitkeep rename to app/assets/.gitkeep diff --git a/app/assets/css/main.css b/app/assets/css/main.css new file mode 100644 index 00000000..0ec404e3 --- /dev/null +++ b/app/assets/css/main.css @@ -0,0 +1,31 @@ +@import "tailwindcss" theme(static); +@import "@nuxt/ui-pro"; + +@source "../../../content"; + +@layer base { + button:not(:disabled), + [role="button"]:not(:disabled) { + cursor: pointer; + } +} + +@theme static { + --font-sans: "Public Sans", sans-serif; + + --color-green-50: #effdf5; + --color-green-100: #d9fbe8; + --color-green-200: #b3f5d1; + --color-green-300: #75edae; + --color-green-400: #00dc82; + --color-green-500: #00c16a; + --color-green-600: #00a155; + --color-green-700: #007f45; + --color-green-800: #016538; + --color-green-900: #0a5331; + --color-green-950: #052e16; +} + +.dark { + --ui-bg: var(--ui-color-neutral-950); +} diff --git a/app/assets/images/avatars/avatar-1.png b/app/assets/images/avatars/avatar-1.png deleted file mode 100644 index 514120a6..00000000 Binary files a/app/assets/images/avatars/avatar-1.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-10.png b/app/assets/images/avatars/avatar-10.png deleted file mode 100644 index 58fac22c..00000000 Binary files a/app/assets/images/avatars/avatar-10.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-11.png b/app/assets/images/avatars/avatar-11.png deleted file mode 100644 index 4c97074a..00000000 Binary files a/app/assets/images/avatars/avatar-11.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-12.png b/app/assets/images/avatars/avatar-12.png deleted file mode 100644 index ae3d6a59..00000000 Binary files a/app/assets/images/avatars/avatar-12.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-13.png b/app/assets/images/avatars/avatar-13.png deleted file mode 100644 index 09ca92f9..00000000 Binary files a/app/assets/images/avatars/avatar-13.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-14.png b/app/assets/images/avatars/avatar-14.png deleted file mode 100644 index 5e03b006..00000000 Binary files a/app/assets/images/avatars/avatar-14.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-15.png b/app/assets/images/avatars/avatar-15.png deleted file mode 100644 index 45b64022..00000000 Binary files a/app/assets/images/avatars/avatar-15.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-2.png b/app/assets/images/avatars/avatar-2.png deleted file mode 100644 index 58fac22c..00000000 Binary files a/app/assets/images/avatars/avatar-2.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-3.png b/app/assets/images/avatars/avatar-3.png deleted file mode 100644 index 4c97074a..00000000 Binary files a/app/assets/images/avatars/avatar-3.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-4.png b/app/assets/images/avatars/avatar-4.png deleted file mode 100644 index ae3d6a59..00000000 Binary files a/app/assets/images/avatars/avatar-4.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-5.png b/app/assets/images/avatars/avatar-5.png deleted file mode 100644 index 09ca92f9..00000000 Binary files a/app/assets/images/avatars/avatar-5.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-6.png b/app/assets/images/avatars/avatar-6.png deleted file mode 100644 index 5e03b006..00000000 Binary files a/app/assets/images/avatars/avatar-6.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-7.png b/app/assets/images/avatars/avatar-7.png deleted file mode 100644 index 45b64022..00000000 Binary files a/app/assets/images/avatars/avatar-7.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-8.png b/app/assets/images/avatars/avatar-8.png deleted file mode 100644 index 9aab4689..00000000 Binary files a/app/assets/images/avatars/avatar-8.png and /dev/null differ diff --git a/app/assets/images/avatars/avatar-9.png b/app/assets/images/avatars/avatar-9.png deleted file mode 100644 index 514120a6..00000000 Binary files a/app/assets/images/avatars/avatar-9.png and /dev/null differ diff --git a/app/assets/images/banner/banner-1.jpg b/app/assets/images/banner/banner-1.jpg deleted file mode 100644 index e38c209a..00000000 Binary files a/app/assets/images/banner/banner-1.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-10.jpg b/app/assets/images/banner/banner-10.jpg deleted file mode 100644 index d7371ab0..00000000 Binary files a/app/assets/images/banner/banner-10.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-11.jpg b/app/assets/images/banner/banner-11.jpg deleted file mode 100644 index f7490ab4..00000000 Binary files a/app/assets/images/banner/banner-11.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-12.jpg b/app/assets/images/banner/banner-12.jpg deleted file mode 100644 index ed79ecc8..00000000 Binary files a/app/assets/images/banner/banner-12.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-13.jpg b/app/assets/images/banner/banner-13.jpg deleted file mode 100644 index 4049addd..00000000 Binary files a/app/assets/images/banner/banner-13.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-14.jpg b/app/assets/images/banner/banner-14.jpg deleted file mode 100644 index f349f065..00000000 Binary files a/app/assets/images/banner/banner-14.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-15.jpg b/app/assets/images/banner/banner-15.jpg deleted file mode 100644 index abff088d..00000000 Binary files a/app/assets/images/banner/banner-15.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-16.jpg b/app/assets/images/banner/banner-16.jpg deleted file mode 100644 index 3861439f..00000000 Binary files a/app/assets/images/banner/banner-16.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-17.jpg b/app/assets/images/banner/banner-17.jpg deleted file mode 100644 index cafbf6d2..00000000 Binary files a/app/assets/images/banner/banner-17.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-18.jpg b/app/assets/images/banner/banner-18.jpg deleted file mode 100644 index 8a0a4cd4..00000000 Binary files a/app/assets/images/banner/banner-18.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-19.jpg b/app/assets/images/banner/banner-19.jpg deleted file mode 100644 index 1c168d17..00000000 Binary files a/app/assets/images/banner/banner-19.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-2.jpg b/app/assets/images/banner/banner-2.jpg deleted file mode 100644 index 46f15dd3..00000000 Binary files a/app/assets/images/banner/banner-2.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-20.jpg b/app/assets/images/banner/banner-20.jpg deleted file mode 100644 index 32ce27bb..00000000 Binary files a/app/assets/images/banner/banner-20.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-21.jpg b/app/assets/images/banner/banner-21.jpg deleted file mode 100644 index a785ba46..00000000 Binary files a/app/assets/images/banner/banner-21.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-22.jpg b/app/assets/images/banner/banner-22.jpg deleted file mode 100644 index ad2e6539..00000000 Binary files a/app/assets/images/banner/banner-22.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-23.jpg b/app/assets/images/banner/banner-23.jpg deleted file mode 100644 index f5ab4e6a..00000000 Binary files a/app/assets/images/banner/banner-23.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-24.jpg b/app/assets/images/banner/banner-24.jpg deleted file mode 100644 index 95a3dbc5..00000000 Binary files a/app/assets/images/banner/banner-24.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-25.jpg b/app/assets/images/banner/banner-25.jpg deleted file mode 100644 index 17ff0452..00000000 Binary files a/app/assets/images/banner/banner-25.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-26.jpg b/app/assets/images/banner/banner-26.jpg deleted file mode 100644 index d33d71db..00000000 Binary files a/app/assets/images/banner/banner-26.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-27.jpg b/app/assets/images/banner/banner-27.jpg deleted file mode 100644 index 34bcab30..00000000 Binary files a/app/assets/images/banner/banner-27.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-28.jpg b/app/assets/images/banner/banner-28.jpg deleted file mode 100644 index 041ab938..00000000 Binary files a/app/assets/images/banner/banner-28.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-29.jpg b/app/assets/images/banner/banner-29.jpg deleted file mode 100644 index a96d97eb..00000000 Binary files a/app/assets/images/banner/banner-29.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-3.jpg b/app/assets/images/banner/banner-3.jpg deleted file mode 100644 index cfb3d2c1..00000000 Binary files a/app/assets/images/banner/banner-3.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-30.jpg b/app/assets/images/banner/banner-30.jpg deleted file mode 100644 index 1b948c1c..00000000 Binary files a/app/assets/images/banner/banner-30.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-31.jpg b/app/assets/images/banner/banner-31.jpg deleted file mode 100644 index f7f698f5..00000000 Binary files a/app/assets/images/banner/banner-31.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-32.jpg b/app/assets/images/banner/banner-32.jpg deleted file mode 100644 index c7692316..00000000 Binary files a/app/assets/images/banner/banner-32.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-33.jpg b/app/assets/images/banner/banner-33.jpg deleted file mode 100644 index 0076a953..00000000 Binary files a/app/assets/images/banner/banner-33.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-34.jpg b/app/assets/images/banner/banner-34.jpg deleted file mode 100644 index 23add9fe..00000000 Binary files a/app/assets/images/banner/banner-34.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-35.jpg b/app/assets/images/banner/banner-35.jpg deleted file mode 100644 index ebd7c02f..00000000 Binary files a/app/assets/images/banner/banner-35.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-36.jpg b/app/assets/images/banner/banner-36.jpg deleted file mode 100644 index 91ca0057..00000000 Binary files a/app/assets/images/banner/banner-36.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-37.jpg b/app/assets/images/banner/banner-37.jpg deleted file mode 100644 index cadb18c4..00000000 Binary files a/app/assets/images/banner/banner-37.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-38.jpg b/app/assets/images/banner/banner-38.jpg deleted file mode 100644 index 4d3c834e..00000000 Binary files a/app/assets/images/banner/banner-38.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-39.jpg b/app/assets/images/banner/banner-39.jpg deleted file mode 100644 index 37f40558..00000000 Binary files a/app/assets/images/banner/banner-39.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-4.jpg b/app/assets/images/banner/banner-4.jpg deleted file mode 100644 index bbcfe4ae..00000000 Binary files a/app/assets/images/banner/banner-4.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-40.jpg b/app/assets/images/banner/banner-40.jpg deleted file mode 100644 index 75244ba7..00000000 Binary files a/app/assets/images/banner/banner-40.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-5.jpg b/app/assets/images/banner/banner-5.jpg deleted file mode 100644 index 9dc5dc72..00000000 Binary files a/app/assets/images/banner/banner-5.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-6.jpg b/app/assets/images/banner/banner-6.jpg deleted file mode 100644 index 602d1934..00000000 Binary files a/app/assets/images/banner/banner-6.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-7.jpg b/app/assets/images/banner/banner-7.jpg deleted file mode 100644 index d274815f..00000000 Binary files a/app/assets/images/banner/banner-7.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-8.jpg b/app/assets/images/banner/banner-8.jpg deleted file mode 100644 index 7c19f2d4..00000000 Binary files a/app/assets/images/banner/banner-8.jpg and /dev/null differ diff --git a/app/assets/images/banner/banner-9.jpg b/app/assets/images/banner/banner-9.jpg deleted file mode 100644 index 30d071d4..00000000 Binary files a/app/assets/images/banner/banner-9.jpg and /dev/null differ diff --git a/app/assets/images/cards/3d-illustration-dark.png b/app/assets/images/cards/3d-illustration-dark.png deleted file mode 100644 index 2d8b4391..00000000 Binary files a/app/assets/images/cards/3d-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/cards/3d-illustration.png b/app/assets/images/cards/3d-illustration.png deleted file mode 100644 index 27831329..00000000 Binary files a/app/assets/images/cards/3d-illustration.png and /dev/null differ diff --git a/app/assets/images/cards/4-square-dark.png b/app/assets/images/cards/4-square-dark.png deleted file mode 100644 index 6b551635..00000000 Binary files a/app/assets/images/cards/4-square-dark.png and /dev/null differ diff --git a/app/assets/images/cards/4-square.png b/app/assets/images/cards/4-square.png deleted file mode 100644 index bd4c22f9..00000000 Binary files a/app/assets/images/cards/4-square.png and /dev/null differ diff --git a/app/assets/images/cards/accounting-logo.png b/app/assets/images/cards/accounting-logo.png deleted file mode 100644 index 6fe57ad5..00000000 Binary files a/app/assets/images/cards/accounting-logo.png and /dev/null differ diff --git a/app/assets/images/cards/apple-iPhone-13-pro.png b/app/assets/images/cards/apple-iPhone-13-pro.png deleted file mode 100644 index 79053ad4..00000000 Binary files a/app/assets/images/cards/apple-iPhone-13-pro.png and /dev/null differ diff --git a/app/assets/images/cards/apple-iphone-x-lg.png b/app/assets/images/cards/apple-iphone-x-lg.png deleted file mode 100644 index a4c37c88..00000000 Binary files a/app/assets/images/cards/apple-iphone-x-lg.png and /dev/null differ diff --git a/app/assets/images/cards/apple-mac-mini.png b/app/assets/images/cards/apple-mac-mini.png deleted file mode 100644 index e4102276..00000000 Binary files a/app/assets/images/cards/apple-mac-mini.png and /dev/null differ diff --git a/app/assets/images/cards/apple-watch-green-lg.png b/app/assets/images/cards/apple-watch-green-lg.png deleted file mode 100644 index 12962233..00000000 Binary files a/app/assets/images/cards/apple-watch-green-lg.png and /dev/null differ diff --git a/app/assets/images/cards/awesome-icon.png b/app/assets/images/cards/awesome-icon.png deleted file mode 100644 index 21207739..00000000 Binary files a/app/assets/images/cards/awesome-icon.png and /dev/null differ diff --git a/app/assets/images/cards/bank-credit-card.png b/app/assets/images/cards/bank-credit-card.png deleted file mode 100644 index c290aa5a..00000000 Binary files a/app/assets/images/cards/bank-credit-card.png and /dev/null differ diff --git a/app/assets/images/cards/cellphone.png b/app/assets/images/cards/cellphone.png deleted file mode 100644 index f6813dce..00000000 Binary files a/app/assets/images/cards/cellphone.png and /dev/null differ diff --git a/app/assets/images/cards/cleaning-service-icon.png b/app/assets/images/cards/cleaning-service-icon.png deleted file mode 100644 index 8f24d9b7..00000000 Binary files a/app/assets/images/cards/cleaning-service-icon.png and /dev/null differ diff --git a/app/assets/images/cards/dell-inspiron-3000.png b/app/assets/images/cards/dell-inspiron-3000.png deleted file mode 100644 index 40a31594..00000000 Binary files a/app/assets/images/cards/dell-inspiron-3000.png and /dev/null differ diff --git a/app/assets/images/cards/delta-web-app-dark.png b/app/assets/images/cards/delta-web-app-dark.png deleted file mode 100644 index 5d36df0d..00000000 Binary files a/app/assets/images/cards/delta-web-app-dark.png and /dev/null differ diff --git a/app/assets/images/cards/delta-web-app.png b/app/assets/images/cards/delta-web-app.png deleted file mode 100644 index e523e8e3..00000000 Binary files a/app/assets/images/cards/delta-web-app.png and /dev/null differ diff --git a/app/assets/images/cards/ecommerce-website-dark.png b/app/assets/images/cards/ecommerce-website-dark.png deleted file mode 100644 index 58a9a52f..00000000 Binary files a/app/assets/images/cards/ecommerce-website-dark.png and /dev/null differ diff --git a/app/assets/images/cards/ecommerce-website.png b/app/assets/images/cards/ecommerce-website.png deleted file mode 100644 index c9f0d9fb..00000000 Binary files a/app/assets/images/cards/ecommerce-website.png and /dev/null differ diff --git a/app/assets/images/cards/finance-app-design-dark.png b/app/assets/images/cards/finance-app-design-dark.png deleted file mode 100644 index f5f9a417..00000000 Binary files a/app/assets/images/cards/finance-app-design-dark.png and /dev/null differ diff --git a/app/assets/images/cards/finance-app-design.png b/app/assets/images/cards/finance-app-design.png deleted file mode 100644 index 28745c0f..00000000 Binary files a/app/assets/images/cards/finance-app-design.png and /dev/null differ diff --git a/app/assets/images/cards/google-pixel-6.png b/app/assets/images/cards/google-pixel-6.png deleted file mode 100644 index 6c47e8fe..00000000 Binary files a/app/assets/images/cards/google-pixel-6.png and /dev/null differ diff --git a/app/assets/images/cards/hp-envy-x360.png b/app/assets/images/cards/hp-envy-x360.png deleted file mode 100644 index 7ba23280..00000000 Binary files a/app/assets/images/cards/hp-envy-x360.png and /dev/null differ diff --git a/app/assets/images/cards/iPhone-bg.png b/app/assets/images/cards/iPhone-bg.png deleted file mode 100644 index e3eb9c0d..00000000 Binary files a/app/assets/images/cards/iPhone-bg.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-1.png b/app/assets/images/cards/illustration-1.png deleted file mode 100644 index 9013c092..00000000 Binary files a/app/assets/images/cards/illustration-1.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-2.png b/app/assets/images/cards/illustration-2.png deleted file mode 100644 index c97c9819..00000000 Binary files a/app/assets/images/cards/illustration-2.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-3.png b/app/assets/images/cards/illustration-3.png deleted file mode 100644 index 2ecb719d..00000000 Binary files a/app/assets/images/cards/illustration-3.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-4.png b/app/assets/images/cards/illustration-4.png deleted file mode 100644 index 8b5fb2a4..00000000 Binary files a/app/assets/images/cards/illustration-4.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-daisy-dark.png b/app/assets/images/cards/illustration-daisy-dark.png deleted file mode 100644 index 38cd7d9a..00000000 Binary files a/app/assets/images/cards/illustration-daisy-dark.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-daisy-light.png b/app/assets/images/cards/illustration-daisy-light.png deleted file mode 100644 index 1ee43d5c..00000000 Binary files a/app/assets/images/cards/illustration-daisy-light.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-john-dark.png b/app/assets/images/cards/illustration-john-dark.png deleted file mode 100644 index 147f0b6e..00000000 Binary files a/app/assets/images/cards/illustration-john-dark.png and /dev/null differ diff --git a/app/assets/images/cards/illustration-john-light.png b/app/assets/images/cards/illustration-john-light.png deleted file mode 100644 index 89527368..00000000 Binary files a/app/assets/images/cards/illustration-john-light.png and /dev/null differ diff --git a/app/assets/images/cards/logo-credit-card-2.png b/app/assets/images/cards/logo-credit-card-2.png deleted file mode 100644 index a0c917f1..00000000 Binary files a/app/assets/images/cards/logo-credit-card-2.png and /dev/null differ diff --git a/app/assets/images/cards/logo-mastercard-small.png b/app/assets/images/cards/logo-mastercard-small.png deleted file mode 100644 index 81f39cc1..00000000 Binary files a/app/assets/images/cards/logo-mastercard-small.png and /dev/null differ diff --git a/app/assets/images/cards/marketing-expense-logo.png b/app/assets/images/cards/marketing-expense-logo.png deleted file mode 100644 index 75f9bff2..00000000 Binary files a/app/assets/images/cards/marketing-expense-logo.png and /dev/null differ diff --git a/app/assets/images/cards/nintendo-switch.png b/app/assets/images/cards/nintendo-switch.png deleted file mode 100644 index 0a84e41c..00000000 Binary files a/app/assets/images/cards/nintendo-switch.png and /dev/null differ diff --git a/app/assets/images/cards/oneplus-9-pro.png b/app/assets/images/cards/oneplus-9-pro.png deleted file mode 100644 index 866723a8..00000000 Binary files a/app/assets/images/cards/oneplus-9-pro.png and /dev/null differ diff --git a/app/assets/images/cards/paypal-primary.png b/app/assets/images/cards/paypal-primary.png deleted file mode 100644 index 7c7fff57..00000000 Binary files a/app/assets/images/cards/paypal-primary.png and /dev/null differ diff --git a/app/assets/images/cards/pose-m-9.png b/app/assets/images/cards/pose-m-9.png deleted file mode 100644 index 2129e22a..00000000 Binary files a/app/assets/images/cards/pose-m-9.png and /dev/null differ diff --git a/app/assets/images/cards/ps4-joystick-lg.png b/app/assets/images/cards/ps4-joystick-lg.png deleted file mode 100644 index faf78c1a..00000000 Binary files a/app/assets/images/cards/ps4-joystick-lg.png and /dev/null differ diff --git a/app/assets/images/cards/sales-overview-logo.png b/app/assets/images/cards/sales-overview-logo.png deleted file mode 100644 index b334a6fc..00000000 Binary files a/app/assets/images/cards/sales-overview-logo.png and /dev/null differ diff --git a/app/assets/images/cards/samsung-s22.png b/app/assets/images/cards/samsung-s22.png deleted file mode 100644 index 9d6ac07d..00000000 Binary files a/app/assets/images/cards/samsung-s22.png and /dev/null differ diff --git a/app/assets/images/cards/sony-play-station-5.png b/app/assets/images/cards/sony-play-station-5.png deleted file mode 100644 index 8dba4b68..00000000 Binary files a/app/assets/images/cards/sony-play-station-5.png and /dev/null differ diff --git a/app/assets/images/cards/tabs-console.png b/app/assets/images/cards/tabs-console.png deleted file mode 100644 index c3b5ca37..00000000 Binary files a/app/assets/images/cards/tabs-console.png and /dev/null differ diff --git a/app/assets/images/cards/tabs-desktop.png b/app/assets/images/cards/tabs-desktop.png deleted file mode 100644 index 893c925a..00000000 Binary files a/app/assets/images/cards/tabs-desktop.png and /dev/null differ diff --git a/app/assets/images/cards/tabs-mobile.png b/app/assets/images/cards/tabs-mobile.png deleted file mode 100644 index 58f21cf2..00000000 Binary files a/app/assets/images/cards/tabs-mobile.png and /dev/null differ diff --git a/app/assets/images/cards/trophy.png b/app/assets/images/cards/trophy.png deleted file mode 100644 index a33828bc..00000000 Binary files a/app/assets/images/cards/trophy.png and /dev/null differ diff --git a/app/assets/images/cards/xbox-series-x.png b/app/assets/images/cards/xbox-series-x.png deleted file mode 100644 index d3ae7887..00000000 Binary files a/app/assets/images/cards/xbox-series-x.png and /dev/null differ diff --git a/app/assets/images/customizer-icons/border-dark.svg b/app/assets/images/customizer-icons/border-dark.svg deleted file mode 100644 index 81815a48..00000000 --- a/app/assets/images/customizer-icons/border-dark.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/border-light.svg b/app/assets/images/customizer-icons/border-light.svg deleted file mode 100644 index 8baf71ec..00000000 --- a/app/assets/images/customizer-icons/border-light.svg +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/collapsed-dark.svg b/app/assets/images/customizer-icons/collapsed-dark.svg deleted file mode 100644 index 52262e78..00000000 --- a/app/assets/images/customizer-icons/collapsed-dark.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/collapsed-light.svg b/app/assets/images/customizer-icons/collapsed-light.svg deleted file mode 100644 index 6f32fb1b..00000000 --- a/app/assets/images/customizer-icons/collapsed-light.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/compact-dark.svg b/app/assets/images/customizer-icons/compact-dark.svg deleted file mode 100644 index d42f9c3d..00000000 --- a/app/assets/images/customizer-icons/compact-dark.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/compact-light.svg b/app/assets/images/customizer-icons/compact-light.svg deleted file mode 100644 index dab9a284..00000000 --- a/app/assets/images/customizer-icons/compact-light.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/default-dark.svg b/app/assets/images/customizer-icons/default-dark.svg deleted file mode 100644 index 7fccfffb..00000000 --- a/app/assets/images/customizer-icons/default-dark.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/default-light.svg b/app/assets/images/customizer-icons/default-light.svg deleted file mode 100644 index 4c1317f5..00000000 --- a/app/assets/images/customizer-icons/default-light.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/expanded-dark.svg b/app/assets/images/customizer-icons/expanded-dark.svg deleted file mode 100644 index 7fa009ca..00000000 --- a/app/assets/images/customizer-icons/expanded-dark.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/expanded-light.svg b/app/assets/images/customizer-icons/expanded-light.svg deleted file mode 100644 index a52efcac..00000000 --- a/app/assets/images/customizer-icons/expanded-light.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/hidden-dark.svg b/app/assets/images/customizer-icons/hidden-dark.svg deleted file mode 100644 index 08cf0e01..00000000 --- a/app/assets/images/customizer-icons/hidden-dark.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/hidden-light.svg b/app/assets/images/customizer-icons/hidden-light.svg deleted file mode 100644 index 28096613..00000000 --- a/app/assets/images/customizer-icons/hidden-light.svg +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/horizontal-dark.svg b/app/assets/images/customizer-icons/horizontal-dark.svg deleted file mode 100644 index 329c4ac4..00000000 --- a/app/assets/images/customizer-icons/horizontal-dark.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/horizontal-light.svg b/app/assets/images/customizer-icons/horizontal-light.svg deleted file mode 100644 index e185869d..00000000 --- a/app/assets/images/customizer-icons/horizontal-light.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/ltr-dark.svg b/app/assets/images/customizer-icons/ltr-dark.svg deleted file mode 100644 index 7e35dcc1..00000000 --- a/app/assets/images/customizer-icons/ltr-dark.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/ltr-light.svg b/app/assets/images/customizer-icons/ltr-light.svg deleted file mode 100644 index 7dc16afd..00000000 --- a/app/assets/images/customizer-icons/ltr-light.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/rtl-dark.svg b/app/assets/images/customizer-icons/rtl-dark.svg deleted file mode 100644 index 97bcefec..00000000 --- a/app/assets/images/customizer-icons/rtl-dark.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/rtl-light.svg b/app/assets/images/customizer-icons/rtl-light.svg deleted file mode 100644 index f09b374c..00000000 --- a/app/assets/images/customizer-icons/rtl-light.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/semi-dark-dark.svg b/app/assets/images/customizer-icons/semi-dark-dark.svg deleted file mode 100644 index bbb42146..00000000 --- a/app/assets/images/customizer-icons/semi-dark-dark.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/semi-dark-light.svg b/app/assets/images/customizer-icons/semi-dark-light.svg deleted file mode 100644 index e3b55e1e..00000000 --- a/app/assets/images/customizer-icons/semi-dark-light.svg +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/static-dark.svg b/app/assets/images/customizer-icons/static-dark.svg deleted file mode 100644 index e618af97..00000000 --- a/app/assets/images/customizer-icons/static-dark.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/static-light.svg b/app/assets/images/customizer-icons/static-light.svg deleted file mode 100644 index ad48f3a3..00000000 --- a/app/assets/images/customizer-icons/static-light.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/sticky-dark.svg b/app/assets/images/customizer-icons/sticky-dark.svg deleted file mode 100644 index 6bc52220..00000000 --- a/app/assets/images/customizer-icons/sticky-dark.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/sticky-light.svg b/app/assets/images/customizer-icons/sticky-light.svg deleted file mode 100644 index ddfb5c8d..00000000 --- a/app/assets/images/customizer-icons/sticky-light.svg +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/wide-dark.svg b/app/assets/images/customizer-icons/wide-dark.svg deleted file mode 100644 index ea219b98..00000000 --- a/app/assets/images/customizer-icons/wide-dark.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/app/assets/images/customizer-icons/wide-light.svg b/app/assets/images/customizer-icons/wide-light.svg deleted file mode 100644 index 26920b79..00000000 --- a/app/assets/images/customizer-icons/wide-light.svg +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/app/assets/images/eCommerce/1.png b/app/assets/images/eCommerce/1.png deleted file mode 100644 index da3754e3..00000000 Binary files a/app/assets/images/eCommerce/1.png and /dev/null differ diff --git a/app/assets/images/eCommerce/10.png b/app/assets/images/eCommerce/10.png deleted file mode 100644 index cbe272a3..00000000 Binary files a/app/assets/images/eCommerce/10.png and /dev/null differ diff --git a/app/assets/images/eCommerce/11.png b/app/assets/images/eCommerce/11.png deleted file mode 100644 index 21ef2c50..00000000 Binary files a/app/assets/images/eCommerce/11.png and /dev/null differ diff --git a/app/assets/images/eCommerce/12.png b/app/assets/images/eCommerce/12.png deleted file mode 100644 index ff6d5a31..00000000 Binary files a/app/assets/images/eCommerce/12.png and /dev/null differ diff --git a/app/assets/images/eCommerce/13.png b/app/assets/images/eCommerce/13.png deleted file mode 100644 index ae9bf58e..00000000 Binary files a/app/assets/images/eCommerce/13.png and /dev/null differ diff --git a/app/assets/images/eCommerce/14.png b/app/assets/images/eCommerce/14.png deleted file mode 100644 index 85bad7d6..00000000 Binary files a/app/assets/images/eCommerce/14.png and /dev/null differ diff --git a/app/assets/images/eCommerce/15.png b/app/assets/images/eCommerce/15.png deleted file mode 100644 index d8534205..00000000 Binary files a/app/assets/images/eCommerce/15.png and /dev/null differ diff --git a/app/assets/images/eCommerce/16.png b/app/assets/images/eCommerce/16.png deleted file mode 100644 index 786058d9..00000000 Binary files a/app/assets/images/eCommerce/16.png and /dev/null differ diff --git a/app/assets/images/eCommerce/17.png b/app/assets/images/eCommerce/17.png deleted file mode 100644 index e7549e8f..00000000 Binary files a/app/assets/images/eCommerce/17.png and /dev/null differ diff --git a/app/assets/images/eCommerce/18.png b/app/assets/images/eCommerce/18.png deleted file mode 100644 index e52030bc..00000000 Binary files a/app/assets/images/eCommerce/18.png and /dev/null differ diff --git a/app/assets/images/eCommerce/19.png b/app/assets/images/eCommerce/19.png deleted file mode 100644 index aa787303..00000000 Binary files a/app/assets/images/eCommerce/19.png and /dev/null differ diff --git a/app/assets/images/eCommerce/2.png b/app/assets/images/eCommerce/2.png deleted file mode 100644 index 1ac15eb2..00000000 Binary files a/app/assets/images/eCommerce/2.png and /dev/null differ diff --git a/app/assets/images/eCommerce/20.png b/app/assets/images/eCommerce/20.png deleted file mode 100644 index e96eae40..00000000 Binary files a/app/assets/images/eCommerce/20.png and /dev/null differ diff --git a/app/assets/images/eCommerce/21.png b/app/assets/images/eCommerce/21.png deleted file mode 100644 index b51bc803..00000000 Binary files a/app/assets/images/eCommerce/21.png and /dev/null differ diff --git a/app/assets/images/eCommerce/22.png b/app/assets/images/eCommerce/22.png deleted file mode 100644 index e898ca53..00000000 Binary files a/app/assets/images/eCommerce/22.png and /dev/null differ diff --git a/app/assets/images/eCommerce/23.png b/app/assets/images/eCommerce/23.png deleted file mode 100644 index 869f6c7b..00000000 Binary files a/app/assets/images/eCommerce/23.png and /dev/null differ diff --git a/app/assets/images/eCommerce/24.png b/app/assets/images/eCommerce/24.png deleted file mode 100644 index 25c11b17..00000000 Binary files a/app/assets/images/eCommerce/24.png and /dev/null differ diff --git a/app/assets/images/eCommerce/25.png b/app/assets/images/eCommerce/25.png deleted file mode 100644 index d9c77137..00000000 Binary files a/app/assets/images/eCommerce/25.png and /dev/null differ diff --git a/app/assets/images/eCommerce/26.png b/app/assets/images/eCommerce/26.png deleted file mode 100644 index 185e5955..00000000 Binary files a/app/assets/images/eCommerce/26.png and /dev/null differ diff --git a/app/assets/images/eCommerce/27.png b/app/assets/images/eCommerce/27.png deleted file mode 100644 index a17d5dd0..00000000 Binary files a/app/assets/images/eCommerce/27.png and /dev/null differ diff --git a/app/assets/images/eCommerce/3.png b/app/assets/images/eCommerce/3.png deleted file mode 100644 index 49a1031a..00000000 Binary files a/app/assets/images/eCommerce/3.png and /dev/null differ diff --git a/app/assets/images/eCommerce/4.png b/app/assets/images/eCommerce/4.png deleted file mode 100644 index 2662d30a..00000000 Binary files a/app/assets/images/eCommerce/4.png and /dev/null differ diff --git a/app/assets/images/eCommerce/5.png b/app/assets/images/eCommerce/5.png deleted file mode 100644 index f9236e20..00000000 Binary files a/app/assets/images/eCommerce/5.png and /dev/null differ diff --git a/app/assets/images/eCommerce/6.png b/app/assets/images/eCommerce/6.png deleted file mode 100644 index 421093a2..00000000 Binary files a/app/assets/images/eCommerce/6.png and /dev/null differ diff --git a/app/assets/images/eCommerce/7.png b/app/assets/images/eCommerce/7.png deleted file mode 100644 index 60f2e651..00000000 Binary files a/app/assets/images/eCommerce/7.png and /dev/null differ diff --git a/app/assets/images/eCommerce/8.png b/app/assets/images/eCommerce/8.png deleted file mode 100644 index dcd9d84a..00000000 Binary files a/app/assets/images/eCommerce/8.png and /dev/null differ diff --git a/app/assets/images/eCommerce/9.png b/app/assets/images/eCommerce/9.png deleted file mode 100644 index 12f81f81..00000000 Binary files a/app/assets/images/eCommerce/9.png and /dev/null differ diff --git a/app/assets/images/eCommerce/rocket.png b/app/assets/images/eCommerce/rocket.png deleted file mode 100644 index def098cd..00000000 Binary files a/app/assets/images/eCommerce/rocket.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-1.png b/app/assets/images/ecommerce-images/product-1.png deleted file mode 100644 index d37b8ff7..00000000 Binary files a/app/assets/images/ecommerce-images/product-1.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-10.png b/app/assets/images/ecommerce-images/product-10.png deleted file mode 100644 index 4dfb1cdc..00000000 Binary files a/app/assets/images/ecommerce-images/product-10.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-11.png b/app/assets/images/ecommerce-images/product-11.png deleted file mode 100644 index b5d0a797..00000000 Binary files a/app/assets/images/ecommerce-images/product-11.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-12.png b/app/assets/images/ecommerce-images/product-12.png deleted file mode 100644 index 6bb75d52..00000000 Binary files a/app/assets/images/ecommerce-images/product-12.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-13.png b/app/assets/images/ecommerce-images/product-13.png deleted file mode 100644 index 645b0e51..00000000 Binary files a/app/assets/images/ecommerce-images/product-13.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-14.png b/app/assets/images/ecommerce-images/product-14.png deleted file mode 100644 index 4c712deb..00000000 Binary files a/app/assets/images/ecommerce-images/product-14.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-15.png b/app/assets/images/ecommerce-images/product-15.png deleted file mode 100644 index c352d4d1..00000000 Binary files a/app/assets/images/ecommerce-images/product-15.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-16.png b/app/assets/images/ecommerce-images/product-16.png deleted file mode 100644 index 14c70c53..00000000 Binary files a/app/assets/images/ecommerce-images/product-16.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-17.png b/app/assets/images/ecommerce-images/product-17.png deleted file mode 100644 index 3d119e5c..00000000 Binary files a/app/assets/images/ecommerce-images/product-17.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-18.png b/app/assets/images/ecommerce-images/product-18.png deleted file mode 100644 index 344b4e25..00000000 Binary files a/app/assets/images/ecommerce-images/product-18.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-19.png b/app/assets/images/ecommerce-images/product-19.png deleted file mode 100644 index ca86ddde..00000000 Binary files a/app/assets/images/ecommerce-images/product-19.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-2.png b/app/assets/images/ecommerce-images/product-2.png deleted file mode 100644 index 23a45257..00000000 Binary files a/app/assets/images/ecommerce-images/product-2.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-20.png b/app/assets/images/ecommerce-images/product-20.png deleted file mode 100644 index 76e7f299..00000000 Binary files a/app/assets/images/ecommerce-images/product-20.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-21.png b/app/assets/images/ecommerce-images/product-21.png deleted file mode 100644 index 2869e81d..00000000 Binary files a/app/assets/images/ecommerce-images/product-21.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-22.png b/app/assets/images/ecommerce-images/product-22.png deleted file mode 100644 index c0058b7c..00000000 Binary files a/app/assets/images/ecommerce-images/product-22.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-23.png b/app/assets/images/ecommerce-images/product-23.png deleted file mode 100644 index 97814d9f..00000000 Binary files a/app/assets/images/ecommerce-images/product-23.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-24.png b/app/assets/images/ecommerce-images/product-24.png deleted file mode 100644 index b5fd742e..00000000 Binary files a/app/assets/images/ecommerce-images/product-24.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-25.png b/app/assets/images/ecommerce-images/product-25.png deleted file mode 100644 index 7b9d7f5d..00000000 Binary files a/app/assets/images/ecommerce-images/product-25.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-26.png b/app/assets/images/ecommerce-images/product-26.png deleted file mode 100644 index d9187f0b..00000000 Binary files a/app/assets/images/ecommerce-images/product-26.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-27.png b/app/assets/images/ecommerce-images/product-27.png deleted file mode 100644 index 9d32baf7..00000000 Binary files a/app/assets/images/ecommerce-images/product-27.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-28.png b/app/assets/images/ecommerce-images/product-28.png deleted file mode 100644 index a3bec214..00000000 Binary files a/app/assets/images/ecommerce-images/product-28.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-29.png b/app/assets/images/ecommerce-images/product-29.png deleted file mode 100644 index 967d2c3d..00000000 Binary files a/app/assets/images/ecommerce-images/product-29.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-3.png b/app/assets/images/ecommerce-images/product-3.png deleted file mode 100644 index 80339d61..00000000 Binary files a/app/assets/images/ecommerce-images/product-3.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-30.png b/app/assets/images/ecommerce-images/product-30.png deleted file mode 100644 index c7a6a75f..00000000 Binary files a/app/assets/images/ecommerce-images/product-30.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-4.png b/app/assets/images/ecommerce-images/product-4.png deleted file mode 100644 index bcb62c39..00000000 Binary files a/app/assets/images/ecommerce-images/product-4.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-5.png b/app/assets/images/ecommerce-images/product-5.png deleted file mode 100644 index e21b1686..00000000 Binary files a/app/assets/images/ecommerce-images/product-5.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-6.png b/app/assets/images/ecommerce-images/product-6.png deleted file mode 100644 index e35ec7d9..00000000 Binary files a/app/assets/images/ecommerce-images/product-6.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-7.png b/app/assets/images/ecommerce-images/product-7.png deleted file mode 100644 index 4305c7f3..00000000 Binary files a/app/assets/images/ecommerce-images/product-7.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-8.png b/app/assets/images/ecommerce-images/product-8.png deleted file mode 100644 index c33ffceb..00000000 Binary files a/app/assets/images/ecommerce-images/product-8.png and /dev/null differ diff --git a/app/assets/images/ecommerce-images/product-9.png b/app/assets/images/ecommerce-images/product-9.png deleted file mode 100644 index 4cd355bd..00000000 Binary files a/app/assets/images/ecommerce-images/product-9.png and /dev/null differ diff --git a/app/assets/images/front-pages/backgrounds/cta-bg.png b/app/assets/images/front-pages/backgrounds/cta-bg.png deleted file mode 100644 index 4a3d0c33..00000000 Binary files a/app/assets/images/front-pages/backgrounds/cta-bg.png and /dev/null differ diff --git a/app/assets/images/front-pages/backgrounds/footer-bg.png b/app/assets/images/front-pages/backgrounds/footer-bg.png deleted file mode 100644 index aa3d06f5..00000000 Binary files a/app/assets/images/front-pages/backgrounds/footer-bg.png and /dev/null differ diff --git a/app/assets/images/front-pages/backgrounds/hero-bg-dark.png b/app/assets/images/front-pages/backgrounds/hero-bg-dark.png deleted file mode 100644 index e434755e..00000000 Binary files a/app/assets/images/front-pages/backgrounds/hero-bg-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/backgrounds/hero-bg.png b/app/assets/images/front-pages/backgrounds/hero-bg.png deleted file mode 100644 index ccaec901..00000000 Binary files a/app/assets/images/front-pages/backgrounds/hero-bg.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-1-dark.png b/app/assets/images/front-pages/branding/logo-1-dark.png deleted file mode 100644 index 4be75a58..00000000 Binary files a/app/assets/images/front-pages/branding/logo-1-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-1-light.png b/app/assets/images/front-pages/branding/logo-1-light.png deleted file mode 100644 index 02f70946..00000000 Binary files a/app/assets/images/front-pages/branding/logo-1-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-1.png b/app/assets/images/front-pages/branding/logo-1.png deleted file mode 100644 index 49a7f226..00000000 Binary files a/app/assets/images/front-pages/branding/logo-1.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-2-dark.png b/app/assets/images/front-pages/branding/logo-2-dark.png deleted file mode 100644 index 7eea1ed0..00000000 Binary files a/app/assets/images/front-pages/branding/logo-2-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-2-light.png b/app/assets/images/front-pages/branding/logo-2-light.png deleted file mode 100644 index 68ccd0b6..00000000 Binary files a/app/assets/images/front-pages/branding/logo-2-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-2.png b/app/assets/images/front-pages/branding/logo-2.png deleted file mode 100644 index 5159d58b..00000000 Binary files a/app/assets/images/front-pages/branding/logo-2.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-3-dark.png b/app/assets/images/front-pages/branding/logo-3-dark.png deleted file mode 100644 index 06cd4c4f..00000000 Binary files a/app/assets/images/front-pages/branding/logo-3-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-3-light.png b/app/assets/images/front-pages/branding/logo-3-light.png deleted file mode 100644 index 0e2bf437..00000000 Binary files a/app/assets/images/front-pages/branding/logo-3-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-3.png b/app/assets/images/front-pages/branding/logo-3.png deleted file mode 100644 index 7f551d70..00000000 Binary files a/app/assets/images/front-pages/branding/logo-3.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-4-dark.png b/app/assets/images/front-pages/branding/logo-4-dark.png deleted file mode 100644 index 51e63508..00000000 Binary files a/app/assets/images/front-pages/branding/logo-4-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-4-light.png b/app/assets/images/front-pages/branding/logo-4-light.png deleted file mode 100644 index 4ce09602..00000000 Binary files a/app/assets/images/front-pages/branding/logo-4-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-4.png b/app/assets/images/front-pages/branding/logo-4.png deleted file mode 100644 index d94e317e..00000000 Binary files a/app/assets/images/front-pages/branding/logo-4.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-5-dark.png b/app/assets/images/front-pages/branding/logo-5-dark.png deleted file mode 100644 index b0fa506c..00000000 Binary files a/app/assets/images/front-pages/branding/logo-5-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-5-light.png b/app/assets/images/front-pages/branding/logo-5-light.png deleted file mode 100644 index 84b83559..00000000 Binary files a/app/assets/images/front-pages/branding/logo-5-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/branding/logo-5.png b/app/assets/images/front-pages/branding/logo-5.png deleted file mode 100644 index e854e939..00000000 Binary files a/app/assets/images/front-pages/branding/logo-5.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/apple-icon.png b/app/assets/images/front-pages/landing-page/apple-icon.png deleted file mode 100644 index 9d394d66..00000000 Binary files a/app/assets/images/front-pages/landing-page/apple-icon.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/cta-dashboard.png b/app/assets/images/front-pages/landing-page/cta-dashboard.png deleted file mode 100644 index 7845e61a..00000000 Binary files a/app/assets/images/front-pages/landing-page/cta-dashboard.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/google-play-icon.png b/app/assets/images/front-pages/landing-page/google-play-icon.png deleted file mode 100644 index 17b69f85..00000000 Binary files a/app/assets/images/front-pages/landing-page/google-play-icon.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/hero-dashboard-dark.png b/app/assets/images/front-pages/landing-page/hero-dashboard-dark.png deleted file mode 100644 index 8a548a86..00000000 Binary files a/app/assets/images/front-pages/landing-page/hero-dashboard-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/hero-dashboard-light.png b/app/assets/images/front-pages/landing-page/hero-dashboard-light.png deleted file mode 100644 index 94a8fe83..00000000 Binary files a/app/assets/images/front-pages/landing-page/hero-dashboard-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/hero-elements-dark.png b/app/assets/images/front-pages/landing-page/hero-elements-dark.png deleted file mode 100644 index cd23b4d9..00000000 Binary files a/app/assets/images/front-pages/landing-page/hero-elements-dark.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/hero-elements-light.png b/app/assets/images/front-pages/landing-page/hero-elements-light.png deleted file mode 100644 index bf6d4cc1..00000000 Binary files a/app/assets/images/front-pages/landing-page/hero-elements-light.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/lets-contact.png b/app/assets/images/front-pages/landing-page/lets-contact.png deleted file mode 100644 index a294e5cc..00000000 Binary files a/app/assets/images/front-pages/landing-page/lets-contact.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/sitting-girl-with-laptop.png b/app/assets/images/front-pages/landing-page/sitting-girl-with-laptop.png deleted file mode 100644 index 8c2aca0b..00000000 Binary files a/app/assets/images/front-pages/landing-page/sitting-girl-with-laptop.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/team-member-1.png b/app/assets/images/front-pages/landing-page/team-member-1.png deleted file mode 100644 index 180ec07a..00000000 Binary files a/app/assets/images/front-pages/landing-page/team-member-1.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/team-member-2.png b/app/assets/images/front-pages/landing-page/team-member-2.png deleted file mode 100644 index 0801b889..00000000 Binary files a/app/assets/images/front-pages/landing-page/team-member-2.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/team-member-3.png b/app/assets/images/front-pages/landing-page/team-member-3.png deleted file mode 100644 index 36ac287b..00000000 Binary files a/app/assets/images/front-pages/landing-page/team-member-3.png and /dev/null differ diff --git a/app/assets/images/front-pages/landing-page/team-member-4.png b/app/assets/images/front-pages/landing-page/team-member-4.png deleted file mode 100644 index 2c0f5e53..00000000 Binary files a/app/assets/images/front-pages/landing-page/team-member-4.png and /dev/null differ diff --git a/app/assets/images/front-pages/misc/checkout-image.png b/app/assets/images/front-pages/misc/checkout-image.png deleted file mode 100644 index 6a1a93a9..00000000 Binary files a/app/assets/images/front-pages/misc/checkout-image.png and /dev/null differ diff --git a/app/assets/images/front-pages/misc/nav-img.png b/app/assets/images/front-pages/misc/nav-img.png deleted file mode 100644 index 1018a1e1..00000000 Binary files a/app/assets/images/front-pages/misc/nav-img.png and /dev/null differ diff --git a/app/assets/images/front-pages/misc/product-image.png b/app/assets/images/front-pages/misc/product-image.png deleted file mode 100644 index 18f88349..00000000 Binary files a/app/assets/images/front-pages/misc/product-image.png and /dev/null differ diff --git a/app/assets/images/icons/brands/angular.png b/app/assets/images/icons/brands/angular.png deleted file mode 100644 index 4c70fe17..00000000 Binary files a/app/assets/images/icons/brands/angular.png and /dev/null differ diff --git a/app/assets/images/icons/brands/asana.png b/app/assets/images/icons/brands/asana.png deleted file mode 100644 index 6a178809..00000000 Binary files a/app/assets/images/icons/brands/asana.png and /dev/null differ diff --git a/app/assets/images/icons/brands/aws.png b/app/assets/images/icons/brands/aws.png deleted file mode 100644 index 6738e7c9..00000000 Binary files a/app/assets/images/icons/brands/aws.png and /dev/null differ diff --git a/app/assets/images/icons/brands/behance.png b/app/assets/images/icons/brands/behance.png deleted file mode 100644 index bf413135..00000000 Binary files a/app/assets/images/icons/brands/behance.png and /dev/null differ diff --git a/app/assets/images/icons/brands/dribbble.png b/app/assets/images/icons/brands/dribbble.png deleted file mode 100644 index 468e3110..00000000 Binary files a/app/assets/images/icons/brands/dribbble.png and /dev/null differ diff --git a/app/assets/images/icons/brands/facebook.png b/app/assets/images/icons/brands/facebook.png deleted file mode 100644 index 3ee2f663..00000000 Binary files a/app/assets/images/icons/brands/facebook.png and /dev/null differ diff --git a/app/assets/images/icons/brands/firebase.png b/app/assets/images/icons/brands/firebase.png deleted file mode 100644 index 2130a583..00000000 Binary files a/app/assets/images/icons/brands/firebase.png and /dev/null differ diff --git a/app/assets/images/icons/brands/github.png b/app/assets/images/icons/brands/github.png deleted file mode 100644 index a419af62..00000000 Binary files a/app/assets/images/icons/brands/github.png and /dev/null differ diff --git a/app/assets/images/icons/brands/google.png b/app/assets/images/icons/brands/google.png deleted file mode 100644 index 37cdc5a4..00000000 Binary files a/app/assets/images/icons/brands/google.png and /dev/null differ diff --git a/app/assets/images/icons/brands/instagram.png b/app/assets/images/icons/brands/instagram.png deleted file mode 100644 index eb18ca27..00000000 Binary files a/app/assets/images/icons/brands/instagram.png and /dev/null differ diff --git a/app/assets/images/icons/brands/laravel.png b/app/assets/images/icons/brands/laravel.png deleted file mode 100644 index e9fabc80..00000000 Binary files a/app/assets/images/icons/brands/laravel.png and /dev/null differ diff --git a/app/assets/images/icons/brands/linkedin.png b/app/assets/images/icons/brands/linkedin.png deleted file mode 100644 index 63f0f274..00000000 Binary files a/app/assets/images/icons/brands/linkedin.png and /dev/null differ diff --git a/app/assets/images/icons/brands/mailchimp.png b/app/assets/images/icons/brands/mailchimp.png deleted file mode 100644 index 671bb157..00000000 Binary files a/app/assets/images/icons/brands/mailchimp.png and /dev/null differ diff --git a/app/assets/images/icons/brands/mysql.png b/app/assets/images/icons/brands/mysql.png deleted file mode 100644 index 2cc165dd..00000000 Binary files a/app/assets/images/icons/brands/mysql.png and /dev/null differ diff --git a/app/assets/images/icons/brands/react.png b/app/assets/images/icons/brands/react.png deleted file mode 100644 index 4e18a5d5..00000000 Binary files a/app/assets/images/icons/brands/react.png and /dev/null differ diff --git a/app/assets/images/icons/brands/slack.png b/app/assets/images/icons/brands/slack.png deleted file mode 100644 index a109a0f9..00000000 Binary files a/app/assets/images/icons/brands/slack.png and /dev/null differ diff --git a/app/assets/images/icons/brands/twitter.png b/app/assets/images/icons/brands/twitter.png deleted file mode 100644 index 5a27c3d6..00000000 Binary files a/app/assets/images/icons/brands/twitter.png and /dev/null differ diff --git a/app/assets/images/icons/brands/vue.png b/app/assets/images/icons/brands/vue.png deleted file mode 100644 index 6d03cf0f..00000000 Binary files a/app/assets/images/icons/brands/vue.png and /dev/null differ diff --git a/app/assets/images/icons/countries/au.png b/app/assets/images/icons/countries/au.png deleted file mode 100644 index 01d14df2..00000000 Binary files a/app/assets/images/icons/countries/au.png and /dev/null differ diff --git a/app/assets/images/icons/countries/br.png b/app/assets/images/icons/countries/br.png deleted file mode 100644 index 4c0ed8d1..00000000 Binary files a/app/assets/images/icons/countries/br.png and /dev/null differ diff --git a/app/assets/images/icons/countries/cn.png b/app/assets/images/icons/countries/cn.png deleted file mode 100644 index 827f8849..00000000 Binary files a/app/assets/images/icons/countries/cn.png and /dev/null differ diff --git a/app/assets/images/icons/countries/fr.png b/app/assets/images/icons/countries/fr.png deleted file mode 100644 index 524be729..00000000 Binary files a/app/assets/images/icons/countries/fr.png and /dev/null differ diff --git a/app/assets/images/icons/countries/in.png b/app/assets/images/icons/countries/in.png deleted file mode 100644 index f1575981..00000000 Binary files a/app/assets/images/icons/countries/in.png and /dev/null differ diff --git a/app/assets/images/icons/countries/us.png b/app/assets/images/icons/countries/us.png deleted file mode 100644 index 686a76c3..00000000 Binary files a/app/assets/images/icons/countries/us.png and /dev/null differ diff --git a/app/assets/images/icons/file/txt.png b/app/assets/images/icons/file/txt.png deleted file mode 100644 index 08d3f99e..00000000 Binary files a/app/assets/images/icons/file/txt.png and /dev/null differ diff --git a/app/assets/images/icons/file/xls.png b/app/assets/images/icons/file/xls.png deleted file mode 100644 index cde1c311..00000000 Binary files a/app/assets/images/icons/file/xls.png and /dev/null differ diff --git a/app/assets/images/icons/payments/american-express.png b/app/assets/images/icons/payments/american-express.png deleted file mode 100644 index 1bf70b8a..00000000 Binary files a/app/assets/images/icons/payments/american-express.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/ae-dark.png b/app/assets/images/icons/payments/img/ae-dark.png deleted file mode 100644 index 65f979f3..00000000 Binary files a/app/assets/images/icons/payments/img/ae-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/american-express.png b/app/assets/images/icons/payments/img/american-express.png deleted file mode 100644 index d3b20acc..00000000 Binary files a/app/assets/images/icons/payments/img/american-express.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/dc-dark.png b/app/assets/images/icons/payments/img/dc-dark.png deleted file mode 100644 index 7b07487d..00000000 Binary files a/app/assets/images/icons/payments/img/dc-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/dc-light.png b/app/assets/images/icons/payments/img/dc-light.png deleted file mode 100644 index 829dea2d..00000000 Binary files a/app/assets/images/icons/payments/img/dc-light.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/jcb-dark.png b/app/assets/images/icons/payments/img/jcb-dark.png deleted file mode 100644 index 8b1f31aa..00000000 Binary files a/app/assets/images/icons/payments/img/jcb-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/jcb-light.png b/app/assets/images/icons/payments/img/jcb-light.png deleted file mode 100644 index e19e8811..00000000 Binary files a/app/assets/images/icons/payments/img/jcb-light.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/master-dark.png b/app/assets/images/icons/payments/img/master-dark.png deleted file mode 100644 index 25784fe9..00000000 Binary files a/app/assets/images/icons/payments/img/master-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/mastercard.png b/app/assets/images/icons/payments/img/mastercard.png deleted file mode 100644 index 49e82cdc..00000000 Binary files a/app/assets/images/icons/payments/img/mastercard.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/paypal-dark.png b/app/assets/images/icons/payments/img/paypal-dark.png deleted file mode 100644 index e78e6fa5..00000000 Binary files a/app/assets/images/icons/payments/img/paypal-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/paypal-light.png b/app/assets/images/icons/payments/img/paypal-light.png deleted file mode 100644 index b62048eb..00000000 Binary files a/app/assets/images/icons/payments/img/paypal-light.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/visa-dark.png b/app/assets/images/icons/payments/img/visa-dark.png deleted file mode 100644 index 80c8b786..00000000 Binary files a/app/assets/images/icons/payments/img/visa-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/img/visa-light.png b/app/assets/images/icons/payments/img/visa-light.png deleted file mode 100644 index 7e9004bc..00000000 Binary files a/app/assets/images/icons/payments/img/visa-light.png and /dev/null differ diff --git a/app/assets/images/icons/payments/mastercard.png b/app/assets/images/icons/payments/mastercard.png deleted file mode 100644 index 267ad097..00000000 Binary files a/app/assets/images/icons/payments/mastercard.png and /dev/null differ diff --git a/app/assets/images/icons/payments/paypal.png b/app/assets/images/icons/payments/paypal.png deleted file mode 100644 index 0be2e8ab..00000000 Binary files a/app/assets/images/icons/payments/paypal.png and /dev/null differ diff --git a/app/assets/images/icons/payments/visa-dark.png b/app/assets/images/icons/payments/visa-dark.png deleted file mode 100644 index cd70d7f1..00000000 Binary files a/app/assets/images/icons/payments/visa-dark.png and /dev/null differ diff --git a/app/assets/images/icons/payments/visa-light.png b/app/assets/images/icons/payments/visa-light.png deleted file mode 100644 index 470b76e1..00000000 Binary files a/app/assets/images/icons/payments/visa-light.png and /dev/null differ diff --git a/app/assets/images/icons/payments/visa.png b/app/assets/images/icons/payments/visa.png deleted file mode 100644 index 3db86fbf..00000000 Binary files a/app/assets/images/icons/payments/visa.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/event.png b/app/assets/images/icons/project-icons/event.png deleted file mode 100644 index d24f314b..00000000 Binary files a/app/assets/images/icons/project-icons/event.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/figma.png b/app/assets/images/icons/project-icons/figma.png deleted file mode 100644 index 0311dfa2..00000000 Binary files a/app/assets/images/icons/project-icons/figma.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/html5.png b/app/assets/images/icons/project-icons/html5.png deleted file mode 100644 index ca021d6e..00000000 Binary files a/app/assets/images/icons/project-icons/html5.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/pdf.png b/app/assets/images/icons/project-icons/pdf.png deleted file mode 100644 index 554af2ab..00000000 Binary files a/app/assets/images/icons/project-icons/pdf.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/python.png b/app/assets/images/icons/project-icons/python.png deleted file mode 100644 index f5c05784..00000000 Binary files a/app/assets/images/icons/project-icons/python.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/react.png b/app/assets/images/icons/project-icons/react.png deleted file mode 100644 index 57c9d41e..00000000 Binary files a/app/assets/images/icons/project-icons/react.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/sketch.png b/app/assets/images/icons/project-icons/sketch.png deleted file mode 100644 index 4a517170..00000000 Binary files a/app/assets/images/icons/project-icons/sketch.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/social.png b/app/assets/images/icons/project-icons/social.png deleted file mode 100644 index fc2afd0b..00000000 Binary files a/app/assets/images/icons/project-icons/social.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/support.png b/app/assets/images/icons/project-icons/support.png deleted file mode 100644 index a359f916..00000000 Binary files a/app/assets/images/icons/project-icons/support.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/twitter.png b/app/assets/images/icons/project-icons/twitter.png deleted file mode 100644 index 677b2a95..00000000 Binary files a/app/assets/images/icons/project-icons/twitter.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/vue.png b/app/assets/images/icons/project-icons/vue.png deleted file mode 100644 index 9cf186fc..00000000 Binary files a/app/assets/images/icons/project-icons/vue.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/xamarin.png b/app/assets/images/icons/project-icons/xamarin.png deleted file mode 100644 index 28d49acb..00000000 Binary files a/app/assets/images/icons/project-icons/xamarin.png and /dev/null differ diff --git a/app/assets/images/icons/project-icons/xd.png b/app/assets/images/icons/project-icons/xd.png deleted file mode 100644 index 73a3daee..00000000 Binary files a/app/assets/images/icons/project-icons/xd.png and /dev/null differ diff --git a/app/assets/images/illustrations/account-settings-security-illustration.png b/app/assets/images/illustrations/account-settings-security-illustration.png deleted file mode 100644 index 0a5597e9..00000000 Binary files a/app/assets/images/illustrations/account-settings-security-illustration.png and /dev/null differ diff --git a/app/assets/images/illustrations/faq-illustration.png b/app/assets/images/illustrations/faq-illustration.png deleted file mode 100644 index 038f6184..00000000 Binary files a/app/assets/images/illustrations/faq-illustration.png and /dev/null differ diff --git a/app/assets/images/logo.svg b/app/assets/images/logo.svg deleted file mode 100644 index e5df3122..00000000 --- a/app/assets/images/logo.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/logos/aviato.png b/app/assets/images/logos/aviato.png deleted file mode 100644 index e42c8792..00000000 Binary files a/app/assets/images/logos/aviato.png and /dev/null differ diff --git a/app/assets/images/logos/bitbank.png b/app/assets/images/logos/bitbank.png deleted file mode 100644 index beb3b9f5..00000000 Binary files a/app/assets/images/logos/bitbank.png and /dev/null differ diff --git a/app/assets/images/logos/chrome.png b/app/assets/images/logos/chrome.png deleted file mode 100644 index 51c4bd7b..00000000 Binary files a/app/assets/images/logos/chrome.png and /dev/null differ diff --git a/app/assets/images/logos/facebook.png b/app/assets/images/logos/facebook.png deleted file mode 100644 index a076df66..00000000 Binary files a/app/assets/images/logos/facebook.png and /dev/null differ diff --git a/app/assets/images/logos/google.png b/app/assets/images/logos/google.png deleted file mode 100644 index 0e28fb6a..00000000 Binary files a/app/assets/images/logos/google.png and /dev/null differ diff --git a/app/assets/images/logos/instagram.png b/app/assets/images/logos/instagram.png deleted file mode 100644 index 081b4bba..00000000 Binary files a/app/assets/images/logos/instagram.png and /dev/null differ diff --git a/app/assets/images/logos/linkedin.png b/app/assets/images/logos/linkedin.png deleted file mode 100644 index ea3d3129..00000000 Binary files a/app/assets/images/logos/linkedin.png and /dev/null differ diff --git a/app/assets/images/logos/mastercard.png b/app/assets/images/logos/mastercard.png deleted file mode 100644 index f000dda5..00000000 Binary files a/app/assets/images/logos/mastercard.png and /dev/null differ diff --git a/app/assets/images/logos/paypal.png b/app/assets/images/logos/paypal.png deleted file mode 100644 index d94b3b37..00000000 Binary files a/app/assets/images/logos/paypal.png and /dev/null differ diff --git a/app/assets/images/logos/reddit.png b/app/assets/images/logos/reddit.png deleted file mode 100644 index 5b2e4eb3..00000000 Binary files a/app/assets/images/logos/reddit.png and /dev/null differ diff --git a/app/assets/images/logos/twitter.png b/app/assets/images/logos/twitter.png deleted file mode 100644 index dbec254d..00000000 Binary files a/app/assets/images/logos/twitter.png and /dev/null differ diff --git a/app/assets/images/logos/zipcar.png b/app/assets/images/logos/zipcar.png deleted file mode 100644 index 80b99e51..00000000 Binary files a/app/assets/images/logos/zipcar.png and /dev/null differ diff --git a/app/assets/images/misc/fleet-car.png b/app/assets/images/misc/fleet-car.png deleted file mode 100644 index b12f1776..00000000 Binary files a/app/assets/images/misc/fleet-car.png and /dev/null differ diff --git a/app/assets/images/misc/misc-mask-dark.png b/app/assets/images/misc/misc-mask-dark.png deleted file mode 100644 index c2c5aca2..00000000 Binary files a/app/assets/images/misc/misc-mask-dark.png and /dev/null differ diff --git a/app/assets/images/misc/misc-mask-light.png b/app/assets/images/misc/misc-mask-light.png deleted file mode 100644 index e00ee454..00000000 Binary files a/app/assets/images/misc/misc-mask-light.png and /dev/null differ diff --git a/app/assets/images/misc/pricing-illustration-1.png b/app/assets/images/misc/pricing-illustration-1.png deleted file mode 100644 index 59daf7f6..00000000 Binary files a/app/assets/images/misc/pricing-illustration-1.png and /dev/null differ diff --git a/app/assets/images/misc/pricing-illustration-2.png b/app/assets/images/misc/pricing-illustration-2.png deleted file mode 100644 index ef305cb3..00000000 Binary files a/app/assets/images/misc/pricing-illustration-2.png and /dev/null differ diff --git a/app/assets/images/misc/pricing-illustration-3.png b/app/assets/images/misc/pricing-illustration-3.png deleted file mode 100644 index 13d462e9..00000000 Binary files a/app/assets/images/misc/pricing-illustration-3.png and /dev/null differ diff --git a/app/assets/images/pages/1.png b/app/assets/images/pages/1.png deleted file mode 100644 index c5defd31..00000000 Binary files a/app/assets/images/pages/1.png and /dev/null differ diff --git a/app/assets/images/pages/2.png b/app/assets/images/pages/2.png deleted file mode 100644 index f13ff307..00000000 Binary files a/app/assets/images/pages/2.png and /dev/null differ diff --git a/app/assets/images/pages/3.png b/app/assets/images/pages/3.png deleted file mode 100644 index d2983ab3..00000000 Binary files a/app/assets/images/pages/3.png and /dev/null differ diff --git a/app/assets/images/pages/401.png b/app/assets/images/pages/401.png deleted file mode 100644 index 2d30a9ca..00000000 Binary files a/app/assets/images/pages/401.png and /dev/null differ diff --git a/app/assets/images/pages/404.png b/app/assets/images/pages/404.png deleted file mode 100644 index fba984d9..00000000 Binary files a/app/assets/images/pages/404.png and /dev/null differ diff --git a/app/assets/images/pages/5.jpg b/app/assets/images/pages/5.jpg deleted file mode 100644 index 4d3c834e..00000000 Binary files a/app/assets/images/pages/5.jpg and /dev/null differ diff --git a/app/assets/images/pages/6.jpg b/app/assets/images/pages/6.jpg deleted file mode 100644 index ed79ecc8..00000000 Binary files a/app/assets/images/pages/6.jpg and /dev/null differ diff --git a/app/assets/images/pages/TimelineRectangle1.png b/app/assets/images/pages/TimelineRectangle1.png deleted file mode 100644 index 48c368d4..00000000 Binary files a/app/assets/images/pages/TimelineRectangle1.png and /dev/null differ diff --git a/app/assets/images/pages/TimelineRectangle2.png b/app/assets/images/pages/TimelineRectangle2.png deleted file mode 100644 index 6220f69c..00000000 Binary files a/app/assets/images/pages/TimelineRectangle2.png and /dev/null differ diff --git a/app/assets/images/pages/TimelineRectangle3.png b/app/assets/images/pages/TimelineRectangle3.png deleted file mode 100644 index dd65536a..00000000 Binary files a/app/assets/images/pages/TimelineRectangle3.png and /dev/null differ diff --git a/app/assets/images/pages/TimelineRectangle4.png b/app/assets/images/pages/TimelineRectangle4.png deleted file mode 100644 index d6802d25..00000000 Binary files a/app/assets/images/pages/TimelineRectangle4.png and /dev/null differ diff --git a/app/assets/images/pages/academy-course-illustration1.png b/app/assets/images/pages/academy-course-illustration1.png deleted file mode 100644 index e1980242..00000000 Binary files a/app/assets/images/pages/academy-course-illustration1.png and /dev/null differ diff --git a/app/assets/images/pages/academy-course-illustration2-dark.png b/app/assets/images/pages/academy-course-illustration2-dark.png deleted file mode 100644 index 63a9fd6c..00000000 Binary files a/app/assets/images/pages/academy-course-illustration2-dark.png and /dev/null differ diff --git a/app/assets/images/pages/academy-course-illustration2-light.png b/app/assets/images/pages/academy-course-illustration2-light.png deleted file mode 100644 index 4fcf1fec..00000000 Binary files a/app/assets/images/pages/academy-course-illustration2-light.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-1.png b/app/assets/images/pages/app-academy-tutor-1.png deleted file mode 100644 index fa4b64a7..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-1.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-2.png b/app/assets/images/pages/app-academy-tutor-2.png deleted file mode 100644 index 56a9b970..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-2.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-3.png b/app/assets/images/pages/app-academy-tutor-3.png deleted file mode 100644 index 7c4b6eb0..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-3.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-4.png b/app/assets/images/pages/app-academy-tutor-4.png deleted file mode 100644 index f770e106..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-4.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-5.png b/app/assets/images/pages/app-academy-tutor-5.png deleted file mode 100644 index 44ce29dc..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-5.png and /dev/null differ diff --git a/app/assets/images/pages/app-academy-tutor-6.png b/app/assets/images/pages/app-academy-tutor-6.png deleted file mode 100644 index ca3500aa..00000000 Binary files a/app/assets/images/pages/app-academy-tutor-6.png and /dev/null differ diff --git a/app/assets/images/pages/app-search-header-bg.png b/app/assets/images/pages/app-search-header-bg.png deleted file mode 100644 index 875c7fe2..00000000 Binary files a/app/assets/images/pages/app-search-header-bg.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-forgot-password-mask-dark.png b/app/assets/images/pages/auth-v1-forgot-password-mask-dark.png deleted file mode 100644 index eb30b714..00000000 Binary files a/app/assets/images/pages/auth-v1-forgot-password-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-forgot-password-mask-light.png b/app/assets/images/pages/auth-v1-forgot-password-mask-light.png deleted file mode 100644 index 1471e3fe..00000000 Binary files a/app/assets/images/pages/auth-v1-forgot-password-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-login-mask-dark.png b/app/assets/images/pages/auth-v1-login-mask-dark.png deleted file mode 100644 index 44df6c22..00000000 Binary files a/app/assets/images/pages/auth-v1-login-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-login-mask-light.png b/app/assets/images/pages/auth-v1-login-mask-light.png deleted file mode 100644 index f375c431..00000000 Binary files a/app/assets/images/pages/auth-v1-login-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-register-mask-dark.png b/app/assets/images/pages/auth-v1-register-mask-dark.png deleted file mode 100644 index e0fc6bc7..00000000 Binary files a/app/assets/images/pages/auth-v1-register-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-register-mask-light.png b/app/assets/images/pages/auth-v1-register-mask-light.png deleted file mode 100644 index d564b45c..00000000 Binary files a/app/assets/images/pages/auth-v1-register-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-reset-password-mask-dark.png b/app/assets/images/pages/auth-v1-reset-password-mask-dark.png deleted file mode 100644 index 4ce60ee0..00000000 Binary files a/app/assets/images/pages/auth-v1-reset-password-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v1-reset-password-mask-light.png b/app/assets/images/pages/auth-v1-reset-password-mask-light.png deleted file mode 100644 index 10d0e933..00000000 Binary files a/app/assets/images/pages/auth-v1-reset-password-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-dark.png deleted file mode 100644 index 42e85566..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-light.png deleted file mode 100644 index cc744e91..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-illustration-dark.png b/app/assets/images/pages/auth-v2-forgot-password-illustration-dark.png deleted file mode 100644 index 3755868e..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-illustration-light.png b/app/assets/images/pages/auth-v2-forgot-password-illustration-light.png deleted file mode 100644 index 7edb4c25..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-mask-dark.png b/app/assets/images/pages/auth-v2-forgot-password-mask-dark.png deleted file mode 100644 index e245c533..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-forgot-password-mask-light.png b/app/assets/images/pages/auth-v2-forgot-password-mask-light.png deleted file mode 100644 index 843da122..00000000 Binary files a/app/assets/images/pages/auth-v2-forgot-password-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-login-illustration-bordered-dark.png deleted file mode 100644 index 0b30bed1..00000000 Binary files a/app/assets/images/pages/auth-v2-login-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-login-illustration-bordered-light.png deleted file mode 100644 index c3ab7c14..00000000 Binary files a/app/assets/images/pages/auth-v2-login-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-illustration-dark.png b/app/assets/images/pages/auth-v2-login-illustration-dark.png deleted file mode 100644 index 1b1c2b0c..00000000 Binary files a/app/assets/images/pages/auth-v2-login-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-illustration-light.png b/app/assets/images/pages/auth-v2-login-illustration-light.png deleted file mode 100644 index 01372e3b..00000000 Binary files a/app/assets/images/pages/auth-v2-login-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-mask-dark.png b/app/assets/images/pages/auth-v2-login-mask-dark.png deleted file mode 100644 index ebd29b9f..00000000 Binary files a/app/assets/images/pages/auth-v2-login-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-login-mask-light.png b/app/assets/images/pages/auth-v2-login-mask-light.png deleted file mode 100644 index 1937b9d5..00000000 Binary files a/app/assets/images/pages/auth-v2-login-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-register-illustration-bordered-dark.png deleted file mode 100644 index 0a1b4d4a..00000000 Binary files a/app/assets/images/pages/auth-v2-register-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-register-illustration-bordered-light.png deleted file mode 100644 index 14af1345..00000000 Binary files a/app/assets/images/pages/auth-v2-register-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-illustration-dark.png b/app/assets/images/pages/auth-v2-register-illustration-dark.png deleted file mode 100644 index 8bb7504b..00000000 Binary files a/app/assets/images/pages/auth-v2-register-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-illustration-light.png b/app/assets/images/pages/auth-v2-register-illustration-light.png deleted file mode 100644 index 666f637e..00000000 Binary files a/app/assets/images/pages/auth-v2-register-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-mask-dark.png b/app/assets/images/pages/auth-v2-register-mask-dark.png deleted file mode 100644 index a81e5b2e..00000000 Binary files a/app/assets/images/pages/auth-v2-register-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-register-mask-light.png b/app/assets/images/pages/auth-v2-register-mask-light.png deleted file mode 100644 index 454a63bb..00000000 Binary files a/app/assets/images/pages/auth-v2-register-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-dark.png deleted file mode 100644 index eaf2a7bc..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-light.png deleted file mode 100644 index f2319c19..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-illustration-dark.png b/app/assets/images/pages/auth-v2-reset-password-illustration-dark.png deleted file mode 100644 index ae70b523..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-illustration-light.png b/app/assets/images/pages/auth-v2-reset-password-illustration-light.png deleted file mode 100644 index eae63b49..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-mask-dark.png b/app/assets/images/pages/auth-v2-reset-password-mask-dark.png deleted file mode 100644 index 6fa38972..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-mask-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-reset-password-mask-light.png b/app/assets/images/pages/auth-v2-reset-password-mask-light.png deleted file mode 100644 index ce85a987..00000000 Binary files a/app/assets/images/pages/auth-v2-reset-password-mask-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-dark.png deleted file mode 100644 index 4466e085..00000000 Binary files a/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-light.png deleted file mode 100644 index feff1483..00000000 Binary files a/app/assets/images/pages/auth-v2-two-steps-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-two-steps-illustration-dark.png b/app/assets/images/pages/auth-v2-two-steps-illustration-dark.png deleted file mode 100644 index 4b1b6f0c..00000000 Binary files a/app/assets/images/pages/auth-v2-two-steps-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-two-steps-illustration-light.png b/app/assets/images/pages/auth-v2-two-steps-illustration-light.png deleted file mode 100644 index da838f20..00000000 Binary files a/app/assets/images/pages/auth-v2-two-steps-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-dark.png b/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-dark.png deleted file mode 100644 index 28469139..00000000 Binary files a/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-light.png b/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-light.png deleted file mode 100644 index 993a25a3..00000000 Binary files a/app/assets/images/pages/auth-v2-verify-email-illustration-bordered-light.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-verify-email-illustration-dark.png b/app/assets/images/pages/auth-v2-verify-email-illustration-dark.png deleted file mode 100644 index 4e036b67..00000000 Binary files a/app/assets/images/pages/auth-v2-verify-email-illustration-dark.png and /dev/null differ diff --git a/app/assets/images/pages/auth-v2-verify-email-illustration-light.png b/app/assets/images/pages/auth-v2-verify-email-illustration-light.png deleted file mode 100644 index 60e8b26e..00000000 Binary files a/app/assets/images/pages/auth-v2-verify-email-illustration-light.png and /dev/null differ diff --git a/app/assets/images/pages/background-1.jpg b/app/assets/images/pages/background-1.jpg deleted file mode 100644 index f652bcc0..00000000 Binary files a/app/assets/images/pages/background-1.jpg and /dev/null differ diff --git a/app/assets/images/pages/background-2.jpg b/app/assets/images/pages/background-2.jpg deleted file mode 100644 index a02c63da..00000000 Binary files a/app/assets/images/pages/background-2.jpg and /dev/null differ diff --git a/app/assets/images/pages/background-3.jpg b/app/assets/images/pages/background-3.jpg deleted file mode 100644 index 26de346d..00000000 Binary files a/app/assets/images/pages/background-3.jpg and /dev/null differ diff --git a/app/assets/images/pages/boy-academy-illustration.png b/app/assets/images/pages/boy-academy-illustration.png deleted file mode 100644 index e3deb722..00000000 Binary files a/app/assets/images/pages/boy-academy-illustration.png and /dev/null differ diff --git a/app/assets/images/pages/boy-with-tablet.png b/app/assets/images/pages/boy-with-tablet.png deleted file mode 100644 index d6594ad6..00000000 Binary files a/app/assets/images/pages/boy-with-tablet.png and /dev/null differ diff --git a/app/assets/images/pages/create-deal-review-complete.png b/app/assets/images/pages/create-deal-review-complete.png deleted file mode 100644 index 2d642921..00000000 Binary files a/app/assets/images/pages/create-deal-review-complete.png and /dev/null differ diff --git a/app/assets/images/pages/empty-cart.png b/app/assets/images/pages/empty-cart.png deleted file mode 100644 index 81081499..00000000 Binary files a/app/assets/images/pages/empty-cart.png and /dev/null differ diff --git a/app/assets/images/pages/girl-academy-illustration.png b/app/assets/images/pages/girl-academy-illustration.png deleted file mode 100644 index 9e33f3a8..00000000 Binary files a/app/assets/images/pages/girl-academy-illustration.png and /dev/null differ diff --git a/app/assets/images/pages/google-home.png b/app/assets/images/pages/google-home.png deleted file mode 100644 index 33fc6315..00000000 Binary files a/app/assets/images/pages/google-home.png and /dev/null differ diff --git a/app/assets/images/pages/guitar-course.png b/app/assets/images/pages/guitar-course.png deleted file mode 100644 index fad161e9..00000000 Binary files a/app/assets/images/pages/guitar-course.png and /dev/null differ diff --git a/app/assets/images/pages/illustration-john.png b/app/assets/images/pages/illustration-john.png deleted file mode 100644 index 51cbeedb..00000000 Binary files a/app/assets/images/pages/illustration-john.png and /dev/null differ diff --git a/app/assets/images/pages/instructor-poster-image.png b/app/assets/images/pages/instructor-poster-image.png deleted file mode 100644 index 5ae88ab5..00000000 Binary files a/app/assets/images/pages/instructor-poster-image.png and /dev/null differ diff --git a/app/assets/images/pages/iphone-11.png b/app/assets/images/pages/iphone-11.png deleted file mode 100644 index 541f3a05..00000000 Binary files a/app/assets/images/pages/iphone-11.png and /dev/null differ diff --git a/app/assets/images/pages/misc-401-object.png b/app/assets/images/pages/misc-401-object.png deleted file mode 100644 index 4b7e3cc2..00000000 Binary files a/app/assets/images/pages/misc-401-object.png and /dev/null differ diff --git a/app/assets/images/pages/misc-404-object.png b/app/assets/images/pages/misc-404-object.png deleted file mode 100644 index 27c50a41..00000000 Binary files a/app/assets/images/pages/misc-404-object.png and /dev/null differ diff --git a/app/assets/images/pages/misc-coming-soon-object.png b/app/assets/images/pages/misc-coming-soon-object.png deleted file mode 100644 index ccef4888..00000000 Binary files a/app/assets/images/pages/misc-coming-soon-object.png and /dev/null differ diff --git a/app/assets/images/pages/misc-coming-soon.png b/app/assets/images/pages/misc-coming-soon.png deleted file mode 100644 index 3ba3ac2a..00000000 Binary files a/app/assets/images/pages/misc-coming-soon.png and /dev/null differ diff --git a/app/assets/images/pages/misc-under-maintenance-object.png b/app/assets/images/pages/misc-under-maintenance-object.png deleted file mode 100644 index 6ad70c68..00000000 Binary files a/app/assets/images/pages/misc-under-maintenance-object.png and /dev/null differ diff --git a/app/assets/images/pages/misc-under-maintenance.png b/app/assets/images/pages/misc-under-maintenance.png deleted file mode 100644 index 8fe14ee9..00000000 Binary files a/app/assets/images/pages/misc-under-maintenance.png and /dev/null differ diff --git a/app/assets/images/pages/pose-fs-9.png b/app/assets/images/pages/pose-fs-9.png deleted file mode 100644 index ca0c37fe..00000000 Binary files a/app/assets/images/pages/pose-fs-9.png and /dev/null differ diff --git a/app/assets/images/pages/pose_m1.png b/app/assets/images/pages/pose_m1.png deleted file mode 100644 index 38682a3d..00000000 Binary files a/app/assets/images/pages/pose_m1.png and /dev/null differ diff --git a/app/assets/images/pages/register-multi-step-illustration.png b/app/assets/images/pages/register-multi-step-illustration.png deleted file mode 100644 index 0133848f..00000000 Binary files a/app/assets/images/pages/register-multi-step-illustration.png and /dev/null differ diff --git a/app/assets/images/pages/section-title-icon.png b/app/assets/images/pages/section-title-icon.png deleted file mode 100644 index 8d339cb9..00000000 Binary files a/app/assets/images/pages/section-title-icon.png and /dev/null differ diff --git a/app/assets/images/pages/shopping-girl.png b/app/assets/images/pages/shopping-girl.png deleted file mode 100644 index f2aed433..00000000 Binary files a/app/assets/images/pages/shopping-girl.png and /dev/null differ diff --git a/app/assets/images/pages/singing-course.png b/app/assets/images/pages/singing-course.png deleted file mode 100644 index d0aacfa0..00000000 Binary files a/app/assets/images/pages/singing-course.png and /dev/null differ diff --git a/app/assets/images/pages/themeselection-qr.png b/app/assets/images/pages/themeselection-qr.png deleted file mode 100644 index 6729a499..00000000 Binary files a/app/assets/images/pages/themeselection-qr.png and /dev/null differ diff --git a/app/assets/images/pages/tree-pot.png b/app/assets/images/pages/tree-pot.png deleted file mode 100644 index de1b1fdb..00000000 Binary files a/app/assets/images/pages/tree-pot.png and /dev/null differ diff --git a/app/assets/images/pages/user-profile-header-bg.png b/app/assets/images/pages/user-profile-header-bg.png deleted file mode 100644 index ddde444a..00000000 Binary files a/app/assets/images/pages/user-profile-header-bg.png and /dev/null differ diff --git a/app/assets/images/svg/3d-select-solid.svg b/app/assets/images/svg/3d-select-solid.svg deleted file mode 100644 index 897519c0..00000000 --- a/app/assets/images/svg/3d-select-solid.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/address.svg b/app/assets/images/svg/address.svg deleted file mode 100644 index 97676312..00000000 --- a/app/assets/images/svg/address.svg +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/svg/cart.svg b/app/assets/images/svg/cart.svg deleted file mode 100644 index 6c37c2c5..00000000 --- a/app/assets/images/svg/cart.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/app/assets/images/svg/check.svg b/app/assets/images/svg/check.svg deleted file mode 100644 index 9652d829..00000000 --- a/app/assets/images/svg/check.svg +++ /dev/null @@ -1 +0,0 @@ - diff --git a/app/assets/images/svg/checkbox-checked.svg b/app/assets/images/svg/checkbox-checked.svg deleted file mode 100644 index dcd5fa8f..00000000 --- a/app/assets/images/svg/checkbox-checked.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/assets/images/svg/checkbox-indeterminate.svg b/app/assets/images/svg/checkbox-indeterminate.svg deleted file mode 100644 index d77969d2..00000000 --- a/app/assets/images/svg/checkbox-indeterminate.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/assets/images/svg/checkbox-unchecked.svg b/app/assets/images/svg/checkbox-unchecked.svg deleted file mode 100644 index 5bdd97de..00000000 --- a/app/assets/images/svg/checkbox-unchecked.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/edit.svg b/app/assets/images/svg/edit.svg deleted file mode 100644 index 94142a81..00000000 --- a/app/assets/images/svg/edit.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/front-page-element.svg b/app/assets/images/svg/front-page-element.svg deleted file mode 100644 index fd88f644..00000000 --- a/app/assets/images/svg/front-page-element.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/front-page-vector.svg b/app/assets/images/svg/front-page-vector.svg deleted file mode 100644 index 1f35ee48..00000000 --- a/app/assets/images/svg/front-page-vector.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/google-docs.svg b/app/assets/images/svg/google-docs.svg deleted file mode 100644 index 7a0c31b3..00000000 --- a/app/assets/images/svg/google-docs.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/laptop-charging.svg b/app/assets/images/svg/laptop-charging.svg deleted file mode 100644 index 0a6d2e60..00000000 --- a/app/assets/images/svg/laptop-charging.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/laptop.svg b/app/assets/images/svg/laptop.svg deleted file mode 100644 index dfe348a9..00000000 --- a/app/assets/images/svg/laptop.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/lifebelt.svg b/app/assets/images/svg/lifebelt.svg deleted file mode 100644 index 8499582c..00000000 --- a/app/assets/images/svg/lifebelt.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/assets/images/svg/lightbulb.svg b/app/assets/images/svg/lightbulb.svg deleted file mode 100644 index 3bf434b5..00000000 --- a/app/assets/images/svg/lightbulb.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/list-arrow-icon.svg b/app/assets/images/svg/list-arrow-icon.svg deleted file mode 100644 index ab3a4883..00000000 --- a/app/assets/images/svg/list-arrow-icon.svg +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/app/assets/images/svg/paper.svg b/app/assets/images/svg/paper.svg deleted file mode 100644 index 183f48fa..00000000 --- a/app/assets/images/svg/paper.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/payment.svg b/app/assets/images/svg/payment.svg deleted file mode 100644 index 0d78d4de..00000000 --- a/app/assets/images/svg/payment.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/svg/radio-checked.svg b/app/assets/images/svg/radio-checked.svg deleted file mode 100644 index 46068653..00000000 --- a/app/assets/images/svg/radio-checked.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/radio-unchecked.svg b/app/assets/images/svg/radio-unchecked.svg deleted file mode 100644 index 91d0c2ac..00000000 --- a/app/assets/images/svg/radio-unchecked.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/rocket.svg b/app/assets/images/svg/rocket.svg deleted file mode 100644 index 46e5fc9d..00000000 --- a/app/assets/images/svg/rocket.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/stepper-check.svg b/app/assets/images/svg/stepper-check.svg deleted file mode 100644 index 9b9b19fb..00000000 --- a/app/assets/images/svg/stepper-check.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/assets/images/svg/transition-up.svg b/app/assets/images/svg/transition-up.svg deleted file mode 100644 index d07f52a0..00000000 --- a/app/assets/images/svg/transition-up.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/trending.svg b/app/assets/images/svg/trending.svg deleted file mode 100644 index 7e182f93..00000000 --- a/app/assets/images/svg/trending.svg +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/app/assets/images/svg/user-info.svg b/app/assets/images/svg/user-info.svg deleted file mode 100644 index d94d924b..00000000 --- a/app/assets/images/svg/user-info.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/vector.svg b/app/assets/images/svg/vector.svg deleted file mode 100644 index c4200fbd..00000000 --- a/app/assets/images/svg/vector.svg +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/app/assets/images/svg/vertical-nav-header-arrow.svg b/app/assets/images/svg/vertical-nav-header-arrow.svg deleted file mode 100644 index 8f9e7bbe..00000000 --- a/app/assets/images/svg/vertical-nav-header-arrow.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/app/assets/images/svg/wizard-account.svg b/app/assets/images/svg/wizard-account.svg deleted file mode 100644 index 08329e6b..00000000 --- a/app/assets/images/svg/wizard-account.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/wizard-address.svg b/app/assets/images/svg/wizard-address.svg deleted file mode 100644 index 17b2c0c4..00000000 --- a/app/assets/images/svg/wizard-address.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/app/assets/images/svg/wizard-personal.svg b/app/assets/images/svg/wizard-personal.svg deleted file mode 100644 index 822e2049..00000000 --- a/app/assets/images/svg/wizard-personal.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/wizard-social-link.svg b/app/assets/images/svg/wizard-social-link.svg deleted file mode 100644 index f7161408..00000000 --- a/app/assets/images/svg/wizard-social-link.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/images/svg/wizard-submit.svg b/app/assets/images/svg/wizard-submit.svg deleted file mode 100644 index 5cdb2ed7..00000000 --- a/app/assets/images/svg/wizard-submit.svg +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/app/assets/styles/styles.scss b/app/assets/styles/styles.scss deleted file mode 100644 index 241163ee..00000000 --- a/app/assets/styles/styles.scss +++ /dev/null @@ -1,5 +0,0 @@ -// Write your overrides -p { - padding: 0; - margin: 0; -} diff --git a/app/assets/styles/variables/_template.scss b/app/assets/styles/variables/_template.scss deleted file mode 100644 index 92a68023..00000000 --- a/app/assets/styles/variables/_template.scss +++ /dev/null @@ -1,6 +0,0 @@ -@forward "@base/@core/scss/template/variables"; - -// â„šī¸ Remove above import and uncomment below to override core variables. -// @forward "@base/@core/scss/template/variables" with ( -// $: -// ) diff --git a/app/assets/styles/variables/_vuetify.scss b/app/assets/styles/variables/_vuetify.scss deleted file mode 100644 index 325a8e37..00000000 --- a/app/assets/styles/variables/_vuetify.scss +++ /dev/null @@ -1,7 +0,0 @@ -// ❗ Path must be relative -@forward "../../../@core/scss/template/libs/vuetify/variables"; - -// â„šī¸ Remove above import and uncomment below to override core variables. -// @forward "../../../@core/scss/template/libs/vuetify/variables" with ( -// $: -// ) diff --git a/app/components/AppDialog.vue b/app/components/AppDialog.vue deleted file mode 100644 index e18e7ebd..00000000 --- a/app/components/AppDialog.vue +++ /dev/null @@ -1,78 +0,0 @@ - - - diff --git a/app/components/AppDropZoneSingle.vue b/app/components/AppDropZoneSingle.vue deleted file mode 100644 index ba508435..00000000 --- a/app/components/AppDropZoneSingle.vue +++ /dev/null @@ -1,154 +0,0 @@ - - - - - diff --git a/app/components/AppFooter.vue b/app/components/AppFooter.vue new file mode 100644 index 00000000..ab2b6139 --- /dev/null +++ b/app/components/AppFooter.vue @@ -0,0 +1,102 @@ + + + diff --git a/app/components/AppHeader.vue b/app/components/AppHeader.vue new file mode 100644 index 00000000..6a64a237 --- /dev/null +++ b/app/components/AppHeader.vue @@ -0,0 +1,89 @@ + + + diff --git a/app/components/AppLoadingIndicator.vue b/app/components/AppLoadingIndicator.vue deleted file mode 100644 index dcc1be5f..00000000 --- a/app/components/AppLoadingIndicator.vue +++ /dev/null @@ -1,63 +0,0 @@ - - - diff --git a/app/components/AppPagination.vue b/app/components/AppPagination.vue deleted file mode 100644 index 66a9eebf..00000000 --- a/app/components/AppPagination.vue +++ /dev/null @@ -1,59 +0,0 @@ - - - diff --git a/app/components/AppPricing.vue b/app/components/AppPricing.vue deleted file mode 100644 index a6780105..00000000 --- a/app/components/AppPricing.vue +++ /dev/null @@ -1,317 +0,0 @@ - - -