diff --git a/.vitepress/config.ts b/.vitepress/config.ts index 96a0f8d5..10896826 100644 --- a/.vitepress/config.ts +++ b/.vitepress/config.ts @@ -772,7 +772,6 @@ export default defineConfigWithTheme({ markdown: { theme: 'github-dark', config(md) { - // @ts-expect-error - broken type output in vitepress md.use(headerPlugin) // .use(textAdPlugin) } diff --git a/.vscode/settings.json b/.vscode/settings.json index 54853bef..ffc6a287 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,7 @@ { "nuxt.isNuxtApp": false, "cSpell.words": [ + "vitepress", "آبجکت", "آبجکتی", "آپشن", @@ -56,4 +57,4 @@ "ماژولار", "وبسایت" ] -} \ No newline at end of file +} diff --git a/package.json b/package.json index 04a690de..d742fe77 100644 --- a/package.json +++ b/package.json @@ -11,20 +11,20 @@ "type": "vue-tsc --noEmit" }, "dependencies": { - "@vue/repl": "^4.1.2", + "@vue/repl": "^4.2.1", "@vue/theme": "^2.2.12", "dynamics.js": "^1.1.5", "gsap": "^3.12.5", - "vitepress": "^1.2.2", + "vitepress": "^1.2.3", "vue": "^3.4.27" }, "devDependencies": { "@types/body-scroll-lock": "^3.1.2", "@types/markdown-it": "^14.1.1", - "@types/node": "^20.12.12", + "@types/node": "^20.14.1", "terser": "^5.31.0", "typescript": "^5.4.5", "vue-tsc": "^2.0.19" }, - "packageManager": "pnpm@9.1.2" + "packageManager": "pnpm@9.1.4" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4b449074..a24b1f2e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,11 +6,11 @@ settings: dependencies: '@vue/repl': - specifier: ^4.1.2 - version: 4.1.2 + specifier: ^4.2.1 + version: 4.2.1 '@vue/theme': specifier: ^2.2.12 - version: 2.2.12(@algolia/client-search@4.19.1)(search-insights@2.13.0)(vitepress@1.2.2)(vue@3.4.27) + version: 2.2.12(@algolia/client-search@4.19.1)(search-insights@2.13.0)(vitepress@1.2.3)(vue@3.4.27) dynamics.js: specifier: ^1.1.5 version: 1.1.5 @@ -18,8 +18,8 @@ dependencies: specifier: ^3.12.5 version: 3.12.5 vitepress: - specifier: ^1.2.2 - version: 1.2.2(@algolia/client-search@4.19.1)(@types/node@20.12.12)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5) + specifier: ^1.2.3 + version: 1.2.3(@algolia/client-search@4.19.1)(@types/node@20.14.2)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5) vue: specifier: ^3.4.27 version: 3.4.27(typescript@5.4.5) @@ -32,8 +32,8 @@ devDependencies: specifier: ^14.1.1 version: 14.1.1 '@types/node': - specifier: ^20.12.12 - version: 20.12.12 + specifier: ^20.14.1 + version: 20.14.2 terser: specifier: ^5.31.0 version: 5.31.0 @@ -624,14 +624,14 @@ packages: dev: false optional: true - /@shikijs/core@1.6.0: - resolution: {integrity: sha512-NIEAi5U5R7BLkbW1pG/ZKu3eb1lzc3/+jD0lFsuxMT7zjaf9bbNwdNyMr7zh/Zl8EXQtQ+MYBAt5G+JLu+5DlA==} + /@shikijs/core@1.6.2: + resolution: {integrity: sha512-guW5JeDzZ7uwOjTfCOFZ2VtVXk5tmkMzBYbKGfXsmAH1qYOej49L5jQDcGmwd6/OgvpmWhzO2GNJkQIFnbwLPQ==} dev: false - /@shikijs/transformers@1.6.0: - resolution: {integrity: sha512-qGfHe1ECiqfE2STPWvfogIj/9Q0SK+MCRJdoITkW7AmFuB7DmbFnBT2US84+zklJOB51MzNO8RUXZiauWssJlQ==} + /@shikijs/transformers@1.6.2: + resolution: {integrity: sha512-ndqTWyHnxmsLkowhKWTam26opw8hg5a34y6FAUG/Xf6E49n3MM//nenKxXiWpPYkNPl1KZnYXB1k+Ia46wjOZg==} dependencies: - shiki: 1.6.0 + shiki: 1.6.2 dev: false /@types/body-scroll-lock@3.1.2: @@ -654,8 +654,8 @@ packages: /@types/mdurl@2.0.0: resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} - /@types/node@20.12.12: - resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} + /@types/node@20.14.2: + resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==} dependencies: undici-types: 5.26.5 @@ -663,14 +663,14 @@ packages: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} dev: false - /@vitejs/plugin-vue@5.0.4(vite@5.2.11)(vue@3.4.27): - resolution: {integrity: sha512-WS3hevEszI6CEVEx28F8RjTX97k3KsrcY6kvTg7+Whm5y3oYvcqzVeGCU3hxSAn4uY2CLCkeokkGKpoctccilQ==} + /@vitejs/plugin-vue@5.0.5(vite@5.2.12)(vue@3.4.27): + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.2.11(@types/node@20.12.12)(terser@5.31.0) + vite: 5.2.12(@types/node@20.14.2)(terser@5.31.0) vue: 3.4.27(typescript@5.4.5) dev: false @@ -799,8 +799,8 @@ packages: '@vue/shared': 3.4.27 dev: false - /@vue/repl@4.1.2: - resolution: {integrity: sha512-h5JQ5NRN9HOCNfE4QCbZsFgAFS7/A21V3zrltxV2Uag1JIvtQb68qfmj795CPFjMBnRNpCddOBi34AKlq5yHbg==} + /@vue/repl@4.2.1: + resolution: {integrity: sha512-kPpoAp0hQ1sKIGXEHtVdtdh2BgL97SAizEvCqRDB3LmgIYCPbzInwd4mqYkHstAhJPmkNslLd3rwfceMwzwinQ==} dev: false /@vue/runtime-core@3.4.27: @@ -836,7 +836,7 @@ packages: resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} dev: false - /@vue/theme@2.2.12(@algolia/client-search@4.19.1)(search-insights@2.13.0)(vitepress@1.2.2)(vue@3.4.27): + /@vue/theme@2.2.12(@algolia/client-search@4.19.1)(search-insights@2.13.0)(vitepress@1.2.3)(vue@3.4.27): resolution: {integrity: sha512-LR2cf3c6rKLW2UbDwPZ3cTsjdlI9RNl8WpU7T9tMKkzEfdKfkHf0aazv877iNLMqNvIVr9EY/8KdEAe8HRDcBQ==} peerDependencies: vitepress: ^1.2.2 @@ -847,7 +847,7 @@ packages: body-scroll-lock: 4.0.0-beta.0 normalize.css: 8.0.1 tiny-decode: 0.1.3 - vitepress: 1.2.2(@algolia/client-search@4.19.1)(@types/node@20.12.12)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5) + vitepress: 1.2.3(@algolia/client-search@4.19.1)(@types/node@20.14.2)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5) transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -858,6 +858,18 @@ packages: - vue dev: false + /@vueuse/core@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==} + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.10.0 + '@vueuse/shared': 10.10.0(vue@3.4.27) + vue-demi: 0.14.7(vue@3.4.27) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@vueuse/core@10.9.0(vue@3.4.27): resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} dependencies: @@ -870,8 +882,8 @@ packages: - vue dev: false - /@vueuse/integrations@10.9.0(focus-trap@7.5.4)(vue@3.4.27): - resolution: {integrity: sha512-acK+A01AYdWSvL4BZmCoJAcyHJ6EqhmkQEXbQLwev1MY7NBnS+hcEMx/BzVoR9zKI+UqEPMD9u6PsyAuiTRT4Q==} + /@vueuse/integrations@10.10.0(focus-trap@7.5.4)(vue@3.4.27): + resolution: {integrity: sha512-vHGeK7X6mkdkpcm1eE9t3Cpm21pNVfZRwrjwwbrEs9XftnSgszF4831G2rei8Dt9cIYJIfFV+iyx/29muimJPQ==} peerDependencies: async-validator: '*' axios: '*' @@ -911,8 +923,8 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.9.0(vue@3.4.27) - '@vueuse/shared': 10.9.0(vue@3.4.27) + '@vueuse/core': 10.10.0(vue@3.4.27) + '@vueuse/shared': 10.10.0(vue@3.4.27) focus-trap: 7.5.4 vue-demi: 0.14.7(vue@3.4.27) transitivePeerDependencies: @@ -920,10 +932,23 @@ packages: - vue dev: false + /@vueuse/metadata@10.10.0: + resolution: {integrity: sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==} + dev: false + /@vueuse/metadata@10.9.0: resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} dev: false + /@vueuse/shared@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==} + dependencies: + vue-demi: 0.14.7(vue@3.4.27) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + dev: false + /@vueuse/shared@10.9.0(vue@3.4.27): resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} dependencies: @@ -1162,10 +1187,10 @@ packages: hasBin: true dev: true - /shiki@1.6.0: - resolution: {integrity: sha512-P31ROeXcVgW/k3Z+vUUErcxoTah7ZRaimctOpzGuqAntqnnSmx1HOsvnbAB8Z2qfXPRhw61yptAzCsuKOhTHwQ==} + /shiki@1.6.2: + resolution: {integrity: sha512-X3hSm5GzzBd/BmPmGfkueOUADLyBoZo1ojYQXhd+NU2VJn458yt4duaS0rVzC+WtqftSV7mTVvDw+OB9AHi3Eg==} dependencies: - '@shikijs/core': 1.6.0 + '@shikijs/core': 1.6.2 dev: false /source-map-js@1.0.2: @@ -1225,8 +1250,8 @@ packages: /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - /vite@5.2.11(@types/node@20.12.12)(terser@5.31.0): - resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} + /vite@5.2.12(@types/node@20.14.2)(terser@5.31.0): + resolution: {integrity: sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==} engines: {node: ^18.0.0 || >=20.0.0} hasBin: true peerDependencies: @@ -1253,7 +1278,7 @@ packages: terser: optional: true dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.2 esbuild: 0.20.2 postcss: 8.4.38 rollup: 4.17.2 @@ -1262,8 +1287,8 @@ packages: fsevents: 2.3.3 dev: false - /vitepress@1.2.2(@algolia/client-search@4.19.1)(@types/node@20.12.12)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5): - resolution: {integrity: sha512-uZ3nXR5NY4nYj3RJWCo5jev9qlNZAQo5SUXu1U0QSUx84cUm/o7hCTDVjZ4njVSVui+PsV1oAbdQOg8ygbaf4w==} + /vitepress@1.2.3(@algolia/client-search@4.19.1)(@types/node@20.14.2)(search-insights@2.13.0)(terser@5.31.0)(typescript@5.4.5): + resolution: {integrity: sha512-GvEsrEeNLiDE1+fuwDAYJCYLNZDAna+EtnXlPajhv/MYeTjbNK6Bvyg6NoTdO1sbwuQJ0vuJR99bOlH53bo6lg==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4 @@ -1276,19 +1301,19 @@ packages: dependencies: '@docsearch/css': 3.6.0 '@docsearch/js': 3.6.0(@algolia/client-search@4.19.1)(search-insights@2.13.0) - '@shikijs/core': 1.6.0 - '@shikijs/transformers': 1.6.0 + '@shikijs/core': 1.6.2 + '@shikijs/transformers': 1.6.2 '@types/markdown-it': 14.1.1 - '@vitejs/plugin-vue': 5.0.4(vite@5.2.11)(vue@3.4.27) + '@vitejs/plugin-vue': 5.0.5(vite@5.2.12)(vue@3.4.27) '@vue/devtools-api': 7.2.1(vue@3.4.27) '@vue/shared': 3.4.27 - '@vueuse/core': 10.9.0(vue@3.4.27) - '@vueuse/integrations': 10.9.0(focus-trap@7.5.4)(vue@3.4.27) + '@vueuse/core': 10.10.0(vue@3.4.27) + '@vueuse/integrations': 10.10.0(focus-trap@7.5.4)(vue@3.4.27) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - shiki: 1.6.0 - vite: 5.2.11(@types/node@20.12.12)(terser@5.31.0) + shiki: 1.6.2 + vite: 5.2.12(@types/node@20.14.2)(terser@5.31.0) vue: 3.4.27(typescript@5.4.5) transitivePeerDependencies: - '@algolia/client-search' diff --git a/src/ecosystem/themes/ThemeListItem.vue b/src/ecosystem/themes/ThemeListItem.vue index d39feef9..f6dc3d7f 100644 --- a/src/ecosystem/themes/ThemeListItem.vue +++ b/src/ecosystem/themes/ThemeListItem.vue @@ -11,7 +11,7 @@ const description = computed(() => { // replace markdown link to html tag. // [name](https://...) -> name return props.provider.description.replace( - /\[([^\]]+)\]\(([^\)]+)\)/, + /\[([^\]]+)\]\(([^\)]+)\)/g, '$1' ) }) diff --git a/src/ecosystem/themes/themes.json b/src/ecosystem/themes/themes.json index 45ddb280..0061d2d2 100644 --- a/src/ecosystem/themes/themes.json +++ b/src/ecosystem/themes/themes.json @@ -245,53 +245,101 @@ ] }, { - "name": "CodedThemes", - "description": "Explore Vue.js admin dashboard templates crafted with developers in mind by our partners at [CodedThemes](https://codedthemes.com). Download now to expedite the development of your real-time web applications, saving you countless hours in design and development.", - "seeMoreUrl": "https://codedthemes.com/item/category/templates/vue-template/", - "products": [ - { - "name": "Free Berry Vuetify VueJs Admin Template", - "price": 0, - "description": "Free & Open Source VueJs Admin Template with well known desing of Berry", - "url": "https://codedthemes.com/item/berry-free-vuetify-vuejs-admin-template/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Berry-free-vue.png" - }, - { - "name": "Berry Vue3 Admin Dashboard", - "price": 49, - "description": "Discover our visually captivating Vue 3 Dashboard Theme!", - "url": "https://codedthemes.com/item/berry-vue-admin-dashboard/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Berry-pro-vue.png" - }, - { - "name": "Mantis Vue3 Admin Dashboard", - "price": 49, - "description": "Simple yet rebust to start any development with latest VueJs and Vuetify", - "url": "https://codedthemes.com/item/mantis-vue-admin-template/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Mantis-pro-vue.png" - }, - { - "name": "Free Mantis Vuetify VueJs Admin Template", - "price": 0, - "description": "Free Vuetify Dashboard Template with simplest design and code", - "url": "https://codedthemes.com/item/mantis-free-vuetify-vuejs-admin-template/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Mantis-free-vue.png" - }, - { - "name": "Free Able Pro VueJs", - "price": 0, - "description": "Free & Open Source Able pro VueJs Admin Template", - "url": "https://codedthemes.com/item/able-pro-free-vuejs-admin-dashboard/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-free-vue.png" - }, - { - "name": "Able Pro Vue3 + Vuetify Dashboard", - "price": 11, - "description": "Vue3 + Vite + Vuetify + Typescript", - "url": "https://codedthemes.com/item/able-pro-vuejs-admin-dashboard/?ref=evan.vuejs", - "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-pro-vue.png" - } - ] -} - -] + "name": "CodedThemes", + "description": "Explore Vue.js admin dashboard templates crafted with developers in mind by our partners at [CodedThemes](https://codedthemes.com). Download now to expedite the development of your real-time web applications, saving you countless hours in design and development.", + "seeMoreUrl": "https://codedthemes.com/item/category/templates/vue-template/", + "products": [ + { + "name": "Free Berry Vuetify VueJs Admin Template", + "price": 0, + "description": "Free & Open Source VueJs Admin Template with well known desing of Berry", + "url": "https://codedthemes.com/item/berry-free-vuetify-vuejs-admin-template/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Berry-free-vue.png" + }, + { + "name": "Berry Vue3 Admin Dashboard", + "price": 49, + "description": "Discover our visually captivating Vue 3 Dashboard Theme!", + "url": "https://codedthemes.com/item/berry-vue-admin-dashboard/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Berry-pro-vue.png" + }, + { + "name": "Mantis Vue3 Admin Dashboard", + "price": 49, + "description": "Simple yet rebust to start any development with latest VueJs and Vuetify", + "url": "https://codedthemes.com/item/mantis-vue-admin-template/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Mantis-pro-vue.png" + }, + { + "name": "Free Mantis Vuetify VueJs Admin Template", + "price": 0, + "description": "Free Vuetify Dashboard Template with simplest design and code", + "url": "https://codedthemes.com/item/mantis-free-vuetify-vuejs-admin-template/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Mantis-free-vue.png" + }, + { + "name": "Free Able Pro VueJs", + "price": 0, + "description": "Free & Open Source Able pro VueJs Admin Template", + "url": "https://codedthemes.com/item/able-pro-free-vuejs-admin-dashboard/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-free-vue.png" + }, + { + "name": "Able Pro Vue3 + Vuetify Dashboard", + "price": 11, + "description": "Vue3 + Vite + Vuetify + Typescript", + "url": "https://codedthemes.com/item/able-pro-vuejs-admin-dashboard/?ref=evan.vuejs", + "image": "https://org-public-assets.s3.us-west-2.amazonaws.com/Banners/Able+pro-pro-vue.png" + } + ] + }, + { + "name": "ThemeSelection", + "description": "Check out the admin [dashboard templates](https://themeselection.com/item/category/admin-templates/?ref=14) built by our partners from ThemeSelection.\n\nThey provide production-ready and highly customizable Free & Premium [Vue Admin Template](https://themeselection.com/item/category/vuejs-admin-templates/?ref=14), Vue + Laravel & NuxtJS Admin Templates to build modern web applications in no time!", + "seeMoreUrl": "https://themeselection.com/item/category/vuejs-admin-templates/?ref=14", + "products": [ + { + "name": "Materio - Vue Admin Template", + "price": 0, + "description": "Free & Open Source VueJS Admin inspired by Material Design", + "url": "https://themeselection.com/item/materio-free-vuetify-vuejs-admin-template/?ref=14", + "image": "https://cdn.themeselection.com/ts-assets/materio/materio-vuetify-vuejs-admin-template-free/banner/banner.png" + }, + { + "name": "Materio - Vue Admin Template", + "price": 69, + "description": "Most Powerful & Comprehensive VueJS Admin built for developers", + "url": "https://themeselection.com/item/materio-vuetify-vuejs-admin-template/?ref=14", + "image": "https://cdn.themeselection.com/ts-assets/materio/materio-vuetify-vuejs-admin-template/banner/banner.png" + }, + { + "name": "Sneat - Vue Laravel Admin", + "price": 0, + "description": "Free & Open Source VueJS Laravel Admin using Sneat Design System", + "url": "https://themeselection.com/item/sneat-free-vuetify-vuejs-laravel-admin-template/ref=14", + "image": "https://cdn.themeselection.com/ts-assets/sneat/sneat-vuetify-vuejs-laravel-admin-template-free/banner/banner.png" + }, + { + "name": "Sneat - Vue Laravel Admin", + "price": 79, + "description": "Production Ready, Carefully Crafted VueJS Laravel Dashboard", + "url": "https://themeselection.com/item/sneat-vuetify-vuejs-laravel-admin-template/?ref=14", + "image": "https://cdn.themeselection.com/ts-assets/sneat/sneat-vuetify-vuejs-laravel-admin-template/banner/banner.png" + }, + { + "name": "Materio - NuxtJS Dashboard", + "price": 0, + "description": "Free & Open Source NuxtJS Admin inspired by Material Design", + "url": "https://themeselection.com/item/materio-free-vuetify-nuxtjs-admin-template/?ref=14", + "image": "https://cdn.themeselection.com/ts-assets/materio/materio-vuetify-nuxtjs-admin-template-free/banner/banner.png" + }, + { + "name": "Materio - NuxtJS Dashboard", + "price": 79, + "description": "Incredibly versatile, flexible and powerful NuxtJS Admin Template", + "url": "https://themeselection.com/item/materio-vuetify-nuxtjs-admin-template/?ref=14", + "image": "https://cdn.themeselection.com/ts-assets/materio/materio-vuetify-nuxtjs-admin-template/banner/banner.png" + } + ] + } +] \ No newline at end of file diff --git a/src/guide/extras/composition-api-faq.md b/src/guide/extras/composition-api-faq.md index 5dbe591a..847e3c49 100644 --- a/src/guide/extras/composition-api-faq.md +++ b/src/guide/extras/composition-api-faq.md @@ -146,6 +146,8 @@ Composition API همان سطح از قابلیت‌های ترکیب logic هو - مشکل کلوژر کهنه، در ترکیب با ویژگی‌های همزمان، باعث می‌شود استدلال در مورد زمان اجرای یک قطعه کد هوک دشوار شود و کار با state قابل تغییری که باید در طول رندرها ماندگار باشد (از طریق `useRef`) پیچیده می‌شود. +> توجه: برخی از مسائل فوق که به حافظه‌سازی مربوط می‌شوند، می‌توانند با [کامپایلر React](https://react.dev/learn/react-compiler) حل شوند. + در مقابل، Composition API Vue: - `setup()‎` یا `