├── src ├── vite-env.d.ts ├── i18n │ └── messages.ts ├── main.ts ├── types │ └── index.d.ts ├── scripts │ ├── utils │ │ ├── async.ts │ │ └── alpine.ts │ ├── components │ │ ├── Demo.ts │ │ └── index.ts │ ├── magics │ │ ├── i18n.ts │ │ └── index.ts │ ├── store │ │ ├── index.ts │ │ └── ui.ts │ ├── directives │ │ ├── index.ts │ │ └── x-image-in.ts │ ├── App.ts │ └── composables │ │ └── useI18n.ts └── main.css ├── postcss.config.js ├── prettier.config.js ├── tailwind.config.ts ├── .gitignore ├── .editorconfig ├── tsconfig.json ├── index.html ├── LICENSE ├── package.json ├── vite.config.ts ├── public └── vite.svg ├── eslint.config.mjs ├── README.md └── pnpm-lock.yaml /src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | semi: false, 3 | singleQuote: true, 4 | plugins: ['prettier-plugin-tailwindcss'], 5 | } 6 | -------------------------------------------------------------------------------- /src/i18n/messages.ts: -------------------------------------------------------------------------------- 1 | export default { 2 | en: { 3 | setColorMode: 'Use {{mode}} mode', 4 | }, 5 | fr: { 6 | setColorMode: 'Utiliser le mode {{mode}}', 7 | }, 8 | } 9 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import './main.css' 2 | import App from '~/scripts/App' 3 | 4 | document.addEventListener('DOMContentLoaded', async () => { 5 | await document.fonts.ready 6 | App() 7 | }) 8 | -------------------------------------------------------------------------------- /src/types/index.d.ts: -------------------------------------------------------------------------------- 1 | import type Alpine from 'alpinejs' 2 | 3 | declare global { 4 | /* eslint-disable no-var */ 5 | var Alpine: Alpine | undefined 6 | var $store: Alpine.Stores | undefined 7 | /* eslint-enable no-var */ 8 | } 9 | -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- 1 | import type { Config } from 'tailwindcss' 2 | 3 | export default { 4 | content: ['./index.html', './src/**/*.{js,ts,jsx,tsx}'], 5 | darkMode: 'selector', 6 | theme: { 7 | extend: {}, 8 | }, 9 | plugins: [], 10 | } satisfies Config 11 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /src/scripts/utils/async.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * A simple promise that resolves after a given time 3 | * @example 4 | * async function test() { 5 | * console.log('before wait') 6 | * await wait(1000) 7 | * console.log('waited 1 second') 8 | * } 9 | */ 10 | export function wait(ms: number) { 11 | return new Promise((resolve) => { 12 | setTimeout(resolve, ms) 13 | }) 14 | } 15 | -------------------------------------------------------------------------------- /src/scripts/components/Demo.ts: -------------------------------------------------------------------------------- 1 | import { defineComponent } from '~/scripts/utils/alpine' 2 | 3 | export default defineComponent(() => ({ 4 | buttonLabel(): string { 5 | const newMode = this.$store.ui.mode === 'light' ? 'dark' : 'light' 6 | return this.$i18n.t('setColorMode', { mode: newMode }) 7 | }, 8 | onClick() { 9 | this.$store.ui.setMode(this.$store.ui.mode === 'light' ? 'dark' : 'light') 10 | }, 11 | })) 12 | -------------------------------------------------------------------------------- /src/scripts/magics/i18n.ts: -------------------------------------------------------------------------------- 1 | import { defineMagic } from '~/scripts/utils/alpine' 2 | import { useI18n } from '~/scripts/composables/useI18n' 3 | 4 | export default defineMagic(() => useI18n()) 5 | 6 | // Declare $i18n as a magic property 7 | declare module 'alpinejs' { 8 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 9 | export interface Magics { 10 | $i18n: ReturnType 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/scripts/store/index.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | import { parsePath } from '~/scripts/utils/alpine' 3 | 4 | export default function register() { 5 | // Auto-import stores 6 | const stores = import.meta.glob<() => unknown>('./**/*', { 7 | eager: true, 8 | import: 'default', 9 | }) 10 | 11 | for (const path in stores) { 12 | const { name } = parsePath(path) 13 | Alpine.store(name, stores[path]) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/scripts/magics/index.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | import { parsePath, defineMagic } from '~/scripts/utils/alpine' 3 | 4 | export default function register() { 5 | // Auto-import magics 6 | const magics = import.meta.glob>('./**/*', { 7 | eager: true, 8 | import: 'default', 9 | }) 10 | 11 | for (const path in magics) { 12 | const { name } = parsePath(path) 13 | Alpine.magic(name, magics[path]) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/scripts/components/index.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | import { defineComponent, parsePath } from '~/scripts/utils/alpine' 3 | 4 | export default function register() { 5 | // Auto-import components 6 | const components = import.meta.glob<() => ReturnType>( 7 | './**/*', 8 | { 9 | eager: true, 10 | import: 'default', 11 | }, 12 | ) 13 | 14 | for (const path in components) { 15 | const { name } = parsePath(path) 16 | Alpine.data(name, components[path]) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/scripts/directives/index.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | import { defineDirective, parsePath } from '~/scripts/utils/alpine' 3 | 4 | export default function register() { 5 | // Auto-import directives 6 | const directives = import.meta.glob>( 7 | './**/*', 8 | { 9 | eager: true, 10 | import: 'default', 11 | }, 12 | ) 13 | 14 | for (const path in directives) { 15 | const { name } = parsePath(path) 16 | Alpine.directive(name, directives[path]) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/scripts/store/ui.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | 3 | const ui = { 4 | init() { 5 | Alpine.effect(() => { 6 | if (this.mode === 'dark') { 7 | document.documentElement.classList.add('dark') 8 | } else { 9 | document.documentElement.classList.remove('dark') 10 | } 11 | }) 12 | }, 13 | mode: 'light' as 'light' | 'dark', 14 | setMode(mode: 'light' | 'dark') { 15 | this.mode = mode 16 | }, 17 | } 18 | 19 | // Declare uiStore as an Alpine store module 20 | declare module 'alpinejs' { 21 | interface Stores { 22 | ui: typeof ui 23 | } 24 | } 25 | 26 | export default ui 27 | -------------------------------------------------------------------------------- /src/main.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | html { 7 | background-color: white; 8 | color: theme('colors.neutral.800'); 9 | 10 | &.dark { 11 | background-color: theme('colors.neutral.900'); 12 | color: white; 13 | } 14 | } 15 | [x-cloak] { 16 | display: none !important; 17 | } 18 | 19 | /* img defaults: https://x.com/csswizardry/status/1717841334462005661?s=20 */ 20 | img { 21 | background-size: cover; 22 | background-repeat: no-repeat; 23 | font-style: italic; 24 | } 25 | 26 | img[x-image-in], 27 | [x-image-in] img { 28 | visibility: hidden; 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # It is based on https://core.trac.wordpress.org/browser/trunk/.editorconfig 3 | # See https://editorconfig.org for more information about the standard. 4 | # WordPress VIP documentation: https://docs.wpvip.com/technical-references/vip-codebase/editorconfig/ 5 | 6 | # WordPress Coding Standards 7 | # https://make.wordpress.org/core/handbook/coding-standards/ 8 | 9 | root = true 10 | 11 | [*] 12 | charset = utf-8 13 | end_of_line = lf 14 | insert_final_newline = true 15 | trim_trailing_whitespace = true 16 | indent_style = space 17 | indent_size = 2 18 | single_quote = true 19 | 20 | [*.md] 21 | trim_trailing_whitespace = false 22 | 23 | [*.txt] 24 | end_of_line = crlf 25 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "module": "ESNext", 6 | "lib": ["ES2020", "DOM", "DOM.Iterable"], 7 | "skipLibCheck": true, 8 | 9 | /* Bundler mode */ 10 | "moduleResolution": "bundler", 11 | "allowImportingTsExtensions": true, 12 | "isolatedModules": true, 13 | "moduleDetection": "force", 14 | "noEmit": true, 15 | 16 | /* Linting */ 17 | "strict": true, 18 | "noUnusedLocals": true, 19 | "noUnusedParameters": true, 20 | "noFallthroughCasesInSwitch": true, 21 | "noUncheckedSideEffectImports": true, 22 | 23 | "paths": { 24 | "~/*": ["./src/*"], 25 | "#tailwindcss/*": ["./dist/tailwindcss/*"] 26 | } 27 | }, 28 | "include": ["src"] 29 | } 30 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Alpine + TypeScript = ❤️ 8 | 9 | 10 |
11 | 17 | 21 | 27 | 28 |
29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Mickael Chanrion 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 | -------------------------------------------------------------------------------- /src/scripts/App.ts: -------------------------------------------------------------------------------- 1 | import Alpine from 'alpinejs' 2 | import registerStoreModules from '~/scripts/store' 3 | import registerDirectives from '~/scripts/directives' 4 | import registerComponents from '~/scripts/components' 5 | import registerMagics from '~/scripts/magics' 6 | import screens from '#tailwindcss/screens.json' 7 | 8 | export default function App() { 9 | globalThis.Alpine = Alpine 10 | 11 | registerMagics() 12 | registerStoreModules() 13 | registerDirectives() 14 | registerComponents() 15 | 16 | console.log('This is the list of screens:', Object.keys(screens).toString()) 17 | 18 | document.addEventListener('alpine:initialized', () => { 19 | // Make Alpine's store available globally 20 | const result = document.querySelector('[x-data]') 21 | 22 | if (result) { 23 | // @ts-expect-error Alpine's store will be available at this path so this is type-safe 24 | globalThis.$store = result._x_dataStack[0].$store 25 | } else { 26 | throw new Error( 27 | 'No x-data found, the page should have at least one element with the x-data attribute.', 28 | ) 29 | } 30 | }) 31 | 32 | Alpine.start() 33 | } 34 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "alpine-ts", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "author": "Mickael Chanrion", 7 | "scripts": { 8 | "dev": "vite", 9 | "build": "tsc && vite build", 10 | "preview": "vite preview", 11 | "lint": "npm run lint:scripts && npm run lint:prettier", 12 | "lint:scripts": "eslint", 13 | "lint:prettier": "prettier --check --ignore-unknown .", 14 | "lintfix": "prettier --write --list-different . && npm run lint:scripts --fix" 15 | }, 16 | "devDependencies": { 17 | "@eslint/js": "^9.17.0", 18 | "@types/alpinejs": "^3.13.11", 19 | "@types/node": "^22.10.2", 20 | "autoprefixer": "^10.4.20", 21 | "eslint-config-prettier": "^9.1.0", 22 | "eslint-plugin-prettier": "^5.2.1", 23 | "eslint-plugin-unicorn": "^56.0.1", 24 | "globals": "^15.14.0", 25 | "postcss": "^8.4.49", 26 | "prettier-plugin-tailwindcss": "^0.6.9", 27 | "tailwindcss": "^3.4.17", 28 | "typescript": "~5.6.2", 29 | "typescript-eslint": "^8.18.2", 30 | "vite": "^6.0.3", 31 | "vite-plugin-eslint": "^1.8.1" 32 | }, 33 | "dependencies": { 34 | "alpinejs": "^3.14.8", 35 | "rosetta": "^1.1.0" 36 | }, 37 | "packageManager": "pnpm@9.15.0+sha512.76e2379760a4328ec4415815bcd6628dee727af3779aaa4c914e3944156c4299921a89f976381ee107d41f12cfa4b66681ca9c718f0668fa0831ed4c6d8ba56c" 38 | } 39 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import path from 'node:path' 2 | import url from 'node:url' 3 | import { defineConfig } from 'vite' 4 | import eslint from 'vite-plugin-eslint' 5 | import writeFiles from './build/vite-plugin-write-files' 6 | import resolveTailwindConfig from 'tailwindcss/resolveConfig' 7 | import tailwindConfig from './tailwind.config' 8 | 9 | const basePath = path.dirname(url.fileURLToPath(import.meta.url)) 10 | 11 | const resolvedTailwindConfig = resolveTailwindConfig(tailwindConfig) 12 | 13 | export default defineConfig({ 14 | plugins: [ 15 | // https://github.com/gxmari007/vite-plugin-eslint 16 | eslint({ 17 | cache: true, 18 | fix: true, 19 | include: ['src/**/*.{js,ts}'], 20 | lintOnStart: true, 21 | }), 22 | writeFiles({ 23 | files: [ 24 | // Write tailwind config to JSON files 25 | { 26 | output: path.resolve(basePath, 'dist/tailwindcss/colors.json'), 27 | data: resolvedTailwindConfig.theme.colors, 28 | }, 29 | { 30 | output: path.resolve(basePath, 'dist/tailwindcss/screens.json'), 31 | data: resolvedTailwindConfig.theme.screens, 32 | }, 33 | ], 34 | }), 35 | ], 36 | resolve: { 37 | alias: { 38 | '~': path.resolve(basePath, './src'), 39 | '#tailwindcss': path.resolve(basePath, './dist/tailwindcss/'), 40 | }, 41 | }, 42 | }) 43 | -------------------------------------------------------------------------------- /src/scripts/composables/useI18n.ts: -------------------------------------------------------------------------------- 1 | import rosetta from 'rosetta' 2 | import messages from '~/i18n/messages' 3 | 4 | const defaultLocale = 'en' 5 | 6 | export function useI18n( 7 | locale: string | (() => string) = () => document.documentElement.lang, 8 | ) { 9 | const locales = Object.keys(messages) 10 | const i18n = rosetta(messages) 11 | const currentLocale = typeof locale === 'function' ? locale() : locale 12 | const matchingLocale = locales.find( 13 | (locale) => locale === currentLocale.split('-')[0], 14 | ) 15 | i18n.locale(matchingLocale || defaultLocale) 16 | return { 17 | ...i18n, 18 | /** 19 | * Get a translated message 20 | * @param key - The key of the message to translate 21 | * @param parameters - The parameters to pass to the message (e.g. variables) 22 | * @param lang - The language to translate the message to 23 | * @returns The translated message 24 | * @usage 25 | * ```ts 26 | * const { t } = useI18n() 27 | * t('intro.text', { username: 'foo' }) 28 | * ``` 29 | */ 30 | t: ( 31 | key: string | (string | number)[], 32 | parameters?: unknown[] | Record | undefined, 33 | lang?: string | undefined, 34 | ) => { 35 | const value = i18n.t(key, parameters, lang) 36 | if (value === '') return typeof key === 'string' ? key : key.join('') 37 | return value 38 | }, 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import globals from 'globals' 2 | 3 | // @ts-check 4 | import js from '@eslint/js' 5 | import ts from 'typescript-eslint' 6 | import prettier from 'eslint-plugin-prettier/recommended' 7 | import unicorn from 'eslint-plugin-unicorn' 8 | 9 | export default ts.config( 10 | js.configs.recommended, 11 | ts.configs.strict, 12 | prettier, 13 | unicorn.configs['flat/recommended'], 14 | { 15 | ignores: [ 16 | 'vendor/', 17 | 'dist/', 18 | 'commitlint.config.cjs', 19 | 'postcss.config.cjs', 20 | ], 21 | }, 22 | { 23 | languageOptions: { 24 | ecmaVersion: 2022, 25 | sourceType: 'module', 26 | globals: { 27 | ...globals.browser, 28 | ...globals.node, 29 | }, 30 | }, 31 | rules: { 32 | 'no-new': 'off', 33 | 'prettier/prettier': 'error', 34 | 'unicorn/prevent-abbreviations': [ 35 | 'error', 36 | { 37 | allowList: { 38 | dist: true, 39 | Dist: true, 40 | env: true, 41 | }, 42 | }, 43 | ], 44 | }, 45 | }, 46 | { 47 | files: [ 48 | 'src/scripts/components/**/*.{js,ts}', 49 | 'src/scripts/composables/**/*.{js,ts}', 50 | 'src/scripts/store/**/*.{js,ts}', 51 | 'src/scripts/App.{js,ts}', 52 | ], 53 | rules: { 54 | 'unicorn/filename-case': 'off', 55 | }, 56 | }, 57 | { 58 | files: ['src/types/vite-env.d.ts'], 59 | rules: { 60 | 'unicorn/prevent-abbreviations': 'off', 61 | }, 62 | }, 63 | ) 64 | -------------------------------------------------------------------------------- /src/scripts/utils/alpine.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | AlpineComponent, 3 | DirectiveCallback, 4 | ElementWithXAttributes, 5 | MagicUtilities, 6 | } from 'alpinejs' 7 | 8 | /** 9 | * Define an Alpine component (wraps the function with Alpine's internals) 10 | */ 11 | export const defineComponent =

( 12 | function_: (...parameters: P) => AlpineComponent, 13 | ) => function_ 14 | 15 | /** 16 | * Define an Alpine directive (wraps the function with Alpine's internals) 17 | */ 18 | export const defineDirective = (callback: DirectiveCallback) => callback 19 | 20 | /** 21 | * Define an Alpine magic property (wraps the function with Alpine's internals) 22 | */ 23 | export const defineMagic = ( 24 | callback: ( 25 | element: ElementWithXAttributes, 26 | options: MagicUtilities, 27 | ) => unknown, 28 | ) => callback 29 | 30 | /** 31 | * Parse a path string into its parts 32 | * @example '/01.$myMagic.js' => { group: undefined, order: 1, prefix: '$', name: 'myMagic', ext: 'js' } 33 | * @example '/group/03.x-my-directive.ts' => { group: 'group', order: 3, prefix: 'x-', name: 'my-directive', ext: 'ts' } 34 | */ 35 | export function parsePath(value: string): { 36 | group?: string 37 | order?: number 38 | prefix?: string 39 | name: string 40 | ext: string 41 | } { 42 | const pathRegex = 43 | /(?[\dA-Za-z]+)?\/((?\d+).)?(?\$|x-)?(?[\dA-Za-z-]+).(?js|ts)$/ 44 | 45 | const groups = pathRegex.exec(value)?.groups || {} 46 | return { 47 | group: groups.group || undefined, 48 | prefix: groups.prefix || undefined, 49 | order: Number.parseInt(groups.order) || undefined, 50 | name: groups.name, 51 | ext: groups.ext, 52 | } 53 | } 54 | 55 | export default { defineComponent, defineDirective, parsePath } 56 | -------------------------------------------------------------------------------- /src/scripts/directives/x-image-in.ts: -------------------------------------------------------------------------------- 1 | import { defineDirective } from '~/scripts/utils/alpine' 2 | import { wait } from '~/scripts/utils/async' 3 | 4 | export interface ImageInTheme { 5 | /** Default classes, always present */ 6 | base?: string 7 | /** Classes applied when the image is loading */ 8 | loading?: string 9 | /** Classes applied when the image is loaded */ 10 | loaded?: string 11 | } 12 | 13 | export type ImageInThemes = Record 14 | 15 | const themes: ImageInThemes = { 16 | 'fade-in': { 17 | base: 'transition', 18 | loading: 'opacity-0', 19 | }, 20 | 'scale-out': { 21 | base: 'transition', 22 | loading: 'opacity-0 scale-110', 23 | }, 24 | 'scale-in': { 25 | base: 'transition', 26 | loading: 'opacity-0 scale-90', 27 | }, 28 | placeholder: { 29 | base: '!visible transition', 30 | loading: 'blur-2xl scale-110', 31 | }, 32 | } 33 | 34 | function addClasses(img: HTMLImageElement, classes: string[] = []) { 35 | const tokens = classes.filter((token) => !!token) 36 | if (tokens.length > 0) img.classList.add(...tokens) 37 | } 38 | function removeClasses(img: HTMLImageElement, classes: string[] = []) { 39 | const tokens = classes.filter((token) => !!token) 40 | if (tokens.length > 0) img.classList.remove(...tokens) 41 | } 42 | 43 | export interface LoadCustomOptions { 44 | duration?: number 45 | base?: string 46 | loading?: string 47 | loaded?: string 48 | onLoad?: (img: HTMLImageElement) => void 49 | } 50 | 51 | export interface LoadThemeOptions { 52 | duration?: number 53 | theme: string 54 | onLoad?: (img: HTMLImageElement) => void 55 | } 56 | 57 | function load( 58 | img: HTMLImageElement, 59 | options: LoadCustomOptions | LoadThemeOptions = {}, 60 | ) { 61 | return new Promise((resolve) => { 62 | const { duration = 300 } = options 63 | 64 | let theme: ImageInTheme = themes['fade-in'] 65 | 66 | const isPlaceholder = 67 | ('theme' in options && options.theme) === 'placeholder' 68 | 69 | if ('theme' in options) { 70 | if (options.theme && themes[options.theme]) { 71 | theme = themes[options.theme] 72 | } 73 | } else if ( 74 | 'base' in options || 75 | 'loading' in options || 76 | 'loaded' in options 77 | ) { 78 | const { base, loading, loaded } = options 79 | theme = { 80 | base, 81 | loading, 82 | loaded, 83 | } 84 | } 85 | 86 | // Check if img has a class that starts with 'transition' 87 | if ([...img.classList].some((value) => value.startsWith('transition'))) { 88 | console.warn( 89 | "Due to the presence of a transition class, x-image-in couldn't initiate on this image in order to avoid potential conflicts.", 90 | img, 91 | ) 92 | } 93 | 94 | const classList = { 95 | base: (theme.base || '').trim().split(' '), 96 | loading: (theme.loading || '').trim().split(' '), 97 | loaded: (theme.loaded || '').trim().split(' '), 98 | } 99 | 100 | const onLoad = async () => { 101 | img.removeEventListener('load', onLoad) 102 | 103 | resolve(img) 104 | 105 | if (typeof options.onLoad === 'function') { 106 | options.onLoad(img) 107 | } 108 | 109 | await wait(100) 110 | img.style.transitionDuration = `${duration}ms` 111 | removeClasses(img, classList.loading) 112 | addClasses(img, classList.loaded) 113 | 114 | if (isPlaceholder) { 115 | img.style.backgroundImage = '' 116 | } else { 117 | img.style.visibility = 'inherit' 118 | } 119 | 120 | await wait(duration) 121 | img.style.transitionDuration = '' 122 | } 123 | 124 | addClasses(img, classList.base) 125 | addClasses(img, classList.loading) 126 | 127 | if (img.complete) { 128 | onLoad() 129 | } else { 130 | img.addEventListener('load', onLoad) 131 | } 132 | }) 133 | } 134 | 135 | /** 136 | * x-image-in directive 137 | * @example Basic usage 138 | * 139 | * @example With a different theme and duration 140 | * 141 | * @example With custom classes and duration 142 | * 143 | * @important 144 | * This css must be added globally: 145 | * img[x-image-in], 146 | * [x-image-in] img { 147 | * visibility: hidden; 148 | * } 149 | */ 150 | export default defineDirective((element, { expression }, { evaluate }) => { 151 | // ⚠️ NOTE: we cannot use value and modifiers because there is CSS applied to [x-image-in] 152 | const options = { 153 | ...(expression 154 | ? (evaluate(expression) as LoadCustomOptions | LoadThemeOptions) 155 | : {}), 156 | } 157 | 158 | if (element.tagName === 'IMG') { 159 | load(element as HTMLImageElement, options) 160 | } else { 161 | for (const img of element.querySelectorAll('img')) load(img, options) 162 | } 163 | }) 164 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Alpine.js with TypeScript 2 | 3 | This is a simple setup to take advantage of both Alpine.js and Typescript. 4 | 5 | ## Installation 6 | 7 | ```bash 8 | $ pnpm install 9 | ``` 10 | 11 | ## CLI commands 12 | 13 | ```bash 14 | $ pnpm dev # Start the development server 15 | 16 | $ pnpm build # Build the theme for production 17 | 18 | $ pnpm lint # Lint the theme files 19 | 20 | $ pnpm lint:scripts # Lint javascript files 21 | 22 | $ pnpm lint:prettier # Lint prettier 23 | 24 | $ pnpm lintfix # Fix the linting issues 25 | ``` 26 | 27 | ### Directives 28 | 29 | The directives are useful to add some behavior to a HTML elements. They are located in the folder `./src/scripts/directives`. 30 | 31 | For more information about the directives, see the [Alpine.js documentation](https://alpinejs.dev/advanced/extending#custom-directives). 32 | 33 | #### Create a new directive 34 | 35 | To create a new directive, you need to create a new file in the directives folder. The file name will be the name of the directive. 36 | 37 | ```ts 38 | // ./src/scripts/directives/x-my-directive.ts 39 | import { defineDirective } from '~/scripts/utils/alpine' 40 | 41 | export default defineDirective( 42 | ( 43 | el: ElementWithXAttributes, 44 | directive: DirectiveData, 45 | utilities: DirectiveUtilities, 46 | ) => { 47 | // Function called when the directive is initialized 48 | }, 49 | ) 50 | ``` 51 | 52 | The directive will be automatically registered in the App (`./src/scripts/directives/index.ts`). 53 | 54 | ### Components 55 | 56 | The components are `Alpine.data` instances. They are located in the folder `./src/scripts/components`. 57 | 58 | For more information about the components, see the [Alpine.js documentation](https://alpinejs.dev/globals/alpine-data). 59 | 60 | #### Create a new component 61 | 62 | To create a new component, you need to create a new file in the components folder. The file name will be the name of the component. 63 | 64 | ```ts 65 | // ./src/scripts/components/MyComponent.ts 66 | import { defineComponent } from '~/scripts/utils/alpine' 67 | 68 | export default defineComponent(() => ({ 69 | init() { 70 | // Function called when the component is initialized 71 | }, 72 | })) 73 | ``` 74 | 75 | Then component will be automatically registered in the App (`./src/scripts/components/index.ts`). 76 | 77 | ### Store 78 | 79 | The store is organized in modules. You can find them in the folder `./src/scripts/store`. 80 | 81 | The store is globally accessible: `window.$store`. 82 | 83 | For more information about the store, see the [Alpine.js documentation](https://alpinejs.dev/globals/alpine-store). 84 | 85 | #### Create a new store module 86 | 87 | To create a new module, you need to create a new file in the store folder. The file name will be the name of the module. 88 | 89 | ```ts 90 | // ./src/scripts/store/myModule.ts 91 | const myModule = { 92 | foo: null, 93 | bar() { 94 | // do something 95 | }, 96 | get baz() { 97 | // get something 98 | }, 99 | init() { 100 | // Function called when the store module is initialized 101 | }, 102 | } 103 | 104 | // Declare myModule as an Alpine store module 105 | declare module 'alpinejs' { 106 | interface Stores { 107 | myModule: typeof myModule 108 | } 109 | } 110 | 111 | export default myModule 112 | ``` 113 | 114 | The store module will be automatically registered in the App (`./src/scripts/store/index.ts`). 115 | 116 | #### Usage inside an Alpine context (e.g.: a component) 117 | 118 | ```ts 119 | import { defineComponent } from '~/utils/alpine' 120 | 121 | export default defineComponent(() => ({ 122 | init() { 123 | console.log(this.$store.myModule.foo) // yay! 💪 124 | } 125 | }) 126 | ``` 127 | 128 | #### Usage anywhere else 129 | 130 | ```ts 131 | window.$store?.myModule.foo // yay! 💪 132 | ``` 133 | 134 | > In that case, the store is potentially `undefined` because depending on where and when you are trying to access it, the store could not be initialized yet. 135 | 136 | ### Magics 137 | 138 | The magics are useful to add some properties or methods in the scope of Alpine (e.g.: store, component). They are located in the folder `./src/scripts/magics`. 139 | 140 | For more information about the magics, see the [Alpine.js documentation](https://alpinejs.dev/advanced/extending#custom-magicss). 141 | 142 | #### Create a new magic 143 | 144 | To create a new magic, you need to create a new file in the magics folder. The file name will be the name of the magic. 145 | 146 | ```ts 147 | // ./src/scripts/magics/$myMagic.ts 148 | import { defineMagic } from '~/scripts/utils/alpine' 149 | 150 | const $myMagic = (el: ElementWithXAttributes, utilities: MagicUtilities) => { 151 | // Your magic here 152 | } 153 | 154 | export default defineMagic(myMagic) 155 | 156 | // Declare $myMagic as a magic property 157 | declare module 'alpinejs' { 158 | // eslint-disable-next-line @typescript-eslint/no-unused-vars 159 | export interface Magics { 160 | $myMagic: ReturnType 161 | } 162 | } 163 | ``` 164 | 165 | The magic will be automatically registered in the App (`./src/scripts/magics/index.ts`). 166 | 167 | ### TailwindCSS 168 | 169 | #### Exposed config 170 | 171 | It can often be useful to reference Tailwind configuration values at runtime, e.g. to access some of your theme values when dynamically applying inline styles in a component. 172 | 173 | By default, colors and screens are exposed but you can add more values by editing the Vite config. 174 | 175 | ```ts 176 | import colors from '#tailwindcss/colors.json' 177 | import screens from '#tailwindcss/screens.json' 178 | ``` 179 | 180 | > Note: If you encounter the error "Cannot find module '#tailwindcss/\*.json' or its corresponding type declarations.", do not panic! You need to either start the dev server or build the theme to generate the JSON files. 181 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | alpinejs: 12 | specifier: ^3.14.8 13 | version: 3.14.8 14 | rosetta: 15 | specifier: ^1.1.0 16 | version: 1.1.0 17 | devDependencies: 18 | '@eslint/js': 19 | specifier: ^9.17.0 20 | version: 9.17.0 21 | '@types/alpinejs': 22 | specifier: ^3.13.11 23 | version: 3.13.11 24 | '@types/node': 25 | specifier: ^22.10.2 26 | version: 22.10.2 27 | autoprefixer: 28 | specifier: ^10.4.20 29 | version: 10.4.20(postcss@8.4.49) 30 | eslint-config-prettier: 31 | specifier: ^9.1.0 32 | version: 9.1.0(eslint@9.17.0(jiti@1.21.7)) 33 | eslint-plugin-prettier: 34 | specifier: ^5.2.1 35 | version: 5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@1.21.7)))(eslint@9.17.0(jiti@1.21.7))(prettier@3.4.2) 36 | eslint-plugin-unicorn: 37 | specifier: ^56.0.1 38 | version: 56.0.1(eslint@9.17.0(jiti@1.21.7)) 39 | globals: 40 | specifier: ^15.14.0 41 | version: 15.14.0 42 | postcss: 43 | specifier: ^8.4.49 44 | version: 8.4.49 45 | prettier-plugin-tailwindcss: 46 | specifier: ^0.6.9 47 | version: 0.6.9(prettier@3.4.2) 48 | tailwindcss: 49 | specifier: ^3.4.17 50 | version: 3.4.17 51 | typescript: 52 | specifier: ~5.6.2 53 | version: 5.6.3 54 | typescript-eslint: 55 | specifier: ^8.18.2 56 | version: 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 57 | vite: 58 | specifier: ^6.0.3 59 | version: 6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1) 60 | vite-plugin-eslint: 61 | specifier: ^1.8.1 62 | version: 1.8.1(eslint@9.17.0(jiti@1.21.7))(vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1)) 63 | 64 | packages: 65 | 66 | '@alloc/quick-lru@5.2.0': 67 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 68 | engines: {node: '>=10'} 69 | 70 | '@babel/code-frame@7.26.2': 71 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 72 | engines: {node: '>=6.9.0'} 73 | 74 | '@babel/helper-validator-identifier@7.25.9': 75 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 76 | engines: {node: '>=6.9.0'} 77 | 78 | '@esbuild/aix-ppc64@0.24.0': 79 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==} 80 | engines: {node: '>=18'} 81 | cpu: [ppc64] 82 | os: [aix] 83 | 84 | '@esbuild/android-arm64@0.24.0': 85 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==} 86 | engines: {node: '>=18'} 87 | cpu: [arm64] 88 | os: [android] 89 | 90 | '@esbuild/android-arm@0.24.0': 91 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==} 92 | engines: {node: '>=18'} 93 | cpu: [arm] 94 | os: [android] 95 | 96 | '@esbuild/android-x64@0.24.0': 97 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==} 98 | engines: {node: '>=18'} 99 | cpu: [x64] 100 | os: [android] 101 | 102 | '@esbuild/darwin-arm64@0.24.0': 103 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==} 104 | engines: {node: '>=18'} 105 | cpu: [arm64] 106 | os: [darwin] 107 | 108 | '@esbuild/darwin-x64@0.24.0': 109 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==} 110 | engines: {node: '>=18'} 111 | cpu: [x64] 112 | os: [darwin] 113 | 114 | '@esbuild/freebsd-arm64@0.24.0': 115 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==} 116 | engines: {node: '>=18'} 117 | cpu: [arm64] 118 | os: [freebsd] 119 | 120 | '@esbuild/freebsd-x64@0.24.0': 121 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==} 122 | engines: {node: '>=18'} 123 | cpu: [x64] 124 | os: [freebsd] 125 | 126 | '@esbuild/linux-arm64@0.24.0': 127 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==} 128 | engines: {node: '>=18'} 129 | cpu: [arm64] 130 | os: [linux] 131 | 132 | '@esbuild/linux-arm@0.24.0': 133 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==} 134 | engines: {node: '>=18'} 135 | cpu: [arm] 136 | os: [linux] 137 | 138 | '@esbuild/linux-ia32@0.24.0': 139 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==} 140 | engines: {node: '>=18'} 141 | cpu: [ia32] 142 | os: [linux] 143 | 144 | '@esbuild/linux-loong64@0.24.0': 145 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==} 146 | engines: {node: '>=18'} 147 | cpu: [loong64] 148 | os: [linux] 149 | 150 | '@esbuild/linux-mips64el@0.24.0': 151 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==} 152 | engines: {node: '>=18'} 153 | cpu: [mips64el] 154 | os: [linux] 155 | 156 | '@esbuild/linux-ppc64@0.24.0': 157 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==} 158 | engines: {node: '>=18'} 159 | cpu: [ppc64] 160 | os: [linux] 161 | 162 | '@esbuild/linux-riscv64@0.24.0': 163 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==} 164 | engines: {node: '>=18'} 165 | cpu: [riscv64] 166 | os: [linux] 167 | 168 | '@esbuild/linux-s390x@0.24.0': 169 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==} 170 | engines: {node: '>=18'} 171 | cpu: [s390x] 172 | os: [linux] 173 | 174 | '@esbuild/linux-x64@0.24.0': 175 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==} 176 | engines: {node: '>=18'} 177 | cpu: [x64] 178 | os: [linux] 179 | 180 | '@esbuild/netbsd-x64@0.24.0': 181 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==} 182 | engines: {node: '>=18'} 183 | cpu: [x64] 184 | os: [netbsd] 185 | 186 | '@esbuild/openbsd-arm64@0.24.0': 187 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==} 188 | engines: {node: '>=18'} 189 | cpu: [arm64] 190 | os: [openbsd] 191 | 192 | '@esbuild/openbsd-x64@0.24.0': 193 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==} 194 | engines: {node: '>=18'} 195 | cpu: [x64] 196 | os: [openbsd] 197 | 198 | '@esbuild/sunos-x64@0.24.0': 199 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==} 200 | engines: {node: '>=18'} 201 | cpu: [x64] 202 | os: [sunos] 203 | 204 | '@esbuild/win32-arm64@0.24.0': 205 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==} 206 | engines: {node: '>=18'} 207 | cpu: [arm64] 208 | os: [win32] 209 | 210 | '@esbuild/win32-ia32@0.24.0': 211 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==} 212 | engines: {node: '>=18'} 213 | cpu: [ia32] 214 | os: [win32] 215 | 216 | '@esbuild/win32-x64@0.24.0': 217 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==} 218 | engines: {node: '>=18'} 219 | cpu: [x64] 220 | os: [win32] 221 | 222 | '@eslint-community/eslint-utils@4.4.1': 223 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 224 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 225 | peerDependencies: 226 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 227 | 228 | '@eslint-community/regexpp@4.12.1': 229 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 230 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 231 | 232 | '@eslint/config-array@0.19.1': 233 | resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==} 234 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 235 | 236 | '@eslint/core@0.9.1': 237 | resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==} 238 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 239 | 240 | '@eslint/eslintrc@3.2.0': 241 | resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} 242 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 243 | 244 | '@eslint/js@9.17.0': 245 | resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} 246 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 247 | 248 | '@eslint/object-schema@2.1.5': 249 | resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==} 250 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 251 | 252 | '@eslint/plugin-kit@0.2.4': 253 | resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==} 254 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 255 | 256 | '@humanfs/core@0.19.1': 257 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 258 | engines: {node: '>=18.18.0'} 259 | 260 | '@humanfs/node@0.16.6': 261 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 262 | engines: {node: '>=18.18.0'} 263 | 264 | '@humanwhocodes/module-importer@1.0.1': 265 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 266 | engines: {node: '>=12.22'} 267 | 268 | '@humanwhocodes/retry@0.3.1': 269 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 270 | engines: {node: '>=18.18'} 271 | 272 | '@humanwhocodes/retry@0.4.1': 273 | resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} 274 | engines: {node: '>=18.18'} 275 | 276 | '@isaacs/cliui@8.0.2': 277 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 278 | engines: {node: '>=12'} 279 | 280 | '@jridgewell/gen-mapping@0.3.8': 281 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 282 | engines: {node: '>=6.0.0'} 283 | 284 | '@jridgewell/resolve-uri@3.1.2': 285 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 286 | engines: {node: '>=6.0.0'} 287 | 288 | '@jridgewell/set-array@1.2.1': 289 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 290 | engines: {node: '>=6.0.0'} 291 | 292 | '@jridgewell/sourcemap-codec@1.5.0': 293 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 294 | 295 | '@jridgewell/trace-mapping@0.3.25': 296 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 297 | 298 | '@nodelib/fs.scandir@2.1.5': 299 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 300 | engines: {node: '>= 8'} 301 | 302 | '@nodelib/fs.stat@2.0.5': 303 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 304 | engines: {node: '>= 8'} 305 | 306 | '@nodelib/fs.walk@1.2.8': 307 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 308 | engines: {node: '>= 8'} 309 | 310 | '@pkgjs/parseargs@0.11.0': 311 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 312 | engines: {node: '>=14'} 313 | 314 | '@pkgr/core@0.1.1': 315 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 316 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 317 | 318 | '@rollup/pluginutils@4.2.1': 319 | resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} 320 | engines: {node: '>= 8.0.0'} 321 | 322 | '@rollup/rollup-android-arm-eabi@4.29.1': 323 | resolution: {integrity: sha512-ssKhA8RNltTZLpG6/QNkCSge+7mBQGUqJRisZ2MDQcEGaK93QESEgWK2iOpIDZ7k9zPVkG5AS3ksvD5ZWxmItw==} 324 | cpu: [arm] 325 | os: [android] 326 | 327 | '@rollup/rollup-android-arm64@4.29.1': 328 | resolution: {integrity: sha512-CaRfrV0cd+NIIcVVN/jx+hVLN+VRqnuzLRmfmlzpOzB87ajixsN/+9L5xNmkaUUvEbI5BmIKS+XTwXsHEb65Ew==} 329 | cpu: [arm64] 330 | os: [android] 331 | 332 | '@rollup/rollup-darwin-arm64@4.29.1': 333 | resolution: {integrity: sha512-2ORr7T31Y0Mnk6qNuwtyNmy14MunTAMx06VAPI6/Ju52W10zk1i7i5U3vlDRWjhOI5quBcrvhkCHyF76bI7kEw==} 334 | cpu: [arm64] 335 | os: [darwin] 336 | 337 | '@rollup/rollup-darwin-x64@4.29.1': 338 | resolution: {integrity: sha512-j/Ej1oanzPjmN0tirRd5K2/nncAhS9W6ICzgxV+9Y5ZsP0hiGhHJXZ2JQ53iSSjj8m6cRY6oB1GMzNn2EUt6Ng==} 339 | cpu: [x64] 340 | os: [darwin] 341 | 342 | '@rollup/rollup-freebsd-arm64@4.29.1': 343 | resolution: {integrity: sha512-91C//G6Dm/cv724tpt7nTyP+JdN12iqeXGFM1SqnljCmi5yTXriH7B1r8AD9dAZByHpKAumqP1Qy2vVNIdLZqw==} 344 | cpu: [arm64] 345 | os: [freebsd] 346 | 347 | '@rollup/rollup-freebsd-x64@4.29.1': 348 | resolution: {integrity: sha512-hEioiEQ9Dec2nIRoeHUP6hr1PSkXzQaCUyqBDQ9I9ik4gCXQZjJMIVzoNLBRGet+hIUb3CISMh9KXuCcWVW/8w==} 349 | cpu: [x64] 350 | os: [freebsd] 351 | 352 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 353 | resolution: {integrity: sha512-Py5vFd5HWYN9zxBv3WMrLAXY3yYJ6Q/aVERoeUFwiDGiMOWsMs7FokXihSOaT/PMWUty/Pj60XDQndK3eAfE6A==} 354 | cpu: [arm] 355 | os: [linux] 356 | 357 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 358 | resolution: {integrity: sha512-RiWpGgbayf7LUcuSNIbahr0ys2YnEERD4gYdISA06wa0i8RALrnzflh9Wxii7zQJEB2/Eh74dX4y/sHKLWp5uQ==} 359 | cpu: [arm] 360 | os: [linux] 361 | 362 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 363 | resolution: {integrity: sha512-Z80O+taYxTQITWMjm/YqNoe9d10OX6kDh8X5/rFCMuPqsKsSyDilvfg+vd3iXIqtfmp+cnfL1UrYirkaF8SBZA==} 364 | cpu: [arm64] 365 | os: [linux] 366 | 367 | '@rollup/rollup-linux-arm64-musl@4.29.1': 368 | resolution: {integrity: sha512-fOHRtF9gahwJk3QVp01a/GqS4hBEZCV1oKglVVq13kcK3NeVlS4BwIFzOHDbmKzt3i0OuHG4zfRP0YoG5OF/rA==} 369 | cpu: [arm64] 370 | os: [linux] 371 | 372 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 373 | resolution: {integrity: sha512-5a7q3tnlbcg0OodyxcAdrrCxFi0DgXJSoOuidFUzHZ2GixZXQs6Tc3CHmlvqKAmOs5eRde+JJxeIf9DonkmYkw==} 374 | cpu: [loong64] 375 | os: [linux] 376 | 377 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 378 | resolution: {integrity: sha512-9b4Mg5Yfz6mRnlSPIdROcfw1BU22FQxmfjlp/CShWwO3LilKQuMISMTtAu/bxmmrE6A902W2cZJuzx8+gJ8e9w==} 379 | cpu: [ppc64] 380 | os: [linux] 381 | 382 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 383 | resolution: {integrity: sha512-G5pn0NChlbRM8OJWpJFMX4/i8OEU538uiSv0P6roZcbpe/WfhEO+AT8SHVKfp8qhDQzaz7Q+1/ixMy7hBRidnQ==} 384 | cpu: [riscv64] 385 | os: [linux] 386 | 387 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 388 | resolution: {integrity: sha512-WM9lIkNdkhVwiArmLxFXpWndFGuOka4oJOZh8EP3Vb8q5lzdSCBuhjavJsw68Q9AKDGeOOIHYzYm4ZFvmWez5g==} 389 | cpu: [s390x] 390 | os: [linux] 391 | 392 | '@rollup/rollup-linux-x64-gnu@4.29.1': 393 | resolution: {integrity: sha512-87xYCwb0cPGZFoGiErT1eDcssByaLX4fc0z2nRM6eMtV9njAfEE6OW3UniAoDhX4Iq5xQVpE6qO9aJbCFumKYQ==} 394 | cpu: [x64] 395 | os: [linux] 396 | 397 | '@rollup/rollup-linux-x64-musl@4.29.1': 398 | resolution: {integrity: sha512-xufkSNppNOdVRCEC4WKvlR1FBDyqCSCpQeMMgv9ZyXqqtKBfkw1yfGMTUTs9Qsl6WQbJnsGboWCp7pJGkeMhKA==} 399 | cpu: [x64] 400 | os: [linux] 401 | 402 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 403 | resolution: {integrity: sha512-F2OiJ42m77lSkizZQLuC+jiZ2cgueWQL5YC9tjo3AgaEw+KJmVxHGSyQfDUoYR9cci0lAywv2Clmckzulcq6ig==} 404 | cpu: [arm64] 405 | os: [win32] 406 | 407 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 408 | resolution: {integrity: sha512-rYRe5S0FcjlOBZQHgbTKNrqxCBUmgDJem/VQTCcTnA2KCabYSWQDrytOzX7avb79cAAweNmMUb/Zw18RNd4mng==} 409 | cpu: [ia32] 410 | os: [win32] 411 | 412 | '@rollup/rollup-win32-x64-msvc@4.29.1': 413 | resolution: {integrity: sha512-+10CMg9vt1MoHj6x1pxyjPSMjHTIlqs8/tBztXvPAx24SKs9jwVnKqHJumlH/IzhaPUaj3T6T6wfZr8okdXaIg==} 414 | cpu: [x64] 415 | os: [win32] 416 | 417 | '@types/alpinejs@3.13.11': 418 | resolution: {integrity: sha512-3KhGkDixCPiLdL3Z/ok1GxHwLxEWqQOKJccgaQL01wc0EVM2tCTaqlC3NIedmxAXkVzt/V6VTM8qPgnOHKJ1MA==} 419 | 420 | '@types/eslint@8.56.12': 421 | resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} 422 | 423 | '@types/estree@1.0.6': 424 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 425 | 426 | '@types/json-schema@7.0.15': 427 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 428 | 429 | '@types/node@22.10.2': 430 | resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==} 431 | 432 | '@types/normalize-package-data@2.4.4': 433 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 434 | 435 | '@typescript-eslint/eslint-plugin@8.18.2': 436 | resolution: {integrity: sha512-adig4SzPLjeQ0Tm+jvsozSGiCliI2ajeURDGHjZ2llnA+A67HihCQ+a3amtPhUakd1GlwHxSRvzOZktbEvhPPg==} 437 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 438 | peerDependencies: 439 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 440 | eslint: ^8.57.0 || ^9.0.0 441 | typescript: '>=4.8.4 <5.8.0' 442 | 443 | '@typescript-eslint/parser@8.18.2': 444 | resolution: {integrity: sha512-y7tcq4StgxQD4mDr9+Jb26dZ+HTZ/SkfqpXSiqeUXZHxOUyjWDKsmwKhJ0/tApR08DgOhrFAoAhyB80/p3ViuA==} 445 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 446 | peerDependencies: 447 | eslint: ^8.57.0 || ^9.0.0 448 | typescript: '>=4.8.4 <5.8.0' 449 | 450 | '@typescript-eslint/scope-manager@8.18.2': 451 | resolution: {integrity: sha512-YJFSfbd0CJjy14r/EvWapYgV4R5CHzptssoag2M7y3Ra7XNta6GPAJPPP5KGB9j14viYXyrzRO5GkX7CRfo8/g==} 452 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 453 | 454 | '@typescript-eslint/type-utils@8.18.2': 455 | resolution: {integrity: sha512-AB/Wr1Lz31bzHfGm/jgbFR0VB0SML/hd2P1yxzKDM48YmP7vbyJNHRExUE/wZsQj2wUCvbWH8poNHFuxLqCTnA==} 456 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 457 | peerDependencies: 458 | eslint: ^8.57.0 || ^9.0.0 459 | typescript: '>=4.8.4 <5.8.0' 460 | 461 | '@typescript-eslint/types@8.18.2': 462 | resolution: {integrity: sha512-Z/zblEPp8cIvmEn6+tPDIHUbRu/0z5lqZ+NvolL5SvXWT5rQy7+Nch83M0++XzO0XrWRFWECgOAyE8bsJTl1GQ==} 463 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 464 | 465 | '@typescript-eslint/typescript-estree@8.18.2': 466 | resolution: {integrity: sha512-WXAVt595HjpmlfH4crSdM/1bcsqh+1weFRWIa9XMTx/XHZ9TCKMcr725tLYqWOgzKdeDrqVHxFotrvWcEsk2Tg==} 467 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 468 | peerDependencies: 469 | typescript: '>=4.8.4 <5.8.0' 470 | 471 | '@typescript-eslint/utils@8.18.2': 472 | resolution: {integrity: sha512-Cr4A0H7DtVIPkauj4sTSXVl+VBWewE9/o40KcF3TV9aqDEOWoXF3/+oRXNby3DYzZeCATvbdksYsGZzplwnK/Q==} 473 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 474 | peerDependencies: 475 | eslint: ^8.57.0 || ^9.0.0 476 | typescript: '>=4.8.4 <5.8.0' 477 | 478 | '@typescript-eslint/visitor-keys@8.18.2': 479 | resolution: {integrity: sha512-zORcwn4C3trOWiCqFQP1x6G3xTRyZ1LYydnj51cRnJ6hxBlr/cKPckk+PKPUw/fXmvfKTcw7bwY3w9izgx5jZw==} 480 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 481 | 482 | '@vue/reactivity@3.1.5': 483 | resolution: {integrity: sha512-1tdfLmNjWG6t/CsPldh+foumYFo3cpyCHgBYQ34ylaMsJ+SNHQ1kApMIa8jN+i593zQuaw3AdWH0nJTARzCFhg==} 484 | 485 | '@vue/shared@3.1.5': 486 | resolution: {integrity: sha512-oJ4F3TnvpXaQwZJNF3ZK+kLPHKarDmJjJ6jyzVNDKH9md1dptjC7lWR//jrGuLdek/U6iltWxqAnYOu8gCiOvA==} 487 | 488 | acorn-jsx@5.3.2: 489 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 490 | peerDependencies: 491 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 492 | 493 | acorn@8.14.0: 494 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 495 | engines: {node: '>=0.4.0'} 496 | hasBin: true 497 | 498 | ajv@6.12.6: 499 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 500 | 501 | alpinejs@3.14.8: 502 | resolution: {integrity: sha512-wT2fuP2DXpGk/jKaglwy7S/IJpm1FD+b7U6zUrhwErjoq5h27S4dxkJEXVvhbdwyPv9U+3OkUuNLkZT4h2Kfrg==} 503 | 504 | ansi-regex@5.0.1: 505 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 506 | engines: {node: '>=8'} 507 | 508 | ansi-regex@6.1.0: 509 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 510 | engines: {node: '>=12'} 511 | 512 | ansi-styles@4.3.0: 513 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 514 | engines: {node: '>=8'} 515 | 516 | ansi-styles@6.2.1: 517 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 518 | engines: {node: '>=12'} 519 | 520 | any-promise@1.3.0: 521 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 522 | 523 | anymatch@3.1.3: 524 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 525 | engines: {node: '>= 8'} 526 | 527 | arg@5.0.2: 528 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 529 | 530 | argparse@2.0.1: 531 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 532 | 533 | autoprefixer@10.4.20: 534 | resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} 535 | engines: {node: ^10 || ^12 || >=14} 536 | hasBin: true 537 | peerDependencies: 538 | postcss: ^8.1.0 539 | 540 | balanced-match@1.0.2: 541 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 542 | 543 | binary-extensions@2.3.0: 544 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 545 | engines: {node: '>=8'} 546 | 547 | brace-expansion@1.1.11: 548 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 549 | 550 | brace-expansion@2.0.1: 551 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 552 | 553 | braces@3.0.3: 554 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 555 | engines: {node: '>=8'} 556 | 557 | browserslist@4.24.3: 558 | resolution: {integrity: sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==} 559 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 560 | hasBin: true 561 | 562 | builtin-modules@3.3.0: 563 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 564 | engines: {node: '>=6'} 565 | 566 | callsites@3.1.0: 567 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 568 | engines: {node: '>=6'} 569 | 570 | camelcase-css@2.0.1: 571 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 572 | engines: {node: '>= 6'} 573 | 574 | caniuse-lite@1.0.30001690: 575 | resolution: {integrity: sha512-5ExiE3qQN6oF8Clf8ifIDcMRCRE/dMGcETG/XGMD8/XiXm6HXQgQTh1yZYLXXpSOsEUlJm1Xr7kGULZTuGtP/w==} 576 | 577 | chalk@4.1.2: 578 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 579 | engines: {node: '>=10'} 580 | 581 | chokidar@3.6.0: 582 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 583 | engines: {node: '>= 8.10.0'} 584 | 585 | ci-info@4.1.0: 586 | resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} 587 | engines: {node: '>=8'} 588 | 589 | clean-regexp@1.0.0: 590 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 591 | engines: {node: '>=4'} 592 | 593 | color-convert@2.0.1: 594 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 595 | engines: {node: '>=7.0.0'} 596 | 597 | color-name@1.1.4: 598 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 599 | 600 | commander@4.1.1: 601 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 602 | engines: {node: '>= 6'} 603 | 604 | concat-map@0.0.1: 605 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 606 | 607 | core-js-compat@3.39.0: 608 | resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} 609 | 610 | cross-spawn@7.0.6: 611 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 612 | engines: {node: '>= 8'} 613 | 614 | cssesc@3.0.0: 615 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 616 | engines: {node: '>=4'} 617 | hasBin: true 618 | 619 | debug@4.4.0: 620 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 621 | engines: {node: '>=6.0'} 622 | peerDependencies: 623 | supports-color: '*' 624 | peerDependenciesMeta: 625 | supports-color: 626 | optional: true 627 | 628 | deep-is@0.1.4: 629 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 630 | 631 | didyoumean@1.2.2: 632 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 633 | 634 | dlv@1.1.3: 635 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 636 | 637 | eastasianwidth@0.2.0: 638 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 639 | 640 | electron-to-chromium@1.5.75: 641 | resolution: {integrity: sha512-Lf3++DumRE/QmweGjU+ZcKqQ+3bKkU/qjaKYhIJKEOhgIO9Xs6IiAQFkfFoj+RhgDk4LUeNsLo6plExHqSyu6Q==} 642 | 643 | emoji-regex@8.0.0: 644 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 645 | 646 | emoji-regex@9.2.2: 647 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 648 | 649 | error-ex@1.3.2: 650 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 651 | 652 | esbuild@0.24.0: 653 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==} 654 | engines: {node: '>=18'} 655 | hasBin: true 656 | 657 | escalade@3.2.0: 658 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 659 | engines: {node: '>=6'} 660 | 661 | escape-string-regexp@1.0.5: 662 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 663 | engines: {node: '>=0.8.0'} 664 | 665 | escape-string-regexp@4.0.0: 666 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 667 | engines: {node: '>=10'} 668 | 669 | eslint-config-prettier@9.1.0: 670 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 671 | hasBin: true 672 | peerDependencies: 673 | eslint: '>=7.0.0' 674 | 675 | eslint-plugin-prettier@5.2.1: 676 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 677 | engines: {node: ^14.18.0 || >=16.0.0} 678 | peerDependencies: 679 | '@types/eslint': '>=8.0.0' 680 | eslint: '>=8.0.0' 681 | eslint-config-prettier: '*' 682 | prettier: '>=3.0.0' 683 | peerDependenciesMeta: 684 | '@types/eslint': 685 | optional: true 686 | eslint-config-prettier: 687 | optional: true 688 | 689 | eslint-plugin-unicorn@56.0.1: 690 | resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} 691 | engines: {node: '>=18.18'} 692 | peerDependencies: 693 | eslint: '>=8.56.0' 694 | 695 | eslint-scope@8.2.0: 696 | resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} 697 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 698 | 699 | eslint-visitor-keys@3.4.3: 700 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 701 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 702 | 703 | eslint-visitor-keys@4.2.0: 704 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 705 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 706 | 707 | eslint@9.17.0: 708 | resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} 709 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 710 | hasBin: true 711 | peerDependencies: 712 | jiti: '*' 713 | peerDependenciesMeta: 714 | jiti: 715 | optional: true 716 | 717 | espree@10.3.0: 718 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 719 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 720 | 721 | esquery@1.6.0: 722 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 723 | engines: {node: '>=0.10'} 724 | 725 | esrecurse@4.3.0: 726 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 727 | engines: {node: '>=4.0'} 728 | 729 | estraverse@5.3.0: 730 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 731 | engines: {node: '>=4.0'} 732 | 733 | estree-walker@2.0.2: 734 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 735 | 736 | esutils@2.0.3: 737 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 738 | engines: {node: '>=0.10.0'} 739 | 740 | fast-deep-equal@3.1.3: 741 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 742 | 743 | fast-diff@1.3.0: 744 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 745 | 746 | fast-glob@3.3.2: 747 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 748 | engines: {node: '>=8.6.0'} 749 | 750 | fast-json-stable-stringify@2.1.0: 751 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 752 | 753 | fast-levenshtein@2.0.6: 754 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 755 | 756 | fastq@1.18.0: 757 | resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==} 758 | 759 | file-entry-cache@8.0.0: 760 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 761 | engines: {node: '>=16.0.0'} 762 | 763 | fill-range@7.1.1: 764 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 765 | engines: {node: '>=8'} 766 | 767 | find-up@4.1.0: 768 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 769 | engines: {node: '>=8'} 770 | 771 | find-up@5.0.0: 772 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 773 | engines: {node: '>=10'} 774 | 775 | flat-cache@4.0.1: 776 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 777 | engines: {node: '>=16'} 778 | 779 | flatted@3.3.2: 780 | resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} 781 | 782 | foreground-child@3.3.0: 783 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 784 | engines: {node: '>=14'} 785 | 786 | fraction.js@4.3.7: 787 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 788 | 789 | fsevents@2.3.3: 790 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 791 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 792 | os: [darwin] 793 | 794 | function-bind@1.1.2: 795 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 796 | 797 | glob-parent@5.1.2: 798 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 799 | engines: {node: '>= 6'} 800 | 801 | glob-parent@6.0.2: 802 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 803 | engines: {node: '>=10.13.0'} 804 | 805 | glob@10.4.5: 806 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 807 | hasBin: true 808 | 809 | globals@14.0.0: 810 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 811 | engines: {node: '>=18'} 812 | 813 | globals@15.14.0: 814 | resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} 815 | engines: {node: '>=18'} 816 | 817 | graphemer@1.4.0: 818 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 819 | 820 | has-flag@4.0.0: 821 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 822 | engines: {node: '>=8'} 823 | 824 | hasown@2.0.2: 825 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 826 | engines: {node: '>= 0.4'} 827 | 828 | hosted-git-info@2.8.9: 829 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 830 | 831 | ignore@5.3.2: 832 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 833 | engines: {node: '>= 4'} 834 | 835 | import-fresh@3.3.0: 836 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 837 | engines: {node: '>=6'} 838 | 839 | imurmurhash@0.1.4: 840 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 841 | engines: {node: '>=0.8.19'} 842 | 843 | indent-string@4.0.0: 844 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 845 | engines: {node: '>=8'} 846 | 847 | is-arrayish@0.2.1: 848 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 849 | 850 | is-binary-path@2.1.0: 851 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 852 | engines: {node: '>=8'} 853 | 854 | is-builtin-module@3.2.1: 855 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 856 | engines: {node: '>=6'} 857 | 858 | is-core-module@2.16.1: 859 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 860 | engines: {node: '>= 0.4'} 861 | 862 | is-extglob@2.1.1: 863 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 864 | engines: {node: '>=0.10.0'} 865 | 866 | is-fullwidth-code-point@3.0.0: 867 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 868 | engines: {node: '>=8'} 869 | 870 | is-glob@4.0.3: 871 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 872 | engines: {node: '>=0.10.0'} 873 | 874 | is-number@7.0.0: 875 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 876 | engines: {node: '>=0.12.0'} 877 | 878 | isexe@2.0.0: 879 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 880 | 881 | jackspeak@3.4.3: 882 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 883 | 884 | jiti@1.21.7: 885 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 886 | hasBin: true 887 | 888 | js-tokens@4.0.0: 889 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 890 | 891 | js-yaml@4.1.0: 892 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 893 | hasBin: true 894 | 895 | jsesc@0.5.0: 896 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 897 | hasBin: true 898 | 899 | jsesc@3.1.0: 900 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 901 | engines: {node: '>=6'} 902 | hasBin: true 903 | 904 | json-buffer@3.0.1: 905 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 906 | 907 | json-parse-even-better-errors@2.3.1: 908 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 909 | 910 | json-schema-traverse@0.4.1: 911 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 912 | 913 | json-stable-stringify-without-jsonify@1.0.1: 914 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 915 | 916 | keyv@4.5.4: 917 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 918 | 919 | levn@0.4.1: 920 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 921 | engines: {node: '>= 0.8.0'} 922 | 923 | lilconfig@3.1.3: 924 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 925 | engines: {node: '>=14'} 926 | 927 | lines-and-columns@1.2.4: 928 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 929 | 930 | locate-path@5.0.0: 931 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 932 | engines: {node: '>=8'} 933 | 934 | locate-path@6.0.0: 935 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 936 | engines: {node: '>=10'} 937 | 938 | lodash.merge@4.6.2: 939 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 940 | 941 | lru-cache@10.4.3: 942 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 943 | 944 | merge2@1.4.1: 945 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 946 | engines: {node: '>= 8'} 947 | 948 | micromatch@4.0.8: 949 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 950 | engines: {node: '>=8.6'} 951 | 952 | min-indent@1.0.1: 953 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 954 | engines: {node: '>=4'} 955 | 956 | minimatch@3.1.2: 957 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 958 | 959 | minimatch@9.0.5: 960 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 961 | engines: {node: '>=16 || 14 >=14.17'} 962 | 963 | minipass@7.1.2: 964 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 965 | engines: {node: '>=16 || 14 >=14.17'} 966 | 967 | ms@2.1.3: 968 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 969 | 970 | mz@2.7.0: 971 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 972 | 973 | nanoid@3.3.8: 974 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} 975 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 976 | hasBin: true 977 | 978 | natural-compare@1.4.0: 979 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 980 | 981 | node-releases@2.0.19: 982 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 983 | 984 | normalize-package-data@2.5.0: 985 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 986 | 987 | normalize-path@3.0.0: 988 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 989 | engines: {node: '>=0.10.0'} 990 | 991 | normalize-range@0.1.2: 992 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 993 | engines: {node: '>=0.10.0'} 994 | 995 | object-assign@4.1.1: 996 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 997 | engines: {node: '>=0.10.0'} 998 | 999 | object-hash@3.0.0: 1000 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1001 | engines: {node: '>= 6'} 1002 | 1003 | optionator@0.9.4: 1004 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1005 | engines: {node: '>= 0.8.0'} 1006 | 1007 | p-limit@2.3.0: 1008 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1009 | engines: {node: '>=6'} 1010 | 1011 | p-limit@3.1.0: 1012 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1013 | engines: {node: '>=10'} 1014 | 1015 | p-locate@4.1.0: 1016 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1017 | engines: {node: '>=8'} 1018 | 1019 | p-locate@5.0.0: 1020 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1021 | engines: {node: '>=10'} 1022 | 1023 | p-try@2.2.0: 1024 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1025 | engines: {node: '>=6'} 1026 | 1027 | package-json-from-dist@1.0.1: 1028 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1029 | 1030 | parent-module@1.0.1: 1031 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1032 | engines: {node: '>=6'} 1033 | 1034 | parse-json@5.2.0: 1035 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1036 | engines: {node: '>=8'} 1037 | 1038 | path-exists@4.0.0: 1039 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1040 | engines: {node: '>=8'} 1041 | 1042 | path-key@3.1.1: 1043 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1044 | engines: {node: '>=8'} 1045 | 1046 | path-parse@1.0.7: 1047 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1048 | 1049 | path-scurry@1.11.1: 1050 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1051 | engines: {node: '>=16 || 14 >=14.18'} 1052 | 1053 | picocolors@1.1.1: 1054 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1055 | 1056 | picomatch@2.3.1: 1057 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1058 | engines: {node: '>=8.6'} 1059 | 1060 | pify@2.3.0: 1061 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1062 | engines: {node: '>=0.10.0'} 1063 | 1064 | pirates@4.0.6: 1065 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1066 | engines: {node: '>= 6'} 1067 | 1068 | pluralize@8.0.0: 1069 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1070 | engines: {node: '>=4'} 1071 | 1072 | postcss-import@15.1.0: 1073 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1074 | engines: {node: '>=14.0.0'} 1075 | peerDependencies: 1076 | postcss: ^8.0.0 1077 | 1078 | postcss-js@4.0.1: 1079 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1080 | engines: {node: ^12 || ^14 || >= 16} 1081 | peerDependencies: 1082 | postcss: ^8.4.21 1083 | 1084 | postcss-load-config@4.0.2: 1085 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1086 | engines: {node: '>= 14'} 1087 | peerDependencies: 1088 | postcss: '>=8.0.9' 1089 | ts-node: '>=9.0.0' 1090 | peerDependenciesMeta: 1091 | postcss: 1092 | optional: true 1093 | ts-node: 1094 | optional: true 1095 | 1096 | postcss-nested@6.2.0: 1097 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1098 | engines: {node: '>=12.0'} 1099 | peerDependencies: 1100 | postcss: ^8.2.14 1101 | 1102 | postcss-selector-parser@6.1.2: 1103 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1104 | engines: {node: '>=4'} 1105 | 1106 | postcss-value-parser@4.2.0: 1107 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1108 | 1109 | postcss@8.4.49: 1110 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} 1111 | engines: {node: ^10 || ^12 || >=14} 1112 | 1113 | prelude-ls@1.2.1: 1114 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1115 | engines: {node: '>= 0.8.0'} 1116 | 1117 | prettier-linter-helpers@1.0.0: 1118 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1119 | engines: {node: '>=6.0.0'} 1120 | 1121 | prettier-plugin-tailwindcss@0.6.9: 1122 | resolution: {integrity: sha512-r0i3uhaZAXYP0At5xGfJH876W3HHGHDp+LCRUJrs57PBeQ6mYHMwr25KH8NPX44F2yGTvdnH7OqCshlQx183Eg==} 1123 | engines: {node: '>=14.21.3'} 1124 | peerDependencies: 1125 | '@ianvs/prettier-plugin-sort-imports': '*' 1126 | '@prettier/plugin-pug': '*' 1127 | '@shopify/prettier-plugin-liquid': '*' 1128 | '@trivago/prettier-plugin-sort-imports': '*' 1129 | '@zackad/prettier-plugin-twig-melody': '*' 1130 | prettier: ^3.0 1131 | prettier-plugin-astro: '*' 1132 | prettier-plugin-css-order: '*' 1133 | prettier-plugin-import-sort: '*' 1134 | prettier-plugin-jsdoc: '*' 1135 | prettier-plugin-marko: '*' 1136 | prettier-plugin-multiline-arrays: '*' 1137 | prettier-plugin-organize-attributes: '*' 1138 | prettier-plugin-organize-imports: '*' 1139 | prettier-plugin-sort-imports: '*' 1140 | prettier-plugin-style-order: '*' 1141 | prettier-plugin-svelte: '*' 1142 | peerDependenciesMeta: 1143 | '@ianvs/prettier-plugin-sort-imports': 1144 | optional: true 1145 | '@prettier/plugin-pug': 1146 | optional: true 1147 | '@shopify/prettier-plugin-liquid': 1148 | optional: true 1149 | '@trivago/prettier-plugin-sort-imports': 1150 | optional: true 1151 | '@zackad/prettier-plugin-twig-melody': 1152 | optional: true 1153 | prettier-plugin-astro: 1154 | optional: true 1155 | prettier-plugin-css-order: 1156 | optional: true 1157 | prettier-plugin-import-sort: 1158 | optional: true 1159 | prettier-plugin-jsdoc: 1160 | optional: true 1161 | prettier-plugin-marko: 1162 | optional: true 1163 | prettier-plugin-multiline-arrays: 1164 | optional: true 1165 | prettier-plugin-organize-attributes: 1166 | optional: true 1167 | prettier-plugin-organize-imports: 1168 | optional: true 1169 | prettier-plugin-sort-imports: 1170 | optional: true 1171 | prettier-plugin-style-order: 1172 | optional: true 1173 | prettier-plugin-svelte: 1174 | optional: true 1175 | 1176 | prettier@3.4.2: 1177 | resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} 1178 | engines: {node: '>=14'} 1179 | hasBin: true 1180 | 1181 | punycode@2.3.1: 1182 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1183 | engines: {node: '>=6'} 1184 | 1185 | queue-microtask@1.2.3: 1186 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1187 | 1188 | read-cache@1.0.0: 1189 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1190 | 1191 | read-pkg-up@7.0.1: 1192 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1193 | engines: {node: '>=8'} 1194 | 1195 | read-pkg@5.2.0: 1196 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1197 | engines: {node: '>=8'} 1198 | 1199 | readdirp@3.6.0: 1200 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1201 | engines: {node: '>=8.10.0'} 1202 | 1203 | regexp-tree@0.1.27: 1204 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1205 | hasBin: true 1206 | 1207 | regjsparser@0.10.0: 1208 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 1209 | hasBin: true 1210 | 1211 | resolve-from@4.0.0: 1212 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1213 | engines: {node: '>=4'} 1214 | 1215 | resolve@1.22.10: 1216 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1217 | engines: {node: '>= 0.4'} 1218 | hasBin: true 1219 | 1220 | reusify@1.0.4: 1221 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1222 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1223 | 1224 | rollup@2.79.2: 1225 | resolution: {integrity: sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==} 1226 | engines: {node: '>=10.0.0'} 1227 | hasBin: true 1228 | 1229 | rollup@4.29.1: 1230 | resolution: {integrity: sha512-RaJ45M/kmJUzSWDs1Nnd5DdV4eerC98idtUOVr6FfKcgxqvjwHmxc5upLF9qZU9EpsVzzhleFahrT3shLuJzIw==} 1231 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1232 | hasBin: true 1233 | 1234 | rosetta@1.1.0: 1235 | resolution: {integrity: sha512-3jQaCo2ySoDqLIPjy7+AvN3rluLfkG8A27hg0virL0gRAB5BJ3V35IBdkL/t6k1dGK0TVTyUEwXVUJsygyx4pA==} 1236 | engines: {node: '>=8'} 1237 | 1238 | run-parallel@1.2.0: 1239 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1240 | 1241 | semver@5.7.2: 1242 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1243 | hasBin: true 1244 | 1245 | semver@7.6.3: 1246 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1247 | engines: {node: '>=10'} 1248 | hasBin: true 1249 | 1250 | shebang-command@2.0.0: 1251 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1252 | engines: {node: '>=8'} 1253 | 1254 | shebang-regex@3.0.0: 1255 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1256 | engines: {node: '>=8'} 1257 | 1258 | signal-exit@4.1.0: 1259 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1260 | engines: {node: '>=14'} 1261 | 1262 | source-map-js@1.2.1: 1263 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1264 | engines: {node: '>=0.10.0'} 1265 | 1266 | spdx-correct@3.2.0: 1267 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1268 | 1269 | spdx-exceptions@2.5.0: 1270 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1271 | 1272 | spdx-expression-parse@3.0.1: 1273 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1274 | 1275 | spdx-license-ids@3.0.20: 1276 | resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} 1277 | 1278 | string-width@4.2.3: 1279 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1280 | engines: {node: '>=8'} 1281 | 1282 | string-width@5.1.2: 1283 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1284 | engines: {node: '>=12'} 1285 | 1286 | strip-ansi@6.0.1: 1287 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1288 | engines: {node: '>=8'} 1289 | 1290 | strip-ansi@7.1.0: 1291 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1292 | engines: {node: '>=12'} 1293 | 1294 | strip-indent@3.0.0: 1295 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1296 | engines: {node: '>=8'} 1297 | 1298 | strip-json-comments@3.1.1: 1299 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1300 | engines: {node: '>=8'} 1301 | 1302 | sucrase@3.35.0: 1303 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1304 | engines: {node: '>=16 || 14 >=14.17'} 1305 | hasBin: true 1306 | 1307 | supports-color@7.2.0: 1308 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1309 | engines: {node: '>=8'} 1310 | 1311 | supports-preserve-symlinks-flag@1.0.0: 1312 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1313 | engines: {node: '>= 0.4'} 1314 | 1315 | synckit@0.9.2: 1316 | resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==} 1317 | engines: {node: ^14.18.0 || >=16.0.0} 1318 | 1319 | tailwindcss@3.4.17: 1320 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1321 | engines: {node: '>=14.0.0'} 1322 | hasBin: true 1323 | 1324 | templite@1.2.0: 1325 | resolution: {integrity: sha512-O9BpPXF44a9Pg84Be6mjzlrqOtbP2I/B5PNLWu5hb1n9UQ1GTLsjdMg1z5ROCkF6NFXsO5LQfRXEpgTGrZ7Q0Q==} 1326 | 1327 | thenify-all@1.6.0: 1328 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1329 | engines: {node: '>=0.8'} 1330 | 1331 | thenify@3.3.1: 1332 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1333 | 1334 | to-regex-range@5.0.1: 1335 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1336 | engines: {node: '>=8.0'} 1337 | 1338 | ts-api-utils@1.4.3: 1339 | resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} 1340 | engines: {node: '>=16'} 1341 | peerDependencies: 1342 | typescript: '>=4.2.0' 1343 | 1344 | ts-interface-checker@0.1.13: 1345 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1346 | 1347 | tslib@2.8.1: 1348 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1349 | 1350 | type-check@0.4.0: 1351 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1352 | engines: {node: '>= 0.8.0'} 1353 | 1354 | type-fest@0.6.0: 1355 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1356 | engines: {node: '>=8'} 1357 | 1358 | type-fest@0.8.1: 1359 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1360 | engines: {node: '>=8'} 1361 | 1362 | typescript-eslint@8.18.2: 1363 | resolution: {integrity: sha512-KuXezG6jHkvC3MvizeXgupZzaG5wjhU3yE8E7e6viOvAvD9xAWYp8/vy0WULTGe9DYDWcQu7aW03YIV3mSitrQ==} 1364 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1365 | peerDependencies: 1366 | eslint: ^8.57.0 || ^9.0.0 1367 | typescript: '>=4.8.4 <5.8.0' 1368 | 1369 | typescript@5.6.3: 1370 | resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} 1371 | engines: {node: '>=14.17'} 1372 | hasBin: true 1373 | 1374 | undici-types@6.20.0: 1375 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1376 | 1377 | update-browserslist-db@1.1.1: 1378 | resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} 1379 | hasBin: true 1380 | peerDependencies: 1381 | browserslist: '>= 4.21.0' 1382 | 1383 | uri-js@4.4.1: 1384 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1385 | 1386 | util-deprecate@1.0.2: 1387 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1388 | 1389 | validate-npm-package-license@3.0.4: 1390 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1391 | 1392 | vite-plugin-eslint@1.8.1: 1393 | resolution: {integrity: sha512-PqdMf3Y2fLO9FsNPmMX+//2BF5SF8nEWspZdgl4kSt7UvHDRHVVfHvxsD7ULYzZrJDGRxR81Nq7TOFgwMnUang==} 1394 | peerDependencies: 1395 | eslint: '>=7' 1396 | vite: '>=2' 1397 | 1398 | vite@6.0.5: 1399 | resolution: {integrity: sha512-akD5IAH/ID5imgue2DYhzsEwCi0/4VKY31uhMLEYJwPP4TiUp8pL5PIK+Wo7H8qT8JY9i+pVfPydcFPYD1EL7g==} 1400 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1401 | hasBin: true 1402 | peerDependencies: 1403 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1404 | jiti: '>=1.21.0' 1405 | less: '*' 1406 | lightningcss: ^1.21.0 1407 | sass: '*' 1408 | sass-embedded: '*' 1409 | stylus: '*' 1410 | sugarss: '*' 1411 | terser: ^5.16.0 1412 | tsx: ^4.8.1 1413 | yaml: ^2.4.2 1414 | peerDependenciesMeta: 1415 | '@types/node': 1416 | optional: true 1417 | jiti: 1418 | optional: true 1419 | less: 1420 | optional: true 1421 | lightningcss: 1422 | optional: true 1423 | sass: 1424 | optional: true 1425 | sass-embedded: 1426 | optional: true 1427 | stylus: 1428 | optional: true 1429 | sugarss: 1430 | optional: true 1431 | terser: 1432 | optional: true 1433 | tsx: 1434 | optional: true 1435 | yaml: 1436 | optional: true 1437 | 1438 | which@2.0.2: 1439 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1440 | engines: {node: '>= 8'} 1441 | hasBin: true 1442 | 1443 | word-wrap@1.2.5: 1444 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1445 | engines: {node: '>=0.10.0'} 1446 | 1447 | wrap-ansi@7.0.0: 1448 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1449 | engines: {node: '>=10'} 1450 | 1451 | wrap-ansi@8.1.0: 1452 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1453 | engines: {node: '>=12'} 1454 | 1455 | yaml@2.6.1: 1456 | resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==} 1457 | engines: {node: '>= 14'} 1458 | hasBin: true 1459 | 1460 | yocto-queue@0.1.0: 1461 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1462 | engines: {node: '>=10'} 1463 | 1464 | snapshots: 1465 | 1466 | '@alloc/quick-lru@5.2.0': {} 1467 | 1468 | '@babel/code-frame@7.26.2': 1469 | dependencies: 1470 | '@babel/helper-validator-identifier': 7.25.9 1471 | js-tokens: 4.0.0 1472 | picocolors: 1.1.1 1473 | 1474 | '@babel/helper-validator-identifier@7.25.9': {} 1475 | 1476 | '@esbuild/aix-ppc64@0.24.0': 1477 | optional: true 1478 | 1479 | '@esbuild/android-arm64@0.24.0': 1480 | optional: true 1481 | 1482 | '@esbuild/android-arm@0.24.0': 1483 | optional: true 1484 | 1485 | '@esbuild/android-x64@0.24.0': 1486 | optional: true 1487 | 1488 | '@esbuild/darwin-arm64@0.24.0': 1489 | optional: true 1490 | 1491 | '@esbuild/darwin-x64@0.24.0': 1492 | optional: true 1493 | 1494 | '@esbuild/freebsd-arm64@0.24.0': 1495 | optional: true 1496 | 1497 | '@esbuild/freebsd-x64@0.24.0': 1498 | optional: true 1499 | 1500 | '@esbuild/linux-arm64@0.24.0': 1501 | optional: true 1502 | 1503 | '@esbuild/linux-arm@0.24.0': 1504 | optional: true 1505 | 1506 | '@esbuild/linux-ia32@0.24.0': 1507 | optional: true 1508 | 1509 | '@esbuild/linux-loong64@0.24.0': 1510 | optional: true 1511 | 1512 | '@esbuild/linux-mips64el@0.24.0': 1513 | optional: true 1514 | 1515 | '@esbuild/linux-ppc64@0.24.0': 1516 | optional: true 1517 | 1518 | '@esbuild/linux-riscv64@0.24.0': 1519 | optional: true 1520 | 1521 | '@esbuild/linux-s390x@0.24.0': 1522 | optional: true 1523 | 1524 | '@esbuild/linux-x64@0.24.0': 1525 | optional: true 1526 | 1527 | '@esbuild/netbsd-x64@0.24.0': 1528 | optional: true 1529 | 1530 | '@esbuild/openbsd-arm64@0.24.0': 1531 | optional: true 1532 | 1533 | '@esbuild/openbsd-x64@0.24.0': 1534 | optional: true 1535 | 1536 | '@esbuild/sunos-x64@0.24.0': 1537 | optional: true 1538 | 1539 | '@esbuild/win32-arm64@0.24.0': 1540 | optional: true 1541 | 1542 | '@esbuild/win32-ia32@0.24.0': 1543 | optional: true 1544 | 1545 | '@esbuild/win32-x64@0.24.0': 1546 | optional: true 1547 | 1548 | '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(jiti@1.21.7))': 1549 | dependencies: 1550 | eslint: 9.17.0(jiti@1.21.7) 1551 | eslint-visitor-keys: 3.4.3 1552 | 1553 | '@eslint-community/regexpp@4.12.1': {} 1554 | 1555 | '@eslint/config-array@0.19.1': 1556 | dependencies: 1557 | '@eslint/object-schema': 2.1.5 1558 | debug: 4.4.0 1559 | minimatch: 3.1.2 1560 | transitivePeerDependencies: 1561 | - supports-color 1562 | 1563 | '@eslint/core@0.9.1': 1564 | dependencies: 1565 | '@types/json-schema': 7.0.15 1566 | 1567 | '@eslint/eslintrc@3.2.0': 1568 | dependencies: 1569 | ajv: 6.12.6 1570 | debug: 4.4.0 1571 | espree: 10.3.0 1572 | globals: 14.0.0 1573 | ignore: 5.3.2 1574 | import-fresh: 3.3.0 1575 | js-yaml: 4.1.0 1576 | minimatch: 3.1.2 1577 | strip-json-comments: 3.1.1 1578 | transitivePeerDependencies: 1579 | - supports-color 1580 | 1581 | '@eslint/js@9.17.0': {} 1582 | 1583 | '@eslint/object-schema@2.1.5': {} 1584 | 1585 | '@eslint/plugin-kit@0.2.4': 1586 | dependencies: 1587 | levn: 0.4.1 1588 | 1589 | '@humanfs/core@0.19.1': {} 1590 | 1591 | '@humanfs/node@0.16.6': 1592 | dependencies: 1593 | '@humanfs/core': 0.19.1 1594 | '@humanwhocodes/retry': 0.3.1 1595 | 1596 | '@humanwhocodes/module-importer@1.0.1': {} 1597 | 1598 | '@humanwhocodes/retry@0.3.1': {} 1599 | 1600 | '@humanwhocodes/retry@0.4.1': {} 1601 | 1602 | '@isaacs/cliui@8.0.2': 1603 | dependencies: 1604 | string-width: 5.1.2 1605 | string-width-cjs: string-width@4.2.3 1606 | strip-ansi: 7.1.0 1607 | strip-ansi-cjs: strip-ansi@6.0.1 1608 | wrap-ansi: 8.1.0 1609 | wrap-ansi-cjs: wrap-ansi@7.0.0 1610 | 1611 | '@jridgewell/gen-mapping@0.3.8': 1612 | dependencies: 1613 | '@jridgewell/set-array': 1.2.1 1614 | '@jridgewell/sourcemap-codec': 1.5.0 1615 | '@jridgewell/trace-mapping': 0.3.25 1616 | 1617 | '@jridgewell/resolve-uri@3.1.2': {} 1618 | 1619 | '@jridgewell/set-array@1.2.1': {} 1620 | 1621 | '@jridgewell/sourcemap-codec@1.5.0': {} 1622 | 1623 | '@jridgewell/trace-mapping@0.3.25': 1624 | dependencies: 1625 | '@jridgewell/resolve-uri': 3.1.2 1626 | '@jridgewell/sourcemap-codec': 1.5.0 1627 | 1628 | '@nodelib/fs.scandir@2.1.5': 1629 | dependencies: 1630 | '@nodelib/fs.stat': 2.0.5 1631 | run-parallel: 1.2.0 1632 | 1633 | '@nodelib/fs.stat@2.0.5': {} 1634 | 1635 | '@nodelib/fs.walk@1.2.8': 1636 | dependencies: 1637 | '@nodelib/fs.scandir': 2.1.5 1638 | fastq: 1.18.0 1639 | 1640 | '@pkgjs/parseargs@0.11.0': 1641 | optional: true 1642 | 1643 | '@pkgr/core@0.1.1': {} 1644 | 1645 | '@rollup/pluginutils@4.2.1': 1646 | dependencies: 1647 | estree-walker: 2.0.2 1648 | picomatch: 2.3.1 1649 | 1650 | '@rollup/rollup-android-arm-eabi@4.29.1': 1651 | optional: true 1652 | 1653 | '@rollup/rollup-android-arm64@4.29.1': 1654 | optional: true 1655 | 1656 | '@rollup/rollup-darwin-arm64@4.29.1': 1657 | optional: true 1658 | 1659 | '@rollup/rollup-darwin-x64@4.29.1': 1660 | optional: true 1661 | 1662 | '@rollup/rollup-freebsd-arm64@4.29.1': 1663 | optional: true 1664 | 1665 | '@rollup/rollup-freebsd-x64@4.29.1': 1666 | optional: true 1667 | 1668 | '@rollup/rollup-linux-arm-gnueabihf@4.29.1': 1669 | optional: true 1670 | 1671 | '@rollup/rollup-linux-arm-musleabihf@4.29.1': 1672 | optional: true 1673 | 1674 | '@rollup/rollup-linux-arm64-gnu@4.29.1': 1675 | optional: true 1676 | 1677 | '@rollup/rollup-linux-arm64-musl@4.29.1': 1678 | optional: true 1679 | 1680 | '@rollup/rollup-linux-loongarch64-gnu@4.29.1': 1681 | optional: true 1682 | 1683 | '@rollup/rollup-linux-powerpc64le-gnu@4.29.1': 1684 | optional: true 1685 | 1686 | '@rollup/rollup-linux-riscv64-gnu@4.29.1': 1687 | optional: true 1688 | 1689 | '@rollup/rollup-linux-s390x-gnu@4.29.1': 1690 | optional: true 1691 | 1692 | '@rollup/rollup-linux-x64-gnu@4.29.1': 1693 | optional: true 1694 | 1695 | '@rollup/rollup-linux-x64-musl@4.29.1': 1696 | optional: true 1697 | 1698 | '@rollup/rollup-win32-arm64-msvc@4.29.1': 1699 | optional: true 1700 | 1701 | '@rollup/rollup-win32-ia32-msvc@4.29.1': 1702 | optional: true 1703 | 1704 | '@rollup/rollup-win32-x64-msvc@4.29.1': 1705 | optional: true 1706 | 1707 | '@types/alpinejs@3.13.11': {} 1708 | 1709 | '@types/eslint@8.56.12': 1710 | dependencies: 1711 | '@types/estree': 1.0.6 1712 | '@types/json-schema': 7.0.15 1713 | 1714 | '@types/estree@1.0.6': {} 1715 | 1716 | '@types/json-schema@7.0.15': {} 1717 | 1718 | '@types/node@22.10.2': 1719 | dependencies: 1720 | undici-types: 6.20.0 1721 | 1722 | '@types/normalize-package-data@2.4.4': {} 1723 | 1724 | '@typescript-eslint/eslint-plugin@8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1725 | dependencies: 1726 | '@eslint-community/regexpp': 4.12.1 1727 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1728 | '@typescript-eslint/scope-manager': 8.18.2 1729 | '@typescript-eslint/type-utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1730 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1731 | '@typescript-eslint/visitor-keys': 8.18.2 1732 | eslint: 9.17.0(jiti@1.21.7) 1733 | graphemer: 1.4.0 1734 | ignore: 5.3.2 1735 | natural-compare: 1.4.0 1736 | ts-api-utils: 1.4.3(typescript@5.6.3) 1737 | typescript: 5.6.3 1738 | transitivePeerDependencies: 1739 | - supports-color 1740 | 1741 | '@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1742 | dependencies: 1743 | '@typescript-eslint/scope-manager': 8.18.2 1744 | '@typescript-eslint/types': 8.18.2 1745 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1746 | '@typescript-eslint/visitor-keys': 8.18.2 1747 | debug: 4.4.0 1748 | eslint: 9.17.0(jiti@1.21.7) 1749 | typescript: 5.6.3 1750 | transitivePeerDependencies: 1751 | - supports-color 1752 | 1753 | '@typescript-eslint/scope-manager@8.18.2': 1754 | dependencies: 1755 | '@typescript-eslint/types': 8.18.2 1756 | '@typescript-eslint/visitor-keys': 8.18.2 1757 | 1758 | '@typescript-eslint/type-utils@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1759 | dependencies: 1760 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1761 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 1762 | debug: 4.4.0 1763 | eslint: 9.17.0(jiti@1.21.7) 1764 | ts-api-utils: 1.4.3(typescript@5.6.3) 1765 | typescript: 5.6.3 1766 | transitivePeerDependencies: 1767 | - supports-color 1768 | 1769 | '@typescript-eslint/types@8.18.2': {} 1770 | 1771 | '@typescript-eslint/typescript-estree@8.18.2(typescript@5.6.3)': 1772 | dependencies: 1773 | '@typescript-eslint/types': 8.18.2 1774 | '@typescript-eslint/visitor-keys': 8.18.2 1775 | debug: 4.4.0 1776 | fast-glob: 3.3.2 1777 | is-glob: 4.0.3 1778 | minimatch: 9.0.5 1779 | semver: 7.6.3 1780 | ts-api-utils: 1.4.3(typescript@5.6.3) 1781 | typescript: 5.6.3 1782 | transitivePeerDependencies: 1783 | - supports-color 1784 | 1785 | '@typescript-eslint/utils@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3)': 1786 | dependencies: 1787 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7)) 1788 | '@typescript-eslint/scope-manager': 8.18.2 1789 | '@typescript-eslint/types': 8.18.2 1790 | '@typescript-eslint/typescript-estree': 8.18.2(typescript@5.6.3) 1791 | eslint: 9.17.0(jiti@1.21.7) 1792 | typescript: 5.6.3 1793 | transitivePeerDependencies: 1794 | - supports-color 1795 | 1796 | '@typescript-eslint/visitor-keys@8.18.2': 1797 | dependencies: 1798 | '@typescript-eslint/types': 8.18.2 1799 | eslint-visitor-keys: 4.2.0 1800 | 1801 | '@vue/reactivity@3.1.5': 1802 | dependencies: 1803 | '@vue/shared': 3.1.5 1804 | 1805 | '@vue/shared@3.1.5': {} 1806 | 1807 | acorn-jsx@5.3.2(acorn@8.14.0): 1808 | dependencies: 1809 | acorn: 8.14.0 1810 | 1811 | acorn@8.14.0: {} 1812 | 1813 | ajv@6.12.6: 1814 | dependencies: 1815 | fast-deep-equal: 3.1.3 1816 | fast-json-stable-stringify: 2.1.0 1817 | json-schema-traverse: 0.4.1 1818 | uri-js: 4.4.1 1819 | 1820 | alpinejs@3.14.8: 1821 | dependencies: 1822 | '@vue/reactivity': 3.1.5 1823 | 1824 | ansi-regex@5.0.1: {} 1825 | 1826 | ansi-regex@6.1.0: {} 1827 | 1828 | ansi-styles@4.3.0: 1829 | dependencies: 1830 | color-convert: 2.0.1 1831 | 1832 | ansi-styles@6.2.1: {} 1833 | 1834 | any-promise@1.3.0: {} 1835 | 1836 | anymatch@3.1.3: 1837 | dependencies: 1838 | normalize-path: 3.0.0 1839 | picomatch: 2.3.1 1840 | 1841 | arg@5.0.2: {} 1842 | 1843 | argparse@2.0.1: {} 1844 | 1845 | autoprefixer@10.4.20(postcss@8.4.49): 1846 | dependencies: 1847 | browserslist: 4.24.3 1848 | caniuse-lite: 1.0.30001690 1849 | fraction.js: 4.3.7 1850 | normalize-range: 0.1.2 1851 | picocolors: 1.1.1 1852 | postcss: 8.4.49 1853 | postcss-value-parser: 4.2.0 1854 | 1855 | balanced-match@1.0.2: {} 1856 | 1857 | binary-extensions@2.3.0: {} 1858 | 1859 | brace-expansion@1.1.11: 1860 | dependencies: 1861 | balanced-match: 1.0.2 1862 | concat-map: 0.0.1 1863 | 1864 | brace-expansion@2.0.1: 1865 | dependencies: 1866 | balanced-match: 1.0.2 1867 | 1868 | braces@3.0.3: 1869 | dependencies: 1870 | fill-range: 7.1.1 1871 | 1872 | browserslist@4.24.3: 1873 | dependencies: 1874 | caniuse-lite: 1.0.30001690 1875 | electron-to-chromium: 1.5.75 1876 | node-releases: 2.0.19 1877 | update-browserslist-db: 1.1.1(browserslist@4.24.3) 1878 | 1879 | builtin-modules@3.3.0: {} 1880 | 1881 | callsites@3.1.0: {} 1882 | 1883 | camelcase-css@2.0.1: {} 1884 | 1885 | caniuse-lite@1.0.30001690: {} 1886 | 1887 | chalk@4.1.2: 1888 | dependencies: 1889 | ansi-styles: 4.3.0 1890 | supports-color: 7.2.0 1891 | 1892 | chokidar@3.6.0: 1893 | dependencies: 1894 | anymatch: 3.1.3 1895 | braces: 3.0.3 1896 | glob-parent: 5.1.2 1897 | is-binary-path: 2.1.0 1898 | is-glob: 4.0.3 1899 | normalize-path: 3.0.0 1900 | readdirp: 3.6.0 1901 | optionalDependencies: 1902 | fsevents: 2.3.3 1903 | 1904 | ci-info@4.1.0: {} 1905 | 1906 | clean-regexp@1.0.0: 1907 | dependencies: 1908 | escape-string-regexp: 1.0.5 1909 | 1910 | color-convert@2.0.1: 1911 | dependencies: 1912 | color-name: 1.1.4 1913 | 1914 | color-name@1.1.4: {} 1915 | 1916 | commander@4.1.1: {} 1917 | 1918 | concat-map@0.0.1: {} 1919 | 1920 | core-js-compat@3.39.0: 1921 | dependencies: 1922 | browserslist: 4.24.3 1923 | 1924 | cross-spawn@7.0.6: 1925 | dependencies: 1926 | path-key: 3.1.1 1927 | shebang-command: 2.0.0 1928 | which: 2.0.2 1929 | 1930 | cssesc@3.0.0: {} 1931 | 1932 | debug@4.4.0: 1933 | dependencies: 1934 | ms: 2.1.3 1935 | 1936 | deep-is@0.1.4: {} 1937 | 1938 | didyoumean@1.2.2: {} 1939 | 1940 | dlv@1.1.3: {} 1941 | 1942 | eastasianwidth@0.2.0: {} 1943 | 1944 | electron-to-chromium@1.5.75: {} 1945 | 1946 | emoji-regex@8.0.0: {} 1947 | 1948 | emoji-regex@9.2.2: {} 1949 | 1950 | error-ex@1.3.2: 1951 | dependencies: 1952 | is-arrayish: 0.2.1 1953 | 1954 | esbuild@0.24.0: 1955 | optionalDependencies: 1956 | '@esbuild/aix-ppc64': 0.24.0 1957 | '@esbuild/android-arm': 0.24.0 1958 | '@esbuild/android-arm64': 0.24.0 1959 | '@esbuild/android-x64': 0.24.0 1960 | '@esbuild/darwin-arm64': 0.24.0 1961 | '@esbuild/darwin-x64': 0.24.0 1962 | '@esbuild/freebsd-arm64': 0.24.0 1963 | '@esbuild/freebsd-x64': 0.24.0 1964 | '@esbuild/linux-arm': 0.24.0 1965 | '@esbuild/linux-arm64': 0.24.0 1966 | '@esbuild/linux-ia32': 0.24.0 1967 | '@esbuild/linux-loong64': 0.24.0 1968 | '@esbuild/linux-mips64el': 0.24.0 1969 | '@esbuild/linux-ppc64': 0.24.0 1970 | '@esbuild/linux-riscv64': 0.24.0 1971 | '@esbuild/linux-s390x': 0.24.0 1972 | '@esbuild/linux-x64': 0.24.0 1973 | '@esbuild/netbsd-x64': 0.24.0 1974 | '@esbuild/openbsd-arm64': 0.24.0 1975 | '@esbuild/openbsd-x64': 0.24.0 1976 | '@esbuild/sunos-x64': 0.24.0 1977 | '@esbuild/win32-arm64': 0.24.0 1978 | '@esbuild/win32-ia32': 0.24.0 1979 | '@esbuild/win32-x64': 0.24.0 1980 | 1981 | escalade@3.2.0: {} 1982 | 1983 | escape-string-regexp@1.0.5: {} 1984 | 1985 | escape-string-regexp@4.0.0: {} 1986 | 1987 | eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@1.21.7)): 1988 | dependencies: 1989 | eslint: 9.17.0(jiti@1.21.7) 1990 | 1991 | eslint-plugin-prettier@5.2.1(@types/eslint@8.56.12)(eslint-config-prettier@9.1.0(eslint@9.17.0(jiti@1.21.7)))(eslint@9.17.0(jiti@1.21.7))(prettier@3.4.2): 1992 | dependencies: 1993 | eslint: 9.17.0(jiti@1.21.7) 1994 | prettier: 3.4.2 1995 | prettier-linter-helpers: 1.0.0 1996 | synckit: 0.9.2 1997 | optionalDependencies: 1998 | '@types/eslint': 8.56.12 1999 | eslint-config-prettier: 9.1.0(eslint@9.17.0(jiti@1.21.7)) 2000 | 2001 | eslint-plugin-unicorn@56.0.1(eslint@9.17.0(jiti@1.21.7)): 2002 | dependencies: 2003 | '@babel/helper-validator-identifier': 7.25.9 2004 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7)) 2005 | ci-info: 4.1.0 2006 | clean-regexp: 1.0.0 2007 | core-js-compat: 3.39.0 2008 | eslint: 9.17.0(jiti@1.21.7) 2009 | esquery: 1.6.0 2010 | globals: 15.14.0 2011 | indent-string: 4.0.0 2012 | is-builtin-module: 3.2.1 2013 | jsesc: 3.1.0 2014 | pluralize: 8.0.0 2015 | read-pkg-up: 7.0.1 2016 | regexp-tree: 0.1.27 2017 | regjsparser: 0.10.0 2018 | semver: 7.6.3 2019 | strip-indent: 3.0.0 2020 | 2021 | eslint-scope@8.2.0: 2022 | dependencies: 2023 | esrecurse: 4.3.0 2024 | estraverse: 5.3.0 2025 | 2026 | eslint-visitor-keys@3.4.3: {} 2027 | 2028 | eslint-visitor-keys@4.2.0: {} 2029 | 2030 | eslint@9.17.0(jiti@1.21.7): 2031 | dependencies: 2032 | '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(jiti@1.21.7)) 2033 | '@eslint-community/regexpp': 4.12.1 2034 | '@eslint/config-array': 0.19.1 2035 | '@eslint/core': 0.9.1 2036 | '@eslint/eslintrc': 3.2.0 2037 | '@eslint/js': 9.17.0 2038 | '@eslint/plugin-kit': 0.2.4 2039 | '@humanfs/node': 0.16.6 2040 | '@humanwhocodes/module-importer': 1.0.1 2041 | '@humanwhocodes/retry': 0.4.1 2042 | '@types/estree': 1.0.6 2043 | '@types/json-schema': 7.0.15 2044 | ajv: 6.12.6 2045 | chalk: 4.1.2 2046 | cross-spawn: 7.0.6 2047 | debug: 4.4.0 2048 | escape-string-regexp: 4.0.0 2049 | eslint-scope: 8.2.0 2050 | eslint-visitor-keys: 4.2.0 2051 | espree: 10.3.0 2052 | esquery: 1.6.0 2053 | esutils: 2.0.3 2054 | fast-deep-equal: 3.1.3 2055 | file-entry-cache: 8.0.0 2056 | find-up: 5.0.0 2057 | glob-parent: 6.0.2 2058 | ignore: 5.3.2 2059 | imurmurhash: 0.1.4 2060 | is-glob: 4.0.3 2061 | json-stable-stringify-without-jsonify: 1.0.1 2062 | lodash.merge: 4.6.2 2063 | minimatch: 3.1.2 2064 | natural-compare: 1.4.0 2065 | optionator: 0.9.4 2066 | optionalDependencies: 2067 | jiti: 1.21.7 2068 | transitivePeerDependencies: 2069 | - supports-color 2070 | 2071 | espree@10.3.0: 2072 | dependencies: 2073 | acorn: 8.14.0 2074 | acorn-jsx: 5.3.2(acorn@8.14.0) 2075 | eslint-visitor-keys: 4.2.0 2076 | 2077 | esquery@1.6.0: 2078 | dependencies: 2079 | estraverse: 5.3.0 2080 | 2081 | esrecurse@4.3.0: 2082 | dependencies: 2083 | estraverse: 5.3.0 2084 | 2085 | estraverse@5.3.0: {} 2086 | 2087 | estree-walker@2.0.2: {} 2088 | 2089 | esutils@2.0.3: {} 2090 | 2091 | fast-deep-equal@3.1.3: {} 2092 | 2093 | fast-diff@1.3.0: {} 2094 | 2095 | fast-glob@3.3.2: 2096 | dependencies: 2097 | '@nodelib/fs.stat': 2.0.5 2098 | '@nodelib/fs.walk': 1.2.8 2099 | glob-parent: 5.1.2 2100 | merge2: 1.4.1 2101 | micromatch: 4.0.8 2102 | 2103 | fast-json-stable-stringify@2.1.0: {} 2104 | 2105 | fast-levenshtein@2.0.6: {} 2106 | 2107 | fastq@1.18.0: 2108 | dependencies: 2109 | reusify: 1.0.4 2110 | 2111 | file-entry-cache@8.0.0: 2112 | dependencies: 2113 | flat-cache: 4.0.1 2114 | 2115 | fill-range@7.1.1: 2116 | dependencies: 2117 | to-regex-range: 5.0.1 2118 | 2119 | find-up@4.1.0: 2120 | dependencies: 2121 | locate-path: 5.0.0 2122 | path-exists: 4.0.0 2123 | 2124 | find-up@5.0.0: 2125 | dependencies: 2126 | locate-path: 6.0.0 2127 | path-exists: 4.0.0 2128 | 2129 | flat-cache@4.0.1: 2130 | dependencies: 2131 | flatted: 3.3.2 2132 | keyv: 4.5.4 2133 | 2134 | flatted@3.3.2: {} 2135 | 2136 | foreground-child@3.3.0: 2137 | dependencies: 2138 | cross-spawn: 7.0.6 2139 | signal-exit: 4.1.0 2140 | 2141 | fraction.js@4.3.7: {} 2142 | 2143 | fsevents@2.3.3: 2144 | optional: true 2145 | 2146 | function-bind@1.1.2: {} 2147 | 2148 | glob-parent@5.1.2: 2149 | dependencies: 2150 | is-glob: 4.0.3 2151 | 2152 | glob-parent@6.0.2: 2153 | dependencies: 2154 | is-glob: 4.0.3 2155 | 2156 | glob@10.4.5: 2157 | dependencies: 2158 | foreground-child: 3.3.0 2159 | jackspeak: 3.4.3 2160 | minimatch: 9.0.5 2161 | minipass: 7.1.2 2162 | package-json-from-dist: 1.0.1 2163 | path-scurry: 1.11.1 2164 | 2165 | globals@14.0.0: {} 2166 | 2167 | globals@15.14.0: {} 2168 | 2169 | graphemer@1.4.0: {} 2170 | 2171 | has-flag@4.0.0: {} 2172 | 2173 | hasown@2.0.2: 2174 | dependencies: 2175 | function-bind: 1.1.2 2176 | 2177 | hosted-git-info@2.8.9: {} 2178 | 2179 | ignore@5.3.2: {} 2180 | 2181 | import-fresh@3.3.0: 2182 | dependencies: 2183 | parent-module: 1.0.1 2184 | resolve-from: 4.0.0 2185 | 2186 | imurmurhash@0.1.4: {} 2187 | 2188 | indent-string@4.0.0: {} 2189 | 2190 | is-arrayish@0.2.1: {} 2191 | 2192 | is-binary-path@2.1.0: 2193 | dependencies: 2194 | binary-extensions: 2.3.0 2195 | 2196 | is-builtin-module@3.2.1: 2197 | dependencies: 2198 | builtin-modules: 3.3.0 2199 | 2200 | is-core-module@2.16.1: 2201 | dependencies: 2202 | hasown: 2.0.2 2203 | 2204 | is-extglob@2.1.1: {} 2205 | 2206 | is-fullwidth-code-point@3.0.0: {} 2207 | 2208 | is-glob@4.0.3: 2209 | dependencies: 2210 | is-extglob: 2.1.1 2211 | 2212 | is-number@7.0.0: {} 2213 | 2214 | isexe@2.0.0: {} 2215 | 2216 | jackspeak@3.4.3: 2217 | dependencies: 2218 | '@isaacs/cliui': 8.0.2 2219 | optionalDependencies: 2220 | '@pkgjs/parseargs': 0.11.0 2221 | 2222 | jiti@1.21.7: {} 2223 | 2224 | js-tokens@4.0.0: {} 2225 | 2226 | js-yaml@4.1.0: 2227 | dependencies: 2228 | argparse: 2.0.1 2229 | 2230 | jsesc@0.5.0: {} 2231 | 2232 | jsesc@3.1.0: {} 2233 | 2234 | json-buffer@3.0.1: {} 2235 | 2236 | json-parse-even-better-errors@2.3.1: {} 2237 | 2238 | json-schema-traverse@0.4.1: {} 2239 | 2240 | json-stable-stringify-without-jsonify@1.0.1: {} 2241 | 2242 | keyv@4.5.4: 2243 | dependencies: 2244 | json-buffer: 3.0.1 2245 | 2246 | levn@0.4.1: 2247 | dependencies: 2248 | prelude-ls: 1.2.1 2249 | type-check: 0.4.0 2250 | 2251 | lilconfig@3.1.3: {} 2252 | 2253 | lines-and-columns@1.2.4: {} 2254 | 2255 | locate-path@5.0.0: 2256 | dependencies: 2257 | p-locate: 4.1.0 2258 | 2259 | locate-path@6.0.0: 2260 | dependencies: 2261 | p-locate: 5.0.0 2262 | 2263 | lodash.merge@4.6.2: {} 2264 | 2265 | lru-cache@10.4.3: {} 2266 | 2267 | merge2@1.4.1: {} 2268 | 2269 | micromatch@4.0.8: 2270 | dependencies: 2271 | braces: 3.0.3 2272 | picomatch: 2.3.1 2273 | 2274 | min-indent@1.0.1: {} 2275 | 2276 | minimatch@3.1.2: 2277 | dependencies: 2278 | brace-expansion: 1.1.11 2279 | 2280 | minimatch@9.0.5: 2281 | dependencies: 2282 | brace-expansion: 2.0.1 2283 | 2284 | minipass@7.1.2: {} 2285 | 2286 | ms@2.1.3: {} 2287 | 2288 | mz@2.7.0: 2289 | dependencies: 2290 | any-promise: 1.3.0 2291 | object-assign: 4.1.1 2292 | thenify-all: 1.6.0 2293 | 2294 | nanoid@3.3.8: {} 2295 | 2296 | natural-compare@1.4.0: {} 2297 | 2298 | node-releases@2.0.19: {} 2299 | 2300 | normalize-package-data@2.5.0: 2301 | dependencies: 2302 | hosted-git-info: 2.8.9 2303 | resolve: 1.22.10 2304 | semver: 5.7.2 2305 | validate-npm-package-license: 3.0.4 2306 | 2307 | normalize-path@3.0.0: {} 2308 | 2309 | normalize-range@0.1.2: {} 2310 | 2311 | object-assign@4.1.1: {} 2312 | 2313 | object-hash@3.0.0: {} 2314 | 2315 | optionator@0.9.4: 2316 | dependencies: 2317 | deep-is: 0.1.4 2318 | fast-levenshtein: 2.0.6 2319 | levn: 0.4.1 2320 | prelude-ls: 1.2.1 2321 | type-check: 0.4.0 2322 | word-wrap: 1.2.5 2323 | 2324 | p-limit@2.3.0: 2325 | dependencies: 2326 | p-try: 2.2.0 2327 | 2328 | p-limit@3.1.0: 2329 | dependencies: 2330 | yocto-queue: 0.1.0 2331 | 2332 | p-locate@4.1.0: 2333 | dependencies: 2334 | p-limit: 2.3.0 2335 | 2336 | p-locate@5.0.0: 2337 | dependencies: 2338 | p-limit: 3.1.0 2339 | 2340 | p-try@2.2.0: {} 2341 | 2342 | package-json-from-dist@1.0.1: {} 2343 | 2344 | parent-module@1.0.1: 2345 | dependencies: 2346 | callsites: 3.1.0 2347 | 2348 | parse-json@5.2.0: 2349 | dependencies: 2350 | '@babel/code-frame': 7.26.2 2351 | error-ex: 1.3.2 2352 | json-parse-even-better-errors: 2.3.1 2353 | lines-and-columns: 1.2.4 2354 | 2355 | path-exists@4.0.0: {} 2356 | 2357 | path-key@3.1.1: {} 2358 | 2359 | path-parse@1.0.7: {} 2360 | 2361 | path-scurry@1.11.1: 2362 | dependencies: 2363 | lru-cache: 10.4.3 2364 | minipass: 7.1.2 2365 | 2366 | picocolors@1.1.1: {} 2367 | 2368 | picomatch@2.3.1: {} 2369 | 2370 | pify@2.3.0: {} 2371 | 2372 | pirates@4.0.6: {} 2373 | 2374 | pluralize@8.0.0: {} 2375 | 2376 | postcss-import@15.1.0(postcss@8.4.49): 2377 | dependencies: 2378 | postcss: 8.4.49 2379 | postcss-value-parser: 4.2.0 2380 | read-cache: 1.0.0 2381 | resolve: 1.22.10 2382 | 2383 | postcss-js@4.0.1(postcss@8.4.49): 2384 | dependencies: 2385 | camelcase-css: 2.0.1 2386 | postcss: 8.4.49 2387 | 2388 | postcss-load-config@4.0.2(postcss@8.4.49): 2389 | dependencies: 2390 | lilconfig: 3.1.3 2391 | yaml: 2.6.1 2392 | optionalDependencies: 2393 | postcss: 8.4.49 2394 | 2395 | postcss-nested@6.2.0(postcss@8.4.49): 2396 | dependencies: 2397 | postcss: 8.4.49 2398 | postcss-selector-parser: 6.1.2 2399 | 2400 | postcss-selector-parser@6.1.2: 2401 | dependencies: 2402 | cssesc: 3.0.0 2403 | util-deprecate: 1.0.2 2404 | 2405 | postcss-value-parser@4.2.0: {} 2406 | 2407 | postcss@8.4.49: 2408 | dependencies: 2409 | nanoid: 3.3.8 2410 | picocolors: 1.1.1 2411 | source-map-js: 1.2.1 2412 | 2413 | prelude-ls@1.2.1: {} 2414 | 2415 | prettier-linter-helpers@1.0.0: 2416 | dependencies: 2417 | fast-diff: 1.3.0 2418 | 2419 | prettier-plugin-tailwindcss@0.6.9(prettier@3.4.2): 2420 | dependencies: 2421 | prettier: 3.4.2 2422 | 2423 | prettier@3.4.2: {} 2424 | 2425 | punycode@2.3.1: {} 2426 | 2427 | queue-microtask@1.2.3: {} 2428 | 2429 | read-cache@1.0.0: 2430 | dependencies: 2431 | pify: 2.3.0 2432 | 2433 | read-pkg-up@7.0.1: 2434 | dependencies: 2435 | find-up: 4.1.0 2436 | read-pkg: 5.2.0 2437 | type-fest: 0.8.1 2438 | 2439 | read-pkg@5.2.0: 2440 | dependencies: 2441 | '@types/normalize-package-data': 2.4.4 2442 | normalize-package-data: 2.5.0 2443 | parse-json: 5.2.0 2444 | type-fest: 0.6.0 2445 | 2446 | readdirp@3.6.0: 2447 | dependencies: 2448 | picomatch: 2.3.1 2449 | 2450 | regexp-tree@0.1.27: {} 2451 | 2452 | regjsparser@0.10.0: 2453 | dependencies: 2454 | jsesc: 0.5.0 2455 | 2456 | resolve-from@4.0.0: {} 2457 | 2458 | resolve@1.22.10: 2459 | dependencies: 2460 | is-core-module: 2.16.1 2461 | path-parse: 1.0.7 2462 | supports-preserve-symlinks-flag: 1.0.0 2463 | 2464 | reusify@1.0.4: {} 2465 | 2466 | rollup@2.79.2: 2467 | optionalDependencies: 2468 | fsevents: 2.3.3 2469 | 2470 | rollup@4.29.1: 2471 | dependencies: 2472 | '@types/estree': 1.0.6 2473 | optionalDependencies: 2474 | '@rollup/rollup-android-arm-eabi': 4.29.1 2475 | '@rollup/rollup-android-arm64': 4.29.1 2476 | '@rollup/rollup-darwin-arm64': 4.29.1 2477 | '@rollup/rollup-darwin-x64': 4.29.1 2478 | '@rollup/rollup-freebsd-arm64': 4.29.1 2479 | '@rollup/rollup-freebsd-x64': 4.29.1 2480 | '@rollup/rollup-linux-arm-gnueabihf': 4.29.1 2481 | '@rollup/rollup-linux-arm-musleabihf': 4.29.1 2482 | '@rollup/rollup-linux-arm64-gnu': 4.29.1 2483 | '@rollup/rollup-linux-arm64-musl': 4.29.1 2484 | '@rollup/rollup-linux-loongarch64-gnu': 4.29.1 2485 | '@rollup/rollup-linux-powerpc64le-gnu': 4.29.1 2486 | '@rollup/rollup-linux-riscv64-gnu': 4.29.1 2487 | '@rollup/rollup-linux-s390x-gnu': 4.29.1 2488 | '@rollup/rollup-linux-x64-gnu': 4.29.1 2489 | '@rollup/rollup-linux-x64-musl': 4.29.1 2490 | '@rollup/rollup-win32-arm64-msvc': 4.29.1 2491 | '@rollup/rollup-win32-ia32-msvc': 4.29.1 2492 | '@rollup/rollup-win32-x64-msvc': 4.29.1 2493 | fsevents: 2.3.3 2494 | 2495 | rosetta@1.1.0: 2496 | dependencies: 2497 | dlv: 1.1.3 2498 | templite: 1.2.0 2499 | 2500 | run-parallel@1.2.0: 2501 | dependencies: 2502 | queue-microtask: 1.2.3 2503 | 2504 | semver@5.7.2: {} 2505 | 2506 | semver@7.6.3: {} 2507 | 2508 | shebang-command@2.0.0: 2509 | dependencies: 2510 | shebang-regex: 3.0.0 2511 | 2512 | shebang-regex@3.0.0: {} 2513 | 2514 | signal-exit@4.1.0: {} 2515 | 2516 | source-map-js@1.2.1: {} 2517 | 2518 | spdx-correct@3.2.0: 2519 | dependencies: 2520 | spdx-expression-parse: 3.0.1 2521 | spdx-license-ids: 3.0.20 2522 | 2523 | spdx-exceptions@2.5.0: {} 2524 | 2525 | spdx-expression-parse@3.0.1: 2526 | dependencies: 2527 | spdx-exceptions: 2.5.0 2528 | spdx-license-ids: 3.0.20 2529 | 2530 | spdx-license-ids@3.0.20: {} 2531 | 2532 | string-width@4.2.3: 2533 | dependencies: 2534 | emoji-regex: 8.0.0 2535 | is-fullwidth-code-point: 3.0.0 2536 | strip-ansi: 6.0.1 2537 | 2538 | string-width@5.1.2: 2539 | dependencies: 2540 | eastasianwidth: 0.2.0 2541 | emoji-regex: 9.2.2 2542 | strip-ansi: 7.1.0 2543 | 2544 | strip-ansi@6.0.1: 2545 | dependencies: 2546 | ansi-regex: 5.0.1 2547 | 2548 | strip-ansi@7.1.0: 2549 | dependencies: 2550 | ansi-regex: 6.1.0 2551 | 2552 | strip-indent@3.0.0: 2553 | dependencies: 2554 | min-indent: 1.0.1 2555 | 2556 | strip-json-comments@3.1.1: {} 2557 | 2558 | sucrase@3.35.0: 2559 | dependencies: 2560 | '@jridgewell/gen-mapping': 0.3.8 2561 | commander: 4.1.1 2562 | glob: 10.4.5 2563 | lines-and-columns: 1.2.4 2564 | mz: 2.7.0 2565 | pirates: 4.0.6 2566 | ts-interface-checker: 0.1.13 2567 | 2568 | supports-color@7.2.0: 2569 | dependencies: 2570 | has-flag: 4.0.0 2571 | 2572 | supports-preserve-symlinks-flag@1.0.0: {} 2573 | 2574 | synckit@0.9.2: 2575 | dependencies: 2576 | '@pkgr/core': 0.1.1 2577 | tslib: 2.8.1 2578 | 2579 | tailwindcss@3.4.17: 2580 | dependencies: 2581 | '@alloc/quick-lru': 5.2.0 2582 | arg: 5.0.2 2583 | chokidar: 3.6.0 2584 | didyoumean: 1.2.2 2585 | dlv: 1.1.3 2586 | fast-glob: 3.3.2 2587 | glob-parent: 6.0.2 2588 | is-glob: 4.0.3 2589 | jiti: 1.21.7 2590 | lilconfig: 3.1.3 2591 | micromatch: 4.0.8 2592 | normalize-path: 3.0.0 2593 | object-hash: 3.0.0 2594 | picocolors: 1.1.1 2595 | postcss: 8.4.49 2596 | postcss-import: 15.1.0(postcss@8.4.49) 2597 | postcss-js: 4.0.1(postcss@8.4.49) 2598 | postcss-load-config: 4.0.2(postcss@8.4.49) 2599 | postcss-nested: 6.2.0(postcss@8.4.49) 2600 | postcss-selector-parser: 6.1.2 2601 | resolve: 1.22.10 2602 | sucrase: 3.35.0 2603 | transitivePeerDependencies: 2604 | - ts-node 2605 | 2606 | templite@1.2.0: {} 2607 | 2608 | thenify-all@1.6.0: 2609 | dependencies: 2610 | thenify: 3.3.1 2611 | 2612 | thenify@3.3.1: 2613 | dependencies: 2614 | any-promise: 1.3.0 2615 | 2616 | to-regex-range@5.0.1: 2617 | dependencies: 2618 | is-number: 7.0.0 2619 | 2620 | ts-api-utils@1.4.3(typescript@5.6.3): 2621 | dependencies: 2622 | typescript: 5.6.3 2623 | 2624 | ts-interface-checker@0.1.13: {} 2625 | 2626 | tslib@2.8.1: {} 2627 | 2628 | type-check@0.4.0: 2629 | dependencies: 2630 | prelude-ls: 1.2.1 2631 | 2632 | type-fest@0.6.0: {} 2633 | 2634 | type-fest@0.8.1: {} 2635 | 2636 | typescript-eslint@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3): 2637 | dependencies: 2638 | '@typescript-eslint/eslint-plugin': 8.18.2(@typescript-eslint/parser@8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3))(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2639 | '@typescript-eslint/parser': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2640 | '@typescript-eslint/utils': 8.18.2(eslint@9.17.0(jiti@1.21.7))(typescript@5.6.3) 2641 | eslint: 9.17.0(jiti@1.21.7) 2642 | typescript: 5.6.3 2643 | transitivePeerDependencies: 2644 | - supports-color 2645 | 2646 | typescript@5.6.3: {} 2647 | 2648 | undici-types@6.20.0: {} 2649 | 2650 | update-browserslist-db@1.1.1(browserslist@4.24.3): 2651 | dependencies: 2652 | browserslist: 4.24.3 2653 | escalade: 3.2.0 2654 | picocolors: 1.1.1 2655 | 2656 | uri-js@4.4.1: 2657 | dependencies: 2658 | punycode: 2.3.1 2659 | 2660 | util-deprecate@1.0.2: {} 2661 | 2662 | validate-npm-package-license@3.0.4: 2663 | dependencies: 2664 | spdx-correct: 3.2.0 2665 | spdx-expression-parse: 3.0.1 2666 | 2667 | vite-plugin-eslint@1.8.1(eslint@9.17.0(jiti@1.21.7))(vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1)): 2668 | dependencies: 2669 | '@rollup/pluginutils': 4.2.1 2670 | '@types/eslint': 8.56.12 2671 | eslint: 9.17.0(jiti@1.21.7) 2672 | rollup: 2.79.2 2673 | vite: 6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1) 2674 | 2675 | vite@6.0.5(@types/node@22.10.2)(jiti@1.21.7)(yaml@2.6.1): 2676 | dependencies: 2677 | esbuild: 0.24.0 2678 | postcss: 8.4.49 2679 | rollup: 4.29.1 2680 | optionalDependencies: 2681 | '@types/node': 22.10.2 2682 | fsevents: 2.3.3 2683 | jiti: 1.21.7 2684 | yaml: 2.6.1 2685 | 2686 | which@2.0.2: 2687 | dependencies: 2688 | isexe: 2.0.0 2689 | 2690 | word-wrap@1.2.5: {} 2691 | 2692 | wrap-ansi@7.0.0: 2693 | dependencies: 2694 | ansi-styles: 4.3.0 2695 | string-width: 4.2.3 2696 | strip-ansi: 6.0.1 2697 | 2698 | wrap-ansi@8.1.0: 2699 | dependencies: 2700 | ansi-styles: 6.2.1 2701 | string-width: 5.1.2 2702 | strip-ansi: 7.1.0 2703 | 2704 | yaml@2.6.1: {} 2705 | 2706 | yocto-queue@0.1.0: {} 2707 | --------------------------------------------------------------------------------