commit e63fc41a20f18ea391211ad14d2fa14b0248a338 Author: Inshal Date: Wed May 29 22:34:28 2024 +0500 first commit diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..f06235c --- /dev/null +++ b/.dockerignore @@ -0,0 +1,2 @@ +node_modules +dist diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..63c8c4c --- /dev/null +++ b/.editorconfig @@ -0,0 +1,38 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +# Unix-style newlines with a newline ending every file +[*] +end_of_line = lf +insert_final_newline = true + +# Matches multiple files with brace expansion notation +# Set default charset +[*.{js,py}] +charset = utf-8 + +# 4 space indentation +[*.py] +indent_style = space +indent_size = 4 + +# 2 space indentation +[*.{vue,scss,ts}] +indent_style = space +indent_size = 2 + +# Tab indentation (no size specified) +[Makefile] +indent_style = tab + +# Indentation override for all JS under lib directory +[lib/**.js] +indent_style = space +indent_size = 2 + +# Matches the exact files either package.json or .travis.yml +[{package.json,.travis.yml}] +indent_style = space +indent_size = 2 diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..4a0da4a --- /dev/null +++ b/.env.example @@ -0,0 +1,60 @@ +APP_NAME=Laravel +APP_ENV=local +APP_KEY= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_DEPRECATIONS_CHANNEL=null +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +FILESYSTEM_DISK=local +QUEUE_CONNECTION=sync +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_MAILER=smtp +MAIL_HOST=mailpit +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS="hello@example.com" +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= +AWS_USE_PATH_STYLE_ENDPOINT=false + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_HOST= +PUSHER_PORT=443 +PUSHER_SCHEME=https +PUSHER_APP_CLUSTER=mt1 + +VITE_APP_NAME="${APP_NAME}" +VITE_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +VITE_PUSHER_HOST="${PUSHER_HOST}" +VITE_PUSHER_PORT="${PUSHER_PORT}" +VITE_PUSHER_SCHEME="${PUSHER_SCHEME}" +VITE_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +VITE_API_BASE_URL= \ No newline at end of file diff --git a/.eslintrc-auto-import.json b/.eslintrc-auto-import.json new file mode 100644 index 0000000..2ea71a7 --- /dev/null +++ b/.eslintrc-auto-import.json @@ -0,0 +1,357 @@ +{ + "globals": { + "$api": true, + "COOKIE_MAX_AGE_1_YEAR": true, + "Component": true, + "ComponentPublicInstance": true, + "ComputedRef": true, + "EffectScope": true, + "ExtractDefaultPropTypes": true, + "ExtractPropTypes": true, + "ExtractPublicPropTypes": true, + "InjectionKey": true, + "PropType": true, + "Ref": true, + "VNode": true, + "WritableComputedRef": true, + "acceptHMRUpdate": true, + "alphaDashValidator": true, + "alphaValidator": true, + "asyncComputed": true, + "autoResetRef": true, + "avatarText": true, + "betweenValidator": true, + "computed": true, + "computedAsync": true, + "computedEager": true, + "computedInject": true, + "computedWithControl": true, + "confirmedValidator": true, + "controlledComputed": true, + "controlledRef": true, + "createApp": true, + "createEventHook": true, + "createGenericProjection": true, + "createGlobalState": true, + "createInjectionState": true, + "createPinia": true, + "createProjection": true, + "createReactiveFn": true, + "createReusableTemplate": true, + "createSharedComposable": true, + "createTemplatePromise": true, + "createUnrefFn": true, + "createUrl": true, + "customRef": true, + "debouncedRef": true, + "debouncedWatch": true, + "defineAsyncComponent": true, + "defineComponent": true, + "defineLoader": true, + "definePage": true, + "defineStore": true, + "eagerComputed": true, + "effectScope": true, + "emailValidator": true, + "extendRef": true, + "formatDate": true, + "formatDateToMonthShort": true, + "getActivePinia": true, + "getCurrentInstance": true, + "getCurrentScope": true, + "h": true, + "ignorableWatch": true, + "inject": true, + "injectLocal": true, + "integerValidator": true, + "isDefined": true, + "isEmpty": true, + "isEmptyArray": true, + "isNullOrUndefined": true, + "isObject": true, + "isProxy": true, + "isReactive": true, + "isReadonly": true, + "isRef": true, + "isToday": true, + "kFormatter": true, + "lengthValidator": true, + "logicAnd": true, + "logicNot": true, + "logicOr": true, + "makeDestructurable": true, + "mapActions": true, + "mapGetters": true, + "mapState": true, + "mapStores": true, + "mapWritableState": true, + "markRaw": true, + "nextTick": true, + "onActivated": true, + "onBeforeMount": true, + "onBeforeRouteLeave": true, + "onBeforeRouteUpdate": true, + "onBeforeUnmount": true, + "onBeforeUpdate": true, + "onClickOutside": true, + "onDeactivated": true, + "onErrorCaptured": true, + "onKeyStroke": true, + "onLongPress": true, + "onMounted": true, + "onRenderTracked": true, + "onRenderTriggered": true, + "onScopeDispose": true, + "onServerPrefetch": true, + "onStartTyping": true, + "onUnmounted": true, + "onUpdated": true, + "paginationMeta": true, + "passwordValidator": true, + "pausableWatch": true, + "prefixWithPlus": true, + "provide": true, + "provideLocal": true, + "reactify": true, + "reactifyObject": true, + "reactive": true, + "reactiveComputed": true, + "reactiveOmit": true, + "reactivePick": true, + "readonly": true, + "ref": true, + "refAutoReset": true, + "refDebounced": true, + "refDefault": true, + "refThrottled": true, + "refWithControl": true, + "regexValidator": true, + "registerPlugins": true, + "requiredValidator": true, + "resolveComponent": true, + "resolveRef": true, + "resolveUnref": true, + "resolveVuetifyTheme": true, + "setActivePinia": true, + "setMapStoreSuffix": true, + "shallowReactive": true, + "shallowReadonly": true, + "shallowRef": true, + "storeToRefs": true, + "syncRef": true, + "syncRefs": true, + "templateRef": true, + "throttledRef": true, + "throttledWatch": true, + "toRaw": true, + "toReactive": true, + "toRef": true, + "toRefs": true, + "toValue": true, + "triggerRef": true, + "tryOnBeforeMount": true, + "tryOnBeforeUnmount": true, + "tryOnMounted": true, + "tryOnScopeDispose": true, + "tryOnUnmounted": true, + "unref": true, + "unrefElement": true, + "until": true, + "urlValidator": true, + "useAbility": true, + "useAbs": true, + "useActiveElement": true, + "useAnimate": true, + "useApi": true, + "useArrayDifference": true, + "useArrayEvery": true, + "useArrayFilter": true, + "useArrayFind": true, + "useArrayFindIndex": true, + "useArrayFindLast": true, + "useArrayIncludes": true, + "useArrayJoin": true, + "useArrayMap": true, + "useArrayReduce": true, + "useArraySome": true, + "useArrayUnique": true, + "useAsyncQueue": true, + "useAsyncState": true, + "useAttrs": true, + "useAverage": true, + "useBase64": true, + "useBattery": true, + "useBluetooth": true, + "useBreakpoints": true, + "useBroadcastChannel": true, + "useBrowserLocation": true, + "useCached": true, + "useCeil": true, + "useClamp": true, + "useClipboard": true, + "useClipboardItems": true, + "useCloned": true, + "useColorMode": true, + "useConfirmDialog": true, + "useCookie": true, + "useCounter": true, + "useCssModule": true, + "useCssVar": true, + "useCssVars": true, + "useCurrentElement": true, + "useCycleList": true, + "useDark": true, + "useDateFormat": true, + "useDebounce": true, + "useDebounceFn": true, + "useDebouncedRefHistory": true, + "useDeviceMotion": true, + "useDeviceOrientation": true, + "useDevicePixelRatio": true, + "useDevicesList": true, + "useDisplayMedia": true, + "useDocumentVisibility": true, + "useDraggable": true, + "useDropZone": true, + "useElementBounding": true, + "useElementByPoint": true, + "useElementHover": true, + "useElementSize": true, + "useElementVisibility": true, + "useEventBus": true, + "useEventListener": true, + "useEventSource": true, + "useEyeDropper": true, + "useFavicon": true, + "useFetch": true, + "useFileDialog": true, + "useFileSystemAccess": true, + "useFloor": true, + "useFocus": true, + "useFocusWithin": true, + "useFps": true, + "useFullscreen": true, + "useGamepad": true, + "useGenerateImageVariant": true, + "useGeolocation": true, + "useI18n": true, + "useIdle": true, + "useImage": true, + "useInfiniteScroll": true, + "useIntersectionObserver": true, + "useInterval": true, + "useIntervalFn": true, + "useKeyModifier": true, + "useLastChanged": true, + "useLocalStorage": true, + "useMagicKeys": true, + "useManualRefHistory": true, + "useMath": true, + "useMax": true, + "useMediaControls": true, + "useMediaQuery": true, + "useMemoize": true, + "useMemory": true, + "useMin": true, + "useMounted": true, + "useMouse": true, + "useMouseInElement": true, + "useMousePressed": true, + "useMutationObserver": true, + "useNavigatorLanguage": true, + "useNetwork": true, + "useNow": true, + "useObjectUrl": true, + "useOffsetPagination": true, + "useOnline": true, + "usePageLeave": true, + "useParallax": true, + "useParentElement": true, + "usePerformanceObserver": true, + "usePermission": true, + "usePointer": true, + "usePointerLock": true, + "usePointerSwipe": true, + "usePrecision": true, + "usePreferredColorScheme": true, + "usePreferredContrast": true, + "usePreferredDark": true, + "usePreferredLanguages": true, + "usePreferredReducedMotion": true, + "usePrevious": true, + "useProjection": true, + "useRafFn": true, + "useRefHistory": true, + "useResizeObserver": true, + "useResponsiveLeftSidebar": true, + "useRound": true, + "useRoute": true, + "useRouter": true, + "useScreenOrientation": true, + "useScreenSafeArea": true, + "useScriptTag": true, + "useScroll": true, + "useScrollLock": true, + "useSessionStorage": true, + "useShare": true, + "useSkins": true, + "useSlots": true, + "useSorted": true, + "useSpeechRecognition": true, + "useSpeechSynthesis": true, + "useStepper": true, + "useStorageAsync": true, + "useStyleTag": true, + "useSum": true, + "useSupported": true, + "useSwipe": true, + "useTemplateRefsList": true, + "useTextDirection": true, + "useTextSelection": true, + "useTextareaAutosize": true, + "useThrottle": true, + "useThrottleFn": true, + "useThrottledRefHistory": true, + "useTimeAgo": true, + "useTimeout": true, + "useTimeoutFn": true, + "useTimeoutPoll": true, + "useTimestamp": true, + "useTitle": true, + "useToNumber": true, + "useToString": true, + "useToggle": true, + "useTransition": true, + "useTrunc": true, + "useUrlSearchParams": true, + "useUserMedia": true, + "useVModel": true, + "useVModels": true, + "useVibrate": true, + "useVirtualList": true, + "useWakeLock": true, + "useWebNotification": true, + "useWebSocket": true, + "useWebWorker": true, + "useWebWorkerFn": true, + "useWindowFocus": true, + "useWindowScroll": true, + "useWindowSize": true, + "watch": true, + "watchArray": true, + "watchAtMost": true, + "watchDebounced": true, + "watchDeep": true, + "watchEffect": true, + "watchIgnorable": true, + "watchImmediate": true, + "watchOnce": true, + "watchPausable": true, + "watchPostEffect": true, + "watchSyncEffect": true, + "watchThrottled": true, + "watchTriggerable": true, + "watchWithFilter": true, + "whenever": true + } +} diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..b13e4f5 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,256 @@ +module.exports = { + env: { + browser: true, + es2021: true, + }, + extends: [ + '.eslintrc-auto-import.json', + 'plugin:vue/vue3-recommended', + 'plugin:import/recommended', + 'plugin:promise/recommended', + 'plugin:sonarjs/recommended', + 'plugin:case-police/recommended', + + // 'plugin:unicorn/recommended', + ], + parser: 'vue-eslint-parser', + parserOptions: { + ecmaVersion: 13, + sourceType: 'module', + }, + plugins: [ + 'vue', + 'regex', + ], + ignorePatterns: ['resources/js/plugins/iconify/*.js', 'node_modules', 'dist', '*.d.ts', 'vendor'], + rules: { + 'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off', + + // indentation (Already present in TypeScript) + 'comma-spacing': ['error', { before: false, after: true }], + 'key-spacing': ['error', { afterColon: true }], + 'n/prefer-global/process': ['off'], + 'sonarjs/cognitive-complexity': ['off'], + + 'vue/first-attribute-linebreak': ['error', { + singleline: 'beside', + multiline: 'below', + }], + + + // indentation (Already present in TypeScript) + 'indent': ['error', 2], + + // Enforce trailing comma (Already present in TypeScript) + 'comma-dangle': ['error', 'always-multiline'], + + // Enforce consistent spacing inside braces of object (Already present in TypeScript) + 'object-curly-spacing': ['error', 'always'], + + // Enforce camelCase naming convention + 'camelcase': 'error', + + // Disable max-len + 'max-len': 'off', + + // we don't want it + 'semi': ['error', 'never'], + + // add parens ony when required in arrow function + 'arrow-parens': ['error', 'as-needed'], + + // add new line above comment + 'newline-before-return': 'error', + + // add new line above comment + 'lines-around-comment': [ + 'error', + { + beforeBlockComment: true, + beforeLineComment: true, + allowBlockStart: true, + allowClassStart: true, + allowObjectStart: true, + allowArrayStart: true, + + // We don't want to add extra space above closing SECTION + ignorePattern: '!SECTION', + }, + ], + + // Ignore _ as unused variable + + 'array-element-newline': ['error', 'consistent'], + 'array-bracket-newline': ['error', 'consistent'], + + 'vue/multi-word-component-names': 'off', + + 'padding-line-between-statements': [ + 'error', + { blankLine: 'always', prev: 'expression', next: 'const' }, + { blankLine: 'always', prev: 'const', next: 'expression' }, + { blankLine: 'always', prev: 'multiline-const', next: '*' }, + { blankLine: 'always', prev: '*', next: 'multiline-const' }, + ], + + // Plugin: eslint-plugin-import + 'import/prefer-default-export': 'off', + 'import/newline-after-import': ['error', { count: 1 }], + 'no-restricted-imports': ['error', 'vuetify/components', { + name: 'vue3-apexcharts', + message: 'apexcharts are autoimported', + }], + + // For omitting extension for ts files + 'import/extensions': [ + 'error', + 'ignorePackages', + { + js: 'never', + jsx: 'never', + ts: 'never', + tsx: 'never', + }, + ], + + // ignore virtual files + 'import/no-unresolved': [2, { + ignore: [ + '~pages$', + 'virtual:generated-layouts', + + // Ignore vite's ?raw imports + '.*\?raw', + + // Ignore nuxt auth in nuxt version + '#auth$', + ], + }], + + // Thanks: https://stackoverflow.com/a/63961972/10796681 + 'no-shadow': 'off', + + + // Plugin: eslint-plugin-promise + 'promise/always-return': 'off', + 'promise/catch-or-return': 'off', + + // ESLint plugin vue + 'vue/block-tag-newline': 'error', + 'vue/component-api-style': 'error', + 'vue/component-name-in-template-casing': ['error', 'PascalCase', { registeredComponentsOnly: false, ignores: ['/^swiper-/'] }], + 'vue/custom-event-name-casing': ['error', 'camelCase', { + ignores: [ + '/^(click):[a-z]+((\d)|([A-Z0-9][a-z0-9]+))*([A-Z])?/', + ], + }], + 'vue/define-macros-order': 'error', + 'vue/html-comment-content-newline': 'error', + 'vue/html-comment-content-spacing': 'error', + 'vue/html-comment-indent': 'error', + 'vue/match-component-file-name': 'error', + 'vue/no-child-content': 'error', + 'vue/require-default-prop': 'off', + + 'vue/no-duplicate-attr-inheritance': 'error', + 'vue/no-empty-component-block': 'error', + 'vue/no-multiple-objects-in-class': 'error', + 'vue/no-reserved-component-names': 'error', + 'vue/no-template-target-blank': 'error', + 'vue/no-useless-mustaches': 'error', + 'vue/no-useless-v-bind': 'error', + 'vue/padding-line-between-blocks': 'error', + 'vue/prefer-separate-static-class': 'error', + 'vue/prefer-true-attribute-shorthand': 'error', + 'vue/v-on-function-call': 'error', + 'vue/no-restricted-class': ['error', '/^(p|m)(l|r)-/'], + 'vue/valid-v-slot': ['error', { + allowModifiers: true, + }], + + // -- Extension Rules + 'vue/no-irregular-whitespace': 'error', + 'vue/template-curly-spacing': 'error', + + // -- Sonarlint + 'sonarjs/no-duplicate-string': 'off', + 'sonarjs/no-nested-template-literals': 'off', + + // -- Unicorn + // 'unicorn/filename-case': 'off', + // 'unicorn/prevent-abbreviations': ['error', { + // replacements: { + // props: false, + // }, + // }], + + // https://github.com/gmullerb/eslint-plugin-regex + 'regex/invalid': [ + 'error', + [ + { + regex: '@/assets/images', + replacement: '@images', + message: 'Use \'@images\' path alias for image imports', + }, + { + regex: '@/assets/styles', + replacement: '@styles', + message: 'Use \'@styles\' path alias for importing styles from \'resources/js/assets/styles\'', + }, + + { + id: 'Disallow icon of icon library', + regex: '(mdi|tabler)-\\w', + message: 'Only \'remix\' icons are allowed', + }, + + { + regex: '@core/\\w', + message: 'You can\'t use @core when you are in @layouts module', + files: { + inspect: '@layouts/.*', + }, + }, + { + regex: 'useLayouts\\(', + message: '`useLayouts` composable is only allowed in @layouts & @core directory. Please use `useThemeConfig` composable instead.', + files: { + inspect: '^(?!.*(@core|@layouts)).*', + }, + }, + ], + + // Ignore files + '\.eslintrc\.cjs', + ], + }, + settings: { + 'import/resolver': { + node: true, + 'eslint-import-resolver-custom-alias': { + 'alias': { + "@core-scss": "./resources/styles/@core", + "@": "./resources/js", + "@themeConfig": "./themeConfig.js", + "@core": "./resources/js/@core", + "@layouts": "./resources/js/@layouts", + "@images": "./resources/images/", + "@styles": "./resources/styles/", + "@configured-variables": "./resources/styles/variables/_template.scss", + "@db": "./resources/js/plugins/fake-api/handlers/", + "@api-utils": "./resources/js/plugins/fake-api/utils/", + }, + 'extensions': [ + '.ts', + '.js', + '.tsx', + '.jsx', + '.mjs', + ], + }, + typescript: {}, + }, + }, +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..fcb21d3 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,11 @@ +* text=auto eol=lf + +*.blade.php diff=html +*.css diff=css +*.html diff=html +*.md diff=markdown +*.php diff=php + +/.github export-ignore +CHANGELOG.md export-ignore +.styleci.yml export-ignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d888c80 --- /dev/null +++ b/.gitignore @@ -0,0 +1,62 @@ +/.phpunit.cache +/node_modules +/public/build +/public/hot +/public/storage +/storage/*.key +/vendor +.env +.env.backup +.env.production +.phpunit.result.cache +Homestead.json +Homestead.yaml +auth.json +npm-debug.log +yarn-error.log +/.fleet +/.idea + +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# 👉 Custom Git ignores + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +!.vscode/settings.json +!.vscode/*.code-snippets +!.vscode/tours +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? +.yarn + +# iconify dist files +resources/js/plugins/iconify/icons.css + +# Ignore MSW script +public/mockServiceWorker.js + +# Env files +.env* +!.env.example diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..4b10cef --- /dev/null +++ b/.npmrc @@ -0,0 +1,2 @@ +auto-install-peers=true +shamefully-hoist=true diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 0000000..b009dfb --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +lts/* diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 0000000..fc10dfc --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,45 @@ +{ + "extends": [ + "stylelint-config-standard-scss", + "stylelint-config-idiomatic-order" + ], + "plugins": [ + "stylelint-use-logical-spec", + "stylelint-codeguide" + ], + "overrides": [ + { + "files": [ + "**/*.scss" + ], + "customSyntax": "postcss-scss" + }, + { + "files": [ + "**/*.vue" + ], + "customSyntax": "postcss-html" + } + ], + "rules": { + "codeguide/max-line-length": [ + 120, + { + "ignore": "comments" + } + ], + "codeguide/indentation": 2, + "liberty/use-logical-spec": true, + "selector-class-pattern": null, + "color-function-notation": null, + "annotation-no-unknown": [ + true, + { + "ignoreAnnotations": [ + "default" + ] + } + ], + "media-feature-range-notation": null + } +} diff --git a/.vscode/anchor-comments.code-snippets b/.vscode/anchor-comments.code-snippets new file mode 100644 index 0000000..7342c88 --- /dev/null +++ b/.vscode/anchor-comments.code-snippets @@ -0,0 +1,23 @@ +{ + "Add hand emoji": { + "prefix": "cm-hand-emoji", + "body": [ + "👉" + ], + "description": "Add hand emoji" + }, + "Add info emoji": { + "prefix": "cm-info-emoji", + "body": [ + "â„šī¸" + ], + "description": "Add info emoji" + }, + "Add warning emoji": { + "prefix": "cm-warning-emoji", + "body": [ + "❗" + ], + "description": "Add warning emoji" + } +} diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..27843f1 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,15 @@ +{ + "recommendations": [ + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "xabikos.javascriptsnippets", + "stylelint.vscode-stylelint", + "fabiospampinato.vscode-highlight", + "github.vscode-pull-request-github", + "vue.volar", + "antfu.iconify", + "cipchk.cssrem", + "matijao.vue-nuxt-snippets", + "dongido.sync-env" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..731443b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,95 @@ +{ + "editor.formatOnSave": true, + "files.insertFinalNewline": true, + "javascript.updateImportsOnFileMove.enabled": "always", + "[javascript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "[typescript]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint", + "editor.autoClosingBrackets": "always" + }, + "[markdown]": { + "editor.defaultFormatter": "DavidAnson.vscode-markdownlint" + }, + "[scss]": { + "editor.defaultFormatter": "stylelint.vscode-stylelint" + }, + "[json]": { + "editor.defaultFormatter": "vscode.json-language-features" + }, + "[jsonc]": { + "editor.defaultFormatter": "vscode.json-language-features" + }, + "[vue]": { + "editor.defaultFormatter": "dbaeumer.vscode-eslint" + }, + "volar.preview.port": 3000, + "volar.completion.preferredTagNameCase": "pascal", + "eslint.options": {}, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.fixAll.stylelint": "explicit", + "source.organizeImports": "explicit" + }, + "eslint.alwaysShowStatus": true, + "eslint.format.enable": true, + "eslint.packageManager": "pnpm", + "stylelint.packageManager": "pnpm", + "stylelint.validate": [ + "css", + "scss", + "vue" + ], + "cSpell.words": [ + "Composables", + "Customizer", + "destr", + "flagpack", + "Iconify", + "ofetch", + "psudo", + "stylelint", + "touchless", + "triggerer", + "vuetify", + "nuxt" + ], + "commentAnchors.tags.anchors": { + "â„šī¸": { + "scope": "hidden", + "highlightColor": "#3498DB", + "styleComment": true, + "isItalic": false + }, + "👉": { + "scope": "file", + "highlightColor": "#98C379", + "styleComment": true, + "isItalic": false + }, + "❗": { + "scope": "hidden", + "highlightColor": "#FF2D00", + "styleComment": true, + "isItalic": false + } + }, + "highlight.regexFlags": "gi", + "highlight.regexes": { + "(100vh|translate|margin:|padding:|margin-left|margin-right|rotate|text-align|border-top|border-right|border-bottom|border-left|float|background-position|transform|width|height|top|left|bottom|right|float|clear|(p|m)(l|r)-|border-(start|end)-(start|end)-radius)": [ + { + "borderWidth": "1px", + "borderColor": "tomato", + "borderStyle": "solid" + } + ], + "(overflow-x:|overflow-y:)": [ + { + "borderWidth": "1px", + "borderColor": "green", + "borderStyle": "solid" + } + ] + } +} diff --git a/.vscode/vue-ts.code-snippets b/.vscode/vue-ts.code-snippets new file mode 100644 index 0000000..360713a --- /dev/null +++ b/.vscode/vue-ts.code-snippets @@ -0,0 +1,18 @@ +{ + "Vue TS - DefineProps": { + "prefix": "dprops", + "body": [ + "defineProps<${1:Props}>()" + ], + "description": "DefineProps in script setup" + }, + "Vue TS - Props interface": { + "prefix": "iprops", + "body": [ + "interface Props {", + " ${1}", + "}" + ], + "description": "Create props interface in script setup" + } +} diff --git a/.vscode/vue.code-snippets b/.vscode/vue.code-snippets new file mode 100644 index 0000000..814d167 --- /dev/null +++ b/.vscode/vue.code-snippets @@ -0,0 +1,63 @@ +{ + "script": { + "prefix": "vue-sfc-ts", + "body": [ + "", + "", + "", + "", + "", + "" + ], + "description": "Vue SFC Typescript" + }, + "template": { + "scope": "vue", + "prefix": "template", + "body": [ + "" + ], + "description": "Create