├── playground ├── .gitignore ├── tsconfig.json ├── bun.lockb ├── public │ └── test.jpg ├── nuxt.config.ts └── app.vue ├── .npmrc ├── bun.lockb ├── docs ├── .npmrc ├── bun.lockb ├── server │ ├── tsconfig.json │ └── routes │ │ └── sitemap.xml.ts ├── public │ ├── favicon.ico │ ├── robots.txt │ └── blanked-social-preview.png ├── tsconfig.json ├── .gitignore ├── app.config.ts ├── package.json ├── main.css ├── nuxt.config.ts ├── tailwind.config.ts ├── README.md ├── app.vue └── pages │ └── index.vue ├── blanked-social-preview.png ├── src ├── runtime │ ├── plugin.ts │ ├── components │ │ └── elements │ │ │ ├── ThemeToggle.vue │ │ │ ├── Toasts.vue │ │ │ ├── Sidebar.vue │ │ │ ├── Modal.vue │ │ │ └── Tooltip.vue │ └── composables │ │ └── useWindowInfos.ts └── module.ts ├── tsconfig.json ├── .github ├── ISSUE_TEMPLATE │ ├── question.yml │ ├── feature-request.yml │ └── bug-report.yml ├── workflows │ ├── autofix.yml │ └── semantic-pull-request.yml ├── release.yml └── pull_request_template.md ├── .gitignore ├── LICENSE ├── package.json ├── README.md └── CHANGELOG.md /playground/.gitignore: -------------------------------------------------------------------------------- 1 | .data 2 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/bun.lockb -------------------------------------------------------------------------------- /docs/.npmrc: -------------------------------------------------------------------------------- 1 | shamefully-hoist=true 2 | strict-peer-dependencies=false 3 | -------------------------------------------------------------------------------- /playground/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.nuxt/tsconfig.json" 3 | } 4 | -------------------------------------------------------------------------------- /docs/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/docs/bun.lockb -------------------------------------------------------------------------------- /docs/server/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "../.nuxt/tsconfig.server.json" 3 | } 4 | -------------------------------------------------------------------------------- /playground/bun.lockb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/playground/bun.lockb -------------------------------------------------------------------------------- /docs/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/docs/public/favicon.ico -------------------------------------------------------------------------------- /blanked-social-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/blanked-social-preview.png -------------------------------------------------------------------------------- /playground/public/test.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/playground/public/test.jpg -------------------------------------------------------------------------------- /docs/public/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | 4 | Sitemap: https://blanked.hrcd.fr/sitemap.xml 5 | -------------------------------------------------------------------------------- /docs/public/blanked-social-preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/HugoRCD/blanked/HEAD/docs/public/blanked-social-preview.png -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | // https://nuxt.com/docs/guide/concepts/typescript 3 | "extends": "./.nuxt/tsconfig.json" 4 | } 5 | -------------------------------------------------------------------------------- /playground/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | export default defineNuxtConfig({ 2 | modules: ['../src/module'], 3 | devtools: { enabled: true }, 4 | }) 5 | -------------------------------------------------------------------------------- /src/runtime/plugin.ts: -------------------------------------------------------------------------------- 1 | import { defineNuxtPlugin } from '#app' 2 | 3 | export default defineNuxtPlugin(() => { 4 | console.log('Plugin injected by Blanked!') 5 | }) 6 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./.nuxt/tsconfig.json", 3 | "exclude": ["docs", "dist"], 4 | "compilerOptions": { 5 | "noImplicitAny": false, 6 | "strictNullChecks": false 7 | } 8 | } -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | # Nuxt dev/build outputs 2 | .output 3 | .data 4 | .nuxt 5 | .nitro 6 | .cache 7 | dist 8 | 9 | # Node dependencies 10 | node_modules 11 | 12 | # Logs 13 | logs 14 | *.log 15 | 16 | # Misc 17 | .DS_Store 18 | .fleet 19 | .idea 20 | 21 | # Local env files 22 | .env 23 | .env.* 24 | !.env.example 25 | -------------------------------------------------------------------------------- /docs/app.config.ts: -------------------------------------------------------------------------------- 1 | export default defineAppConfig({ 2 | appName: "Blanked", 3 | footerName: "HugoRCD", 4 | socials: [ 5 | { 6 | name: 'github', 7 | icon: 'i-lucide-github', 8 | url: 'https://github.com/HugoRCD/blanked', 9 | }, 10 | { 11 | name: 'twitter', 12 | icon: 'i-lucide-twitter', 13 | url: 'https://x.com/HugoRCD__', 14 | }, 15 | ], 16 | }); 17 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nuxt-app", 3 | "private": true, 4 | "type": "module", 5 | "scripts": { 6 | "build": "nuxt build", 7 | "dev": "nuxt dev", 8 | "generate": "nuxt generate", 9 | "preview": "nuxt preview", 10 | "postinstall": "nuxt prepare" 11 | }, 12 | "devDependencies": { 13 | "blanked": "latest", 14 | "nuxt": "^3.9.1", 15 | "sitemap": "^7.1.1", 16 | "vue": "^3.4.10", 17 | "vue-router": "^4.2.5" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /docs/main.css: -------------------------------------------------------------------------------- 1 | .dark { 2 | --primary: #020202; 3 | --gray: #1A1A1A; 4 | --accent: #ffffff; 5 | 6 | --font-primary: #E0E0E0; 7 | --font-muted: #BCBCBC; 8 | --font-inverted: #000000; 9 | } 10 | 11 | .light { 12 | --primary: #ffffff; 13 | --gray: #F5F5F5; 14 | --accent: #000000; 15 | 16 | --font-primary: #000000; 17 | --font-muted: #6E6E6E; 18 | --font-inverted: #ffffff; 19 | } 20 | 21 | html, body, #__nuxt, #__layout { 22 | width: 100%; 23 | height: 100%; 24 | } 25 | -------------------------------------------------------------------------------- /docs/nuxt.config.ts: -------------------------------------------------------------------------------- 1 | // https://nuxt.com/docs/api/configuration/nuxt-config 2 | export default defineNuxtConfig({ 3 | app: { 4 | head: { 5 | viewport: "width=device-width, initial-scale=1", 6 | charset: "utf-8", 7 | meta: [ 8 | { 9 | name: "author", 10 | content: "Hugo Richard", 11 | }, 12 | ], 13 | }, 14 | }, 15 | 16 | modules: ['blanked'], 17 | 18 | css: ['~/main.css'], 19 | 20 | devtools: { enabled: true }, 21 | }) 22 | -------------------------------------------------------------------------------- /src/runtime/components/elements/ThemeToggle.vue: -------------------------------------------------------------------------------- 1 | 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.yml: -------------------------------------------------------------------------------- 1 | name: "💬 Question" 2 | description: Ask a question about the module. 3 | labels: ["question"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Before requesting a question, please make sure that you have read through our [documentation](https://blanked.hrcd.fr) and existing [issues](https://github.com/HugoRCD/blanked/issues) to see if the feature has already been requested or implemented. If it has, please add your reaction to the existing issue instead of creating a new one. 9 | - type: textarea 10 | id: description 11 | attributes: 12 | label: Description 13 | validations: 14 | required: true 15 | -------------------------------------------------------------------------------- /.github/workflows/autofix.yml: -------------------------------------------------------------------------------- 1 | name: autofix.ci 2 | on: 3 | pull_request: 4 | push: 5 | branches: [ "master" ] 6 | 7 | permissions: 8 | contents: read 9 | 10 | jobs: 11 | autofix: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - run: corepack enable 16 | 17 | - uses: actions/setup-node@v4 18 | with: 19 | node-version: 20 20 | 21 | - name: Setup Bun 22 | uses: oven-sh/setup-bun@v1 23 | 24 | - run: bun install 25 | - name: Fix lint issues 26 | 27 | run: bun run lint:fix 28 | - uses: autofix-ci/action@ea32e3a12414e6d3183163c3424a7d7a8631ad84 29 | with: 30 | commit-message: "fix: lint issues" 31 | -------------------------------------------------------------------------------- /docs/server/routes/sitemap.xml.ts: -------------------------------------------------------------------------------- 1 | import { serverQueryContent } from "#content/server"; 2 | import { SitemapStream, streamToPromise } from "sitemap"; 3 | 4 | export default defineEventHandler(async (event) => { 5 | // Fetch all documents 6 | const docs = await serverQueryContent(event).find(); 7 | const sitemap = new SitemapStream({ 8 | hostname: "https://nuxtlog.hrcd.fr" 9 | }); 10 | 11 | for (const doc of docs) { 12 | sitemap.write({ 13 | url: doc._path, 14 | changefreq: "daily", 15 | }); 16 | } 17 | // add other pages like /about, /contact etc 18 | sitemap.write({ 19 | url: "/", 20 | changefreq: "daily", 21 | }); 22 | sitemap.end(); 23 | 24 | return streamToPromise(sitemap); 25 | }); 26 | -------------------------------------------------------------------------------- /.github/release.yml: -------------------------------------------------------------------------------- 1 | changelog: 2 | exclude: 3 | labels: 4 | - ignore-for-release 5 | authors: 6 | - octocat 7 | categories: 8 | - title: Breaking Changes 🛠 9 | labels: 10 | - breaking 11 | - title: Features 🚀 12 | labels: 13 | - feat 14 | - title: Bug Fixes 🐞 15 | labels: 16 | - fix 17 | - title: Documentation 📚 18 | labels: 19 | - docs 20 | - title: Dependency Updates 📦 21 | labels: 22 | - dependencies 23 | - title: Refactoring 🛠 24 | labels: 25 | - refactor 26 | - title: Other 🤷‍ 27 | labels: 28 | - other 29 | - "*" 30 | - title: Security Fixes 🔒 31 | labels: 32 | - security 33 | - title: Bump Version 🏷 34 | labels: 35 | - version 36 | -------------------------------------------------------------------------------- /docs/tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from "tailwindcss"; 2 | 3 | export default { 4 | darkMode: "class", 5 | content: [ 6 | "./components/**/*.{js,vue,ts}", 7 | "./pages/**/*.vue", 8 | "./app.vue", 9 | ], 10 | theme: { 11 | extend: { 12 | colors: { 13 | primary: 'var(--primary)', 14 | gray: 'var(--gray)', 15 | accent: 'var(--accent)' 16 | }, 17 | textColor: { 18 | primary: 'var(--font-primary)', 19 | muted: 'var(--font-muted)', 20 | inverted: 'var(--font-inverted)' 21 | }, 22 | fontFamily: { 23 | main: 'var(--font-family)' 24 | }, 25 | gradientColorStops: { 26 | primary: 'var(--primary)', 27 | accent: 'var(--accent)' 28 | }, 29 | }, 30 | }, 31 | plugins: [ 32 | ], 33 | } satisfies Config; 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependencies 2 | node_modules 3 | playground/node_modules 4 | docs/node_modules 5 | 6 | # Logs 7 | *.log* 8 | 9 | # Temp directories 10 | .temp 11 | .tmp 12 | .cache 13 | 14 | # Yarn 15 | **/.yarn/cache 16 | **/.yarn/*state* 17 | 18 | # Generated dirs 19 | dist 20 | 21 | # Nuxt 22 | .nuxt 23 | .output 24 | .data 25 | .vercel_build_output 26 | .build-* 27 | .netlify 28 | 29 | # Env 30 | .env 31 | 32 | # Testing 33 | reports 34 | coverage 35 | *.lcov 36 | .nyc_output 37 | 38 | # VSCode 39 | .vscode/* 40 | !.vscode/settings.json 41 | !.vscode/tasks.json 42 | !.vscode/launch.json 43 | !.vscode/extensions.json 44 | !.vscode/*.code-snippets 45 | 46 | # Intellij idea 47 | *.iml 48 | .idea 49 | 50 | # OSX 51 | .DS_Store 52 | .AppleDouble 53 | .LSOverride 54 | .AppleDB 55 | .AppleDesktop 56 | Network Trash Folder 57 | Temporary Items 58 | .apdisk 59 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Hugo Richard 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.yml: -------------------------------------------------------------------------------- 1 | name: "🚀 Feature request" 2 | description: Suggest an idea or enhancement for the module. 3 | labels: ["enhancement"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Before requesting a feature, please make sure that you have read through our [documentation](https://blanked.hrcd.fr) and existing [issues](https://github.com/HugoRCD/blanked/issues) to see if the feature has already been requested or implemented. If it has, please add your reaction to the existing issue instead of creating a new one. 9 | - type: textarea 10 | id: description 11 | attributes: 12 | label: Description 13 | description: A clear and concise description of what you think would be an helpful addition to the module, including the possible use cases and alternatives you have considered. If you have a working prototype or module that implements it, please include a link. 14 | validations: 15 | required: true 16 | - type: textarea 17 | id: additonal 18 | attributes: 19 | label: Additional context 20 | description: If applicable, add any other context or screenshots here. 21 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Nuxt 3 Minimal Starter 2 | 3 | Look at the [Nuxt 3 documentation](https://nuxt.com/docs/getting-started/introduction) to learn more. 4 | 5 | ## Setup 6 | 7 | Make sure to install the dependencies: 8 | 9 | ```bash 10 | # npm 11 | npm install 12 | 13 | # pnpm 14 | pnpm install 15 | 16 | # yarn 17 | yarn install 18 | 19 | # bun 20 | bun install 21 | ``` 22 | 23 | ## Development Server 24 | 25 | Start the development server on `http://localhost:3000`: 26 | 27 | ```bash 28 | # npm 29 | npm run dev 30 | 31 | # pnpm 32 | pnpm run dev 33 | 34 | # yarn 35 | yarn dev 36 | 37 | # bun 38 | bun run dev 39 | ``` 40 | 41 | ## Production 42 | 43 | Build the application for production: 44 | 45 | ```bash 46 | # npm 47 | npm run build 48 | 49 | # pnpm 50 | pnpm run build 51 | 52 | # yarn 53 | yarn build 54 | 55 | # bun 56 | bun run build 57 | ``` 58 | 59 | Locally preview production build: 60 | 61 | ```bash 62 | # npm 63 | npm run preview 64 | 65 | # pnpm 66 | pnpm run preview 67 | 68 | # yarn 69 | yarn preview 70 | 71 | # bun 72 | bun run preview 73 | ``` 74 | 75 | Check out the [deployment documentation](https://nuxt.com/docs/getting-started/deployment) for more information. 76 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | ### 🔗 Linked issue 6 | 7 | 8 | 9 | ### ❓ Type of change 10 | 11 | 12 | 13 | - [ ] 📖 Documentation (updates to the documentation or readme) 14 | - [ ] 🐞 Bug fix (a non-breaking change that fixes an issue) 15 | - [ ] 👌 Enhancement (improving an existing functionality) 16 | - [ ] ✨ New feature (a non-breaking change that adds functionality) 17 | - [ ] 🧹 Chore (updates to the build process or auxiliary tools and libraries) 18 | - [ ] ⚠️ Breaking change (fix or feature that would cause existing functionality to change) 19 | 20 | ### 📚 Description 21 | 22 | 23 | 24 | 25 | ### 📝 Checklist 26 | 27 | 28 | 29 | 30 | 31 | - [ ] I have linked an issue or discussion. 32 | - [ ] I have updated the documentation accordingly. 33 | -------------------------------------------------------------------------------- /src/runtime/components/elements/Toasts.vue: -------------------------------------------------------------------------------- 1 | 54 | 55 | 74 | 75 | 78 | -------------------------------------------------------------------------------- /.github/workflows/semantic-pull-request.yml: -------------------------------------------------------------------------------- 1 | name: "Validate PR Title" 2 | 3 | on: 4 | pull_request_target: 5 | types: 6 | - opened 7 | - reopened 8 | - edited 9 | - synchronize 10 | 11 | permissions: 12 | pull-requests: write 13 | 14 | jobs: 15 | validate-pr: 16 | name: Validate PR title 17 | runs-on: ubuntu-latest 18 | steps: 19 | - uses: amannn/action-semantic-pull-request@v5 20 | id: lint_pr_title 21 | with: 22 | types: | 23 | breaking 24 | feat 25 | fix 26 | docs 27 | dependencies 28 | refactor 29 | security 30 | version 31 | other 32 | env: 33 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 34 | 35 | - uses: marocchino/sticky-pull-request-comment@v2 36 | # When the previous steps fail, the workflow would stop. By adding this 37 | # condition you can continue the execution with the populated error message. 38 | if: always() && (steps.lint_pr_title.outputs.error_message != null) 39 | with: 40 | header: pr-title-lint-error 41 | message: | 42 | Hey there and thank you for opening this pull request! 👋🏼 43 | 44 | We require pull request titles to follow the [Conventional Commits specification](https://www.conventionalcommits.org/en/v1.0.0/) and it looks like your proposed title needs to be adjusted. 45 | 46 | Details: 47 | 48 | ``` 49 | ${{ steps.lint_pr_title.outputs.error_message }} 50 | ``` 51 | 52 | # Delete a previous comment when the issue has been resolved 53 | - if: ${{ steps.lint_pr_title.outputs.error_message == null }} 54 | uses: marocchino/sticky-pull-request-comment@v2 55 | with: 56 | header: pr-title-lint-error 57 | message: | 58 | Thank you for following the naming conventions! 🙏 59 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.yml: -------------------------------------------------------------------------------- 1 | name: "🐛 Bug report" 2 | description: Report a bug to help us improve the module. 3 | labels: ["bug"] 4 | body: 5 | - type: markdown 6 | attributes: 7 | value: | 8 | Before reporting a bug, please make sure that you have read through our [documentation](https://blanked.hrcd.fr) and existing [issues](https://github.com/HugoRCD/blanked/issues) to see if the bug has already been reported or fixed. If it has, please add your reaction to the existing issue instead of creating a new one. 9 | - type: textarea 10 | id: env 11 | attributes: 12 | label: Environment 13 | description: You can use `npx nuxi info` to fill this section 14 | placeholder: | 15 | - Operating System: `Darwin` 16 | - Node Version: `v18.16.0` 17 | - Nuxt Version: `3.7.3` 18 | - CLI Version: `3.8.4` 19 | - Nitro Version: `2.6.3` 20 | - Package Manager: `pnpm@8.7.4` 21 | - Builder: `-` 22 | - User Config: `-` 23 | - Runtime Modules: `-` 24 | - Build Modules: `-` 25 | validations: 26 | required: true 27 | - type: input 28 | id: version 29 | attributes: 30 | label: Version 31 | placeholder: v2.8.0 32 | validations: 33 | required: true 34 | - type: textarea 35 | id: reproduction 36 | attributes: 37 | label: Reproduction 38 | description: A reproduction is strongly encouraged, to help us identify the issue and fix it. You can use a code sandbox or a repository to reproduce the issue. 39 | placeholder: https://stackblitz.com/edit/blanked 40 | validations: 41 | required: true 42 | - type: textarea 43 | id: description 44 | attributes: 45 | label: Description 46 | description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us in the description. 47 | validations: 48 | required: true 49 | - type: textarea 50 | id: additonal 51 | attributes: 52 | label: Additional context 53 | description: If applicable, add any other context or screenshots here. 54 | - type: textarea 55 | id: logs 56 | attributes: 57 | label: Logs 58 | description: | 59 | Optional if provided reproduction. Please try not to insert an image but copy paste the log text. 60 | render: shell-script 61 | -------------------------------------------------------------------------------- /src/runtime/components/elements/Sidebar.vue: -------------------------------------------------------------------------------- 1 | 41 | 42 | 95 | 96 | 99 | -------------------------------------------------------------------------------- /docs/app.vue: -------------------------------------------------------------------------------- 1 | 55 | 56 | 63 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "blanked", 3 | "version": "0.0.23", 4 | "description": "A Nuxt module to speed up your development", 5 | "repository": "HugoRCD/blanked", 6 | "license": "MIT", 7 | "type": "module", 8 | "author": "Hugo Richard", 9 | "contributors": [ 10 | "Hugo Richard ", 11 | "Johann Cavallucci" 12 | ], 13 | "homepage": "https://blanked.hrcd.fr/", 14 | "exports": { 15 | ".": { 16 | "types": "./dist/types.d.ts", 17 | "import": "./dist/module.mjs", 18 | "require": "./dist/module.cjs" 19 | } 20 | }, 21 | "main": "./dist/module.cjs", 22 | "types": "./dist/types.d.ts", 23 | "files": [ 24 | "dist" 25 | ], 26 | "keywords": [ 27 | "nuxt", 28 | "typescript", 29 | "tailwindcss", 30 | "color-mode", 31 | "nuxt-icon", 32 | "nuxt-module", 33 | "vue-sonner", 34 | "sonner", 35 | "tailwindcss-icons", 36 | "heroicons", 37 | "lucide", 38 | "floatingui", 39 | "vueuse" 40 | ], 41 | "scripts": { 42 | "prepack": "nuxt-module-build build", 43 | "dev": "nuxi dev playground", 44 | "dev:build": "nuxi build playground", 45 | "dev:prepare": "nuxt-module-build build --stub && nuxt-module-build prepare && nuxi prepare playground", 46 | "release": "npm run lint && npm run prepack && changelogen --release && npm publish && git push --follow-tags", 47 | "lint": "eslint .", 48 | "lint:fix": "eslint --fix .", 49 | "test": "vitest run", 50 | "test:watch": "vitest watch", 51 | "typecheck": "tsc --noEmit" 52 | }, 53 | "dependencies": { 54 | "@egoist/tailwindcss-icons": "^1.7.2", 55 | "@floating-ui/vue": "^1.0.6", 56 | "@headlessui/vue": "^1.7.19", 57 | "@iconify-json/heroicons": "^1.1.19", 58 | "@iconify-json/lucide": "^1.1.154", 59 | "@nuxt/fonts": "^0.0.1", 60 | "@nuxtjs/color-mode": "latest", 61 | "@nuxtjs/tailwindcss": "latest", 62 | "@tailwindcss/aspect-ratio": "^0.4.2", 63 | "@tailwindcss/container-queries": "^0.1.1", 64 | "@tailwindcss/forms": "^0.5.7", 65 | "@tailwindcss/typography": "^0.5.10", 66 | "@vueuse/nuxt": "^10.7.2", 67 | "nuxt-headlessui": "^1.1.5", 68 | "nuxt-icon": "^0.6.8", 69 | "tailwindcss": "^3.4.1", 70 | "vue-sonner": "^1.0.3" 71 | }, 72 | "devDependencies": { 73 | "@nuxt/devtools": "latest", 74 | "@nuxt/eslint-config": "^0.2.0", 75 | "@nuxt/kit": "^3.8.2", 76 | "@nuxt/module-builder": "^0.5.4", 77 | "@nuxt/schema": "^3.8.2", 78 | "@nuxt/test-utils": "^3.8.1", 79 | "@types/node": "^20.10.3", 80 | "changelogen": "^0.5.5", 81 | "eslint": "^8.55.0", 82 | "nuxt": "latest", 83 | "vitest": "^0.33.0" 84 | }, 85 | "eslintConfig": { 86 | "root": true, 87 | "extends": [ 88 | "@nuxt/eslint-config" 89 | ], 90 | "ignorePatterns": [ 91 | "dist", 92 | "node_modules", 93 | ".github", 94 | "CHANGELOG.md", 95 | "package.json", 96 | "bun.lockb" 97 | ] 98 | } 99 | } -------------------------------------------------------------------------------- /src/module.ts: -------------------------------------------------------------------------------- 1 | import { 2 | defineNuxtModule, 3 | createResolver, 4 | installModule, 5 | addComponentsDir, 6 | addImportsSources, addImportsDir, 7 | } from "@nuxt/kit"; 8 | import { name, version } from '../package.json'; 9 | import { iconsPlugin, getIconCollections } from "@egoist/tailwindcss-icons"; 10 | import type { CollectionNames, IconsPluginOptions } from "@egoist/tailwindcss-icons"; 11 | 12 | // Module options TypeScript interface definition 13 | export interface ModuleOptions { 14 | /** 15 | * Enable auto-import of all components (like the 'ThemeToggle' component) 16 | * @default true 17 | */ 18 | injectComponents?: boolean 19 | /** 20 | * Enable auto-import of all composables 21 | * @default true 22 | */ 23 | injectComposables?: boolean 24 | /** 25 | * The icon collections to use 26 | * @default ['heroicons', 'lucide'] 27 | */ 28 | icons: CollectionNames[] | 'all' | IconsPluginOptions 29 | } 30 | 31 | export default defineNuxtModule({ 32 | meta: { 33 | name, 34 | version, 35 | configKey: 'blanked', 36 | compatibility: { 37 | nuxt: '^3.0.0' 38 | } 39 | }, 40 | // Default configuration options of the Nuxt module 41 | defaults: { 42 | icons: ['heroicons', 'lucide'], 43 | injectComponents: true, 44 | injectComposables: true 45 | }, 46 | async setup(options, nuxt) { 47 | const { resolve } = createResolver(import.meta.url); 48 | const runtimeDir = resolve('./runtime'); 49 | 50 | nuxt.options.alias['#blanked'] = runtimeDir 51 | 52 | nuxt.options.build.transpile.push(runtimeDir) 53 | 54 | // @ts-ignore 55 | nuxt.hook('tailwindcss:config', function (tailwindConfig) { 56 | tailwindConfig.plugins = tailwindConfig.plugins || [] 57 | tailwindConfig.plugins.push(iconsPlugin(Array.isArray(options.icons) ? { collections: getIconCollections(options.icons) } : typeof options.icons === 'object' ? options.icons as IconsPluginOptions : {})); 58 | }); 59 | 60 | await installModule('nuxt-icon') 61 | await installModule('@vueuse/nuxt') 62 | await installModule('@nuxt/fonts') 63 | await installModule('nuxt-headlessui') 64 | await installModule('@nuxtjs/color-mode', { classSuffix: '' }) 65 | await installModule('@nuxtjs/tailwindcss', { 66 | exposeConfig: true, 67 | config: { 68 | darkMode: 'class', 69 | content: { 70 | files: [ 71 | resolve('./runtime/components/**/*.{vue,mjs,ts}'), 72 | resolve('./runtime/*.{mjs,js,ts}') 73 | ] 74 | }, 75 | plugins: [ 76 | require('@tailwindcss/forms')({ strategy: 'class' }), 77 | require('@tailwindcss/aspect-ratio'), 78 | require('@tailwindcss/typography'), 79 | require('@tailwindcss/container-queries'), 80 | iconsPlugin(Array.isArray(options.icons) || options.icons === 'all' ? { collections: getIconCollections(options.icons) } : typeof options.icons === 'object' ? options.icons as IconsPluginOptions : {}) 81 | ], 82 | } 83 | }) 84 | addImportsSources({ 85 | from: 'vue-sonner', 86 | imports: ['toast'], 87 | }) 88 | if (options.injectComposables) { 89 | addImportsDir(resolve(runtimeDir, 'composables')) 90 | } 91 | if (options.injectComponents) { 92 | await addComponentsDir({ 93 | path: resolve(runtimeDir, 'components', 'elements'), 94 | watch: false 95 | }) 96 | } 97 | } 98 | }) 99 | -------------------------------------------------------------------------------- /src/runtime/composables/useWindowInfos.ts: -------------------------------------------------------------------------------- 1 | import { ref, onMounted, onUnmounted, type Ref } from 'vue'; 2 | 3 | const defaultBreakpoints = { 4 | xs: 576, 5 | sm: 768, 6 | md: 992, 7 | lg: 1200, 8 | xl: 1400 9 | }; 10 | 11 | type Breakpoints = { 12 | [key: string]: number; 13 | }; 14 | 15 | export interface WindowInfos { 16 | width: Ref; 17 | height: Ref; 18 | scroll: Ref<{ x: number; y: number }>; 19 | breakpoint: Ref; 20 | greaterThan: (breakpointName: string) => boolean; 21 | lessThan: (breakpointName: string) => boolean; 22 | equalTo: (breakpointName: string) => boolean; 23 | between: (min: string, max: string) => boolean; 24 | greaterThanOrEqual: (breakpointName: string) => boolean; 25 | lessThanOrEqual: (breakpointName: string) => boolean; 26 | } 27 | 28 | /** 29 | * @description Reactive size, width, height and breakpoint related to the window. 30 | * @param breakpoints 31 | * @return WindowInfos 32 | */ 33 | export function useWindowInfos(breakpoints: Breakpoints = defaultBreakpoints) { 34 | const keys = Object.keys(breakpoints).reverse(); 35 | const values = Object.values(breakpoints).reverse(); 36 | 37 | const getBreakpoint = (width: number) => { 38 | const index = values.findIndex(value => width >= value); 39 | return index !== -1 ? keys[index] : keys[keys.length - 1]; 40 | }; 41 | 42 | const width = ref(0); 43 | const height = ref(0); 44 | const scroll = ref({ x: 0, y: 0 }); 45 | const breakpoint = ref(getBreakpoint(width.value)); 46 | 47 | const handleResize = () => { 48 | width.value = window.innerWidth; 49 | height.value = window.innerHeight; 50 | breakpoint.value = getBreakpoint(width.value); 51 | }; 52 | 53 | onMounted(() => { 54 | handleResize(); 55 | window.addEventListener('resize', handleResize); 56 | window.addEventListener('scroll', () => { 57 | scroll.value = { x: window.scrollX, y: window.scrollY }; 58 | }); 59 | }); 60 | 61 | onUnmounted(() => { 62 | window.removeEventListener('resize', handleResize); 63 | window.removeEventListener('scroll', () => { 64 | scroll.value = { x: window.scrollX, y: window.scrollY }; 65 | }); 66 | }); 67 | 68 | const greaterThan = (breakpointName: string) => { 69 | const breakpointIndex = keys.indexOf(breakpointName); 70 | return breakpointIndex > -1 ? values[breakpointIndex] <= width.value : false; 71 | } 72 | 73 | const lessThan = (breakpointName: string) => { 74 | const breakpointIndex = keys.indexOf(breakpointName); 75 | return breakpointIndex > -1 ? values[breakpointIndex] > width.value : false; 76 | } 77 | 78 | const equalTo = (breakpointName: string) => { 79 | return breakpoint.value === breakpointName; 80 | } 81 | 82 | const between = (min: string, max: string) => { 83 | return greaterThan(min) && lessThan(max); 84 | } 85 | 86 | const greaterThanOrEqual = (breakpointName: string) => { 87 | return greaterThan(breakpointName) || equalTo(breakpointName); 88 | } 89 | 90 | const lessThanOrEqual = (breakpointName: string) => { 91 | return lessThan(breakpointName) || equalTo(breakpointName); 92 | } 93 | 94 | return { 95 | width, 96 | height, 97 | scroll, 98 | breakpoint, 99 | greaterThan, 100 | lessThan, 101 | equalTo, 102 | between, 103 | greaterThanOrEqual, 104 | lessThanOrEqual 105 | }; 106 | } 107 | -------------------------------------------------------------------------------- /src/runtime/components/elements/Modal.vue: -------------------------------------------------------------------------------- 1 | 34 | 35 | 90 | 91 | 132 | -------------------------------------------------------------------------------- /src/runtime/components/elements/Tooltip.vue: -------------------------------------------------------------------------------- 1 | 88 | 89 | 122 | 123 | 134 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![blanked-social-preview.png](blanked-social-preview.png) 2 | 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |

14 | 15 | Blanked is a Nuxt module to improve your Nuxt workflow. It's a simple module to add everything you need to your Nuxt app, including: 16 | - [TailwindCSS](https://tailwindcss.com/), the only CSS framework you need 17 | - Color Mode, add a color mode switcher to your app (dark/light or custom) 18 | - VueUse composables, add every composables from [VueUse](https://vueuse.org/) 19 | - Icons, add every icons from your favorite icon pack (Heroicons and Lucide are pre-installed) 20 | - Toasts, using the amazing [Vue Sonner](https://vue-sonner.vercel.app/) 21 | - Tooltip and other floating stuff from [Floating UI](https://floating-ui.com/) 22 | - Plug and play custom web font optimization and configuration from all major providers with [Nuxt Fonts](https://github.com/nuxt/fonts) 23 | 24 | From 25 | ```json 26 | { 27 | "name": "new-blanked-project", 28 | "private": true, 29 | "type": "module", 30 | "scripts": { 31 | "dev": "nuxi dev", 32 | "build": "nuxi build", 33 | "generate": "nuxi generate" 34 | }, 35 | "devDependencies": { 36 | "nuxt": "latest", 37 | "@nuxtjs/color-mode": "latest", 38 | "@nuxtjs/tailwindcss": "latest", 39 | "@nuxt/fonts": "latest", 40 | "@tailwindcss/aspect-ratio": "^0.4.2", 41 | "@tailwindcss/container-queries": "^0.1.1", 42 | "@tailwindcss/forms": "^0.5.7", 43 | "@tailwindcss/typography": "^0.5.10", 44 | "@egoist/tailwindcss-icons": "^1.7.2", 45 | "@iconify-json/heroicons": "^1.1.19", 46 | "@iconify-json/lucide": "^1.1.154", 47 | "tailwindcss": "^3.4.1", 48 | "nuxt-icon": "^0.6.8", 49 | "vue-sonner": "^1.0.3", 50 | "@vueuse/nuxt": "^1.0.0", 51 | "@floating-ui/vue": "^1.0.6" 52 | } 53 | } 54 | ``` 55 | 56 | To 57 | ```json 58 | { 59 | "name": "new-blanked-project", 60 | "private": true, 61 | "type": "module", 62 | "scripts": { 63 | "dev": "nuxi dev", 64 | "build": "nuxi build", 65 | "generate": "nuxi generate" 66 | }, 67 | "devDependencies": { 68 | "nuxt": "latest", 69 | "blanked": "latest" 70 | } 71 | } 72 | ``` 73 | 74 | ## Quick Setup 75 | 76 | To get started, follow these steps: 77 | 78 | 1. Add `blanked` dependency to your project 79 | 80 | ```bash 81 | # Using bun 82 | bun install -D blanked 83 | 84 | # Using pnpm 85 | pnpm add -D blanked 86 | 87 | # Using yarn 88 | yarn add --dev blanked 89 | 90 | # Using npm 91 | npm install --save-dev blanked 92 | ``` 93 | 94 | 2. Add `blanked` to the `modules` section of `nuxt.config.ts` 95 | 96 | ```js 97 | export default defineNuxtConfig({ 98 | modules: [ 99 | 'blanked' 100 | ] 101 | }) 102 | ``` 103 | 104 | Thanks to @egoist/tailwindcss-icons plugin, only the icons you use in your app will be bundled in your CSS. However, you need to install the icon collections you specified in the blanked.icons key: 105 | 106 | ```bash 107 | bun i -D @iconify-json/{collection_name} 108 | ``` 109 | 110 | ### Toasts 111 | 112 | To use the toast component, you need to add the `` component in your app. You can add it in your `layouts/default.vue` or `app.vue` file for example. 113 | To render the toasts, you need to use the `toast()` function. 114 | For more information, check the [Vue Sonner](https://vue-sonner.vercel.app/) documentation. 115 | 116 | That's it! You can now use Blanked in your Nuxt app ✨ 117 | 118 | ## Authors 119 | 120 | **Blanked Module** 121 | 122 | - Hugo Richard ([@HugoRCD__](https://x.com/HugoRCD__)) 123 | - Johann Cavallucci ([@JohannCavallucci](https://github.com/cavalluccijohann)) 124 | 125 | ## Thanks 126 | 127 | This module is heavily inspired by the NuxtUI module, which embeds TailwindCSS, Color Mode and Icons in your Nuxt app. However, I wanted to make a module to start a Nuxt project without the components, etc... 128 | 129 | -------------------------------------------------------------------------------- /playground/app.vue: -------------------------------------------------------------------------------- 1 | 44 | 45 | 139 | 140 | 149 | -------------------------------------------------------------------------------- /docs/pages/index.vue: -------------------------------------------------------------------------------- 1 | 45 | 46 | 145 | 146 | 149 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | 2 | ## v0.0.23 3 | 4 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.22...v0.0.23) 5 | 6 | ### 🏡 Chore 7 | 8 | - **release:** V0.0.22 ([18d94ae](https://github.com/HugoRCD/blanked/commit/18d94ae)) 9 | 10 | ### ❤️ Contributors 11 | 12 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 13 | 14 | ## v0.0.22 15 | 16 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.21...v0.0.22) 17 | 18 | ### 🩹 Fixes 19 | 20 | - Import bug ([2b79885](https://github.com/HugoRCD/blanked/commit/2b79885)) 21 | 22 | ### 🏡 Chore 23 | 24 | - **release:** V0.0.21 ([f46309b](https://github.com/HugoRCD/blanked/commit/f46309b)) 25 | 26 | ### ❤️ Contributors 27 | 28 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 29 | 30 | ## v0.0.21 31 | 32 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.20...v0.0.21) 33 | 34 | ### 💅 Refactors 35 | 36 | - Remove unecessary css file ([81bd7b5](https://github.com/HugoRCD/blanked/commit/81bd7b5)) 37 | 38 | ### 🏡 Chore 39 | 40 | - **release:** V0.0.20 ([a1c8b92](https://github.com/HugoRCD/blanked/commit/a1c8b92)) 41 | 42 | ### ❤️ Contributors 43 | 44 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 45 | 46 | ## v0.0.20 47 | 48 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.19...v0.0.20) 49 | 50 | ### 🚀 Enhancements 51 | 52 | - Add functionality to open dialog on button click ([96b601a](https://github.com/HugoRCD/blanked/commit/96b601a)) 53 | 54 | ### ❤️ Contributors 55 | 56 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 57 | 58 | ## v0.0.19 59 | 60 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.18...v0.0.19) 61 | 62 | ### 🩹 Fixes 63 | 64 | - Lint issues ([4193a01](https://github.com/HugoRCD/blanked/commit/4193a01)) 65 | 66 | ### 🏡 Chore 67 | 68 | - **release:** V0.0.18 ([cf893a1](https://github.com/HugoRCD/blanked/commit/cf893a1)) 69 | 70 | ### ❤️ Contributors 71 | 72 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 73 | 74 | ## v0.0.18 75 | 76 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.17...v0.0.18) 77 | 78 | ### 🚀 Enhancements 79 | 80 | - Add Sidebar component and functionality ([e0e8f59](https://github.com/HugoRCD/blanked/commit/e0e8f59)) 81 | 82 | ### 💅 Refactors 83 | 84 | - Some ci update ([37560f3](https://github.com/HugoRCD/blanked/commit/37560f3)) 85 | 86 | ### ❤️ Contributors 87 | 88 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 89 | 90 | ## v0.0.17 91 | 92 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.16...v0.0.17) 93 | 94 | ### 🚀 Enhancements 95 | 96 | - Add autofix workflow and semantic PR title validation ([67fa2d9](https://github.com/HugoRCD/blanked/commit/67fa2d9)) 97 | - Update autofix workflow and lint-staged configuration ([2a5026d](https://github.com/HugoRCD/blanked/commit/2a5026d)) 98 | - Add eslint config to package.json ([5b9c35c](https://github.com/HugoRCD/blanked/commit/5b9c35c)) 99 | 100 | ### 🩹 Fixes 101 | 102 | - Update linting configuration ([f1325a5](https://github.com/HugoRCD/blanked/commit/f1325a5)) 103 | 104 | ### 💅 Refactors 105 | 106 | - Remove unnecessary files and update test scripts ([8b50547](https://github.com/HugoRCD/blanked/commit/8b50547)) 107 | 108 | ### 🤖 CI 109 | 110 | - Update PR config ([3496f60](https://github.com/HugoRCD/blanked/commit/3496f60)) 111 | 112 | ### ❤️ Contributors 113 | 114 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 115 | 116 | ## v0.0.16 117 | 118 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.16...v0.0.16) 119 | 120 | ### 🚀 Enhancements 121 | 122 | - Add autofix workflow and semantic PR title validation ([67fa2d9](https://github.com/HugoRCD/blanked/commit/67fa2d9)) 123 | - Update autofix workflow and lint-staged configuration ([2a5026d](https://github.com/HugoRCD/blanked/commit/2a5026d)) 124 | 125 | ### 🩹 Fixes 126 | 127 | - Update linting configuration ([f1325a5](https://github.com/HugoRCD/blanked/commit/f1325a5)) 128 | 129 | ### 💅 Refactors 130 | 131 | - Remove unnecessary files and update test scripts ([8b50547](https://github.com/HugoRCD/blanked/commit/8b50547)) 132 | 133 | ### 🤖 CI 134 | 135 | - Update PR config ([3496f60](https://github.com/HugoRCD/blanked/commit/3496f60)) 136 | 137 | ### ❤️ Contributors 138 | 139 | - HugoRCD 140 | 141 | ## v0.0.16 142 | 143 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.15...v0.0.16) 144 | 145 | ### 🚀 Enhancements 146 | 147 | - Add Dialog component ([5552211](https://github.com/HugoRCD/blanked/commit/5552211)) 148 | 149 | ### 🏡 Chore 150 | 151 | - **release:** V0.0.15 ([74c74b9](https://github.com/HugoRCD/blanked/commit/74c74b9)) 152 | - **release:** V0.0.16 ([d317ea1](https://github.com/HugoRCD/blanked/commit/d317ea1)) 153 | 154 | ### ❤️ Contributors 155 | 156 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 157 | 158 | ## v0.0.16 159 | 160 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.15...v0.0.16) 161 | 162 | ### 🚀 Enhancements 163 | 164 | - Add Dialog component ([5552211](https://github.com/HugoRCD/blanked/commit/5552211)) 165 | 166 | ### 🏡 Chore 167 | 168 | - **release:** V0.0.15 ([74c74b9](https://github.com/HugoRCD/blanked/commit/74c74b9)) 169 | 170 | ### ❤️ Contributors 171 | 172 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 173 | 174 | ## v0.0.15 175 | 176 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.14...v0.0.15) 177 | 178 | ### 🏡 Chore 179 | 180 | - **release:** V0.0.14 ([cf6cd73](https://github.com/HugoRCD/blanked/commit/cf6cd73)) 181 | 182 | ### ❤️ Contributors 183 | 184 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 185 | 186 | ## v0.0.14 187 | 188 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.13...v0.0.14) 189 | 190 | ### 🚀 Enhancements 191 | 192 | - Add issue templates for bug reports, feature requests, and questions ([3735ce0](https://github.com/HugoRCD/blanked/commit/3735ce0)) 193 | 194 | ### ❤️ Contributors 195 | 196 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 197 | 198 | ## v0.0.13 199 | 200 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.12...v0.0.13) 201 | 202 | ### 🚀 Enhancements 203 | 204 | - Add @floating-ui/vue package and Tooltip component ([11fa433](https://github.com/HugoRCD/blanked/commit/11fa433)) 205 | - **tooltip:** Add customizable trigger and tooltip classes ([c35ee1e](https://github.com/HugoRCD/blanked/commit/c35ee1e)) 206 | 207 | ### 🏡 Chore 208 | 209 | - **release:** V0.0.12 ([f6bb01b](https://github.com/HugoRCD/blanked/commit/f6bb01b)) 210 | 211 | ### ❤️ Contributors 212 | 213 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 214 | 215 | ## v0.0.12 216 | 217 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.11...v0.0.12) 218 | 219 | ### 🚀 Enhancements 220 | 221 | - Add @vueuse/nuxt and useWindowSize composable ([25083fb](https://github.com/HugoRCD/blanked/commit/25083fb)) 222 | 223 | ### ❤️ Contributors 224 | 225 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 226 | 227 | ## v0.0.11 228 | 229 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.10...v0.0.11) 230 | 231 | ### 🚀 Enhancements 232 | 233 | - Add useMouseInElement and useWindowInfos composable ([9307702](https://github.com/HugoRCD/blanked/commit/9307702)) 234 | - Add window width and height display ([a4d69d9](https://github.com/HugoRCD/blanked/commit/a4d69d9)) 235 | 236 | ### 🏡 Chore 237 | 238 | - **release:** V0.0.10 ([2c904c5](https://github.com/HugoRCD/blanked/commit/2c904c5)) 239 | 240 | ### ❤️ Contributors 241 | 242 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 243 | 244 | ## v0.0.10 245 | 246 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.9...v0.0.10) 247 | 248 | ### 🚀 Enhancements 249 | 250 | - Add reactive mouse position detection ([7ff5c85](https://github.com/HugoRCD/blanked/commit/7ff5c85)) 251 | 252 | ### 🏡 Chore 253 | 254 | - **release:** V0.0.9 ([15af784](https://github.com/HugoRCD/blanked/commit/15af784)) 255 | 256 | ### ❤️ Contributors 257 | 258 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 259 | 260 | ## v0.0.9 261 | 262 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.8...v0.0.9) 263 | 264 | ### 🚀 Enhancements 265 | 266 | - Add new composables for breakpoint detection, click element, element size, mouse position, and window size ([78466bd](https://github.com/HugoRCD/blanked/commit/78466bd)) 267 | 268 | ### ❤️ Contributors 269 | 270 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 271 | 272 | ## v0.0.8 273 | 274 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.7...v0.0.8) 275 | 276 | ### 🏡 Chore 277 | 278 | - Use template for twConfig ([ef2388c](https://github.com/HugoRCD/blanked/commit/ef2388c)) 279 | 280 | ### ❤️ Contributors 281 | 282 | - Inesh Bose 283 | 284 | ## v0.0.7 285 | 286 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.6...v0.0.7) 287 | 288 | ## v0.0.6 289 | 290 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.5...v0.0.6) 291 | 292 | ## v0.0.5 293 | 294 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.4...v0.0.5) 295 | 296 | ### 🏡 Chore 297 | 298 | - **release:** V0.0.3 ([2dc88be](https://github.com/HugoRCD/blanked/commit/2dc88be)) 299 | - **release:** V0.0.4 ([29ffa10](https://github.com/HugoRCD/blanked/commit/29ffa10)) 300 | 301 | ### ❤️ Contributors 302 | 303 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 304 | 305 | ## v0.0.4 306 | 307 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.4...v0.0.4) 308 | 309 | ### 🏡 Chore 310 | 311 | - **release:** V0.0.3 ([2dc88be](https://github.com/HugoRCD/blanked/commit/2dc88be)) 312 | 313 | ### ❤️ Contributors 314 | 315 | - HugoRCD ([@HugoRCD](http://github.com/HugoRCD)) 316 | 317 | ## v0.0.3 318 | 319 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.4...v0.0.3) 320 | 321 | ## v0.0.2 322 | 323 | [compare changes](https://github.com/HugoRCD/blanked/compare/v0.0.1...v0.0.2) 324 | 325 | ## v0.0.1 326 | 327 | --------------------------------------------------------------------------------