├── .eslintrc.js ├── .gitignore ├── README.md ├── app.vue ├── assets └── css │ ├── _scrollbars.scss │ ├── main.scss │ ├── tailwind.css │ └── utils │ ├── _mixins.scss │ └── global.scss ├── components ├── elements │ ├── ElInfiniteLoad │ │ └── ElInfiniteLoad.vue │ └── ElPagination │ │ └── ElPagination.vue └── global │ ├── ElDataLoad │ └── ElDataLoad.vue │ ├── ElGithubExampleBanner │ └── ElGithubExampleBanner.vue │ └── ElLoadingIntro │ └── ElLoadingIntro.vue ├── composables ├── useHelpers.ts └── usePagination.ts ├── content ├── 1.index.md ├── 2.about.md └── 3.blog │ ├── 0.index.md │ ├── 1.post-1.md │ ├── 2.post-4.md │ ├── 3.post-3.md │ ├── 4.post-4.md │ ├── 5.post-5.md │ └── 6.post-6.md ├── layouts ├── default.vue ├── scrollToAdvanced.vue └── scrollToSimple.vue ├── nuxt.config.ts ├── package-lock.json ├── package.json ├── pages ├── examples │ ├── data-fetching │ │ └── infinite-load │ │ │ └── index.vue │ ├── data-table │ │ └── simple │ │ │ └── index.vue │ ├── nuxt-content │ │ └── infinite-load │ │ │ └── index.vue │ ├── pagination │ │ └── simple │ │ │ └── index.vue │ └── scroll-to │ │ └── simple │ │ └── index.vue ├── index.vue └── mock │ └── scroll-to │ ├── page-1 │ └── index.vue │ └── page-2 │ └── index.vue ├── plugins └── vercel.client.ts ├── public ├── favicon.svg └── logo.svg ├── tailwind.config.js └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | // .eslintrc.js 2 | module.exports = { 3 | env: { 4 | browser: true, 5 | es2021: true, 6 | node: true, 7 | }, 8 | extends: [ 9 | "plugin:@typescript-eslint/recommended", 10 | "plugin:nuxt/recommended", 11 | "plugin:vue/vue3-recommended", 12 | "plugin:prettier/recommended", 13 | ], 14 | parserOptions: { 15 | ecmaVersion: "latest", 16 | parser: "@typescript-eslint/parser", 17 | sourceType: "module", 18 | }, 19 | plugins: ["@typescript-eslint"], 20 | rules: { 21 | "@typescript-eslint/no-explicit-any": "off", 22 | "@typescript-eslint/no-non-null-assertion": "off", 23 | "vue/no-v-html": "off", 24 | camelcase: "off", 25 | "prettier/prettier": [ 26 | "error", 27 | { 28 | endOfLine: "auto", 29 | }, 30 | ], 31 | }, 32 | }; 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | *.log* 3 | .nuxt 4 | .nitro 5 | .cache 6 | .output 7 | .env 8 | dist 9 | .idea 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Examples 2 | 3 | Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. 4 | 5 | [Check out example](https://nuxt-3-examples.vercel.app/) that was deployed on Vercel 6 | 7 | ## Setup 8 | 9 | Make sure to install the dependencies: 10 | 11 | ```bash 12 | # npm 13 | npm install 14 | ``` 15 | 16 | ## Development Server 17 | 18 | Start the development server on http://localhost:3000 19 | 20 | ```bash 21 | npm run dev 22 | ``` 23 | 24 | ## Production 25 | 26 | Build the application for production: 27 | 28 | ```bash 29 | npm run build 30 | ``` 31 | 32 | Locally preview production build: 33 | 34 | ```bash 35 | npm run preview 36 | ``` 37 | 38 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. 39 | -------------------------------------------------------------------------------- /app.vue: -------------------------------------------------------------------------------- 1 | 46 | -------------------------------------------------------------------------------- /assets/css/_scrollbars.scss: -------------------------------------------------------------------------------- 1 | :root { 2 | --scrollbar-bg-color: theme("colors.primary.800"); 3 | --scrollbar-handle-color: theme("colors.primary.700"); 4 | --scrollbar-handle-color-hover: theme("colors.primary.600"); 5 | } 6 | 7 | body { 8 | // Firefox 9 | scrollbar-color: var(--scrollbar-bg-color) var(--scrollbar-handle-color); 10 | scrollbar-width: thin; 11 | // Width 12 | &::-webkit-scrollbar { 13 | @apply w-1.5 h-1.5; 14 | } 15 | &::-webkit-scrollbar:hover { 16 | @apply w-2; 17 | } 18 | // Track 19 | &::-webkit-scrollbar-track { 20 | @apply bg-[var(--scrollbar-bg-color)]; 21 | } 22 | // Handle 23 | &::-webkit-scrollbar-thumb { 24 | @apply border border-[var(--scrollbar-bg-color)]; 25 | @apply bg-[var(--scrollbar-handle-color)]; 26 | } 27 | // Hover 28 | &::-webkit-scrollbar-thumb:hover { 29 | @apply bg-[var(--scrollbar-handle-color-hover)]; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /assets/css/main.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Roboto:wght@100;300;400;500;700;900&display=swap'); 2 | 3 | @import "scrollbars"; 4 | 5 | body { 6 | -webkit-font-smoothing: antialiased; 7 | font-family: 'Roboto', sans-serif; 8 | @apply bg-neutral-100; 9 | } 10 | 11 | html, body, #__nuxt { 12 | @apply min-h-screen; 13 | } 14 | 15 | .container__main { 16 | @apply p-6 pb-0 pt-8; 17 | } -------------------------------------------------------------------------------- /assets/css/tailwind.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | -------------------------------------------------------------------------------- /assets/css/utils/_mixins.scss: -------------------------------------------------------------------------------- 1 | @mixin container-padding { 2 | @apply px-4; 3 | @apply sm:px-8; 4 | @apply md:px-10; 5 | @apply lg:px-12; 6 | } 7 | 8 | @mixin container { 9 | @apply w-full mx-auto; 10 | @apply sm:max-w-[750px]; 11 | @apply md:max-w-[970px]; 12 | @apply lg:max-w-[1170px]; 13 | @include container-padding; 14 | } 15 | 16 | @mixin container-small { 17 | @apply w-full mx-auto; 18 | @apply sm:max-w-[750px]; 19 | @include container-padding; 20 | } 21 | 22 | @mixin container-medium { 23 | @apply w-full mx-auto; 24 | @apply sm:max-w-[750px]; 25 | @apply md:max-w-[970px]; 26 | @include container-padding; 27 | } 28 | 29 | @mixin media-md-max { 30 | @media only screen and (max-width: 767px) { 31 | @content 32 | } 33 | } 34 | 35 | @mixin transition { 36 | transition: 0.2s linear; 37 | } 38 | 39 | @mixin line-clamp($i) { 40 | overflow: hidden; 41 | display: -webkit-box; 42 | -webkit-box-orient: vertical; 43 | -webkit-line-clamp: $i; 44 | } -------------------------------------------------------------------------------- /assets/css/utils/global.scss: -------------------------------------------------------------------------------- 1 | @import "mixins"; -------------------------------------------------------------------------------- /components/elements/ElInfiniteLoad/ElInfiniteLoad.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 44 | -------------------------------------------------------------------------------- /components/elements/ElPagination/ElPagination.vue: -------------------------------------------------------------------------------- 1 | 105 | 106 | 183 | 184 | 266 | -------------------------------------------------------------------------------- /components/global/ElDataLoad/ElDataLoad.vue: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /components/global/ElGithubExampleBanner/ElGithubExampleBanner.vue: -------------------------------------------------------------------------------- 1 | 16 | 17 | 21 | -------------------------------------------------------------------------------- /components/global/ElLoadingIntro/ElLoadingIntro.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | 67 | 68 | 85 | -------------------------------------------------------------------------------- /composables/useHelpers.ts: -------------------------------------------------------------------------------- 1 | export default function useHelpers() { 2 | const arrayCreate = (count = 1, data = {}) => { 3 | return [...Array(count)].map((_, i) => { 4 | return { 5 | _id: i + 1, 6 | ...data, 7 | }; 8 | }); 9 | }; 10 | 11 | const toggleValue = ref(false); 12 | const toggle = () => { 13 | toggleValue.value = !toggleValue.value; 14 | }; 15 | 16 | return { arrayCreate, toggleValue, toggle }; 17 | } 18 | -------------------------------------------------------------------------------- /composables/usePagination.ts: -------------------------------------------------------------------------------- 1 | export default function usePagination() { 2 | const router = useRouter(); 3 | const route = useRoute(); 4 | 5 | const query = computed(() => { 6 | return route.query; 7 | }); 8 | const getCurrentPage = (query = false, page: number) => { 9 | if (query) { 10 | const route = useRoute(); 11 | 12 | const query = computed(() => { 13 | return route.query; 14 | }); 15 | 16 | if (query.value.page) { 17 | return +query.value.page; 18 | } 19 | } 20 | return page; 21 | }; 22 | 23 | const getTotalPages = (total: number, limit: number): number => { 24 | return Math.ceil(+total / +limit) || 0; 25 | }; 26 | 27 | const resetPageQuery = () => { 28 | router.push({ query: { ...query.value, page: undefined } }); 29 | }; 30 | 31 | return { getCurrentPage, getTotalPages, resetPageQuery, query }; 32 | } 33 | -------------------------------------------------------------------------------- /content/1.index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Home Page 3 | description: Home page 4 | navigation: true 5 | --- 6 | 7 | # Home Page -------------------------------------------------------------------------------- /content/2.about.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: About us 3 | navigation: true 4 | --- 5 | 6 | # About 7 | 8 | About us content -------------------------------------------------------------------------------- /content/3.blog/0.index.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Блог 3 | description: Blog 4 | navigation: true 5 | --- 6 | 7 | ::blog-posts 8 | :: -------------------------------------------------------------------------------- /content/3.blog/1.post-1.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | title: 'My Page Title' 4 | description: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.' 5 | date: 10.01.2023 6 | image: 7 | src: 'https://via.placeholder.com/350x150/ff5722' 8 | alt: 'An image showcasing My Page.' 9 | width: 400 10 | height: 300 11 | head: 12 | meta: 13 | - name: 'keywords' 14 | content: 'nuxt, vue, content' 15 | - name: 'robots' 16 | content: 'index, follow' 17 | - name: 'author' 18 | content: 'Fubon' 19 | - name: 'copyright' 20 | content: '© 2023 Fubon' 21 | --- 22 | 23 | # My first blog post 24 | 25 | ```js{1,3-5}[server.js] 26 | const http = require('http') 27 | const bodyParser = require('body-parser') 28 | 29 | http.createServer((req, res) => { 30 | bodyParser.parse(req, (error, body) => { 31 | res.end(body) 32 | }) 33 | }).listen(3000) 34 | ``` 35 | 36 | ::InfoBox{type="warning"} 37 | Here's a handy bit of information for you! 38 | 39 | #details 40 | This will be rendered inside the `description` slot. _It's important_ to see how this **works**. 41 | \[More information can be found here\](#) 42 | :: 43 | 44 | ::fancy-header 45 | That text paragraph will be unwrapped. 46 | :: 47 | 48 | Welcome to my first blog post using \[content v2 module\](https://content.nuxtjs.org/) 49 | Hey there! 👋🏾 :tada: 50 | 51 | This is my first blog post learning nuxt content. 52 | I'm currently building it using the following: 53 | - Nuxt.js 54 | - Nuxt Content module 55 | - TailwindCSS 56 | - TailwindCSS typography 57 | 58 | ## Nuxt.js 59 | 60 | ### Nuxt.js 61 | 62 | [Nuxt](https://nuxtjs.org/) is a powerful Vue framework that offers excellent development features such as server-side rendering. 63 | 64 | ```bash 65 | npx nuxi init nuxt-app 66 | cd nuxt-app 67 | yarn install 68 | yarn dev -o 69 | ``` 70 | 71 | ### First Post 72 | 73 | ```javascript[file.js]{4-6,7} meta-info=val 74 | export default () => { 75 | console.log('Code block') 76 | } 77 | ``` 78 | 79 | ## Как дела 80 | 81 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 82 | 83 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 84 | 85 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 86 | 87 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 88 | 89 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 90 | 91 | 92 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 93 | 94 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 95 | 96 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 97 | 98 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 99 | 100 | 101 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 102 | 103 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 104 | 105 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 106 | 107 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 108 | 109 | 110 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 111 | 112 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 113 | 114 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 115 | 116 | ## Нормально 117 | 118 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 119 | 120 | 121 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 122 | 123 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 124 | 125 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 126 | 127 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 128 | 129 | 130 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 131 | 132 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 133 | 134 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 135 | 136 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 137 | 138 | 139 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 140 | 141 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 142 | 143 | Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. 144 | 145 | ## Нормально не реально 146 | 147 | 148 | First in My Post :tada: -------------------------------------------------------------------------------- /content/3.blog/2.post-4.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | date: 12.01.2023 4 | --- 5 | 6 | # Second Post 7 | 8 | First in My Post :tada: -------------------------------------------------------------------------------- /content/3.blog/3.post-3.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | date: 14.01.2023 4 | --- 5 | 6 | # Third Post 7 | 8 | First in My Post :tada: -------------------------------------------------------------------------------- /content/3.blog/4.post-4.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | date: 15.01.2023 4 | --- 5 | 6 | # Post 4 7 | 8 | First in My Post :tada: -------------------------------------------------------------------------------- /content/3.blog/5.post-5.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | date: 16.01.2023 4 | --- 5 | 6 | # Post 5 7 | 8 | First in My Post :tada: -------------------------------------------------------------------------------- /content/3.blog/6.post-6.md: -------------------------------------------------------------------------------- 1 | --- 2 | layout: blog-post 3 | date: 20.01.2023 4 | --- 5 | 6 | # Post 6 7 | 8 | First in My Post :tada: -------------------------------------------------------------------------------- /layouts/default.vue: -------------------------------------------------------------------------------- 1 | 149 | 150 | 155 | 156 | 229 | 230 | 254 | -------------------------------------------------------------------------------- /layouts/scrollToAdvanced.vue: -------------------------------------------------------------------------------- 1 | 159 | 160 | 165 | 166 | 177 | 178 | 202 | -------------------------------------------------------------------------------- /layouts/scrollToSimple.vue: -------------------------------------------------------------------------------- 1 | 147 | 148 | 153 | 154 | 165 | 166 | 190 | -------------------------------------------------------------------------------- /nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://nuxt.com/docs/api/configuration/nuxt-config 2 | import eslintPlugin from "vite-plugin-eslint"; 3 | export default defineNuxtConfig({ 4 | // ssr: false, 5 | nitro: { 6 | compressPublicAssets: true, 7 | routeRules: { 8 | // "/_nuxt/**": { headers: { "cache-control": "max-age=31536000" } }, // Set generated files cache to 1 year 9 | }, 10 | }, 11 | css: ["~/assets/css/main.scss"], 12 | modules: [ 13 | // https://tailwindcss.nuxt.dev/ 14 | "@nuxtjs/tailwindcss", 15 | // https://github.com/nuxt-modules/icon 16 | // https://icones.js.org/collection/all?s=github 17 | "nuxt-icon", 18 | // https://vueuse.org/guide/index.html#nuxt 19 | "@vueuse/nuxt", 20 | // https://content.nuxtjs.org/get-started 21 | "@nuxt/content", 22 | ], 23 | vite: { 24 | plugins: [eslintPlugin()], 25 | css: { 26 | preprocessorOptions: { 27 | scss: { 28 | additionalData: `@import "@/assets/css/utils/global.scss";`, 29 | }, 30 | }, 31 | }, 32 | }, 33 | }); 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "private": true, 3 | "scripts": { 4 | "build": "nuxt build", 5 | "dev": "nuxt dev", 6 | "generate": "nuxt generate", 7 | "preview": "nuxt preview", 8 | "postinstall": "nuxt prepare" 9 | }, 10 | "devDependencies": { 11 | "@nuxt/content": "^2.3.0", 12 | "@nuxtjs/tailwindcss": "^6.1.3", 13 | "@typescript-eslint/eslint-plugin": "^5.46.0", 14 | "@typescript-eslint/parser": "^5.46.0", 15 | "@vueuse/core": "^9.7.0", 16 | "@vueuse/nuxt": "^9.7.0", 17 | "eslint": "^8.29.0", 18 | "eslint-config-prettier": "^8.5.0", 19 | "eslint-plugin-nuxt": "^4.0.0", 20 | "eslint-plugin-prettier": "^4.2.1", 21 | "eslint-plugin-vue": "^9.7.0", 22 | "nuxt": "3.0.0", 23 | "nuxt-icon": "^0.1.8", 24 | "prettier": "^2.8.1", 25 | "sass": "^1.56.2", 26 | "sass-loader": "^13.2.0", 27 | "vite-plugin-eslint": "^1.8.1" 28 | }, 29 | "dependencies": { 30 | "@vercel/analytics": "^0.1.6", 31 | "lodash-es": "^4.17.21", 32 | "v3-infinite-loading": "^1.2.2" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pages/examples/data-fetching/infinite-load/index.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 49 | 50 | 139 | -------------------------------------------------------------------------------- /pages/examples/data-table/simple/index.vue: -------------------------------------------------------------------------------- 1 | 11 | 12 | 17 | 18 | 23 | -------------------------------------------------------------------------------- /pages/examples/nuxt-content/infinite-load/index.vue: -------------------------------------------------------------------------------- 1 | 37 | 38 | 43 | 44 | 85 | -------------------------------------------------------------------------------- /pages/examples/pagination/simple/index.vue: -------------------------------------------------------------------------------- 1 | 46 | 47 | 52 | 53 | 137 | -------------------------------------------------------------------------------- /pages/examples/scroll-to/simple/index.vue: -------------------------------------------------------------------------------- 1 | 21 | 22 | 27 | 28 | 34 | -------------------------------------------------------------------------------- /pages/index.vue: -------------------------------------------------------------------------------- 1 | 47 | 48 | 53 | -------------------------------------------------------------------------------- /pages/mock/scroll-to/page-1/index.vue: -------------------------------------------------------------------------------- 1 | 43 | 44 | 49 | 50 | 55 | 56 | 61 | -------------------------------------------------------------------------------- /pages/mock/scroll-to/page-2/index.vue: -------------------------------------------------------------------------------- 1 | 32 | 33 | 38 | 39 | 48 | -------------------------------------------------------------------------------- /plugins/vercel.client.ts: -------------------------------------------------------------------------------- 1 | import { inject } from "@vercel/analytics"; 2 | 3 | export default defineNuxtPlugin(() => { 4 | // Inject plugin only on prod build 5 | if (import.meta.env.PROD) { 6 | console.info("Vercel Tracking Enabled"); 7 | inject(); 8 | } 9 | }); 10 | -------------------------------------------------------------------------------- /public/favicon.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /public/logo.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /tailwind.config.js: -------------------------------------------------------------------------------- 1 | /* 2 | ** TailwindCSS Configuration File 3 | ** 4 | ** Docs: https://tailwindcss.com/docs/configuration 5 | */ 6 | module.exports = { 7 | content: [], 8 | theme: { 9 | screens: { 10 | touch: { raw: "hover: none" }, 11 | "can-hover": { raw: "hover: hover" }, 12 | xxs: "380px", 13 | xs: "480px", 14 | sm: "640px", 15 | md: "768px", 16 | lg: "1024px", 17 | xl: "1280px", 18 | "2xl": "1536px", 19 | "3xl": "1920px", 20 | "4xl": "2560px", 21 | "5xl": "3840px", 22 | }, 23 | extend: { 24 | colors: { 25 | primary: { 26 | DEFAULT: "#4D5666", 27 | 50: "#D2D6DD", 28 | 100: "#C5CAD3", 29 | 200: "#ABB2BF", 30 | 300: "#919AAC", 31 | 400: "#768398", 32 | 500: "#606C80", 33 | 600: "#4D5666", 34 | 700: "#3B424E", 35 | 800: "#2A2F37", 36 | 900: "#181B20", 37 | }, 38 | }, 39 | flex: { 40 | 2: "2 2 0%", 41 | 3: "3 3 0%", 42 | }, 43 | }, 44 | }, 45 | }; 46 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json", 4 | "compilerOptions": { 5 | "noImplicitAny": false, 6 | "importsNotUsedAsValues": "error", 7 | "types": [] 8 | } 9 | } 10 | --------------------------------------------------------------------------------