diff --git a/docs/app/components/SkyBg.vue b/docs/app/components/SkyBg.vue index 4d40081c..6ec4e734 100644 --- a/docs/app/components/SkyBg.vue +++ b/docs/app/components/SkyBg.vue @@ -14,6 +14,7 @@ const props = withDefaults(defineProps<{ color?: string size?: { min: number, max: number } speed?: 'slow' | 'normal' | 'fast' + isIndex?: boolean }>(), { starCount: 50, color: 'var(--ui-primary)', @@ -21,7 +22,8 @@ const props = withDefaults(defineProps<{ min: 1, max: 3 }), - speed: 'normal' + speed: 'normal', + isIndex: false }) const route = useRoute() @@ -53,7 +55,7 @@ const twinkleDuration = computed(() => { - +
+import { joinURL } from 'ufo' + +const { data: page } = await useAsyncData('showcase', () => queryCollection('showcase').first()) +if (!page.value) { + throw createError({ statusCode: 404, statusMessage: 'Page not found', fatal: true }) +} + +const { url } = useSiteConfig() + +useSeoMeta({ + titleTemplate: `%s - Nuxt UI`, + title: page.value.title, + description: page.value.description, + ogTitle: `${page.value.title} - Nuxt UI`, + ogDescription: page.value.description, + ogImage: joinURL(url, '/og-image.png') +}) + + + diff --git a/docs/content.config.ts b/docs/content.config.ts index 8e415c6f..3c0dad08 100644 --- a/docs/content.config.ts +++ b/docs/content.config.ts @@ -1,6 +1,18 @@ import { defineCollection, z } from '@nuxt/content' import { resolve } from 'node:path' +const Button = z.object({ + label: z.string(), + icon: z.string().optional(), + trailingIcon: z.string().optional(), + to: z.string().optional(), + color: z.enum(['primary', 'neutral', 'success', 'warning', 'error', 'info']).optional(), + size: z.enum(['xs', 'sm', 'md', 'lg', 'xl']).optional(), + variant: z.enum(['solid', 'outline', 'subtle', 'soft', 'ghost', 'link']).optional(), + id: z.string().optional(), + target: z.enum(['_blank', '_self']).optional() +}) + const schema = z.object({ category: z.enum(['layout', 'form', 'element', 'navigation', 'data', 'overlay']).optional(), framework: z.string().optional(), @@ -42,5 +54,26 @@ export const collections = { include: '**/*' }, pro!].filter(Boolean), schema + }), + showcase: defineCollection({ + type: 'page', + source: 'showcase.yml', + schema: z.object({ + title: z.string(), + description: z.string(), + hero: z.object({ + title: z.string(), + description: z.string(), + links: z.array(Button) + }), + items: z.array(z.object({ + name: z.string(), + url: z.string(), + screenshotUrl: z.string().optional(), + screenshotOptions: z.object({ + delay: z.number() + }) + })) + }) }) } diff --git a/docs/content/showcase.yml b/docs/content/showcase.yml new file mode 100644 index 00000000..cd720bb3 --- /dev/null +++ b/docs/content/showcase.yml @@ -0,0 +1,19 @@ +title: Showcase +description: Check out some of the amazing projects built with Nuxt UI. +navigation: false +hero: + title: Showcase + description: Discover our selection of projects built with Nuxt UI. +items: + - name: Shelve + url: https://shelve.cloud + - name: Uneed + url: https://uneed.best + - name: Details + url: https://details.team + - name: Espace Asso by Benevolt + url: https://asso.benevolt.fr + - name: Directus Docs + url: https://docs.directus.io + - name: Super SaaS + url: https://supersaas.dev/ diff --git a/docs/modules/screenshot.ts b/docs/modules/screenshot.ts new file mode 100644 index 00000000..545cf1d6 --- /dev/null +++ b/docs/modules/screenshot.ts @@ -0,0 +1,54 @@ +import { defineNuxtModule } from '@nuxt/kit' +import { existsSync } from 'node:fs' +import { join } from 'pathe' +import captureWebsite from 'capture-website' + +interface ContentFile { + id?: string + items?: any +} + +interface TemplateItem { + name: string + url?: string + screenshotUrl?: string + screenshotOptions?: Record +} + +export default defineNuxtModule((options, nuxt) => { + nuxt.hook('content:file:afterParse', async ({ content: file }: { content: ContentFile }) => { + if (file.id?.includes('showcase') && file.items) { + const itemsArray: TemplateItem[] = Array.isArray(file.items) + ? file.items + : Object.values(file.items) + if (itemsArray.length === 0) { + console.log('No items to process') + return + } + console.log(`Processing ${itemsArray.length} template items`) + for (const template of itemsArray) { + const url = template.screenshotUrl || template.url + if (!url) { + console.error(`Template ${template.name} has no "url" or "screenshotUrl" to take a screenshot from`) + continue + } + const name = template.name.toLowerCase().replace(/\s/g, '-') + const filename = join(process.cwd(), 'docs/public/assets/showcase', `${name}.png`) + if (existsSync(filename)) { + console.log(`Screenshot for ${template.name} already exists, skipping`) + continue + } + console.log(`Generating screenshot for Template ${template.name} hitting ${url}...`) + try { + await captureWebsite.file(url, filename, { + ...(template.screenshotOptions || {}), + launchOptions: { headless: true } + }) + console.log(`Screenshot for ${template.name} generated successfully`) + } catch (error) { + console.error(`Error generating screenshot for ${template.name}:`, error) + } + } + } + }) +}) diff --git a/docs/package.json b/docs/package.json index 7836e459..28483b4e 100644 --- a/docs/package.json +++ b/docs/package.json @@ -16,6 +16,7 @@ "@octokit/rest": "^21.1.1", "@rollup/plugin-yaml": "^4.1.2", "@vueuse/nuxt": "^13.0.0", + "capture-website": "^4.2.0", "@vueuse/integrations": "^13.0.0", "sortablejs": "^1.15.6", "joi": "^17.13.3", diff --git a/docs/public/assets/showcase/details.png b/docs/public/assets/showcase/details.png new file mode 100644 index 00000000..1c0fd34e Binary files /dev/null and b/docs/public/assets/showcase/details.png differ diff --git a/docs/public/assets/showcase/directus-docs.png b/docs/public/assets/showcase/directus-docs.png new file mode 100644 index 00000000..253f3064 Binary files /dev/null and b/docs/public/assets/showcase/directus-docs.png differ diff --git a/docs/public/assets/showcase/espace-asso-by-benevolt.png b/docs/public/assets/showcase/espace-asso-by-benevolt.png new file mode 100644 index 00000000..f9914f1f Binary files /dev/null and b/docs/public/assets/showcase/espace-asso-by-benevolt.png differ diff --git a/docs/public/assets/showcase/shelve.png b/docs/public/assets/showcase/shelve.png new file mode 100644 index 00000000..9254b398 Binary files /dev/null and b/docs/public/assets/showcase/shelve.png differ diff --git a/docs/public/assets/showcase/super-saas.png b/docs/public/assets/showcase/super-saas.png new file mode 100644 index 00000000..1a7241b0 Binary files /dev/null and b/docs/public/assets/showcase/super-saas.png differ diff --git a/docs/public/assets/showcase/uneed.png b/docs/public/assets/showcase/uneed.png new file mode 100644 index 00000000..12218295 Binary files /dev/null and b/docs/public/assets/showcase/uneed.png differ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c82b2861..523e154f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -263,6 +263,9 @@ importers: '@vueuse/nuxt': specifier: ^13.0.0 version: 13.0.0(magicast@0.3.5)(nuxt@3.16.2(@parcel/watcher@2.5.1)(@types/node@22.13.14)(better-sqlite3@11.9.1)(db0@0.3.1(better-sqlite3@11.9.1))(eslint@9.23.0(jiti@2.4.2))(ioredis@5.6.0)(lightningcss@1.29.2)(magicast@0.3.5)(meow@13.2.0)(optionator@0.9.4)(rollup@4.34.9)(terser@5.39.0)(typescript@5.8.2)(vite@6.2.4(@types/node@22.13.14)(jiti@2.4.2)(lightningcss@1.29.2)(terser@5.39.0)(yaml@2.7.1))(vue-tsc@2.2.0(typescript@5.8.2))(yaml@2.7.1))(vue@3.5.13(typescript@5.8.2)) + capture-website: + specifier: ^4.2.0 + version: 4.2.0(typescript@5.8.2) joi: specifier: ^17.13.3 version: 17.13.3 @@ -1087,6 +1090,20 @@ packages: '@floating-ui/vue@1.1.6': resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==} + '@ghostery/adblocker-content@2.5.0': + resolution: {integrity: sha512-Gn9fslZdacx1m1e3/2LSUPWagLObYmIDbkgvZTtgqT/OHc17VbM71AxWEjtC/xzo5K4PI25958PjvidoEH7ufw==} + + '@ghostery/adblocker-extended-selectors@2.5.0': + resolution: {integrity: sha512-/GBAwErjktcBKLjCMl/n+jz2MxXFfTmEGw+hcPtAhEin49eSC09PK1TAdzDPDXkCTF4Jmb/zC+MYtbX1eZ1WsQ==} + + '@ghostery/adblocker-puppeteer@2.5.0': + resolution: {integrity: sha512-5SFmit+tMMsZDmjWwstFd6G+GV3HB7+ypZ9/vSKT0vo8FI9/hHm6pLMiif+iMI626+8dHjfjA/cItL9ttAwu3w==} + peerDependencies: + puppeteer: '>5' + + '@ghostery/adblocker@2.5.0': + resolution: {integrity: sha512-CcmWiTLKxDqYiTlPyOAWr3xeZYXjWlpu6UOCDkk33k0w7jTgVrdvwbXf8Tv4XE0m3uNX6Idfj4H+Umv8L3AiUw==} + '@hapi/hoek@9.3.0': resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} @@ -1853,12 +1870,35 @@ packages: resolution: {integrity: sha512-aQypoot0HPSJa6gDPEPTntc1GT6QINrSbgRlRhadGW2WaYqUK3tK4Bw9SBMZXhmxd3GeAlZjVcODHgiu+THY7A==} engines: {node: '>=18'} + '@puppeteer/browsers@2.6.1': + resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==} + engines: {node: '>=18'} + hasBin: true + '@release-it/conventional-changelog@10.0.0': resolution: {integrity: sha512-49qf9phGmPUIGpY2kwfgehs9en1znbPv2zdNn1WMLAH9DtHUh4m6KNSB+mLFGAMUhv24JhsA8ruYRYgluc2UJw==} engines: {node: ^20.9.0 || >=22.0.0} peerDependencies: release-it: ^18.0.0 + '@remusao/guess-url-type@1.3.0': + resolution: {integrity: sha512-SNSJGxH5ckvxb3EUHj4DqlAm/bxNxNv2kx/AESZva/9VfcBokwKNS+C4D1lQdWIDM1R3d3UG+xmVzlkNG8CPTQ==} + + '@remusao/small@1.3.0': + resolution: {integrity: sha512-bydAhJI+ywmg5xMUcbqoR8KahetcfkFywEZpsyFZ8EBofilvWxbXnMSe4vnjDI1Y+SWxnNhR4AL/2BAXkf4b8A==} + + '@remusao/smaz-compress@1.10.0': + resolution: {integrity: sha512-E/lC8OSU+3bQrUl64vlLyPzIxo7dxF2RvNBe9KzcM4ax43J/d+YMinmMztHyCIHqRbz7rBCtkp3c0KfeIbHmEg==} + + '@remusao/smaz-decompress@1.10.0': + resolution: {integrity: sha512-aA5ImUH480Pcs5/cOgToKmFnzi7osSNG6ft+7DdmQTaQEEst3nLq3JLlBEk+gwidURymjbx6DYs60LHaZ415VQ==} + + '@remusao/smaz@1.10.0': + resolution: {integrity: sha512-GQzCxmmMpLkyZwcwNgz8TpuBEWl0RUQa8IcvKiYlPxuyYKqyqPkCr0hlHI15ckn3kDUPS68VmTVgyPnLNrdVmg==} + + '@remusao/trie@1.5.0': + resolution: {integrity: sha512-UX+3utJKgwCsg6sUozjxd38gNMVRXrY4TNX9VvCdSrlZBS1nZjRPi98ON3QjRAdf6KCguJFyQARRsulTeqQiPg==} + '@resvg/resvg-js-android-arm-eabi@2.6.2': resolution: {integrity: sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==} engines: {node: '>= 10'} @@ -2381,6 +2421,9 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + '@types/yauzl@2.10.3': + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + '@typescript-eslint/eslint-plugin@8.28.0': resolution: {integrity: sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3005,6 +3048,9 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-crc32@1.0.0: resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} engines: {node: '>=8.0.0'} @@ -3055,6 +3101,10 @@ packages: caniuse-lite@1.0.30001707: resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} + capture-website@4.2.0: + resolution: {integrity: sha512-EmkSn36CXTC8tUsS6aNmvvsdpfVTYYkuRp7U5bV9gcJwcDbqqA5c0Op/iskYPKtDdOkuVp61mjn/LLywX0h7cw==} + engines: {node: '>=18'} + ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -3109,6 +3159,11 @@ packages: engines: {node: '>=12.13.0'} hasBin: true + chromium-bidi@0.11.0: + resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==} + peerDependencies: + devtools-protocol: '*' + ci-info@4.2.0: resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} engines: {node: '>=8'} @@ -3555,6 +3610,9 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + devtools-protocol@0.0.1367902: + resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==} + dfa@1.2.0: resolution: {integrity: sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q==} @@ -3910,6 +3968,11 @@ packages: externality@1.0.2: resolution: {integrity: sha512-LyExtJWKxtgVzmgtEHyQtLFpw1KFhQphF9nTG8TpAIVkiI/xQ3FJh75tRFLYl4hkn7BNIIdLJInuDAavX35pMw==} + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + fake-indexeddb@6.0.0: resolution: {integrity: sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==} engines: {node: '>=18'} @@ -3939,6 +4002,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.4.3: resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==} peerDependencies: @@ -3961,6 +4027,10 @@ packages: file-uri-to-path@1.0.0: resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + file-url@4.0.0: + resolution: {integrity: sha512-vRCdScQ6j3Ku6Kd7W1kZk9c++5SqD6Xz5Jotrjr/nkY714M14RFHy/AAVA2WQvpsqVAVgTbDrYyBpU205F0cLw==} + engines: {node: '>=12'} + fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} @@ -4052,6 +4122,10 @@ packages: get-source@2.0.12: resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@8.0.1: resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} engines: {node: '>=16'} @@ -5419,6 +5493,9 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -5663,6 +5740,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -5700,6 +5781,15 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} + puppeteer-core@23.11.1: + resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==} + engines: {node: '>=18'} + + puppeteer@23.11.1: + resolution: {integrity: sha512-53uIX3KR5en8l7Vd8n5DUv90Ae9QDQsyIthaUFVzwV6yU750RjqRznEtNMBT20VthqAdemnJN+hxVdmMHKt7Zw==} + engines: {node: '>=18'} + hasBin: true + quansync@0.2.10: resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} @@ -6297,6 +6387,9 @@ packages: text-decoder@1.2.3: resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + tiny-case@1.0.3: resolution: {integrity: sha512-Eet/eeMhkO6TX8mnUteS9zgPbUMQa4I6Kkp5ORiBD5476/m+PIRiumP5tmh5ioJpH7k51Kehawy2UDfsnxxY8Q==} @@ -6331,6 +6424,16 @@ packages: resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} engines: {node: '>=14.0.0'} + tldts-core@6.1.85: + resolution: {integrity: sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==} + + tldts-experimental@6.1.85: + resolution: {integrity: sha512-oM+m5GnOdxgbnfSfix98YvzAIgkKZbdqMD/BTLbnbL349MyaEeNo6z8jVX9/lrL6DvnjgW7RV+sIVojrFvB+hw==} + + tldts@6.1.85: + resolution: {integrity: sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==} + hasBin: true + tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} engines: {node: '>=0.6.0'} @@ -6354,6 +6457,10 @@ packages: resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} engines: {node: '>=6'} + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} @@ -6407,6 +6514,9 @@ packages: type-level-regexp@0.1.17: resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==} + typed-query-selector@2.12.0: + resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==} + typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} @@ -6435,6 +6545,9 @@ packages: typescript: optional: true + unbzip2-stream@1.4.3: + resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==} + uncrypto@0.1.3: resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} @@ -7045,6 +7158,9 @@ packages: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -7092,6 +7208,9 @@ packages: zod@3.22.3: resolution: {integrity: sha512-EjIevzuJRiRPbVH4mGc8nApb/lVLKVpmUhAaR5R5doKGfAnGJ6Gr3CViAVjP+4FWSxCsybeWQdcgCtbX+7oZug==} + zod@3.23.8: + resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==} + zod@3.24.2: resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} @@ -7657,6 +7776,28 @@ snapshots: - '@vue/composition-api' - vue + '@ghostery/adblocker-content@2.5.0': + dependencies: + '@ghostery/adblocker-extended-selectors': 2.5.0 + + '@ghostery/adblocker-extended-selectors@2.5.0': {} + + '@ghostery/adblocker-puppeteer@2.5.0(puppeteer@23.11.1(typescript@5.8.2))': + dependencies: + '@ghostery/adblocker': 2.5.0 + '@ghostery/adblocker-content': 2.5.0 + puppeteer: 23.11.1(typescript@5.8.2) + tldts-experimental: 6.1.85 + + '@ghostery/adblocker@2.5.0': + dependencies: + '@ghostery/adblocker-content': 2.5.0 + '@ghostery/adblocker-extended-selectors': 2.5.0 + '@remusao/guess-url-type': 1.3.0 + '@remusao/small': 1.3.0 + '@remusao/smaz': 1.10.0 + tldts-experimental: 6.1.85 + '@hapi/hoek@9.3.0': {} '@hapi/topo@5.1.0': @@ -8820,6 +8961,20 @@ snapshots: '@poppinss/exception@1.2.1': {} + '@puppeteer/browsers@2.6.1': + dependencies: + debug: 4.3.7 + extract-zip: 2.0.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + semver: 7.7.1 + tar-fs: 3.0.8 + unbzip2-stream: 1.4.3 + yargs: 17.7.2 + transitivePeerDependencies: + - bare-buffer + - supports-color + '@release-it/conventional-changelog@10.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.1.0)(release-it@18.1.2(@types/node@22.13.14)(typescript@5.8.2))': dependencies: concat-stream: 2.0.0 @@ -8832,6 +8987,23 @@ snapshots: - conventional-commits-filter - conventional-commits-parser + '@remusao/guess-url-type@1.3.0': {} + + '@remusao/small@1.3.0': {} + + '@remusao/smaz-compress@1.10.0': + dependencies: + '@remusao/trie': 1.5.0 + + '@remusao/smaz-decompress@1.10.0': {} + + '@remusao/smaz@1.10.0': + dependencies: + '@remusao/smaz-compress': 1.10.0 + '@remusao/smaz-decompress': 1.10.0 + + '@remusao/trie@1.5.0': {} + '@resvg/resvg-js-android-arm-eabi@2.6.2': optional: true @@ -9261,6 +9433,11 @@ snapshots: '@types/web-bluetooth@0.0.21': {} + '@types/yauzl@2.10.3': + dependencies: + '@types/node': 22.13.14 + optional: true + '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 @@ -9969,6 +10146,8 @@ snapshots: node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) + buffer-crc32@0.2.13: {} + buffer-crc32@1.0.0: {} buffer-from@1.1.2: {} @@ -10023,6 +10202,19 @@ snapshots: caniuse-lite@1.0.30001707: {} + capture-website@4.2.0(typescript@5.8.2): + dependencies: + '@ghostery/adblocker-puppeteer': 2.5.0(puppeteer@23.11.1(typescript@5.8.2)) + file-url: 4.0.0 + puppeteer: 23.11.1(typescript@5.8.2) + tough-cookie: 5.1.2 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + ccount@2.0.1: {} chai@5.2.0: @@ -10079,6 +10271,12 @@ snapshots: transitivePeerDependencies: - supports-color + chromium-bidi@0.11.0(devtools-protocol@0.0.1367902): + dependencies: + devtools-protocol: 0.0.1367902 + mitt: 3.0.1 + zod: 3.23.8 + ci-info@4.2.0: {} citty@0.1.6: @@ -10494,6 +10692,8 @@ snapshots: dependencies: dequal: 2.0.3 + devtools-protocol@0.0.1367902: {} + dfa@1.2.0: {} diff@7.0.0: {} @@ -10979,6 +11179,16 @@ snapshots: pathe: 1.1.2 ufo: 1.5.4 + extract-zip@2.0.1: + dependencies: + debug: 4.3.7 + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + fake-indexeddb@6.0.0: {} fast-content-type-parse@2.0.1: {} @@ -11005,6 +11215,10 @@ snapshots: dependencies: reusify: 1.1.0 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.4.3(picomatch@4.0.2): optionalDependencies: picomatch: 4.0.2 @@ -11021,6 +11235,8 @@ snapshots: file-uri-to-path@1.0.0: {} + file-url@4.0.0: {} + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 @@ -11104,6 +11320,10 @@ snapshots: data-uri-to-buffer: 2.0.2 source-map: 0.6.1 + get-stream@5.2.0: + dependencies: + pump: 3.0.2 + get-stream@8.0.1: {} get-stream@9.0.1: @@ -13021,6 +13241,8 @@ snapshots: pathval@2.0.0: {} + pend@1.2.0: {} + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -13248,6 +13470,8 @@ snapshots: process@0.11.10: {} + progress@2.0.3: {} + prompts@2.4.2: dependencies: kleur: 3.0.3 @@ -13289,6 +13513,35 @@ snapshots: dependencies: escape-goat: 4.0.0 + puppeteer-core@23.11.1: + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + debug: 4.3.7 + devtools-protocol: 0.0.1367902 + typed-query-selector: 2.12.0 + ws: 8.18.1 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - utf-8-validate + + puppeteer@23.11.1(typescript@5.8.2): + dependencies: + '@puppeteer/browsers': 2.6.1 + chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902) + cosmiconfig: 9.0.0(typescript@5.8.2) + devtools-protocol: 0.0.1367902 + puppeteer-core: 23.11.1 + typed-query-selector: 2.12.0 + transitivePeerDependencies: + - bare-buffer + - bufferutil + - supports-color + - typescript + - utf-8-validate + quansync@0.2.10: {} queue-microtask@1.2.3: {} @@ -14069,7 +14322,6 @@ snapshots: bare-path: 3.0.0 transitivePeerDependencies: - bare-buffer - optional: true tar-stream@2.2.0: dependencies: @@ -14105,6 +14357,8 @@ snapshots: dependencies: b4a: 1.6.7 + through@2.3.8: {} + tiny-case@1.0.3: {} tiny-inflate@1.0.3: {} @@ -14128,6 +14382,16 @@ snapshots: tinyspy@3.0.2: {} + tldts-core@6.1.85: {} + + tldts-experimental@6.1.85: + dependencies: + tldts-core: 6.1.85 + + tldts@6.1.85: + dependencies: + tldts-core: 6.1.85 + tmp@0.0.33: dependencies: os-tmpdir: 1.0.2 @@ -14144,6 +14408,10 @@ snapshots: totalist@3.0.1: {} + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.85 + tr46@0.0.3: {} trim-lines@3.0.1: {} @@ -14178,6 +14446,8 @@ snapshots: type-level-regexp@0.1.17: {} + typed-query-selector@2.12.0: {} + typedarray@0.0.6: {} typescript@5.8.2: {} @@ -14222,6 +14492,11 @@ snapshots: - supports-color - vue-tsc + unbzip2-stream@1.4.3: + dependencies: + buffer: 5.7.1 + through: 2.3.8 + uncrypto@0.1.3: {} unctx@2.4.1: @@ -14878,6 +15153,11 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + yocto-queue@0.1.0: {} yoctocolors-cjs@2.1.2: {} @@ -14928,6 +15208,8 @@ snapshots: zod@3.22.3: {} + zod@3.23.8: {} + zod@3.24.2: {} zwitch@2.0.4: {}