├── README.md ├── client ├── main.lua └── utils.lua ├── config └── shared.lua ├── fxmanifest.lua └── web ├── .eslintrc.cjs ├── .gitignore ├── build ├── assets │ ├── index-CyrTcmHg.css │ └── index-oi09fRQ4.js └── index.html ├── components.json ├── index.html ├── package.json ├── pnpm-lock.yaml ├── public └── images │ └── react.svg ├── src ├── app │ ├── App.css │ └── App.tsx ├── components │ ├── LibIcon.tsx │ └── ui │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── code.tsx │ │ ├── scroll-area.tsx │ │ └── separator.tsx ├── hooks │ └── useNuiEvent.ts ├── index.css ├── lib │ └── utils.ts ├── main.tsx ├── providers │ └── errorBoundary.tsx ├── transitions │ └── ScaleFade.tsx ├── utils │ ├── debugData.ts │ ├── fetchNui.ts │ ├── misc.ts │ └── setClipboard.ts └── vite-env.d.ts ├── tailwind.config.js ├── tsconfig.json ├── tsconfig.node.json └── vite.config.ts /README.md: -------------------------------------------------------------------------------- 1 | # err_boilerplate 2 | 3 | A modern, feature-rich React boilerplate for FiveM NUI development, designed with TypeScript, TailwindCSS, and Shadcn UI for creating beautiful and performant user interfaces. 4 | 5 | ![](https://img.shields.io/github/downloads/errDev-t/err_boilerplate/total?logo=github) 6 | ![](https://img.shields.io/github/contributors/errDev-t/err_boilerplate?logo=github) 7 | ![](https://img.shields.io/github/v/release/errDev-t/err_boilerplate?logo=github) 8 | 9 | 10 | ## Preview 11 | 12 | https://streamable.com/e0llb3 13 | 14 | ## 📚 Documentation 15 | 16 | https://docs.err.cool/boilerplate 17 | 18 | ## 🙏 Acknowledgments 19 | 20 | Some code in this project is inspired by or adapted from [Overextended](https://github.com/overextended). We are grateful for their contributions to the FiveM community. 21 | 22 | ## 🤝 Contributing 23 | 24 | Contributions are welcome! Please feel free to submit a Pull Request. 25 | -------------------------------------------------------------------------------- /client/main.lua: -------------------------------------------------------------------------------- 1 | local config = require 'config.shared' 2 | 3 | local function toggleNuiFrame(shouldShow) 4 | SetNuiFocus(shouldShow, shouldShow) 5 | end 6 | 7 | RegisterCommand('show-nui', function() 8 | toggleNuiFrame(true) 9 | SendReactMessage('showUi', true) 10 | debugPrint('Show NUI frame') 11 | end) 12 | 13 | RegisterNUICallback('hideFrame', function(_, cb) 14 | toggleNuiFrame(false) 15 | debugPrint('Hide NUI frame') 16 | cb({}) 17 | end) 18 | 19 | RegisterNUICallback('getClientData', function(data, cb) 20 | 21 | local retData = { x = 100, y = 100, z = 100 } 22 | debugPrint('Data sent by React', json.encode(data)) 23 | 24 | local curCoords = GetEntityCoords(PlayerPedId()) 25 | 26 | local retData = { x = curCoords.x, y = curCoords.y, z = curCoords.z } 27 | cb(retData) 28 | end) -------------------------------------------------------------------------------- /client/utils.lua: -------------------------------------------------------------------------------- 1 | --- A simple wrapper around SendNUIMessage that you can use to 2 | --- dispatch actions to the React frame. 3 | --- 4 | ---@param action string The action you wish to target 5 | ---@param data any The data you wish to send along with this action 6 | function SendReactMessage(action, data) 7 | SendNUIMessage({ 8 | action = action, 9 | data = data 10 | }) 11 | end 12 | 13 | local currentResourceName = GetCurrentResourceName() 14 | 15 | local debugIsEnabled = GetConvarInt(('%s-debugMode'):format(currentResourceName), 0) == 1 16 | 17 | --- A simple debug print function that is dependent on a convar 18 | --- will output a nice prettfied message if debugMode is on 19 | function debugPrint(...) 20 | if not debugIsEnabled then return end 21 | local args = { ... } 22 | 23 | local appendStr = '' 24 | for _, v in ipairs(args) do 25 | appendStr = appendStr .. ' ' .. tostring(v) 26 | end 27 | local msgTemplate = '^3[%s]^0%s' 28 | local finalMsg = msgTemplate:format(currentResourceName, appendStr) 29 | print(finalMsg) 30 | end -------------------------------------------------------------------------------- /config/shared.lua: -------------------------------------------------------------------------------- 1 | return { 2 | version = '1.0.0', -- SOME EXAMPLE FOR CONFIG (WRITE YOUR OWN) 3 | } -------------------------------------------------------------------------------- /fxmanifest.lua: -------------------------------------------------------------------------------- 1 | fx_version 'cerulean' 2 | game 'gta5' 3 | lua54 'yes' 4 | 5 | author "Err Boilerplate" 6 | description "A modern FiveM boilerplate with latest React, Tailwind, and other modern technologies" 7 | version '1.0.0' 8 | 9 | server_scripts { 10 | 'server/**/*' 11 | } 12 | client_scripts { 13 | 'client/**/*', 14 | } 15 | shared_scripts { 16 | '@ox_lib/init.lua', 17 | } 18 | 19 | -- ui_page 'http://localhost:3000/' -- (for local dev) 20 | ui_page 'web/build/index.html' 21 | 22 | files { 23 | 'web/build/index.html', 24 | 'web/build/**/*', 25 | 'config/*.lua' 26 | } -------------------------------------------------------------------------------- /web/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | "eslint:recommended", 6 | "plugin:@typescript-eslint/recommended", 7 | "plugin:react-hooks/recommended", 8 | ], 9 | ignorePatterns: ["dist", ".eslintrc.cjs"], 10 | parser: "@typescript-eslint/parser", 11 | plugins: ["react-refresh"], 12 | rules: { 13 | "react-refresh/only-export-components": [ 14 | "warn", 15 | { allowConstantExport: true }, 16 | ], 17 | }, 18 | }; 19 | -------------------------------------------------------------------------------- /web/.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 | # Dependencies 11 | node_modules 12 | .pnpm-store 13 | .npm 14 | 15 | # Build outputs 16 | dist 17 | *.local 18 | 19 | # Environment files 20 | .env 21 | .env.* 22 | !.env.example 23 | 24 | # Editor directories and files 25 | .vscode/* 26 | !.vscode/extensions.json 27 | .idea 28 | .DS_Store 29 | *.suo 30 | *.ntvs* 31 | *.njsproj 32 | *.sln 33 | *.sw? 34 | 35 | # OS generated files 36 | Thumbs.db 37 | .DS_Store -------------------------------------------------------------------------------- /web/build/assets/index-CyrTcmHg.css: -------------------------------------------------------------------------------- 1 | *,:before,:after{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x: 0;--tw-border-spacing-y: 0;--tw-translate-x: 0;--tw-translate-y: 0;--tw-rotate: 0;--tw-skew-x: 0;--tw-skew-y: 0;--tw-scale-x: 1;--tw-scale-y: 1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness: proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width: 0px;--tw-ring-offset-color: #fff;--tw-ring-color: rgb(59 130 246 / .5);--tw-ring-offset-shadow: 0 0 #0000;--tw-ring-shadow: 0 0 #0000;--tw-shadow: 0 0 #0000;--tw-shadow-colored: 0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }*,:before,:after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}:before,:after{--tw-content: ""}html,:host{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dl,dd,h1,h2,h3,h4,h5,h6,hr,figure,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}ol,ul,menu{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}button,[role=button]{cursor:pointer}:disabled{cursor:default}img,svg,video,canvas,audio,iframe,embed,object{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}:root{--background: 0 0% 100%;--foreground: 0 0% 3.9%;--card: 0 0% 100%;--card-foreground: 0 0% 3.9%;--popover: 0 0% 100%;--popover-foreground: 0 0% 3.9%;--primary: 0 0% 9%;--primary-foreground: 0 0% 98%;--secondary: 0 0% 96.1%;--secondary-foreground: 0 0% 9%;--muted: 0 0% 96.1%;--muted-foreground: 0 0% 45.1%;--accent: 0 0% 96.1%;--accent-foreground: 0 0% 9%;--destructive: 0 84.2% 60.2%;--destructive-foreground: 0 0% 98%;--border: 0 0% 89.8%;--input: 0 0% 89.8%;--ring: 0 0% 3.9%;--chart-1: 12 76% 61%;--chart-2: 173 58% 39%;--chart-3: 197 37% 24%;--chart-4: 43 74% 66%;--chart-5: 27 87% 67%;--radius: .5rem }*{border-color:hsl(var(--border))}.visible{visibility:visible}.static{position:static}.fixed{position:fixed}.absolute{position:absolute}.relative{position:relative}.inset-0{inset:0}.right-4{right:1rem}.top-4{top:1rem}.mr-1{margin-right:.25rem}.mr-2{margin-right:.5rem}.mt-2{margin-top:.5rem}.mt-4{margin-top:1rem}.flex{display:flex}.inline-flex{display:inline-flex}.h-10{height:2.5rem}.h-2\.5{height:.625rem}.h-3{height:.75rem}.h-4{height:1rem}.h-6{height:1.5rem}.h-8{height:2rem}.h-9{height:2.25rem}.h-\[100px\]{height:100px}.h-\[1px\]{height:1px}.h-full{height:100%}.w-2\.5{width:.625rem}.w-3{width:.75rem}.w-4{width:1rem}.w-6{width:1.5rem}.w-8{width:2rem}.w-9{width:2.25rem}.w-\[1px\]{width:1px}.w-full{width:100%}.max-w-md{max-width:28rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.touch-none{touch-action:none}.select-none{-webkit-user-select:none;-moz-user-select:none;user-select:none}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-center{justify-content:center}.justify-between{justify-content:space-between}.gap-2{gap:.5rem}.space-x-2>:not([hidden])~:not([hidden]){--tw-space-x-reverse: 0;margin-right:calc(.5rem * var(--tw-space-x-reverse));margin-left:calc(.5rem * calc(1 - var(--tw-space-x-reverse)))}.space-y-1\.5>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.375rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.375rem * var(--tw-space-y-reverse))}.space-y-2>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(.5rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(.5rem * var(--tw-space-y-reverse))}.space-y-4>:not([hidden])~:not([hidden]){--tw-space-y-reverse: 0;margin-top:calc(1rem * calc(1 - var(--tw-space-y-reverse)));margin-bottom:calc(1rem * var(--tw-space-y-reverse))}.overflow-auto{overflow:auto}.overflow-hidden{overflow:hidden}.whitespace-nowrap{white-space:nowrap}.rounded-\[inherit\]{border-radius:inherit}.rounded-full{border-radius:9999px}.rounded-md{border-radius:calc(var(--radius) - 2px)}.rounded-xl{border-radius:.75rem}.border{border-width:1px}.border-l{border-left-width:1px}.border-t{border-top-width:1px}.border-border\/40{border-color:hsl(var(--border) / .4)}.border-input{border-color:hsl(var(--input))}.border-transparent{border-color:transparent}.border-l-transparent{border-left-color:transparent}.border-t-transparent{border-top-color:transparent}.bg-background{background-color:hsl(var(--background))}.bg-black\/10{background-color:#0000001a}.bg-black\/5{background-color:#0000000d}.bg-border{background-color:hsl(var(--border))}.bg-card{background-color:hsl(var(--card))}.bg-card\/95{background-color:hsl(var(--card) / .95)}.bg-destructive{background-color:hsl(var(--destructive))}.bg-primary{background-color:hsl(var(--primary))}.bg-primary\/10{background-color:hsl(var(--primary) / .1)}.bg-secondary{background-color:hsl(var(--secondary))}.p-2{padding:.5rem}.p-6{padding:1.5rem}.p-\[1px\]{padding:1px}.px-2{padding-left:.5rem;padding-right:.5rem}.px-2\.5{padding-left:.625rem;padding-right:.625rem}.px-3{padding-left:.75rem;padding-right:.75rem}.px-4{padding-left:1rem;padding-right:1rem}.px-8{padding-left:2rem;padding-right:2rem}.py-0\.5{padding-top:.125rem;padding-bottom:.125rem}.py-1{padding-top:.25rem;padding-bottom:.25rem}.py-2{padding-top:.5rem;padding-bottom:.5rem}.pt-0{padding-top:0}.pt-6{padding-top:1.5rem}.font-mono{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace}.text-sm{font-size:.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-xs{font-size:.75rem;line-height:1rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.leading-none{line-height:1}.tracking-tight{letter-spacing:-.025em}.text-card-foreground{color:hsl(var(--card-foreground))}.text-destructive-foreground{color:hsl(var(--destructive-foreground))}.text-foreground{color:hsl(var(--foreground))}.text-muted-foreground{color:hsl(var(--muted-foreground))}.text-primary{color:hsl(var(--primary))}.text-primary-foreground{color:hsl(var(--primary-foreground))}.text-secondary-foreground{color:hsl(var(--secondary-foreground))}.underline-offset-4{text-underline-offset:4px}.shadow{--tw-shadow: 0 1px 3px 0 rgb(0 0 0 / .1), 0 1px 2px -1px rgb(0 0 0 / .1);--tw-shadow-colored: 0 1px 3px 0 var(--tw-shadow-color), 0 1px 2px -1px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-sm{--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / .05);--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.shadow-xl{--tw-shadow: 0 20px 25px -5px rgb(0 0 0 / .1), 0 8px 10px -6px rgb(0 0 0 / .1);--tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000),var(--tw-ring-shadow, 0 0 #0000),var(--tw-shadow)}.outline{outline-style:solid}.transition{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,-webkit-backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter;transition-property:color,background-color,border-color,text-decoration-color,fill,stroke,opacity,box-shadow,transform,filter,backdrop-filter,-webkit-backdrop-filter;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}.transition-colors{transition-property:color,background-color,border-color,text-decoration-color,fill,stroke;transition-timing-function:cubic-bezier(.4,0,.2,1);transition-duration:.15s}@keyframes enter{0%{opacity:var(--tw-enter-opacity, 1);transform:translate3d(var(--tw-enter-translate-x, 0),var(--tw-enter-translate-y, 0),0) scale3d(var(--tw-enter-scale, 1),var(--tw-enter-scale, 1),var(--tw-enter-scale, 1)) rotate(var(--tw-enter-rotate, 0))}}@keyframes exit{to{opacity:var(--tw-exit-opacity, 1);transform:translate3d(var(--tw-exit-translate-x, 0),var(--tw-exit-translate-y, 0),0) scale3d(var(--tw-exit-scale, 1),var(--tw-exit-scale, 1),var(--tw-exit-scale, 1)) rotate(var(--tw-exit-rotate, 0))}}.running{animation-play-state:running}.hover\:bg-accent:hover{background-color:hsl(var(--accent))}.hover\:bg-destructive\/80:hover{background-color:hsl(var(--destructive) / .8)}.hover\:bg-destructive\/90:hover{background-color:hsl(var(--destructive) / .9)}.hover\:bg-primary\/80:hover{background-color:hsl(var(--primary) / .8)}.hover\:bg-primary\/90:hover{background-color:hsl(var(--primary) / .9)}.hover\:bg-secondary\/80:hover{background-color:hsl(var(--secondary) / .8)}.hover\:text-accent-foreground:hover{color:hsl(var(--accent-foreground))}.hover\:underline:hover{text-decoration-line:underline}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus\:ring-2:focus{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus\:ring-ring:focus{--tw-ring-color: hsl(var(--ring))}.focus\:ring-offset-2:focus{--tw-ring-offset-width: 2px}.focus-visible\:outline-none:focus-visible{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow),var(--tw-ring-shadow),var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-ring:focus-visible{--tw-ring-color: hsl(var(--ring))}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}.\[\&_svg\]\:pointer-events-none svg{pointer-events:none}.\[\&_svg\]\:size-4 svg{width:1rem;height:1rem}.\[\&_svg\]\:shrink-0 svg{flex-shrink:0} 2 | -------------------------------------------------------------------------------- /web/build/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ERR Boilerblate 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /web/components.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://ui.shadcn.com/schema.json", 3 | "style": "new-york", 4 | "rsc": false, 5 | "tsx": true, 6 | "tailwind": { 7 | "config": "tailwind.config.js", 8 | "css": "src/index.css", 9 | "baseColor": "neutral", 10 | "cssVariables": true, 11 | "prefix": "" 12 | }, 13 | "aliases": { 14 | "components": "@/components", 15 | "utils": "@/lib/utils", 16 | "ui": "@/components/ui", 17 | "lib": "@/lib", 18 | "hooks": "@/hooks" 19 | }, 20 | "iconLibrary": "lucide" 21 | } -------------------------------------------------------------------------------- /web/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | ERR Boilerblate 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /web/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "web", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "private": true, 7 | "scripts": { 8 | "start": "vite", 9 | "dev": "vite", 10 | "start:game": "vite build --watch", 11 | "build": "tsc && vite build", 12 | "preview": "vite preview" 13 | }, 14 | "keywords": [], 15 | "author": "Err", 16 | "license": "ISC", 17 | "packageManager": "pnpm@10.6.2", 18 | "dependencies": { 19 | "@fortawesome/fontawesome-svg-core": "^6.7.2", 20 | "@fortawesome/free-brands-svg-icons": "^6.7.2", 21 | "@fortawesome/free-regular-svg-icons": "^6.7.2", 22 | "@fortawesome/free-solid-svg-icons": "^6.7.2", 23 | "@fortawesome/react-fontawesome": "^0.2.2", 24 | "@radix-ui/react-scroll-area": "^1.2.4", 25 | "@radix-ui/react-separator": "^1.1.3", 26 | "@radix-ui/react-slot": "^1.2.0", 27 | "@tailwindcss/vite": "^4.0.15", 28 | "class-variance-authority": "^0.7.1", 29 | "clsx": "^2.1.1", 30 | "framer-motion": "^12.5.0", 31 | "react": "^19.0.0", 32 | "react-dom": "^19.0.0", 33 | "tailwind-merge": "^3.0.2", 34 | "tailwindcss-animate": "^1.0.7" 35 | }, 36 | "devDependencies": { 37 | "@types/node": "^22.13.13", 38 | "@types/react": "^19.0.12", 39 | "@types/react-dom": "^19.0.4", 40 | "@typescript-eslint/eslint-plugin": "^8.28.0", 41 | "@typescript-eslint/parser": "^8.28.0", 42 | "@vitejs/plugin-react": "^4.3.4", 43 | "autoprefixer": "^10.4.21", 44 | "eslint": "^9.23.0", 45 | "eslint-plugin-react-hooks": "^5.2.0", 46 | "eslint-plugin-react-refresh": "^0.4.19", 47 | "postcss": "^8.5.3", 48 | "tailwindcss": "^3.4.17", 49 | "typescript": "^5.8.2", 50 | "vite": "^6.2.3" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /web/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@fortawesome/fontawesome-svg-core': 12 | specifier: ^6.7.2 13 | version: 6.7.2 14 | '@fortawesome/free-brands-svg-icons': 15 | specifier: ^6.7.2 16 | version: 6.7.2 17 | '@fortawesome/free-regular-svg-icons': 18 | specifier: ^6.7.2 19 | version: 6.7.2 20 | '@fortawesome/free-solid-svg-icons': 21 | specifier: ^6.7.2 22 | version: 6.7.2 23 | '@fortawesome/react-fontawesome': 24 | specifier: ^0.2.2 25 | version: 0.2.2(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.0.0) 26 | '@radix-ui/react-scroll-area': 27 | specifier: ^1.2.4 28 | version: 1.2.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 29 | '@radix-ui/react-separator': 30 | specifier: ^1.1.3 31 | version: 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 32 | '@radix-ui/react-slot': 33 | specifier: ^1.2.0 34 | version: 1.2.0(@types/react@19.0.12)(react@19.0.0) 35 | '@tailwindcss/vite': 36 | specifier: ^4.0.15 37 | version: 4.0.15(vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0)) 38 | class-variance-authority: 39 | specifier: ^0.7.1 40 | version: 0.7.1 41 | clsx: 42 | specifier: ^2.1.1 43 | version: 2.1.1 44 | framer-motion: 45 | specifier: ^12.5.0 46 | version: 12.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 47 | react: 48 | specifier: ^19.0.0 49 | version: 19.0.0 50 | react-dom: 51 | specifier: ^19.0.0 52 | version: 19.0.0(react@19.0.0) 53 | tailwind-merge: 54 | specifier: ^3.0.2 55 | version: 3.0.2 56 | tailwindcss-animate: 57 | specifier: ^1.0.7 58 | version: 1.0.7(tailwindcss@3.4.17) 59 | devDependencies: 60 | '@types/node': 61 | specifier: ^22.13.13 62 | version: 22.13.13 63 | '@types/react': 64 | specifier: ^19.0.12 65 | version: 19.0.12 66 | '@types/react-dom': 67 | specifier: ^19.0.4 68 | version: 19.0.4(@types/react@19.0.12) 69 | '@typescript-eslint/eslint-plugin': 70 | specifier: ^8.28.0 71 | version: 8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 72 | '@typescript-eslint/parser': 73 | specifier: ^8.28.0 74 | version: 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 75 | '@vitejs/plugin-react': 76 | specifier: ^4.3.4 77 | version: 4.3.4(vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0)) 78 | autoprefixer: 79 | specifier: ^10.4.21 80 | version: 10.4.21(postcss@8.5.3) 81 | eslint: 82 | specifier: ^9.23.0 83 | version: 9.23.0(jiti@2.4.2) 84 | eslint-plugin-react-hooks: 85 | specifier: ^5.2.0 86 | version: 5.2.0(eslint@9.23.0(jiti@2.4.2)) 87 | eslint-plugin-react-refresh: 88 | specifier: ^0.4.19 89 | version: 0.4.19(eslint@9.23.0(jiti@2.4.2)) 90 | postcss: 91 | specifier: ^8.5.3 92 | version: 8.5.3 93 | tailwindcss: 94 | specifier: ^3.4.17 95 | version: 3.4.17 96 | typescript: 97 | specifier: ^5.8.2 98 | version: 5.8.2 99 | vite: 100 | specifier: ^6.2.3 101 | version: 6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0) 102 | 103 | packages: 104 | 105 | '@alloc/quick-lru@5.2.0': 106 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 107 | engines: {node: '>=10'} 108 | 109 | '@ampproject/remapping@2.3.0': 110 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 111 | engines: {node: '>=6.0.0'} 112 | 113 | '@babel/code-frame@7.26.2': 114 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 115 | engines: {node: '>=6.9.0'} 116 | 117 | '@babel/compat-data@7.26.8': 118 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 119 | engines: {node: '>=6.9.0'} 120 | 121 | '@babel/core@7.26.10': 122 | resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@babel/generator@7.27.0': 126 | resolution: {integrity: sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw==} 127 | engines: {node: '>=6.9.0'} 128 | 129 | '@babel/helper-compilation-targets@7.27.0': 130 | resolution: {integrity: sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA==} 131 | engines: {node: '>=6.9.0'} 132 | 133 | '@babel/helper-module-imports@7.25.9': 134 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 135 | engines: {node: '>=6.9.0'} 136 | 137 | '@babel/helper-module-transforms@7.26.0': 138 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 139 | engines: {node: '>=6.9.0'} 140 | peerDependencies: 141 | '@babel/core': ^7.0.0 142 | 143 | '@babel/helper-plugin-utils@7.26.5': 144 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 145 | engines: {node: '>=6.9.0'} 146 | 147 | '@babel/helper-string-parser@7.25.9': 148 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 149 | engines: {node: '>=6.9.0'} 150 | 151 | '@babel/helper-validator-identifier@7.25.9': 152 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 153 | engines: {node: '>=6.9.0'} 154 | 155 | '@babel/helper-validator-option@7.25.9': 156 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 157 | engines: {node: '>=6.9.0'} 158 | 159 | '@babel/helpers@7.27.0': 160 | resolution: {integrity: sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg==} 161 | engines: {node: '>=6.9.0'} 162 | 163 | '@babel/parser@7.27.0': 164 | resolution: {integrity: sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg==} 165 | engines: {node: '>=6.0.0'} 166 | hasBin: true 167 | 168 | '@babel/plugin-transform-react-jsx-self@7.25.9': 169 | resolution: {integrity: sha512-y8quW6p0WHkEhmErnfe58r7x0A70uKphQm8Sp8cV7tjNQwK56sNVK0M73LK3WuYmsuyrftut4xAkjjgU0twaMg==} 170 | engines: {node: '>=6.9.0'} 171 | peerDependencies: 172 | '@babel/core': ^7.0.0-0 173 | 174 | '@babel/plugin-transform-react-jsx-source@7.25.9': 175 | resolution: {integrity: sha512-+iqjT8xmXhhYv4/uiYd8FNQsraMFZIfxVSqxxVSZP0WbbSAWvBXAul0m/zu+7Vv4O/3WtApy9pmaTMiumEZgfg==} 176 | engines: {node: '>=6.9.0'} 177 | peerDependencies: 178 | '@babel/core': ^7.0.0-0 179 | 180 | '@babel/template@7.27.0': 181 | resolution: {integrity: sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA==} 182 | engines: {node: '>=6.9.0'} 183 | 184 | '@babel/traverse@7.27.0': 185 | resolution: {integrity: sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA==} 186 | engines: {node: '>=6.9.0'} 187 | 188 | '@babel/types@7.27.0': 189 | resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==} 190 | engines: {node: '>=6.9.0'} 191 | 192 | '@esbuild/aix-ppc64@0.25.1': 193 | resolution: {integrity: sha512-kfYGy8IdzTGy+z0vFGvExZtxkFlA4zAxgKEahG9KE1ScBjpQnFsNOX8KTU5ojNru5ed5CVoJYXFtoxaq5nFbjQ==} 194 | engines: {node: '>=18'} 195 | cpu: [ppc64] 196 | os: [aix] 197 | 198 | '@esbuild/android-arm64@0.25.1': 199 | resolution: {integrity: sha512-50tM0zCJW5kGqgG7fQ7IHvQOcAn9TKiVRuQ/lN0xR+T2lzEFvAi1ZcS8DiksFcEpf1t/GYOeOfCAgDHFpkiSmA==} 200 | engines: {node: '>=18'} 201 | cpu: [arm64] 202 | os: [android] 203 | 204 | '@esbuild/android-arm@0.25.1': 205 | resolution: {integrity: sha512-dp+MshLYux6j/JjdqVLnMglQlFu+MuVeNrmT5nk6q07wNhCdSnB7QZj+7G8VMUGh1q+vj2Bq8kRsuyA00I/k+Q==} 206 | engines: {node: '>=18'} 207 | cpu: [arm] 208 | os: [android] 209 | 210 | '@esbuild/android-x64@0.25.1': 211 | resolution: {integrity: sha512-GCj6WfUtNldqUzYkN/ITtlhwQqGWu9S45vUXs7EIYf+7rCiiqH9bCloatO9VhxsL0Pji+PF4Lz2XXCES+Q8hDw==} 212 | engines: {node: '>=18'} 213 | cpu: [x64] 214 | os: [android] 215 | 216 | '@esbuild/darwin-arm64@0.25.1': 217 | resolution: {integrity: sha512-5hEZKPf+nQjYoSr/elb62U19/l1mZDdqidGfmFutVUjjUZrOazAtwK+Kr+3y0C/oeJfLlxo9fXb1w7L+P7E4FQ==} 218 | engines: {node: '>=18'} 219 | cpu: [arm64] 220 | os: [darwin] 221 | 222 | '@esbuild/darwin-x64@0.25.1': 223 | resolution: {integrity: sha512-hxVnwL2Dqs3fM1IWq8Iezh0cX7ZGdVhbTfnOy5uURtao5OIVCEyj9xIzemDi7sRvKsuSdtCAhMKarxqtlyVyfA==} 224 | engines: {node: '>=18'} 225 | cpu: [x64] 226 | os: [darwin] 227 | 228 | '@esbuild/freebsd-arm64@0.25.1': 229 | resolution: {integrity: sha512-1MrCZs0fZa2g8E+FUo2ipw6jw5qqQiH+tERoS5fAfKnRx6NXH31tXBKI3VpmLijLH6yriMZsxJtaXUyFt/8Y4A==} 230 | engines: {node: '>=18'} 231 | cpu: [arm64] 232 | os: [freebsd] 233 | 234 | '@esbuild/freebsd-x64@0.25.1': 235 | resolution: {integrity: sha512-0IZWLiTyz7nm0xuIs0q1Y3QWJC52R8aSXxe40VUxm6BB1RNmkODtW6LHvWRrGiICulcX7ZvyH6h5fqdLu4gkww==} 236 | engines: {node: '>=18'} 237 | cpu: [x64] 238 | os: [freebsd] 239 | 240 | '@esbuild/linux-arm64@0.25.1': 241 | resolution: {integrity: sha512-jaN3dHi0/DDPelk0nLcXRm1q7DNJpjXy7yWaWvbfkPvI+7XNSc/lDOnCLN7gzsyzgu6qSAmgSvP9oXAhP973uQ==} 242 | engines: {node: '>=18'} 243 | cpu: [arm64] 244 | os: [linux] 245 | 246 | '@esbuild/linux-arm@0.25.1': 247 | resolution: {integrity: sha512-NdKOhS4u7JhDKw9G3cY6sWqFcnLITn6SqivVArbzIaf3cemShqfLGHYMx8Xlm/lBit3/5d7kXvriTUGa5YViuQ==} 248 | engines: {node: '>=18'} 249 | cpu: [arm] 250 | os: [linux] 251 | 252 | '@esbuild/linux-ia32@0.25.1': 253 | resolution: {integrity: sha512-OJykPaF4v8JidKNGz8c/q1lBO44sQNUQtq1KktJXdBLn1hPod5rE/Hko5ugKKZd+D2+o1a9MFGUEIUwO2YfgkQ==} 254 | engines: {node: '>=18'} 255 | cpu: [ia32] 256 | os: [linux] 257 | 258 | '@esbuild/linux-loong64@0.25.1': 259 | resolution: {integrity: sha512-nGfornQj4dzcq5Vp835oM/o21UMlXzn79KobKlcs3Wz9smwiifknLy4xDCLUU0BWp7b/houtdrgUz7nOGnfIYg==} 260 | engines: {node: '>=18'} 261 | cpu: [loong64] 262 | os: [linux] 263 | 264 | '@esbuild/linux-mips64el@0.25.1': 265 | resolution: {integrity: sha512-1osBbPEFYwIE5IVB/0g2X6i1qInZa1aIoj1TdL4AaAb55xIIgbg8Doq6a5BzYWgr+tEcDzYH67XVnTmUzL+nXg==} 266 | engines: {node: '>=18'} 267 | cpu: [mips64el] 268 | os: [linux] 269 | 270 | '@esbuild/linux-ppc64@0.25.1': 271 | resolution: {integrity: sha512-/6VBJOwUf3TdTvJZ82qF3tbLuWsscd7/1w+D9LH0W/SqUgM5/JJD0lrJ1fVIfZsqB6RFmLCe0Xz3fmZc3WtyVg==} 272 | engines: {node: '>=18'} 273 | cpu: [ppc64] 274 | os: [linux] 275 | 276 | '@esbuild/linux-riscv64@0.25.1': 277 | resolution: {integrity: sha512-nSut/Mx5gnilhcq2yIMLMe3Wl4FK5wx/o0QuuCLMtmJn+WeWYoEGDN1ipcN72g1WHsnIbxGXd4i/MF0gTcuAjQ==} 278 | engines: {node: '>=18'} 279 | cpu: [riscv64] 280 | os: [linux] 281 | 282 | '@esbuild/linux-s390x@0.25.1': 283 | resolution: {integrity: sha512-cEECeLlJNfT8kZHqLarDBQso9a27o2Zd2AQ8USAEoGtejOrCYHNtKP8XQhMDJMtthdF4GBmjR2au3x1udADQQQ==} 284 | engines: {node: '>=18'} 285 | cpu: [s390x] 286 | os: [linux] 287 | 288 | '@esbuild/linux-x64@0.25.1': 289 | resolution: {integrity: sha512-xbfUhu/gnvSEg+EGovRc+kjBAkrvtk38RlerAzQxvMzlB4fXpCFCeUAYzJvrnhFtdeyVCDANSjJvOvGYoeKzFA==} 290 | engines: {node: '>=18'} 291 | cpu: [x64] 292 | os: [linux] 293 | 294 | '@esbuild/netbsd-arm64@0.25.1': 295 | resolution: {integrity: sha512-O96poM2XGhLtpTh+s4+nP7YCCAfb4tJNRVZHfIE7dgmax+yMP2WgMd2OecBuaATHKTHsLWHQeuaxMRnCsH8+5g==} 296 | engines: {node: '>=18'} 297 | cpu: [arm64] 298 | os: [netbsd] 299 | 300 | '@esbuild/netbsd-x64@0.25.1': 301 | resolution: {integrity: sha512-X53z6uXip6KFXBQ+Krbx25XHV/NCbzryM6ehOAeAil7X7oa4XIq+394PWGnwaSQ2WRA0KI6PUO6hTO5zeF5ijA==} 302 | engines: {node: '>=18'} 303 | cpu: [x64] 304 | os: [netbsd] 305 | 306 | '@esbuild/openbsd-arm64@0.25.1': 307 | resolution: {integrity: sha512-Na9T3szbXezdzM/Kfs3GcRQNjHzM6GzFBeU1/6IV/npKP5ORtp9zbQjvkDJ47s6BCgaAZnnnu/cY1x342+MvZg==} 308 | engines: {node: '>=18'} 309 | cpu: [arm64] 310 | os: [openbsd] 311 | 312 | '@esbuild/openbsd-x64@0.25.1': 313 | resolution: {integrity: sha512-T3H78X2h1tszfRSf+txbt5aOp/e7TAz3ptVKu9Oyir3IAOFPGV6O9c2naym5TOriy1l0nNf6a4X5UXRZSGX/dw==} 314 | engines: {node: '>=18'} 315 | cpu: [x64] 316 | os: [openbsd] 317 | 318 | '@esbuild/sunos-x64@0.25.1': 319 | resolution: {integrity: sha512-2H3RUvcmULO7dIE5EWJH8eubZAI4xw54H1ilJnRNZdeo8dTADEZ21w6J22XBkXqGJbe0+wnNJtw3UXRoLJnFEg==} 320 | engines: {node: '>=18'} 321 | cpu: [x64] 322 | os: [sunos] 323 | 324 | '@esbuild/win32-arm64@0.25.1': 325 | resolution: {integrity: sha512-GE7XvrdOzrb+yVKB9KsRMq+7a2U/K5Cf/8grVFRAGJmfADr/e/ODQ134RK2/eeHqYV5eQRFxb1hY7Nr15fv1NQ==} 326 | engines: {node: '>=18'} 327 | cpu: [arm64] 328 | os: [win32] 329 | 330 | '@esbuild/win32-ia32@0.25.1': 331 | resolution: {integrity: sha512-uOxSJCIcavSiT6UnBhBzE8wy3n0hOkJsBOzy7HDAuTDE++1DJMRRVCPGisULScHL+a/ZwdXPpXD3IyFKjA7K8A==} 332 | engines: {node: '>=18'} 333 | cpu: [ia32] 334 | os: [win32] 335 | 336 | '@esbuild/win32-x64@0.25.1': 337 | resolution: {integrity: sha512-Y1EQdcfwMSeQN/ujR5VayLOJ1BHaK+ssyk0AEzPjC+t1lITgsnccPqFjb6V+LsTp/9Iov4ysfjxLaGJ9RPtkVg==} 338 | engines: {node: '>=18'} 339 | cpu: [x64] 340 | os: [win32] 341 | 342 | '@eslint-community/eslint-utils@4.5.1': 343 | resolution: {integrity: sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==} 344 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 345 | peerDependencies: 346 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 347 | 348 | '@eslint-community/regexpp@4.12.1': 349 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 350 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 351 | 352 | '@eslint/config-array@0.19.2': 353 | resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} 354 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 355 | 356 | '@eslint/config-helpers@0.2.0': 357 | resolution: {integrity: sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==} 358 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 359 | 360 | '@eslint/core@0.12.0': 361 | resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==} 362 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 363 | 364 | '@eslint/eslintrc@3.3.1': 365 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 366 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 367 | 368 | '@eslint/js@9.23.0': 369 | resolution: {integrity: sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==} 370 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 371 | 372 | '@eslint/object-schema@2.1.6': 373 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 374 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 375 | 376 | '@eslint/plugin-kit@0.2.7': 377 | resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==} 378 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 379 | 380 | '@fortawesome/fontawesome-common-types@6.7.2': 381 | resolution: {integrity: sha512-Zs+YeHUC5fkt7Mg1l6XTniei3k4bwG/yo3iFUtZWd/pMx9g3fdvkSK9E0FOC+++phXOka78uJcYb8JaFkW52Xg==} 382 | engines: {node: '>=6'} 383 | 384 | '@fortawesome/fontawesome-svg-core@6.7.2': 385 | resolution: {integrity: sha512-yxtOBWDrdi5DD5o1pmVdq3WMCvnobT0LU6R8RyyVXPvFRd2o79/0NCuQoCjNTeZz9EzA9xS3JxNWfv54RIHFEA==} 386 | engines: {node: '>=6'} 387 | 388 | '@fortawesome/free-brands-svg-icons@6.7.2': 389 | resolution: {integrity: sha512-zu0evbcRTgjKfrr77/2XX+bU+kuGfjm0LbajJHVIgBWNIDzrhpRxiCPNT8DW5AdmSsq7Mcf9D1bH0aSeSUSM+Q==} 390 | engines: {node: '>=6'} 391 | 392 | '@fortawesome/free-regular-svg-icons@6.7.2': 393 | resolution: {integrity: sha512-7Z/ur0gvCMW8G93dXIQOkQqHo2M5HLhYrRVC0//fakJXxcF1VmMPsxnG6Ee8qEylA8b8Q3peQXWMNZ62lYF28g==} 394 | engines: {node: '>=6'} 395 | 396 | '@fortawesome/free-solid-svg-icons@6.7.2': 397 | resolution: {integrity: sha512-GsBrnOzU8uj0LECDfD5zomZJIjrPhIlWU82AHwa2s40FKH+kcxQaBvBo3Z4TxyZHIyX8XTDxsyA33/Vx9eFuQA==} 398 | engines: {node: '>=6'} 399 | 400 | '@fortawesome/react-fontawesome@0.2.2': 401 | resolution: {integrity: sha512-EnkrprPNqI6SXJl//m29hpaNzOp1bruISWaOiRtkMi/xSvHJlzc2j2JAYS7egxt/EbjSNV/k6Xy0AQI6vB2+1g==} 402 | peerDependencies: 403 | '@fortawesome/fontawesome-svg-core': ~1 || ~6 404 | react: '>=16.3' 405 | 406 | '@humanfs/core@0.19.1': 407 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 408 | engines: {node: '>=18.18.0'} 409 | 410 | '@humanfs/node@0.16.6': 411 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 412 | engines: {node: '>=18.18.0'} 413 | 414 | '@humanwhocodes/module-importer@1.0.1': 415 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 416 | engines: {node: '>=12.22'} 417 | 418 | '@humanwhocodes/retry@0.3.1': 419 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 420 | engines: {node: '>=18.18'} 421 | 422 | '@humanwhocodes/retry@0.4.2': 423 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 424 | engines: {node: '>=18.18'} 425 | 426 | '@isaacs/cliui@8.0.2': 427 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 428 | engines: {node: '>=12'} 429 | 430 | '@jridgewell/gen-mapping@0.3.8': 431 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 432 | engines: {node: '>=6.0.0'} 433 | 434 | '@jridgewell/resolve-uri@3.1.2': 435 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 436 | engines: {node: '>=6.0.0'} 437 | 438 | '@jridgewell/set-array@1.2.1': 439 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 440 | engines: {node: '>=6.0.0'} 441 | 442 | '@jridgewell/sourcemap-codec@1.5.0': 443 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 444 | 445 | '@jridgewell/trace-mapping@0.3.25': 446 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 447 | 448 | '@nodelib/fs.scandir@2.1.5': 449 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 450 | engines: {node: '>= 8'} 451 | 452 | '@nodelib/fs.stat@2.0.5': 453 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 454 | engines: {node: '>= 8'} 455 | 456 | '@nodelib/fs.walk@1.2.8': 457 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 458 | engines: {node: '>= 8'} 459 | 460 | '@pkgjs/parseargs@0.11.0': 461 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 462 | engines: {node: '>=14'} 463 | 464 | '@radix-ui/number@1.1.1': 465 | resolution: {integrity: sha512-MkKCwxlXTgz6CFoJx3pCwn07GKp36+aZyu/u2Ln2VrA5DcdyCZkASEDBTd8x5whTQQL5CiYf4prXKLcgQdv29g==} 466 | 467 | '@radix-ui/primitive@1.1.2': 468 | resolution: {integrity: sha512-XnbHrrprsNqZKQhStrSwgRUQzoCI1glLzdw79xiZPoofhGICeZRSQ3dIxAKH1gb3OHfNf4d6f+vAv3kil2eggA==} 469 | 470 | '@radix-ui/react-compose-refs@1.1.2': 471 | resolution: {integrity: sha512-z4eqJvfiNnFMHIIvXP3CY57y2WJs5g2v3X0zm9mEJkrkNv4rDxu+sg9Jh8EkXyeqBkB7SOcboo9dMVqhyrACIg==} 472 | peerDependencies: 473 | '@types/react': '*' 474 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 475 | peerDependenciesMeta: 476 | '@types/react': 477 | optional: true 478 | 479 | '@radix-ui/react-context@1.1.2': 480 | resolution: {integrity: sha512-jCi/QKUM2r1Ju5a3J64TH2A5SpKAgh0LpknyqdQ4m6DCV0xJ2HG1xARRwNGPQfi1SLdLWZ1OJz6F4OMBBNiGJA==} 481 | peerDependencies: 482 | '@types/react': '*' 483 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 484 | peerDependenciesMeta: 485 | '@types/react': 486 | optional: true 487 | 488 | '@radix-ui/react-direction@1.1.1': 489 | resolution: {integrity: sha512-1UEWRX6jnOA2y4H5WczZ44gOOjTEmlqv1uNW4GAJEO5+bauCBhv8snY65Iw5/VOS/ghKN9gr2KjnLKxrsvoMVw==} 490 | peerDependencies: 491 | '@types/react': '*' 492 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 493 | peerDependenciesMeta: 494 | '@types/react': 495 | optional: true 496 | 497 | '@radix-ui/react-presence@1.1.3': 498 | resolution: {integrity: sha512-IrVLIhskYhH3nLvtcBLQFZr61tBG7wx7O3kEmdzcYwRGAEBmBicGGL7ATzNgruYJ3xBTbuzEEq9OXJM3PAX3tA==} 499 | peerDependencies: 500 | '@types/react': '*' 501 | '@types/react-dom': '*' 502 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 503 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 504 | peerDependenciesMeta: 505 | '@types/react': 506 | optional: true 507 | '@types/react-dom': 508 | optional: true 509 | 510 | '@radix-ui/react-primitive@2.0.3': 511 | resolution: {integrity: sha512-Pf/t/GkndH7CQ8wE2hbkXA+WyZ83fhQQn5DDmwDiDo6AwN/fhaH8oqZ0jRjMrO2iaMhDi6P1HRx6AZwyMinY1g==} 512 | peerDependencies: 513 | '@types/react': '*' 514 | '@types/react-dom': '*' 515 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 516 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 517 | peerDependenciesMeta: 518 | '@types/react': 519 | optional: true 520 | '@types/react-dom': 521 | optional: true 522 | 523 | '@radix-ui/react-scroll-area@1.2.4': 524 | resolution: {integrity: sha512-G9rdWTQjOR4sk76HwSdROhPU0jZWpfozn9skU1v4N0/g9k7TmswrJn8W8WMU+aYktnLLpk5LX6fofj2bGe5NFQ==} 525 | peerDependencies: 526 | '@types/react': '*' 527 | '@types/react-dom': '*' 528 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 529 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 530 | peerDependenciesMeta: 531 | '@types/react': 532 | optional: true 533 | '@types/react-dom': 534 | optional: true 535 | 536 | '@radix-ui/react-separator@1.1.3': 537 | resolution: {integrity: sha512-2omrWKJvxR0U/tkIXezcc1nFMwtLU0+b/rDK40gnzJqTLWQ/TD/D5IYVefp9sC3QWfeQbpSbEA6op9MQKyaALQ==} 538 | peerDependencies: 539 | '@types/react': '*' 540 | '@types/react-dom': '*' 541 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 542 | react-dom: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 543 | peerDependenciesMeta: 544 | '@types/react': 545 | optional: true 546 | '@types/react-dom': 547 | optional: true 548 | 549 | '@radix-ui/react-slot@1.2.0': 550 | resolution: {integrity: sha512-ujc+V6r0HNDviYqIK3rW4ffgYiZ8g5DEHrGJVk4x7kTlLXRDILnKX9vAUYeIsLOoDpDJ0ujpqMkjH4w2ofuo6w==} 551 | peerDependencies: 552 | '@types/react': '*' 553 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 554 | peerDependenciesMeta: 555 | '@types/react': 556 | optional: true 557 | 558 | '@radix-ui/react-use-callback-ref@1.1.1': 559 | resolution: {integrity: sha512-FkBMwD+qbGQeMu1cOHnuGB6x4yzPjho8ap5WtbEJ26umhgqVXbhekKUQO+hZEL1vU92a3wHwdp0HAcqAUF5iDg==} 560 | peerDependencies: 561 | '@types/react': '*' 562 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 563 | peerDependenciesMeta: 564 | '@types/react': 565 | optional: true 566 | 567 | '@radix-ui/react-use-layout-effect@1.1.1': 568 | resolution: {integrity: sha512-RbJRS4UWQFkzHTTwVymMTUv8EqYhOp8dOOviLj2ugtTiXRaRQS7GLGxZTLL1jWhMeoSCf5zmcZkqTl9IiYfXcQ==} 569 | peerDependencies: 570 | '@types/react': '*' 571 | react: ^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc 572 | peerDependenciesMeta: 573 | '@types/react': 574 | optional: true 575 | 576 | '@rollup/rollup-android-arm-eabi@4.37.0': 577 | resolution: {integrity: sha512-l7StVw6WAa8l3vA1ov80jyetOAEo1FtHvZDbzXDO/02Sq/QVvqlHkYoFwDJPIMj0GKiistsBudfx5tGFnwYWDQ==} 578 | cpu: [arm] 579 | os: [android] 580 | 581 | '@rollup/rollup-android-arm64@4.37.0': 582 | resolution: {integrity: sha512-6U3SlVyMxezt8Y+/iEBcbp945uZjJwjZimu76xoG7tO1av9VO691z8PkhzQ85ith2I8R2RddEPeSfcbyPfD4hA==} 583 | cpu: [arm64] 584 | os: [android] 585 | 586 | '@rollup/rollup-darwin-arm64@4.37.0': 587 | resolution: {integrity: sha512-+iTQ5YHuGmPt10NTzEyMPbayiNTcOZDWsbxZYR1ZnmLnZxG17ivrPSWFO9j6GalY0+gV3Jtwrrs12DBscxnlYA==} 588 | cpu: [arm64] 589 | os: [darwin] 590 | 591 | '@rollup/rollup-darwin-x64@4.37.0': 592 | resolution: {integrity: sha512-m8W2UbxLDcmRKVjgl5J/k4B8d7qX2EcJve3Sut7YGrQoPtCIQGPH5AMzuFvYRWZi0FVS0zEY4c8uttPfX6bwYQ==} 593 | cpu: [x64] 594 | os: [darwin] 595 | 596 | '@rollup/rollup-freebsd-arm64@4.37.0': 597 | resolution: {integrity: sha512-FOMXGmH15OmtQWEt174v9P1JqqhlgYge/bUjIbiVD1nI1NeJ30HYT9SJlZMqdo1uQFyt9cz748F1BHghWaDnVA==} 598 | cpu: [arm64] 599 | os: [freebsd] 600 | 601 | '@rollup/rollup-freebsd-x64@4.37.0': 602 | resolution: {integrity: sha512-SZMxNttjPKvV14Hjck5t70xS3l63sbVwl98g3FlVVx2YIDmfUIy29jQrsw06ewEYQ8lQSuY9mpAPlmgRD2iSsA==} 603 | cpu: [x64] 604 | os: [freebsd] 605 | 606 | '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 607 | resolution: {integrity: sha512-hhAALKJPidCwZcj+g+iN+38SIOkhK2a9bqtJR+EtyxrKKSt1ynCBeqrQy31z0oWU6thRZzdx53hVgEbRkuI19w==} 608 | cpu: [arm] 609 | os: [linux] 610 | 611 | '@rollup/rollup-linux-arm-musleabihf@4.37.0': 612 | resolution: {integrity: sha512-jUb/kmn/Gd8epbHKEqkRAxq5c2EwRt0DqhSGWjPFxLeFvldFdHQs/n8lQ9x85oAeVb6bHcS8irhTJX2FCOd8Ag==} 613 | cpu: [arm] 614 | os: [linux] 615 | 616 | '@rollup/rollup-linux-arm64-gnu@4.37.0': 617 | resolution: {integrity: sha512-oNrJxcQT9IcbcmKlkF+Yz2tmOxZgG9D9GRq+1OE6XCQwCVwxixYAa38Z8qqPzQvzt1FCfmrHX03E0pWoXm1DqA==} 618 | cpu: [arm64] 619 | os: [linux] 620 | 621 | '@rollup/rollup-linux-arm64-musl@4.37.0': 622 | resolution: {integrity: sha512-pfxLBMls+28Ey2enpX3JvjEjaJMBX5XlPCZNGxj4kdJyHduPBXtxYeb8alo0a7bqOoWZW2uKynhHxF/MWoHaGQ==} 623 | cpu: [arm64] 624 | os: [linux] 625 | 626 | '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 627 | resolution: {integrity: sha512-yCE0NnutTC/7IGUq/PUHmoeZbIwq3KRh02e9SfFh7Vmc1Z7atuJRYWhRME5fKgT8aS20mwi1RyChA23qSyRGpA==} 628 | cpu: [loong64] 629 | os: [linux] 630 | 631 | '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 632 | resolution: {integrity: sha512-NxcICptHk06E2Lh3a4Pu+2PEdZ6ahNHuK7o6Np9zcWkrBMuv21j10SQDJW3C9Yf/A/P7cutWoC/DptNLVsZ0VQ==} 633 | cpu: [ppc64] 634 | os: [linux] 635 | 636 | '@rollup/rollup-linux-riscv64-gnu@4.37.0': 637 | resolution: {integrity: sha512-PpWwHMPCVpFZLTfLq7EWJWvrmEuLdGn1GMYcm5MV7PaRgwCEYJAwiN94uBuZev0/J/hFIIJCsYw4nLmXA9J7Pw==} 638 | cpu: [riscv64] 639 | os: [linux] 640 | 641 | '@rollup/rollup-linux-riscv64-musl@4.37.0': 642 | resolution: {integrity: sha512-DTNwl6a3CfhGTAOYZ4KtYbdS8b+275LSLqJVJIrPa5/JuIufWWZ/QFvkxp52gpmguN95eujrM68ZG+zVxa8zHA==} 643 | cpu: [riscv64] 644 | os: [linux] 645 | 646 | '@rollup/rollup-linux-s390x-gnu@4.37.0': 647 | resolution: {integrity: sha512-hZDDU5fgWvDdHFuExN1gBOhCuzo/8TMpidfOR+1cPZJflcEzXdCy1LjnklQdW8/Et9sryOPJAKAQRw8Jq7Tg+A==} 648 | cpu: [s390x] 649 | os: [linux] 650 | 651 | '@rollup/rollup-linux-x64-gnu@4.37.0': 652 | resolution: {integrity: sha512-pKivGpgJM5g8dwj0ywBwe/HeVAUSuVVJhUTa/URXjxvoyTT/AxsLTAbkHkDHG7qQxLoW2s3apEIl26uUe08LVQ==} 653 | cpu: [x64] 654 | os: [linux] 655 | 656 | '@rollup/rollup-linux-x64-musl@4.37.0': 657 | resolution: {integrity: sha512-E2lPrLKE8sQbY/2bEkVTGDEk4/49UYRVWgj90MY8yPjpnGBQ+Xi1Qnr7b7UIWw1NOggdFQFOLZ8+5CzCiz143w==} 658 | cpu: [x64] 659 | os: [linux] 660 | 661 | '@rollup/rollup-win32-arm64-msvc@4.37.0': 662 | resolution: {integrity: sha512-Jm7biMazjNzTU4PrQtr7VS8ibeys9Pn29/1bm4ph7CP2kf21950LgN+BaE2mJ1QujnvOc6p54eWWiVvn05SOBg==} 663 | cpu: [arm64] 664 | os: [win32] 665 | 666 | '@rollup/rollup-win32-ia32-msvc@4.37.0': 667 | resolution: {integrity: sha512-e3/1SFm1OjefWICB2Ucstg2dxYDkDTZGDYgwufcbsxTHyqQps1UQf33dFEChBNmeSsTOyrjw2JJq0zbG5GF6RA==} 668 | cpu: [ia32] 669 | os: [win32] 670 | 671 | '@rollup/rollup-win32-x64-msvc@4.37.0': 672 | resolution: {integrity: sha512-LWbXUBwn/bcLx2sSsqy7pK5o+Nr+VCoRoAohfJ5C/aBio9nfJmGQqHAhU6pwxV/RmyTk5AqdySma7uwWGlmeuA==} 673 | cpu: [x64] 674 | os: [win32] 675 | 676 | '@tailwindcss/node@4.0.15': 677 | resolution: {integrity: sha512-IODaJjNmiasfZX3IoS+4Em3iu0fD2HS0/tgrnkYfW4hyUor01Smnr5eY3jc4rRgaTDrJlDmBTHbFO0ETTDaxWA==} 678 | 679 | '@tailwindcss/oxide-android-arm64@4.0.15': 680 | resolution: {integrity: sha512-EBuyfSKkom7N+CB3A+7c0m4+qzKuiN0WCvzPvj5ZoRu4NlQadg/mthc1tl5k9b5ffRGsbDvP4k21azU4VwVk3Q==} 681 | engines: {node: '>= 10'} 682 | cpu: [arm64] 683 | os: [android] 684 | 685 | '@tailwindcss/oxide-darwin-arm64@4.0.15': 686 | resolution: {integrity: sha512-ObVAnEpLepMhV9VoO0JSit66jiN5C4YCqW3TflsE9boo2Z7FIjV80RFbgeL2opBhtxbaNEDa6D0/hq/EP03kgQ==} 687 | engines: {node: '>= 10'} 688 | cpu: [arm64] 689 | os: [darwin] 690 | 691 | '@tailwindcss/oxide-darwin-x64@4.0.15': 692 | resolution: {integrity: sha512-IElwoFhUinOr9MyKmGTPNi1Rwdh68JReFgYWibPWTGuevkHkLWKEflZc2jtI5lWZ5U9JjUnUfnY43I4fEXrc4g==} 693 | engines: {node: '>= 10'} 694 | cpu: [x64] 695 | os: [darwin] 696 | 697 | '@tailwindcss/oxide-freebsd-x64@4.0.15': 698 | resolution: {integrity: sha512-6BLLqyx7SIYRBOnTZ8wgfXANLJV5TQd3PevRJZp0vn42eO58A2LykRKdvL1qyPfdpmEVtF+uVOEZ4QTMqDRAWA==} 699 | engines: {node: '>= 10'} 700 | cpu: [x64] 701 | os: [freebsd] 702 | 703 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15': 704 | resolution: {integrity: sha512-Zy63EVqO9241Pfg6G0IlRIWyY5vNcWrL5dd2WAKVJZRQVeolXEf1KfjkyeAAlErDj72cnyXObEZjMoPEKHpdNw==} 705 | engines: {node: '>= 10'} 706 | cpu: [arm] 707 | os: [linux] 708 | 709 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.15': 710 | resolution: {integrity: sha512-2NemGQeaTbtIp1Z2wyerbVEJZTkAWhMDOhhR5z/zJ75yMNf8yLnE+sAlyf6yGDNr+1RqvWrRhhCFt7i0CIxe4Q==} 711 | engines: {node: '>= 10'} 712 | cpu: [arm64] 713 | os: [linux] 714 | 715 | '@tailwindcss/oxide-linux-arm64-musl@4.0.15': 716 | resolution: {integrity: sha512-342GVnhH/6PkVgKtEzvNVuQ4D+Q7B7qplvuH20Cfz9qEtydG6IQczTZ5IT4JPlh931MG1NUCVxg+CIorr1WJyw==} 717 | engines: {node: '>= 10'} 718 | cpu: [arm64] 719 | os: [linux] 720 | 721 | '@tailwindcss/oxide-linux-x64-gnu@4.0.15': 722 | resolution: {integrity: sha512-g76GxlKH124RuGqacCEFc2nbzRl7bBrlC8qDQMiUABkiifDRHOIUjgKbLNG4RuR9hQAD/MKsqZ7A8L08zsoBrw==} 723 | engines: {node: '>= 10'} 724 | cpu: [x64] 725 | os: [linux] 726 | 727 | '@tailwindcss/oxide-linux-x64-musl@4.0.15': 728 | resolution: {integrity: sha512-Gg/Y1XrKEvKpq6WeNt2h8rMIKOBj/W3mNa5NMvkQgMC7iO0+UNLrYmt6zgZufht66HozNpn+tJMbbkZ5a3LczA==} 729 | engines: {node: '>= 10'} 730 | cpu: [x64] 731 | os: [linux] 732 | 733 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.15': 734 | resolution: {integrity: sha512-7QtSSJwYZ7ZK1phVgcNZpuf7c7gaCj8Wb0xjliligT5qCGCp79OV2n3SJummVZdw4fbTNKUOYMO7m1GinppZyA==} 735 | engines: {node: '>= 10'} 736 | cpu: [arm64] 737 | os: [win32] 738 | 739 | '@tailwindcss/oxide-win32-x64-msvc@4.0.15': 740 | resolution: {integrity: sha512-JQ5H+5MLhOjpgNp6KomouE0ZuKmk3hO5h7/ClMNAQ8gZI2zkli3IH8ZqLbd2DVfXDbdxN2xvooIEeIlkIoSCqw==} 741 | engines: {node: '>= 10'} 742 | cpu: [x64] 743 | os: [win32] 744 | 745 | '@tailwindcss/oxide@4.0.15': 746 | resolution: {integrity: sha512-e0uHrKfPu7JJGMfjwVNyt5M0u+OP8kUmhACwIRlM+JNBuReDVQ63yAD1NWe5DwJtdaHjugNBil76j+ks3zlk6g==} 747 | engines: {node: '>= 10'} 748 | 749 | '@tailwindcss/vite@4.0.15': 750 | resolution: {integrity: sha512-JRexava80NijI8cTcLXNM3nQL5A0ptTHI8oJLLe8z1MpNB6p5J4WCdJJP8RoyHu8/eB1JzEdbpH86eGfbuaezQ==} 751 | peerDependencies: 752 | vite: ^5.2.0 || ^6 753 | 754 | '@types/babel__core@7.20.5': 755 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 756 | 757 | '@types/babel__generator@7.6.8': 758 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 759 | 760 | '@types/babel__template@7.4.4': 761 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 762 | 763 | '@types/babel__traverse@7.20.6': 764 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 765 | 766 | '@types/estree@1.0.6': 767 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} 768 | 769 | '@types/estree@1.0.7': 770 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 771 | 772 | '@types/json-schema@7.0.15': 773 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 774 | 775 | '@types/node@22.13.13': 776 | resolution: {integrity: sha512-ClsL5nMwKaBRwPcCvH8E7+nU4GxHVx1axNvMZTFHMEfNI7oahimt26P5zjVCRrjiIWj6YFXfE1v3dEp94wLcGQ==} 777 | 778 | '@types/react-dom@19.0.4': 779 | resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==} 780 | peerDependencies: 781 | '@types/react': ^19.0.0 782 | 783 | '@types/react@19.0.12': 784 | resolution: {integrity: sha512-V6Ar115dBDrjbtXSrS+/Oruobc+qVbbUxDFC1RSbRqLt5SYvxxyIDrSC85RWml54g+jfNeEMZhEj7wW07ONQhA==} 785 | 786 | '@typescript-eslint/eslint-plugin@8.28.0': 787 | resolution: {integrity: sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==} 788 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 789 | peerDependencies: 790 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 791 | eslint: ^8.57.0 || ^9.0.0 792 | typescript: '>=4.8.4 <5.9.0' 793 | 794 | '@typescript-eslint/parser@8.28.0': 795 | resolution: {integrity: sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==} 796 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 797 | peerDependencies: 798 | eslint: ^8.57.0 || ^9.0.0 799 | typescript: '>=4.8.4 <5.9.0' 800 | 801 | '@typescript-eslint/scope-manager@8.28.0': 802 | resolution: {integrity: sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==} 803 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 804 | 805 | '@typescript-eslint/type-utils@8.28.0': 806 | resolution: {integrity: sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==} 807 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 808 | peerDependencies: 809 | eslint: ^8.57.0 || ^9.0.0 810 | typescript: '>=4.8.4 <5.9.0' 811 | 812 | '@typescript-eslint/types@8.28.0': 813 | resolution: {integrity: sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==} 814 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 815 | 816 | '@typescript-eslint/typescript-estree@8.28.0': 817 | resolution: {integrity: sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==} 818 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 819 | peerDependencies: 820 | typescript: '>=4.8.4 <5.9.0' 821 | 822 | '@typescript-eslint/utils@8.28.0': 823 | resolution: {integrity: sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==} 824 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 825 | peerDependencies: 826 | eslint: ^8.57.0 || ^9.0.0 827 | typescript: '>=4.8.4 <5.9.0' 828 | 829 | '@typescript-eslint/visitor-keys@8.28.0': 830 | resolution: {integrity: sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==} 831 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 832 | 833 | '@vitejs/plugin-react@4.3.4': 834 | resolution: {integrity: sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==} 835 | engines: {node: ^14.18.0 || >=16.0.0} 836 | peerDependencies: 837 | vite: ^4.2.0 || ^5.0.0 || ^6.0.0 838 | 839 | acorn-jsx@5.3.2: 840 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 841 | peerDependencies: 842 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 843 | 844 | acorn@8.14.1: 845 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 846 | engines: {node: '>=0.4.0'} 847 | hasBin: true 848 | 849 | ajv@6.12.6: 850 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 851 | 852 | ansi-regex@5.0.1: 853 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 854 | engines: {node: '>=8'} 855 | 856 | ansi-regex@6.1.0: 857 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} 858 | engines: {node: '>=12'} 859 | 860 | ansi-styles@4.3.0: 861 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 862 | engines: {node: '>=8'} 863 | 864 | ansi-styles@6.2.1: 865 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 866 | engines: {node: '>=12'} 867 | 868 | any-promise@1.3.0: 869 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 870 | 871 | anymatch@3.1.3: 872 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 873 | engines: {node: '>= 8'} 874 | 875 | arg@5.0.2: 876 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 877 | 878 | argparse@2.0.1: 879 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 880 | 881 | autoprefixer@10.4.21: 882 | resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} 883 | engines: {node: ^10 || ^12 || >=14} 884 | hasBin: true 885 | peerDependencies: 886 | postcss: ^8.1.0 887 | 888 | balanced-match@1.0.2: 889 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 890 | 891 | binary-extensions@2.3.0: 892 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 893 | engines: {node: '>=8'} 894 | 895 | brace-expansion@1.1.11: 896 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 897 | 898 | brace-expansion@2.0.1: 899 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 900 | 901 | braces@3.0.3: 902 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 903 | engines: {node: '>=8'} 904 | 905 | browserslist@4.24.4: 906 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 907 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 908 | hasBin: true 909 | 910 | callsites@3.1.0: 911 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 912 | engines: {node: '>=6'} 913 | 914 | camelcase-css@2.0.1: 915 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 916 | engines: {node: '>= 6'} 917 | 918 | caniuse-lite@1.0.30001707: 919 | resolution: {integrity: sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==} 920 | 921 | chalk@4.1.2: 922 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 923 | engines: {node: '>=10'} 924 | 925 | chokidar@3.6.0: 926 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 927 | engines: {node: '>= 8.10.0'} 928 | 929 | class-variance-authority@0.7.1: 930 | resolution: {integrity: sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==} 931 | 932 | clsx@2.1.1: 933 | resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} 934 | engines: {node: '>=6'} 935 | 936 | color-convert@2.0.1: 937 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 938 | engines: {node: '>=7.0.0'} 939 | 940 | color-name@1.1.4: 941 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 942 | 943 | commander@4.1.1: 944 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 945 | engines: {node: '>= 6'} 946 | 947 | concat-map@0.0.1: 948 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 949 | 950 | convert-source-map@2.0.0: 951 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 952 | 953 | cross-spawn@7.0.6: 954 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 955 | engines: {node: '>= 8'} 956 | 957 | cssesc@3.0.0: 958 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 959 | engines: {node: '>=4'} 960 | hasBin: true 961 | 962 | csstype@3.1.3: 963 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 964 | 965 | debug@4.4.0: 966 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 967 | engines: {node: '>=6.0'} 968 | peerDependencies: 969 | supports-color: '*' 970 | peerDependenciesMeta: 971 | supports-color: 972 | optional: true 973 | 974 | deep-is@0.1.4: 975 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 976 | 977 | detect-libc@2.0.3: 978 | resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} 979 | engines: {node: '>=8'} 980 | 981 | didyoumean@1.2.2: 982 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 983 | 984 | dlv@1.1.3: 985 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 986 | 987 | eastasianwidth@0.2.0: 988 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 989 | 990 | electron-to-chromium@1.5.123: 991 | resolution: {integrity: sha512-refir3NlutEZqlKaBLK0tzlVLe5P2wDKS7UQt/3SpibizgsRAPOsqQC3ffw1nlv3ze5gjRQZYHoPymgVZkplFA==} 992 | 993 | emoji-regex@8.0.0: 994 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 995 | 996 | emoji-regex@9.2.2: 997 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 998 | 999 | enhanced-resolve@5.18.1: 1000 | resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} 1001 | engines: {node: '>=10.13.0'} 1002 | 1003 | esbuild@0.25.1: 1004 | resolution: {integrity: sha512-BGO5LtrGC7vxnqucAe/rmvKdJllfGaYWdyABvyMoXQlfYMb2bbRuReWR5tEGE//4LcNJj9XrkovTqNYRFZHAMQ==} 1005 | engines: {node: '>=18'} 1006 | hasBin: true 1007 | 1008 | escalade@3.2.0: 1009 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1010 | engines: {node: '>=6'} 1011 | 1012 | escape-string-regexp@4.0.0: 1013 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1014 | engines: {node: '>=10'} 1015 | 1016 | eslint-plugin-react-hooks@5.2.0: 1017 | resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} 1018 | engines: {node: '>=10'} 1019 | peerDependencies: 1020 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 1021 | 1022 | eslint-plugin-react-refresh@0.4.19: 1023 | resolution: {integrity: sha512-eyy8pcr/YxSYjBoqIFSrlbn9i/xvxUFa8CjzAYo9cFjgGXqq1hyjihcpZvxRLalpaWmueWR81xn7vuKmAFijDQ==} 1024 | peerDependencies: 1025 | eslint: '>=8.40' 1026 | 1027 | eslint-scope@8.3.0: 1028 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 1029 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1030 | 1031 | eslint-visitor-keys@3.4.3: 1032 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1033 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1034 | 1035 | eslint-visitor-keys@4.2.0: 1036 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 1037 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1038 | 1039 | eslint@9.23.0: 1040 | resolution: {integrity: sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==} 1041 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1042 | hasBin: true 1043 | peerDependencies: 1044 | jiti: '*' 1045 | peerDependenciesMeta: 1046 | jiti: 1047 | optional: true 1048 | 1049 | espree@10.3.0: 1050 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 1051 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1052 | 1053 | esquery@1.6.0: 1054 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1055 | engines: {node: '>=0.10'} 1056 | 1057 | esrecurse@4.3.0: 1058 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1059 | engines: {node: '>=4.0'} 1060 | 1061 | estraverse@5.3.0: 1062 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1063 | engines: {node: '>=4.0'} 1064 | 1065 | esutils@2.0.3: 1066 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1067 | engines: {node: '>=0.10.0'} 1068 | 1069 | fast-deep-equal@3.1.3: 1070 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1071 | 1072 | fast-glob@3.3.3: 1073 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1074 | engines: {node: '>=8.6.0'} 1075 | 1076 | fast-json-stable-stringify@2.1.0: 1077 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1078 | 1079 | fast-levenshtein@2.0.6: 1080 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1081 | 1082 | fastq@1.19.1: 1083 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1084 | 1085 | file-entry-cache@8.0.0: 1086 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1087 | engines: {node: '>=16.0.0'} 1088 | 1089 | fill-range@7.1.1: 1090 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1091 | engines: {node: '>=8'} 1092 | 1093 | find-up@5.0.0: 1094 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1095 | engines: {node: '>=10'} 1096 | 1097 | flat-cache@4.0.1: 1098 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1099 | engines: {node: '>=16'} 1100 | 1101 | flatted@3.3.3: 1102 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1103 | 1104 | foreground-child@3.3.1: 1105 | resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} 1106 | engines: {node: '>=14'} 1107 | 1108 | fraction.js@4.3.7: 1109 | resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} 1110 | 1111 | framer-motion@12.5.0: 1112 | resolution: {integrity: sha512-buPlioFbH9/W7rDzYh1C09AuZHAk2D1xTA1BlounJ2Rb9aRg84OXexP0GLd+R83v0khURdMX7b5MKnGTaSg5iA==} 1113 | peerDependencies: 1114 | '@emotion/is-prop-valid': '*' 1115 | react: ^18.0.0 || ^19.0.0 1116 | react-dom: ^18.0.0 || ^19.0.0 1117 | peerDependenciesMeta: 1118 | '@emotion/is-prop-valid': 1119 | optional: true 1120 | react: 1121 | optional: true 1122 | react-dom: 1123 | optional: true 1124 | 1125 | fsevents@2.3.3: 1126 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1127 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1128 | os: [darwin] 1129 | 1130 | function-bind@1.1.2: 1131 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1132 | 1133 | gensync@1.0.0-beta.2: 1134 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 1135 | engines: {node: '>=6.9.0'} 1136 | 1137 | glob-parent@5.1.2: 1138 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1139 | engines: {node: '>= 6'} 1140 | 1141 | glob-parent@6.0.2: 1142 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1143 | engines: {node: '>=10.13.0'} 1144 | 1145 | glob@10.4.5: 1146 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1147 | hasBin: true 1148 | 1149 | globals@11.12.0: 1150 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 1151 | engines: {node: '>=4'} 1152 | 1153 | globals@14.0.0: 1154 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1155 | engines: {node: '>=18'} 1156 | 1157 | graceful-fs@4.2.11: 1158 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1159 | 1160 | graphemer@1.4.0: 1161 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1162 | 1163 | has-flag@4.0.0: 1164 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1165 | engines: {node: '>=8'} 1166 | 1167 | hasown@2.0.2: 1168 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1169 | engines: {node: '>= 0.4'} 1170 | 1171 | ignore@5.3.2: 1172 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1173 | engines: {node: '>= 4'} 1174 | 1175 | import-fresh@3.3.1: 1176 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1177 | engines: {node: '>=6'} 1178 | 1179 | imurmurhash@0.1.4: 1180 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1181 | engines: {node: '>=0.8.19'} 1182 | 1183 | is-binary-path@2.1.0: 1184 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1185 | engines: {node: '>=8'} 1186 | 1187 | is-core-module@2.16.1: 1188 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1189 | engines: {node: '>= 0.4'} 1190 | 1191 | is-extglob@2.1.1: 1192 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1193 | engines: {node: '>=0.10.0'} 1194 | 1195 | is-fullwidth-code-point@3.0.0: 1196 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1197 | engines: {node: '>=8'} 1198 | 1199 | is-glob@4.0.3: 1200 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1201 | engines: {node: '>=0.10.0'} 1202 | 1203 | is-number@7.0.0: 1204 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1205 | engines: {node: '>=0.12.0'} 1206 | 1207 | isexe@2.0.0: 1208 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1209 | 1210 | jackspeak@3.4.3: 1211 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1212 | 1213 | jiti@1.21.7: 1214 | resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} 1215 | hasBin: true 1216 | 1217 | jiti@2.4.2: 1218 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 1219 | hasBin: true 1220 | 1221 | js-tokens@4.0.0: 1222 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1223 | 1224 | js-yaml@4.1.0: 1225 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1226 | hasBin: true 1227 | 1228 | jsesc@3.1.0: 1229 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 1230 | engines: {node: '>=6'} 1231 | hasBin: true 1232 | 1233 | json-buffer@3.0.1: 1234 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1235 | 1236 | json-schema-traverse@0.4.1: 1237 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1238 | 1239 | json-stable-stringify-without-jsonify@1.0.1: 1240 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1241 | 1242 | json5@2.2.3: 1243 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 1244 | engines: {node: '>=6'} 1245 | hasBin: true 1246 | 1247 | keyv@4.5.4: 1248 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1249 | 1250 | levn@0.4.1: 1251 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1252 | engines: {node: '>= 0.8.0'} 1253 | 1254 | lightningcss-darwin-arm64@1.29.2: 1255 | resolution: {integrity: sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==} 1256 | engines: {node: '>= 12.0.0'} 1257 | cpu: [arm64] 1258 | os: [darwin] 1259 | 1260 | lightningcss-darwin-x64@1.29.2: 1261 | resolution: {integrity: sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==} 1262 | engines: {node: '>= 12.0.0'} 1263 | cpu: [x64] 1264 | os: [darwin] 1265 | 1266 | lightningcss-freebsd-x64@1.29.2: 1267 | resolution: {integrity: sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==} 1268 | engines: {node: '>= 12.0.0'} 1269 | cpu: [x64] 1270 | os: [freebsd] 1271 | 1272 | lightningcss-linux-arm-gnueabihf@1.29.2: 1273 | resolution: {integrity: sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==} 1274 | engines: {node: '>= 12.0.0'} 1275 | cpu: [arm] 1276 | os: [linux] 1277 | 1278 | lightningcss-linux-arm64-gnu@1.29.2: 1279 | resolution: {integrity: sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==} 1280 | engines: {node: '>= 12.0.0'} 1281 | cpu: [arm64] 1282 | os: [linux] 1283 | 1284 | lightningcss-linux-arm64-musl@1.29.2: 1285 | resolution: {integrity: sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==} 1286 | engines: {node: '>= 12.0.0'} 1287 | cpu: [arm64] 1288 | os: [linux] 1289 | 1290 | lightningcss-linux-x64-gnu@1.29.2: 1291 | resolution: {integrity: sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==} 1292 | engines: {node: '>= 12.0.0'} 1293 | cpu: [x64] 1294 | os: [linux] 1295 | 1296 | lightningcss-linux-x64-musl@1.29.2: 1297 | resolution: {integrity: sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==} 1298 | engines: {node: '>= 12.0.0'} 1299 | cpu: [x64] 1300 | os: [linux] 1301 | 1302 | lightningcss-win32-arm64-msvc@1.29.2: 1303 | resolution: {integrity: sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==} 1304 | engines: {node: '>= 12.0.0'} 1305 | cpu: [arm64] 1306 | os: [win32] 1307 | 1308 | lightningcss-win32-x64-msvc@1.29.2: 1309 | resolution: {integrity: sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==} 1310 | engines: {node: '>= 12.0.0'} 1311 | cpu: [x64] 1312 | os: [win32] 1313 | 1314 | lightningcss@1.29.2: 1315 | resolution: {integrity: sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==} 1316 | engines: {node: '>= 12.0.0'} 1317 | 1318 | lilconfig@3.1.3: 1319 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1320 | engines: {node: '>=14'} 1321 | 1322 | lines-and-columns@1.2.4: 1323 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1324 | 1325 | locate-path@6.0.0: 1326 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1327 | engines: {node: '>=10'} 1328 | 1329 | lodash.merge@4.6.2: 1330 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1331 | 1332 | loose-envify@1.4.0: 1333 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1334 | hasBin: true 1335 | 1336 | lru-cache@10.4.3: 1337 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1338 | 1339 | lru-cache@5.1.1: 1340 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 1341 | 1342 | merge2@1.4.1: 1343 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1344 | engines: {node: '>= 8'} 1345 | 1346 | micromatch@4.0.8: 1347 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1348 | engines: {node: '>=8.6'} 1349 | 1350 | minimatch@3.1.2: 1351 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1352 | 1353 | minimatch@9.0.5: 1354 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1355 | engines: {node: '>=16 || 14 >=14.17'} 1356 | 1357 | minipass@7.1.2: 1358 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1359 | engines: {node: '>=16 || 14 >=14.17'} 1360 | 1361 | motion-dom@12.5.0: 1362 | resolution: {integrity: sha512-uH2PETDh7m+Hjd1UQQ56yHqwn83SAwNjimNPE/kC+Kds0t4Yh7+29rfo5wezVFpPOv57U4IuWved5d1x0kNhbQ==} 1363 | 1364 | motion-utils@12.5.0: 1365 | resolution: {integrity: sha512-+hFFzvimn0sBMP9iPxBa9OtRX35ZQ3py0UHnb8U29VD+d8lQ8zH3dTygJWqK7av2v6yhg7scj9iZuvTS0f4+SA==} 1366 | 1367 | ms@2.1.3: 1368 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1369 | 1370 | mz@2.7.0: 1371 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1372 | 1373 | nanoid@3.3.11: 1374 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1375 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1376 | hasBin: true 1377 | 1378 | natural-compare@1.4.0: 1379 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1380 | 1381 | node-releases@2.0.19: 1382 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 1383 | 1384 | normalize-path@3.0.0: 1385 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1386 | engines: {node: '>=0.10.0'} 1387 | 1388 | normalize-range@0.1.2: 1389 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 1390 | engines: {node: '>=0.10.0'} 1391 | 1392 | object-assign@4.1.1: 1393 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1394 | engines: {node: '>=0.10.0'} 1395 | 1396 | object-hash@3.0.0: 1397 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 1398 | engines: {node: '>= 6'} 1399 | 1400 | optionator@0.9.4: 1401 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1402 | engines: {node: '>= 0.8.0'} 1403 | 1404 | p-limit@3.1.0: 1405 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1406 | engines: {node: '>=10'} 1407 | 1408 | p-locate@5.0.0: 1409 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1410 | engines: {node: '>=10'} 1411 | 1412 | package-json-from-dist@1.0.1: 1413 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} 1414 | 1415 | parent-module@1.0.1: 1416 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1417 | engines: {node: '>=6'} 1418 | 1419 | path-exists@4.0.0: 1420 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1421 | engines: {node: '>=8'} 1422 | 1423 | path-key@3.1.1: 1424 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1425 | engines: {node: '>=8'} 1426 | 1427 | path-parse@1.0.7: 1428 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1429 | 1430 | path-scurry@1.11.1: 1431 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1432 | engines: {node: '>=16 || 14 >=14.18'} 1433 | 1434 | picocolors@1.1.1: 1435 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1436 | 1437 | picomatch@2.3.1: 1438 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1439 | engines: {node: '>=8.6'} 1440 | 1441 | pify@2.3.0: 1442 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 1443 | engines: {node: '>=0.10.0'} 1444 | 1445 | pirates@4.0.6: 1446 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1447 | engines: {node: '>= 6'} 1448 | 1449 | postcss-import@15.1.0: 1450 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 1451 | engines: {node: '>=14.0.0'} 1452 | peerDependencies: 1453 | postcss: ^8.0.0 1454 | 1455 | postcss-js@4.0.1: 1456 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 1457 | engines: {node: ^12 || ^14 || >= 16} 1458 | peerDependencies: 1459 | postcss: ^8.4.21 1460 | 1461 | postcss-load-config@4.0.2: 1462 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 1463 | engines: {node: '>= 14'} 1464 | peerDependencies: 1465 | postcss: '>=8.0.9' 1466 | ts-node: '>=9.0.0' 1467 | peerDependenciesMeta: 1468 | postcss: 1469 | optional: true 1470 | ts-node: 1471 | optional: true 1472 | 1473 | postcss-nested@6.2.0: 1474 | resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} 1475 | engines: {node: '>=12.0'} 1476 | peerDependencies: 1477 | postcss: ^8.2.14 1478 | 1479 | postcss-selector-parser@6.1.2: 1480 | resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} 1481 | engines: {node: '>=4'} 1482 | 1483 | postcss-value-parser@4.2.0: 1484 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 1485 | 1486 | postcss@8.5.3: 1487 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1488 | engines: {node: ^10 || ^12 || >=14} 1489 | 1490 | prelude-ls@1.2.1: 1491 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1492 | engines: {node: '>= 0.8.0'} 1493 | 1494 | prop-types@15.8.1: 1495 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1496 | 1497 | punycode@2.3.1: 1498 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1499 | engines: {node: '>=6'} 1500 | 1501 | queue-microtask@1.2.3: 1502 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1503 | 1504 | react-dom@19.0.0: 1505 | resolution: {integrity: sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==} 1506 | peerDependencies: 1507 | react: ^19.0.0 1508 | 1509 | react-is@16.13.1: 1510 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1511 | 1512 | react-refresh@0.14.2: 1513 | resolution: {integrity: sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==} 1514 | engines: {node: '>=0.10.0'} 1515 | 1516 | react@19.0.0: 1517 | resolution: {integrity: sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==} 1518 | engines: {node: '>=0.10.0'} 1519 | 1520 | read-cache@1.0.0: 1521 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 1522 | 1523 | readdirp@3.6.0: 1524 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1525 | engines: {node: '>=8.10.0'} 1526 | 1527 | resolve-from@4.0.0: 1528 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1529 | engines: {node: '>=4'} 1530 | 1531 | resolve@1.22.10: 1532 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1533 | engines: {node: '>= 0.4'} 1534 | hasBin: true 1535 | 1536 | reusify@1.1.0: 1537 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1538 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1539 | 1540 | rollup@4.37.0: 1541 | resolution: {integrity: sha512-iAtQy/L4QFU+rTJ1YUjXqJOJzuwEghqWzCEYD2FEghT7Gsy1VdABntrO4CLopA5IkflTyqNiLNwPcOJ3S7UKLg==} 1542 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1543 | hasBin: true 1544 | 1545 | run-parallel@1.2.0: 1546 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1547 | 1548 | scheduler@0.25.0: 1549 | resolution: {integrity: sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==} 1550 | 1551 | semver@6.3.1: 1552 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1553 | hasBin: true 1554 | 1555 | semver@7.7.1: 1556 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1557 | engines: {node: '>=10'} 1558 | hasBin: true 1559 | 1560 | shebang-command@2.0.0: 1561 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1562 | engines: {node: '>=8'} 1563 | 1564 | shebang-regex@3.0.0: 1565 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1566 | engines: {node: '>=8'} 1567 | 1568 | signal-exit@4.1.0: 1569 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1570 | engines: {node: '>=14'} 1571 | 1572 | source-map-js@1.2.1: 1573 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1574 | engines: {node: '>=0.10.0'} 1575 | 1576 | string-width@4.2.3: 1577 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1578 | engines: {node: '>=8'} 1579 | 1580 | string-width@5.1.2: 1581 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1582 | engines: {node: '>=12'} 1583 | 1584 | strip-ansi@6.0.1: 1585 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1586 | engines: {node: '>=8'} 1587 | 1588 | strip-ansi@7.1.0: 1589 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1590 | engines: {node: '>=12'} 1591 | 1592 | strip-json-comments@3.1.1: 1593 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1594 | engines: {node: '>=8'} 1595 | 1596 | sucrase@3.35.0: 1597 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1598 | engines: {node: '>=16 || 14 >=14.17'} 1599 | hasBin: true 1600 | 1601 | supports-color@7.2.0: 1602 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1603 | engines: {node: '>=8'} 1604 | 1605 | supports-preserve-symlinks-flag@1.0.0: 1606 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1607 | engines: {node: '>= 0.4'} 1608 | 1609 | tailwind-merge@3.0.2: 1610 | resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==} 1611 | 1612 | tailwindcss-animate@1.0.7: 1613 | resolution: {integrity: sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==} 1614 | peerDependencies: 1615 | tailwindcss: '>=3.0.0 || insiders' 1616 | 1617 | tailwindcss@3.4.17: 1618 | resolution: {integrity: sha512-w33E2aCvSDP0tW9RZuNXadXlkHXqFzSkQew/aIa2i/Sj8fThxwovwlXHSPXTbAHwEIhBFXAedUhP2tueAKP8Og==} 1619 | engines: {node: '>=14.0.0'} 1620 | hasBin: true 1621 | 1622 | tailwindcss@4.0.15: 1623 | resolution: {integrity: sha512-6ZMg+hHdMJpjpeCCFasX7K+U615U9D+7k5/cDK/iRwl6GptF24+I/AbKgOnXhVKePzrEyIXutLv36n4cRsq3Sg==} 1624 | 1625 | tapable@2.2.1: 1626 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} 1627 | engines: {node: '>=6'} 1628 | 1629 | thenify-all@1.6.0: 1630 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1631 | engines: {node: '>=0.8'} 1632 | 1633 | thenify@3.3.1: 1634 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1635 | 1636 | to-regex-range@5.0.1: 1637 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1638 | engines: {node: '>=8.0'} 1639 | 1640 | ts-api-utils@2.1.0: 1641 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 1642 | engines: {node: '>=18.12'} 1643 | peerDependencies: 1644 | typescript: '>=4.8.4' 1645 | 1646 | ts-interface-checker@0.1.13: 1647 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1648 | 1649 | tslib@2.8.1: 1650 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1651 | 1652 | type-check@0.4.0: 1653 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1654 | engines: {node: '>= 0.8.0'} 1655 | 1656 | typescript@5.8.2: 1657 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 1658 | engines: {node: '>=14.17'} 1659 | hasBin: true 1660 | 1661 | undici-types@6.20.0: 1662 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1663 | 1664 | update-browserslist-db@1.1.3: 1665 | resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} 1666 | hasBin: true 1667 | peerDependencies: 1668 | browserslist: '>= 4.21.0' 1669 | 1670 | uri-js@4.4.1: 1671 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1672 | 1673 | util-deprecate@1.0.2: 1674 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1675 | 1676 | vite@6.2.3: 1677 | resolution: {integrity: sha512-IzwM54g4y9JA/xAeBPNaDXiBF8Jsgl3VBQ2YQ/wOY6fyW3xMdSoltIV3Bo59DErdqdE6RxUfv8W69DvUorE4Eg==} 1678 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 1679 | hasBin: true 1680 | peerDependencies: 1681 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 1682 | jiti: '>=1.21.0' 1683 | less: '*' 1684 | lightningcss: ^1.21.0 1685 | sass: '*' 1686 | sass-embedded: '*' 1687 | stylus: '*' 1688 | sugarss: '*' 1689 | terser: ^5.16.0 1690 | tsx: ^4.8.1 1691 | yaml: ^2.4.2 1692 | peerDependenciesMeta: 1693 | '@types/node': 1694 | optional: true 1695 | jiti: 1696 | optional: true 1697 | less: 1698 | optional: true 1699 | lightningcss: 1700 | optional: true 1701 | sass: 1702 | optional: true 1703 | sass-embedded: 1704 | optional: true 1705 | stylus: 1706 | optional: true 1707 | sugarss: 1708 | optional: true 1709 | terser: 1710 | optional: true 1711 | tsx: 1712 | optional: true 1713 | yaml: 1714 | optional: true 1715 | 1716 | which@2.0.2: 1717 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1718 | engines: {node: '>= 8'} 1719 | hasBin: true 1720 | 1721 | word-wrap@1.2.5: 1722 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1723 | engines: {node: '>=0.10.0'} 1724 | 1725 | wrap-ansi@7.0.0: 1726 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1727 | engines: {node: '>=10'} 1728 | 1729 | wrap-ansi@8.1.0: 1730 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1731 | engines: {node: '>=12'} 1732 | 1733 | yallist@3.1.1: 1734 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1735 | 1736 | yaml@2.7.0: 1737 | resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} 1738 | engines: {node: '>= 14'} 1739 | hasBin: true 1740 | 1741 | yocto-queue@0.1.0: 1742 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1743 | engines: {node: '>=10'} 1744 | 1745 | snapshots: 1746 | 1747 | '@alloc/quick-lru@5.2.0': {} 1748 | 1749 | '@ampproject/remapping@2.3.0': 1750 | dependencies: 1751 | '@jridgewell/gen-mapping': 0.3.8 1752 | '@jridgewell/trace-mapping': 0.3.25 1753 | 1754 | '@babel/code-frame@7.26.2': 1755 | dependencies: 1756 | '@babel/helper-validator-identifier': 7.25.9 1757 | js-tokens: 4.0.0 1758 | picocolors: 1.1.1 1759 | 1760 | '@babel/compat-data@7.26.8': {} 1761 | 1762 | '@babel/core@7.26.10': 1763 | dependencies: 1764 | '@ampproject/remapping': 2.3.0 1765 | '@babel/code-frame': 7.26.2 1766 | '@babel/generator': 7.27.0 1767 | '@babel/helper-compilation-targets': 7.27.0 1768 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) 1769 | '@babel/helpers': 7.27.0 1770 | '@babel/parser': 7.27.0 1771 | '@babel/template': 7.27.0 1772 | '@babel/traverse': 7.27.0 1773 | '@babel/types': 7.27.0 1774 | convert-source-map: 2.0.0 1775 | debug: 4.4.0 1776 | gensync: 1.0.0-beta.2 1777 | json5: 2.2.3 1778 | semver: 6.3.1 1779 | transitivePeerDependencies: 1780 | - supports-color 1781 | 1782 | '@babel/generator@7.27.0': 1783 | dependencies: 1784 | '@babel/parser': 7.27.0 1785 | '@babel/types': 7.27.0 1786 | '@jridgewell/gen-mapping': 0.3.8 1787 | '@jridgewell/trace-mapping': 0.3.25 1788 | jsesc: 3.1.0 1789 | 1790 | '@babel/helper-compilation-targets@7.27.0': 1791 | dependencies: 1792 | '@babel/compat-data': 7.26.8 1793 | '@babel/helper-validator-option': 7.25.9 1794 | browserslist: 4.24.4 1795 | lru-cache: 5.1.1 1796 | semver: 6.3.1 1797 | 1798 | '@babel/helper-module-imports@7.25.9': 1799 | dependencies: 1800 | '@babel/traverse': 7.27.0 1801 | '@babel/types': 7.27.0 1802 | transitivePeerDependencies: 1803 | - supports-color 1804 | 1805 | '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': 1806 | dependencies: 1807 | '@babel/core': 7.26.10 1808 | '@babel/helper-module-imports': 7.25.9 1809 | '@babel/helper-validator-identifier': 7.25.9 1810 | '@babel/traverse': 7.27.0 1811 | transitivePeerDependencies: 1812 | - supports-color 1813 | 1814 | '@babel/helper-plugin-utils@7.26.5': {} 1815 | 1816 | '@babel/helper-string-parser@7.25.9': {} 1817 | 1818 | '@babel/helper-validator-identifier@7.25.9': {} 1819 | 1820 | '@babel/helper-validator-option@7.25.9': {} 1821 | 1822 | '@babel/helpers@7.27.0': 1823 | dependencies: 1824 | '@babel/template': 7.27.0 1825 | '@babel/types': 7.27.0 1826 | 1827 | '@babel/parser@7.27.0': 1828 | dependencies: 1829 | '@babel/types': 7.27.0 1830 | 1831 | '@babel/plugin-transform-react-jsx-self@7.25.9(@babel/core@7.26.10)': 1832 | dependencies: 1833 | '@babel/core': 7.26.10 1834 | '@babel/helper-plugin-utils': 7.26.5 1835 | 1836 | '@babel/plugin-transform-react-jsx-source@7.25.9(@babel/core@7.26.10)': 1837 | dependencies: 1838 | '@babel/core': 7.26.10 1839 | '@babel/helper-plugin-utils': 7.26.5 1840 | 1841 | '@babel/template@7.27.0': 1842 | dependencies: 1843 | '@babel/code-frame': 7.26.2 1844 | '@babel/parser': 7.27.0 1845 | '@babel/types': 7.27.0 1846 | 1847 | '@babel/traverse@7.27.0': 1848 | dependencies: 1849 | '@babel/code-frame': 7.26.2 1850 | '@babel/generator': 7.27.0 1851 | '@babel/parser': 7.27.0 1852 | '@babel/template': 7.27.0 1853 | '@babel/types': 7.27.0 1854 | debug: 4.4.0 1855 | globals: 11.12.0 1856 | transitivePeerDependencies: 1857 | - supports-color 1858 | 1859 | '@babel/types@7.27.0': 1860 | dependencies: 1861 | '@babel/helper-string-parser': 7.25.9 1862 | '@babel/helper-validator-identifier': 7.25.9 1863 | 1864 | '@esbuild/aix-ppc64@0.25.1': 1865 | optional: true 1866 | 1867 | '@esbuild/android-arm64@0.25.1': 1868 | optional: true 1869 | 1870 | '@esbuild/android-arm@0.25.1': 1871 | optional: true 1872 | 1873 | '@esbuild/android-x64@0.25.1': 1874 | optional: true 1875 | 1876 | '@esbuild/darwin-arm64@0.25.1': 1877 | optional: true 1878 | 1879 | '@esbuild/darwin-x64@0.25.1': 1880 | optional: true 1881 | 1882 | '@esbuild/freebsd-arm64@0.25.1': 1883 | optional: true 1884 | 1885 | '@esbuild/freebsd-x64@0.25.1': 1886 | optional: true 1887 | 1888 | '@esbuild/linux-arm64@0.25.1': 1889 | optional: true 1890 | 1891 | '@esbuild/linux-arm@0.25.1': 1892 | optional: true 1893 | 1894 | '@esbuild/linux-ia32@0.25.1': 1895 | optional: true 1896 | 1897 | '@esbuild/linux-loong64@0.25.1': 1898 | optional: true 1899 | 1900 | '@esbuild/linux-mips64el@0.25.1': 1901 | optional: true 1902 | 1903 | '@esbuild/linux-ppc64@0.25.1': 1904 | optional: true 1905 | 1906 | '@esbuild/linux-riscv64@0.25.1': 1907 | optional: true 1908 | 1909 | '@esbuild/linux-s390x@0.25.1': 1910 | optional: true 1911 | 1912 | '@esbuild/linux-x64@0.25.1': 1913 | optional: true 1914 | 1915 | '@esbuild/netbsd-arm64@0.25.1': 1916 | optional: true 1917 | 1918 | '@esbuild/netbsd-x64@0.25.1': 1919 | optional: true 1920 | 1921 | '@esbuild/openbsd-arm64@0.25.1': 1922 | optional: true 1923 | 1924 | '@esbuild/openbsd-x64@0.25.1': 1925 | optional: true 1926 | 1927 | '@esbuild/sunos-x64@0.25.1': 1928 | optional: true 1929 | 1930 | '@esbuild/win32-arm64@0.25.1': 1931 | optional: true 1932 | 1933 | '@esbuild/win32-ia32@0.25.1': 1934 | optional: true 1935 | 1936 | '@esbuild/win32-x64@0.25.1': 1937 | optional: true 1938 | 1939 | '@eslint-community/eslint-utils@4.5.1(eslint@9.23.0(jiti@2.4.2))': 1940 | dependencies: 1941 | eslint: 9.23.0(jiti@2.4.2) 1942 | eslint-visitor-keys: 3.4.3 1943 | 1944 | '@eslint-community/regexpp@4.12.1': {} 1945 | 1946 | '@eslint/config-array@0.19.2': 1947 | dependencies: 1948 | '@eslint/object-schema': 2.1.6 1949 | debug: 4.4.0 1950 | minimatch: 3.1.2 1951 | transitivePeerDependencies: 1952 | - supports-color 1953 | 1954 | '@eslint/config-helpers@0.2.0': {} 1955 | 1956 | '@eslint/core@0.12.0': 1957 | dependencies: 1958 | '@types/json-schema': 7.0.15 1959 | 1960 | '@eslint/eslintrc@3.3.1': 1961 | dependencies: 1962 | ajv: 6.12.6 1963 | debug: 4.4.0 1964 | espree: 10.3.0 1965 | globals: 14.0.0 1966 | ignore: 5.3.2 1967 | import-fresh: 3.3.1 1968 | js-yaml: 4.1.0 1969 | minimatch: 3.1.2 1970 | strip-json-comments: 3.1.1 1971 | transitivePeerDependencies: 1972 | - supports-color 1973 | 1974 | '@eslint/js@9.23.0': {} 1975 | 1976 | '@eslint/object-schema@2.1.6': {} 1977 | 1978 | '@eslint/plugin-kit@0.2.7': 1979 | dependencies: 1980 | '@eslint/core': 0.12.0 1981 | levn: 0.4.1 1982 | 1983 | '@fortawesome/fontawesome-common-types@6.7.2': {} 1984 | 1985 | '@fortawesome/fontawesome-svg-core@6.7.2': 1986 | dependencies: 1987 | '@fortawesome/fontawesome-common-types': 6.7.2 1988 | 1989 | '@fortawesome/free-brands-svg-icons@6.7.2': 1990 | dependencies: 1991 | '@fortawesome/fontawesome-common-types': 6.7.2 1992 | 1993 | '@fortawesome/free-regular-svg-icons@6.7.2': 1994 | dependencies: 1995 | '@fortawesome/fontawesome-common-types': 6.7.2 1996 | 1997 | '@fortawesome/free-solid-svg-icons@6.7.2': 1998 | dependencies: 1999 | '@fortawesome/fontawesome-common-types': 6.7.2 2000 | 2001 | '@fortawesome/react-fontawesome@0.2.2(@fortawesome/fontawesome-svg-core@6.7.2)(react@19.0.0)': 2002 | dependencies: 2003 | '@fortawesome/fontawesome-svg-core': 6.7.2 2004 | prop-types: 15.8.1 2005 | react: 19.0.0 2006 | 2007 | '@humanfs/core@0.19.1': {} 2008 | 2009 | '@humanfs/node@0.16.6': 2010 | dependencies: 2011 | '@humanfs/core': 0.19.1 2012 | '@humanwhocodes/retry': 0.3.1 2013 | 2014 | '@humanwhocodes/module-importer@1.0.1': {} 2015 | 2016 | '@humanwhocodes/retry@0.3.1': {} 2017 | 2018 | '@humanwhocodes/retry@0.4.2': {} 2019 | 2020 | '@isaacs/cliui@8.0.2': 2021 | dependencies: 2022 | string-width: 5.1.2 2023 | string-width-cjs: string-width@4.2.3 2024 | strip-ansi: 7.1.0 2025 | strip-ansi-cjs: strip-ansi@6.0.1 2026 | wrap-ansi: 8.1.0 2027 | wrap-ansi-cjs: wrap-ansi@7.0.0 2028 | 2029 | '@jridgewell/gen-mapping@0.3.8': 2030 | dependencies: 2031 | '@jridgewell/set-array': 1.2.1 2032 | '@jridgewell/sourcemap-codec': 1.5.0 2033 | '@jridgewell/trace-mapping': 0.3.25 2034 | 2035 | '@jridgewell/resolve-uri@3.1.2': {} 2036 | 2037 | '@jridgewell/set-array@1.2.1': {} 2038 | 2039 | '@jridgewell/sourcemap-codec@1.5.0': {} 2040 | 2041 | '@jridgewell/trace-mapping@0.3.25': 2042 | dependencies: 2043 | '@jridgewell/resolve-uri': 3.1.2 2044 | '@jridgewell/sourcemap-codec': 1.5.0 2045 | 2046 | '@nodelib/fs.scandir@2.1.5': 2047 | dependencies: 2048 | '@nodelib/fs.stat': 2.0.5 2049 | run-parallel: 1.2.0 2050 | 2051 | '@nodelib/fs.stat@2.0.5': {} 2052 | 2053 | '@nodelib/fs.walk@1.2.8': 2054 | dependencies: 2055 | '@nodelib/fs.scandir': 2.1.5 2056 | fastq: 1.19.1 2057 | 2058 | '@pkgjs/parseargs@0.11.0': 2059 | optional: true 2060 | 2061 | '@radix-ui/number@1.1.1': {} 2062 | 2063 | '@radix-ui/primitive@1.1.2': {} 2064 | 2065 | '@radix-ui/react-compose-refs@1.1.2(@types/react@19.0.12)(react@19.0.0)': 2066 | dependencies: 2067 | react: 19.0.0 2068 | optionalDependencies: 2069 | '@types/react': 19.0.12 2070 | 2071 | '@radix-ui/react-context@1.1.2(@types/react@19.0.12)(react@19.0.0)': 2072 | dependencies: 2073 | react: 19.0.0 2074 | optionalDependencies: 2075 | '@types/react': 19.0.12 2076 | 2077 | '@radix-ui/react-direction@1.1.1(@types/react@19.0.12)(react@19.0.0)': 2078 | dependencies: 2079 | react: 19.0.0 2080 | optionalDependencies: 2081 | '@types/react': 19.0.12 2082 | 2083 | '@radix-ui/react-presence@1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': 2084 | dependencies: 2085 | '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.12)(react@19.0.0) 2086 | '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.12)(react@19.0.0) 2087 | react: 19.0.0 2088 | react-dom: 19.0.0(react@19.0.0) 2089 | optionalDependencies: 2090 | '@types/react': 19.0.12 2091 | '@types/react-dom': 19.0.4(@types/react@19.0.12) 2092 | 2093 | '@radix-ui/react-primitive@2.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': 2094 | dependencies: 2095 | '@radix-ui/react-slot': 1.2.0(@types/react@19.0.12)(react@19.0.0) 2096 | react: 19.0.0 2097 | react-dom: 19.0.0(react@19.0.0) 2098 | optionalDependencies: 2099 | '@types/react': 19.0.12 2100 | '@types/react-dom': 19.0.4(@types/react@19.0.12) 2101 | 2102 | '@radix-ui/react-scroll-area@1.2.4(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': 2103 | dependencies: 2104 | '@radix-ui/number': 1.1.1 2105 | '@radix-ui/primitive': 1.1.2 2106 | '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.12)(react@19.0.0) 2107 | '@radix-ui/react-context': 1.1.2(@types/react@19.0.12)(react@19.0.0) 2108 | '@radix-ui/react-direction': 1.1.1(@types/react@19.0.12)(react@19.0.0) 2109 | '@radix-ui/react-presence': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 2110 | '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 2111 | '@radix-ui/react-use-callback-ref': 1.1.1(@types/react@19.0.12)(react@19.0.0) 2112 | '@radix-ui/react-use-layout-effect': 1.1.1(@types/react@19.0.12)(react@19.0.0) 2113 | react: 19.0.0 2114 | react-dom: 19.0.0(react@19.0.0) 2115 | optionalDependencies: 2116 | '@types/react': 19.0.12 2117 | '@types/react-dom': 19.0.4(@types/react@19.0.12) 2118 | 2119 | '@radix-ui/react-separator@1.1.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': 2120 | dependencies: 2121 | '@radix-ui/react-primitive': 2.0.3(@types/react-dom@19.0.4(@types/react@19.0.12))(@types/react@19.0.12)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) 2122 | react: 19.0.0 2123 | react-dom: 19.0.0(react@19.0.0) 2124 | optionalDependencies: 2125 | '@types/react': 19.0.12 2126 | '@types/react-dom': 19.0.4(@types/react@19.0.12) 2127 | 2128 | '@radix-ui/react-slot@1.2.0(@types/react@19.0.12)(react@19.0.0)': 2129 | dependencies: 2130 | '@radix-ui/react-compose-refs': 1.1.2(@types/react@19.0.12)(react@19.0.0) 2131 | react: 19.0.0 2132 | optionalDependencies: 2133 | '@types/react': 19.0.12 2134 | 2135 | '@radix-ui/react-use-callback-ref@1.1.1(@types/react@19.0.12)(react@19.0.0)': 2136 | dependencies: 2137 | react: 19.0.0 2138 | optionalDependencies: 2139 | '@types/react': 19.0.12 2140 | 2141 | '@radix-ui/react-use-layout-effect@1.1.1(@types/react@19.0.12)(react@19.0.0)': 2142 | dependencies: 2143 | react: 19.0.0 2144 | optionalDependencies: 2145 | '@types/react': 19.0.12 2146 | 2147 | '@rollup/rollup-android-arm-eabi@4.37.0': 2148 | optional: true 2149 | 2150 | '@rollup/rollup-android-arm64@4.37.0': 2151 | optional: true 2152 | 2153 | '@rollup/rollup-darwin-arm64@4.37.0': 2154 | optional: true 2155 | 2156 | '@rollup/rollup-darwin-x64@4.37.0': 2157 | optional: true 2158 | 2159 | '@rollup/rollup-freebsd-arm64@4.37.0': 2160 | optional: true 2161 | 2162 | '@rollup/rollup-freebsd-x64@4.37.0': 2163 | optional: true 2164 | 2165 | '@rollup/rollup-linux-arm-gnueabihf@4.37.0': 2166 | optional: true 2167 | 2168 | '@rollup/rollup-linux-arm-musleabihf@4.37.0': 2169 | optional: true 2170 | 2171 | '@rollup/rollup-linux-arm64-gnu@4.37.0': 2172 | optional: true 2173 | 2174 | '@rollup/rollup-linux-arm64-musl@4.37.0': 2175 | optional: true 2176 | 2177 | '@rollup/rollup-linux-loongarch64-gnu@4.37.0': 2178 | optional: true 2179 | 2180 | '@rollup/rollup-linux-powerpc64le-gnu@4.37.0': 2181 | optional: true 2182 | 2183 | '@rollup/rollup-linux-riscv64-gnu@4.37.0': 2184 | optional: true 2185 | 2186 | '@rollup/rollup-linux-riscv64-musl@4.37.0': 2187 | optional: true 2188 | 2189 | '@rollup/rollup-linux-s390x-gnu@4.37.0': 2190 | optional: true 2191 | 2192 | '@rollup/rollup-linux-x64-gnu@4.37.0': 2193 | optional: true 2194 | 2195 | '@rollup/rollup-linux-x64-musl@4.37.0': 2196 | optional: true 2197 | 2198 | '@rollup/rollup-win32-arm64-msvc@4.37.0': 2199 | optional: true 2200 | 2201 | '@rollup/rollup-win32-ia32-msvc@4.37.0': 2202 | optional: true 2203 | 2204 | '@rollup/rollup-win32-x64-msvc@4.37.0': 2205 | optional: true 2206 | 2207 | '@tailwindcss/node@4.0.15': 2208 | dependencies: 2209 | enhanced-resolve: 5.18.1 2210 | jiti: 2.4.2 2211 | tailwindcss: 4.0.15 2212 | 2213 | '@tailwindcss/oxide-android-arm64@4.0.15': 2214 | optional: true 2215 | 2216 | '@tailwindcss/oxide-darwin-arm64@4.0.15': 2217 | optional: true 2218 | 2219 | '@tailwindcss/oxide-darwin-x64@4.0.15': 2220 | optional: true 2221 | 2222 | '@tailwindcss/oxide-freebsd-x64@4.0.15': 2223 | optional: true 2224 | 2225 | '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.15': 2226 | optional: true 2227 | 2228 | '@tailwindcss/oxide-linux-arm64-gnu@4.0.15': 2229 | optional: true 2230 | 2231 | '@tailwindcss/oxide-linux-arm64-musl@4.0.15': 2232 | optional: true 2233 | 2234 | '@tailwindcss/oxide-linux-x64-gnu@4.0.15': 2235 | optional: true 2236 | 2237 | '@tailwindcss/oxide-linux-x64-musl@4.0.15': 2238 | optional: true 2239 | 2240 | '@tailwindcss/oxide-win32-arm64-msvc@4.0.15': 2241 | optional: true 2242 | 2243 | '@tailwindcss/oxide-win32-x64-msvc@4.0.15': 2244 | optional: true 2245 | 2246 | '@tailwindcss/oxide@4.0.15': 2247 | optionalDependencies: 2248 | '@tailwindcss/oxide-android-arm64': 4.0.15 2249 | '@tailwindcss/oxide-darwin-arm64': 4.0.15 2250 | '@tailwindcss/oxide-darwin-x64': 4.0.15 2251 | '@tailwindcss/oxide-freebsd-x64': 4.0.15 2252 | '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.15 2253 | '@tailwindcss/oxide-linux-arm64-gnu': 4.0.15 2254 | '@tailwindcss/oxide-linux-arm64-musl': 4.0.15 2255 | '@tailwindcss/oxide-linux-x64-gnu': 4.0.15 2256 | '@tailwindcss/oxide-linux-x64-musl': 4.0.15 2257 | '@tailwindcss/oxide-win32-arm64-msvc': 4.0.15 2258 | '@tailwindcss/oxide-win32-x64-msvc': 4.0.15 2259 | 2260 | '@tailwindcss/vite@4.0.15(vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0))': 2261 | dependencies: 2262 | '@tailwindcss/node': 4.0.15 2263 | '@tailwindcss/oxide': 4.0.15 2264 | lightningcss: 1.29.2 2265 | tailwindcss: 4.0.15 2266 | vite: 6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0) 2267 | 2268 | '@types/babel__core@7.20.5': 2269 | dependencies: 2270 | '@babel/parser': 7.27.0 2271 | '@babel/types': 7.27.0 2272 | '@types/babel__generator': 7.6.8 2273 | '@types/babel__template': 7.4.4 2274 | '@types/babel__traverse': 7.20.6 2275 | 2276 | '@types/babel__generator@7.6.8': 2277 | dependencies: 2278 | '@babel/types': 7.27.0 2279 | 2280 | '@types/babel__template@7.4.4': 2281 | dependencies: 2282 | '@babel/parser': 7.27.0 2283 | '@babel/types': 7.27.0 2284 | 2285 | '@types/babel__traverse@7.20.6': 2286 | dependencies: 2287 | '@babel/types': 7.27.0 2288 | 2289 | '@types/estree@1.0.6': {} 2290 | 2291 | '@types/estree@1.0.7': {} 2292 | 2293 | '@types/json-schema@7.0.15': {} 2294 | 2295 | '@types/node@22.13.13': 2296 | dependencies: 2297 | undici-types: 6.20.0 2298 | 2299 | '@types/react-dom@19.0.4(@types/react@19.0.12)': 2300 | dependencies: 2301 | '@types/react': 19.0.12 2302 | 2303 | '@types/react@19.0.12': 2304 | dependencies: 2305 | csstype: 3.1.3 2306 | 2307 | '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 2308 | dependencies: 2309 | '@eslint-community/regexpp': 4.12.1 2310 | '@typescript-eslint/parser': 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 2311 | '@typescript-eslint/scope-manager': 8.28.0 2312 | '@typescript-eslint/type-utils': 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 2313 | '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 2314 | '@typescript-eslint/visitor-keys': 8.28.0 2315 | eslint: 9.23.0(jiti@2.4.2) 2316 | graphemer: 1.4.0 2317 | ignore: 5.3.2 2318 | natural-compare: 1.4.0 2319 | ts-api-utils: 2.1.0(typescript@5.8.2) 2320 | typescript: 5.8.2 2321 | transitivePeerDependencies: 2322 | - supports-color 2323 | 2324 | '@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 2325 | dependencies: 2326 | '@typescript-eslint/scope-manager': 8.28.0 2327 | '@typescript-eslint/types': 8.28.0 2328 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2329 | '@typescript-eslint/visitor-keys': 8.28.0 2330 | debug: 4.4.0 2331 | eslint: 9.23.0(jiti@2.4.2) 2332 | typescript: 5.8.2 2333 | transitivePeerDependencies: 2334 | - supports-color 2335 | 2336 | '@typescript-eslint/scope-manager@8.28.0': 2337 | dependencies: 2338 | '@typescript-eslint/types': 8.28.0 2339 | '@typescript-eslint/visitor-keys': 8.28.0 2340 | 2341 | '@typescript-eslint/type-utils@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 2342 | dependencies: 2343 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2344 | '@typescript-eslint/utils': 8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2) 2345 | debug: 4.4.0 2346 | eslint: 9.23.0(jiti@2.4.2) 2347 | ts-api-utils: 2.1.0(typescript@5.8.2) 2348 | typescript: 5.8.2 2349 | transitivePeerDependencies: 2350 | - supports-color 2351 | 2352 | '@typescript-eslint/types@8.28.0': {} 2353 | 2354 | '@typescript-eslint/typescript-estree@8.28.0(typescript@5.8.2)': 2355 | dependencies: 2356 | '@typescript-eslint/types': 8.28.0 2357 | '@typescript-eslint/visitor-keys': 8.28.0 2358 | debug: 4.4.0 2359 | fast-glob: 3.3.3 2360 | is-glob: 4.0.3 2361 | minimatch: 9.0.5 2362 | semver: 7.7.1 2363 | ts-api-utils: 2.1.0(typescript@5.8.2) 2364 | typescript: 5.8.2 2365 | transitivePeerDependencies: 2366 | - supports-color 2367 | 2368 | '@typescript-eslint/utils@8.28.0(eslint@9.23.0(jiti@2.4.2))(typescript@5.8.2)': 2369 | dependencies: 2370 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) 2371 | '@typescript-eslint/scope-manager': 8.28.0 2372 | '@typescript-eslint/types': 8.28.0 2373 | '@typescript-eslint/typescript-estree': 8.28.0(typescript@5.8.2) 2374 | eslint: 9.23.0(jiti@2.4.2) 2375 | typescript: 5.8.2 2376 | transitivePeerDependencies: 2377 | - supports-color 2378 | 2379 | '@typescript-eslint/visitor-keys@8.28.0': 2380 | dependencies: 2381 | '@typescript-eslint/types': 8.28.0 2382 | eslint-visitor-keys: 4.2.0 2383 | 2384 | '@vitejs/plugin-react@4.3.4(vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0))': 2385 | dependencies: 2386 | '@babel/core': 7.26.10 2387 | '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) 2388 | '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) 2389 | '@types/babel__core': 7.20.5 2390 | react-refresh: 0.14.2 2391 | vite: 6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0) 2392 | transitivePeerDependencies: 2393 | - supports-color 2394 | 2395 | acorn-jsx@5.3.2(acorn@8.14.1): 2396 | dependencies: 2397 | acorn: 8.14.1 2398 | 2399 | acorn@8.14.1: {} 2400 | 2401 | ajv@6.12.6: 2402 | dependencies: 2403 | fast-deep-equal: 3.1.3 2404 | fast-json-stable-stringify: 2.1.0 2405 | json-schema-traverse: 0.4.1 2406 | uri-js: 4.4.1 2407 | 2408 | ansi-regex@5.0.1: {} 2409 | 2410 | ansi-regex@6.1.0: {} 2411 | 2412 | ansi-styles@4.3.0: 2413 | dependencies: 2414 | color-convert: 2.0.1 2415 | 2416 | ansi-styles@6.2.1: {} 2417 | 2418 | any-promise@1.3.0: {} 2419 | 2420 | anymatch@3.1.3: 2421 | dependencies: 2422 | normalize-path: 3.0.0 2423 | picomatch: 2.3.1 2424 | 2425 | arg@5.0.2: {} 2426 | 2427 | argparse@2.0.1: {} 2428 | 2429 | autoprefixer@10.4.21(postcss@8.5.3): 2430 | dependencies: 2431 | browserslist: 4.24.4 2432 | caniuse-lite: 1.0.30001707 2433 | fraction.js: 4.3.7 2434 | normalize-range: 0.1.2 2435 | picocolors: 1.1.1 2436 | postcss: 8.5.3 2437 | postcss-value-parser: 4.2.0 2438 | 2439 | balanced-match@1.0.2: {} 2440 | 2441 | binary-extensions@2.3.0: {} 2442 | 2443 | brace-expansion@1.1.11: 2444 | dependencies: 2445 | balanced-match: 1.0.2 2446 | concat-map: 0.0.1 2447 | 2448 | brace-expansion@2.0.1: 2449 | dependencies: 2450 | balanced-match: 1.0.2 2451 | 2452 | braces@3.0.3: 2453 | dependencies: 2454 | fill-range: 7.1.1 2455 | 2456 | browserslist@4.24.4: 2457 | dependencies: 2458 | caniuse-lite: 1.0.30001707 2459 | electron-to-chromium: 1.5.123 2460 | node-releases: 2.0.19 2461 | update-browserslist-db: 1.1.3(browserslist@4.24.4) 2462 | 2463 | callsites@3.1.0: {} 2464 | 2465 | camelcase-css@2.0.1: {} 2466 | 2467 | caniuse-lite@1.0.30001707: {} 2468 | 2469 | chalk@4.1.2: 2470 | dependencies: 2471 | ansi-styles: 4.3.0 2472 | supports-color: 7.2.0 2473 | 2474 | chokidar@3.6.0: 2475 | dependencies: 2476 | anymatch: 3.1.3 2477 | braces: 3.0.3 2478 | glob-parent: 5.1.2 2479 | is-binary-path: 2.1.0 2480 | is-glob: 4.0.3 2481 | normalize-path: 3.0.0 2482 | readdirp: 3.6.0 2483 | optionalDependencies: 2484 | fsevents: 2.3.3 2485 | 2486 | class-variance-authority@0.7.1: 2487 | dependencies: 2488 | clsx: 2.1.1 2489 | 2490 | clsx@2.1.1: {} 2491 | 2492 | color-convert@2.0.1: 2493 | dependencies: 2494 | color-name: 1.1.4 2495 | 2496 | color-name@1.1.4: {} 2497 | 2498 | commander@4.1.1: {} 2499 | 2500 | concat-map@0.0.1: {} 2501 | 2502 | convert-source-map@2.0.0: {} 2503 | 2504 | cross-spawn@7.0.6: 2505 | dependencies: 2506 | path-key: 3.1.1 2507 | shebang-command: 2.0.0 2508 | which: 2.0.2 2509 | 2510 | cssesc@3.0.0: {} 2511 | 2512 | csstype@3.1.3: {} 2513 | 2514 | debug@4.4.0: 2515 | dependencies: 2516 | ms: 2.1.3 2517 | 2518 | deep-is@0.1.4: {} 2519 | 2520 | detect-libc@2.0.3: {} 2521 | 2522 | didyoumean@1.2.2: {} 2523 | 2524 | dlv@1.1.3: {} 2525 | 2526 | eastasianwidth@0.2.0: {} 2527 | 2528 | electron-to-chromium@1.5.123: {} 2529 | 2530 | emoji-regex@8.0.0: {} 2531 | 2532 | emoji-regex@9.2.2: {} 2533 | 2534 | enhanced-resolve@5.18.1: 2535 | dependencies: 2536 | graceful-fs: 4.2.11 2537 | tapable: 2.2.1 2538 | 2539 | esbuild@0.25.1: 2540 | optionalDependencies: 2541 | '@esbuild/aix-ppc64': 0.25.1 2542 | '@esbuild/android-arm': 0.25.1 2543 | '@esbuild/android-arm64': 0.25.1 2544 | '@esbuild/android-x64': 0.25.1 2545 | '@esbuild/darwin-arm64': 0.25.1 2546 | '@esbuild/darwin-x64': 0.25.1 2547 | '@esbuild/freebsd-arm64': 0.25.1 2548 | '@esbuild/freebsd-x64': 0.25.1 2549 | '@esbuild/linux-arm': 0.25.1 2550 | '@esbuild/linux-arm64': 0.25.1 2551 | '@esbuild/linux-ia32': 0.25.1 2552 | '@esbuild/linux-loong64': 0.25.1 2553 | '@esbuild/linux-mips64el': 0.25.1 2554 | '@esbuild/linux-ppc64': 0.25.1 2555 | '@esbuild/linux-riscv64': 0.25.1 2556 | '@esbuild/linux-s390x': 0.25.1 2557 | '@esbuild/linux-x64': 0.25.1 2558 | '@esbuild/netbsd-arm64': 0.25.1 2559 | '@esbuild/netbsd-x64': 0.25.1 2560 | '@esbuild/openbsd-arm64': 0.25.1 2561 | '@esbuild/openbsd-x64': 0.25.1 2562 | '@esbuild/sunos-x64': 0.25.1 2563 | '@esbuild/win32-arm64': 0.25.1 2564 | '@esbuild/win32-ia32': 0.25.1 2565 | '@esbuild/win32-x64': 0.25.1 2566 | 2567 | escalade@3.2.0: {} 2568 | 2569 | escape-string-regexp@4.0.0: {} 2570 | 2571 | eslint-plugin-react-hooks@5.2.0(eslint@9.23.0(jiti@2.4.2)): 2572 | dependencies: 2573 | eslint: 9.23.0(jiti@2.4.2) 2574 | 2575 | eslint-plugin-react-refresh@0.4.19(eslint@9.23.0(jiti@2.4.2)): 2576 | dependencies: 2577 | eslint: 9.23.0(jiti@2.4.2) 2578 | 2579 | eslint-scope@8.3.0: 2580 | dependencies: 2581 | esrecurse: 4.3.0 2582 | estraverse: 5.3.0 2583 | 2584 | eslint-visitor-keys@3.4.3: {} 2585 | 2586 | eslint-visitor-keys@4.2.0: {} 2587 | 2588 | eslint@9.23.0(jiti@2.4.2): 2589 | dependencies: 2590 | '@eslint-community/eslint-utils': 4.5.1(eslint@9.23.0(jiti@2.4.2)) 2591 | '@eslint-community/regexpp': 4.12.1 2592 | '@eslint/config-array': 0.19.2 2593 | '@eslint/config-helpers': 0.2.0 2594 | '@eslint/core': 0.12.0 2595 | '@eslint/eslintrc': 3.3.1 2596 | '@eslint/js': 9.23.0 2597 | '@eslint/plugin-kit': 0.2.7 2598 | '@humanfs/node': 0.16.6 2599 | '@humanwhocodes/module-importer': 1.0.1 2600 | '@humanwhocodes/retry': 0.4.2 2601 | '@types/estree': 1.0.7 2602 | '@types/json-schema': 7.0.15 2603 | ajv: 6.12.6 2604 | chalk: 4.1.2 2605 | cross-spawn: 7.0.6 2606 | debug: 4.4.0 2607 | escape-string-regexp: 4.0.0 2608 | eslint-scope: 8.3.0 2609 | eslint-visitor-keys: 4.2.0 2610 | espree: 10.3.0 2611 | esquery: 1.6.0 2612 | esutils: 2.0.3 2613 | fast-deep-equal: 3.1.3 2614 | file-entry-cache: 8.0.0 2615 | find-up: 5.0.0 2616 | glob-parent: 6.0.2 2617 | ignore: 5.3.2 2618 | imurmurhash: 0.1.4 2619 | is-glob: 4.0.3 2620 | json-stable-stringify-without-jsonify: 1.0.1 2621 | lodash.merge: 4.6.2 2622 | minimatch: 3.1.2 2623 | natural-compare: 1.4.0 2624 | optionator: 0.9.4 2625 | optionalDependencies: 2626 | jiti: 2.4.2 2627 | transitivePeerDependencies: 2628 | - supports-color 2629 | 2630 | espree@10.3.0: 2631 | dependencies: 2632 | acorn: 8.14.1 2633 | acorn-jsx: 5.3.2(acorn@8.14.1) 2634 | eslint-visitor-keys: 4.2.0 2635 | 2636 | esquery@1.6.0: 2637 | dependencies: 2638 | estraverse: 5.3.0 2639 | 2640 | esrecurse@4.3.0: 2641 | dependencies: 2642 | estraverse: 5.3.0 2643 | 2644 | estraverse@5.3.0: {} 2645 | 2646 | esutils@2.0.3: {} 2647 | 2648 | fast-deep-equal@3.1.3: {} 2649 | 2650 | fast-glob@3.3.3: 2651 | dependencies: 2652 | '@nodelib/fs.stat': 2.0.5 2653 | '@nodelib/fs.walk': 1.2.8 2654 | glob-parent: 5.1.2 2655 | merge2: 1.4.1 2656 | micromatch: 4.0.8 2657 | 2658 | fast-json-stable-stringify@2.1.0: {} 2659 | 2660 | fast-levenshtein@2.0.6: {} 2661 | 2662 | fastq@1.19.1: 2663 | dependencies: 2664 | reusify: 1.1.0 2665 | 2666 | file-entry-cache@8.0.0: 2667 | dependencies: 2668 | flat-cache: 4.0.1 2669 | 2670 | fill-range@7.1.1: 2671 | dependencies: 2672 | to-regex-range: 5.0.1 2673 | 2674 | find-up@5.0.0: 2675 | dependencies: 2676 | locate-path: 6.0.0 2677 | path-exists: 4.0.0 2678 | 2679 | flat-cache@4.0.1: 2680 | dependencies: 2681 | flatted: 3.3.3 2682 | keyv: 4.5.4 2683 | 2684 | flatted@3.3.3: {} 2685 | 2686 | foreground-child@3.3.1: 2687 | dependencies: 2688 | cross-spawn: 7.0.6 2689 | signal-exit: 4.1.0 2690 | 2691 | fraction.js@4.3.7: {} 2692 | 2693 | framer-motion@12.5.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0): 2694 | dependencies: 2695 | motion-dom: 12.5.0 2696 | motion-utils: 12.5.0 2697 | tslib: 2.8.1 2698 | optionalDependencies: 2699 | react: 19.0.0 2700 | react-dom: 19.0.0(react@19.0.0) 2701 | 2702 | fsevents@2.3.3: 2703 | optional: true 2704 | 2705 | function-bind@1.1.2: {} 2706 | 2707 | gensync@1.0.0-beta.2: {} 2708 | 2709 | glob-parent@5.1.2: 2710 | dependencies: 2711 | is-glob: 4.0.3 2712 | 2713 | glob-parent@6.0.2: 2714 | dependencies: 2715 | is-glob: 4.0.3 2716 | 2717 | glob@10.4.5: 2718 | dependencies: 2719 | foreground-child: 3.3.1 2720 | jackspeak: 3.4.3 2721 | minimatch: 9.0.5 2722 | minipass: 7.1.2 2723 | package-json-from-dist: 1.0.1 2724 | path-scurry: 1.11.1 2725 | 2726 | globals@11.12.0: {} 2727 | 2728 | globals@14.0.0: {} 2729 | 2730 | graceful-fs@4.2.11: {} 2731 | 2732 | graphemer@1.4.0: {} 2733 | 2734 | has-flag@4.0.0: {} 2735 | 2736 | hasown@2.0.2: 2737 | dependencies: 2738 | function-bind: 1.1.2 2739 | 2740 | ignore@5.3.2: {} 2741 | 2742 | import-fresh@3.3.1: 2743 | dependencies: 2744 | parent-module: 1.0.1 2745 | resolve-from: 4.0.0 2746 | 2747 | imurmurhash@0.1.4: {} 2748 | 2749 | is-binary-path@2.1.0: 2750 | dependencies: 2751 | binary-extensions: 2.3.0 2752 | 2753 | is-core-module@2.16.1: 2754 | dependencies: 2755 | hasown: 2.0.2 2756 | 2757 | is-extglob@2.1.1: {} 2758 | 2759 | is-fullwidth-code-point@3.0.0: {} 2760 | 2761 | is-glob@4.0.3: 2762 | dependencies: 2763 | is-extglob: 2.1.1 2764 | 2765 | is-number@7.0.0: {} 2766 | 2767 | isexe@2.0.0: {} 2768 | 2769 | jackspeak@3.4.3: 2770 | dependencies: 2771 | '@isaacs/cliui': 8.0.2 2772 | optionalDependencies: 2773 | '@pkgjs/parseargs': 0.11.0 2774 | 2775 | jiti@1.21.7: {} 2776 | 2777 | jiti@2.4.2: {} 2778 | 2779 | js-tokens@4.0.0: {} 2780 | 2781 | js-yaml@4.1.0: 2782 | dependencies: 2783 | argparse: 2.0.1 2784 | 2785 | jsesc@3.1.0: {} 2786 | 2787 | json-buffer@3.0.1: {} 2788 | 2789 | json-schema-traverse@0.4.1: {} 2790 | 2791 | json-stable-stringify-without-jsonify@1.0.1: {} 2792 | 2793 | json5@2.2.3: {} 2794 | 2795 | keyv@4.5.4: 2796 | dependencies: 2797 | json-buffer: 3.0.1 2798 | 2799 | levn@0.4.1: 2800 | dependencies: 2801 | prelude-ls: 1.2.1 2802 | type-check: 0.4.0 2803 | 2804 | lightningcss-darwin-arm64@1.29.2: 2805 | optional: true 2806 | 2807 | lightningcss-darwin-x64@1.29.2: 2808 | optional: true 2809 | 2810 | lightningcss-freebsd-x64@1.29.2: 2811 | optional: true 2812 | 2813 | lightningcss-linux-arm-gnueabihf@1.29.2: 2814 | optional: true 2815 | 2816 | lightningcss-linux-arm64-gnu@1.29.2: 2817 | optional: true 2818 | 2819 | lightningcss-linux-arm64-musl@1.29.2: 2820 | optional: true 2821 | 2822 | lightningcss-linux-x64-gnu@1.29.2: 2823 | optional: true 2824 | 2825 | lightningcss-linux-x64-musl@1.29.2: 2826 | optional: true 2827 | 2828 | lightningcss-win32-arm64-msvc@1.29.2: 2829 | optional: true 2830 | 2831 | lightningcss-win32-x64-msvc@1.29.2: 2832 | optional: true 2833 | 2834 | lightningcss@1.29.2: 2835 | dependencies: 2836 | detect-libc: 2.0.3 2837 | optionalDependencies: 2838 | lightningcss-darwin-arm64: 1.29.2 2839 | lightningcss-darwin-x64: 1.29.2 2840 | lightningcss-freebsd-x64: 1.29.2 2841 | lightningcss-linux-arm-gnueabihf: 1.29.2 2842 | lightningcss-linux-arm64-gnu: 1.29.2 2843 | lightningcss-linux-arm64-musl: 1.29.2 2844 | lightningcss-linux-x64-gnu: 1.29.2 2845 | lightningcss-linux-x64-musl: 1.29.2 2846 | lightningcss-win32-arm64-msvc: 1.29.2 2847 | lightningcss-win32-x64-msvc: 1.29.2 2848 | 2849 | lilconfig@3.1.3: {} 2850 | 2851 | lines-and-columns@1.2.4: {} 2852 | 2853 | locate-path@6.0.0: 2854 | dependencies: 2855 | p-locate: 5.0.0 2856 | 2857 | lodash.merge@4.6.2: {} 2858 | 2859 | loose-envify@1.4.0: 2860 | dependencies: 2861 | js-tokens: 4.0.0 2862 | 2863 | lru-cache@10.4.3: {} 2864 | 2865 | lru-cache@5.1.1: 2866 | dependencies: 2867 | yallist: 3.1.1 2868 | 2869 | merge2@1.4.1: {} 2870 | 2871 | micromatch@4.0.8: 2872 | dependencies: 2873 | braces: 3.0.3 2874 | picomatch: 2.3.1 2875 | 2876 | minimatch@3.1.2: 2877 | dependencies: 2878 | brace-expansion: 1.1.11 2879 | 2880 | minimatch@9.0.5: 2881 | dependencies: 2882 | brace-expansion: 2.0.1 2883 | 2884 | minipass@7.1.2: {} 2885 | 2886 | motion-dom@12.5.0: 2887 | dependencies: 2888 | motion-utils: 12.5.0 2889 | 2890 | motion-utils@12.5.0: {} 2891 | 2892 | ms@2.1.3: {} 2893 | 2894 | mz@2.7.0: 2895 | dependencies: 2896 | any-promise: 1.3.0 2897 | object-assign: 4.1.1 2898 | thenify-all: 1.6.0 2899 | 2900 | nanoid@3.3.11: {} 2901 | 2902 | natural-compare@1.4.0: {} 2903 | 2904 | node-releases@2.0.19: {} 2905 | 2906 | normalize-path@3.0.0: {} 2907 | 2908 | normalize-range@0.1.2: {} 2909 | 2910 | object-assign@4.1.1: {} 2911 | 2912 | object-hash@3.0.0: {} 2913 | 2914 | optionator@0.9.4: 2915 | dependencies: 2916 | deep-is: 0.1.4 2917 | fast-levenshtein: 2.0.6 2918 | levn: 0.4.1 2919 | prelude-ls: 1.2.1 2920 | type-check: 0.4.0 2921 | word-wrap: 1.2.5 2922 | 2923 | p-limit@3.1.0: 2924 | dependencies: 2925 | yocto-queue: 0.1.0 2926 | 2927 | p-locate@5.0.0: 2928 | dependencies: 2929 | p-limit: 3.1.0 2930 | 2931 | package-json-from-dist@1.0.1: {} 2932 | 2933 | parent-module@1.0.1: 2934 | dependencies: 2935 | callsites: 3.1.0 2936 | 2937 | path-exists@4.0.0: {} 2938 | 2939 | path-key@3.1.1: {} 2940 | 2941 | path-parse@1.0.7: {} 2942 | 2943 | path-scurry@1.11.1: 2944 | dependencies: 2945 | lru-cache: 10.4.3 2946 | minipass: 7.1.2 2947 | 2948 | picocolors@1.1.1: {} 2949 | 2950 | picomatch@2.3.1: {} 2951 | 2952 | pify@2.3.0: {} 2953 | 2954 | pirates@4.0.6: {} 2955 | 2956 | postcss-import@15.1.0(postcss@8.5.3): 2957 | dependencies: 2958 | postcss: 8.5.3 2959 | postcss-value-parser: 4.2.0 2960 | read-cache: 1.0.0 2961 | resolve: 1.22.10 2962 | 2963 | postcss-js@4.0.1(postcss@8.5.3): 2964 | dependencies: 2965 | camelcase-css: 2.0.1 2966 | postcss: 8.5.3 2967 | 2968 | postcss-load-config@4.0.2(postcss@8.5.3): 2969 | dependencies: 2970 | lilconfig: 3.1.3 2971 | yaml: 2.7.0 2972 | optionalDependencies: 2973 | postcss: 8.5.3 2974 | 2975 | postcss-nested@6.2.0(postcss@8.5.3): 2976 | dependencies: 2977 | postcss: 8.5.3 2978 | postcss-selector-parser: 6.1.2 2979 | 2980 | postcss-selector-parser@6.1.2: 2981 | dependencies: 2982 | cssesc: 3.0.0 2983 | util-deprecate: 1.0.2 2984 | 2985 | postcss-value-parser@4.2.0: {} 2986 | 2987 | postcss@8.5.3: 2988 | dependencies: 2989 | nanoid: 3.3.11 2990 | picocolors: 1.1.1 2991 | source-map-js: 1.2.1 2992 | 2993 | prelude-ls@1.2.1: {} 2994 | 2995 | prop-types@15.8.1: 2996 | dependencies: 2997 | loose-envify: 1.4.0 2998 | object-assign: 4.1.1 2999 | react-is: 16.13.1 3000 | 3001 | punycode@2.3.1: {} 3002 | 3003 | queue-microtask@1.2.3: {} 3004 | 3005 | react-dom@19.0.0(react@19.0.0): 3006 | dependencies: 3007 | react: 19.0.0 3008 | scheduler: 0.25.0 3009 | 3010 | react-is@16.13.1: {} 3011 | 3012 | react-refresh@0.14.2: {} 3013 | 3014 | react@19.0.0: {} 3015 | 3016 | read-cache@1.0.0: 3017 | dependencies: 3018 | pify: 2.3.0 3019 | 3020 | readdirp@3.6.0: 3021 | dependencies: 3022 | picomatch: 2.3.1 3023 | 3024 | resolve-from@4.0.0: {} 3025 | 3026 | resolve@1.22.10: 3027 | dependencies: 3028 | is-core-module: 2.16.1 3029 | path-parse: 1.0.7 3030 | supports-preserve-symlinks-flag: 1.0.0 3031 | 3032 | reusify@1.1.0: {} 3033 | 3034 | rollup@4.37.0: 3035 | dependencies: 3036 | '@types/estree': 1.0.6 3037 | optionalDependencies: 3038 | '@rollup/rollup-android-arm-eabi': 4.37.0 3039 | '@rollup/rollup-android-arm64': 4.37.0 3040 | '@rollup/rollup-darwin-arm64': 4.37.0 3041 | '@rollup/rollup-darwin-x64': 4.37.0 3042 | '@rollup/rollup-freebsd-arm64': 4.37.0 3043 | '@rollup/rollup-freebsd-x64': 4.37.0 3044 | '@rollup/rollup-linux-arm-gnueabihf': 4.37.0 3045 | '@rollup/rollup-linux-arm-musleabihf': 4.37.0 3046 | '@rollup/rollup-linux-arm64-gnu': 4.37.0 3047 | '@rollup/rollup-linux-arm64-musl': 4.37.0 3048 | '@rollup/rollup-linux-loongarch64-gnu': 4.37.0 3049 | '@rollup/rollup-linux-powerpc64le-gnu': 4.37.0 3050 | '@rollup/rollup-linux-riscv64-gnu': 4.37.0 3051 | '@rollup/rollup-linux-riscv64-musl': 4.37.0 3052 | '@rollup/rollup-linux-s390x-gnu': 4.37.0 3053 | '@rollup/rollup-linux-x64-gnu': 4.37.0 3054 | '@rollup/rollup-linux-x64-musl': 4.37.0 3055 | '@rollup/rollup-win32-arm64-msvc': 4.37.0 3056 | '@rollup/rollup-win32-ia32-msvc': 4.37.0 3057 | '@rollup/rollup-win32-x64-msvc': 4.37.0 3058 | fsevents: 2.3.3 3059 | 3060 | run-parallel@1.2.0: 3061 | dependencies: 3062 | queue-microtask: 1.2.3 3063 | 3064 | scheduler@0.25.0: {} 3065 | 3066 | semver@6.3.1: {} 3067 | 3068 | semver@7.7.1: {} 3069 | 3070 | shebang-command@2.0.0: 3071 | dependencies: 3072 | shebang-regex: 3.0.0 3073 | 3074 | shebang-regex@3.0.0: {} 3075 | 3076 | signal-exit@4.1.0: {} 3077 | 3078 | source-map-js@1.2.1: {} 3079 | 3080 | string-width@4.2.3: 3081 | dependencies: 3082 | emoji-regex: 8.0.0 3083 | is-fullwidth-code-point: 3.0.0 3084 | strip-ansi: 6.0.1 3085 | 3086 | string-width@5.1.2: 3087 | dependencies: 3088 | eastasianwidth: 0.2.0 3089 | emoji-regex: 9.2.2 3090 | strip-ansi: 7.1.0 3091 | 3092 | strip-ansi@6.0.1: 3093 | dependencies: 3094 | ansi-regex: 5.0.1 3095 | 3096 | strip-ansi@7.1.0: 3097 | dependencies: 3098 | ansi-regex: 6.1.0 3099 | 3100 | strip-json-comments@3.1.1: {} 3101 | 3102 | sucrase@3.35.0: 3103 | dependencies: 3104 | '@jridgewell/gen-mapping': 0.3.8 3105 | commander: 4.1.1 3106 | glob: 10.4.5 3107 | lines-and-columns: 1.2.4 3108 | mz: 2.7.0 3109 | pirates: 4.0.6 3110 | ts-interface-checker: 0.1.13 3111 | 3112 | supports-color@7.2.0: 3113 | dependencies: 3114 | has-flag: 4.0.0 3115 | 3116 | supports-preserve-symlinks-flag@1.0.0: {} 3117 | 3118 | tailwind-merge@3.0.2: {} 3119 | 3120 | tailwindcss-animate@1.0.7(tailwindcss@3.4.17): 3121 | dependencies: 3122 | tailwindcss: 3.4.17 3123 | 3124 | tailwindcss@3.4.17: 3125 | dependencies: 3126 | '@alloc/quick-lru': 5.2.0 3127 | arg: 5.0.2 3128 | chokidar: 3.6.0 3129 | didyoumean: 1.2.2 3130 | dlv: 1.1.3 3131 | fast-glob: 3.3.3 3132 | glob-parent: 6.0.2 3133 | is-glob: 4.0.3 3134 | jiti: 1.21.7 3135 | lilconfig: 3.1.3 3136 | micromatch: 4.0.8 3137 | normalize-path: 3.0.0 3138 | object-hash: 3.0.0 3139 | picocolors: 1.1.1 3140 | postcss: 8.5.3 3141 | postcss-import: 15.1.0(postcss@8.5.3) 3142 | postcss-js: 4.0.1(postcss@8.5.3) 3143 | postcss-load-config: 4.0.2(postcss@8.5.3) 3144 | postcss-nested: 6.2.0(postcss@8.5.3) 3145 | postcss-selector-parser: 6.1.2 3146 | resolve: 1.22.10 3147 | sucrase: 3.35.0 3148 | transitivePeerDependencies: 3149 | - ts-node 3150 | 3151 | tailwindcss@4.0.15: {} 3152 | 3153 | tapable@2.2.1: {} 3154 | 3155 | thenify-all@1.6.0: 3156 | dependencies: 3157 | thenify: 3.3.1 3158 | 3159 | thenify@3.3.1: 3160 | dependencies: 3161 | any-promise: 1.3.0 3162 | 3163 | to-regex-range@5.0.1: 3164 | dependencies: 3165 | is-number: 7.0.0 3166 | 3167 | ts-api-utils@2.1.0(typescript@5.8.2): 3168 | dependencies: 3169 | typescript: 5.8.2 3170 | 3171 | ts-interface-checker@0.1.13: {} 3172 | 3173 | tslib@2.8.1: {} 3174 | 3175 | type-check@0.4.0: 3176 | dependencies: 3177 | prelude-ls: 1.2.1 3178 | 3179 | typescript@5.8.2: {} 3180 | 3181 | undici-types@6.20.0: {} 3182 | 3183 | update-browserslist-db@1.1.3(browserslist@4.24.4): 3184 | dependencies: 3185 | browserslist: 4.24.4 3186 | escalade: 3.2.0 3187 | picocolors: 1.1.1 3188 | 3189 | uri-js@4.4.1: 3190 | dependencies: 3191 | punycode: 2.3.1 3192 | 3193 | util-deprecate@1.0.2: {} 3194 | 3195 | vite@6.2.3(@types/node@22.13.13)(jiti@2.4.2)(lightningcss@1.29.2)(yaml@2.7.0): 3196 | dependencies: 3197 | esbuild: 0.25.1 3198 | postcss: 8.5.3 3199 | rollup: 4.37.0 3200 | optionalDependencies: 3201 | '@types/node': 22.13.13 3202 | fsevents: 2.3.3 3203 | jiti: 2.4.2 3204 | lightningcss: 1.29.2 3205 | yaml: 2.7.0 3206 | 3207 | which@2.0.2: 3208 | dependencies: 3209 | isexe: 2.0.0 3210 | 3211 | word-wrap@1.2.5: {} 3212 | 3213 | wrap-ansi@7.0.0: 3214 | dependencies: 3215 | ansi-styles: 4.3.0 3216 | string-width: 4.2.3 3217 | strip-ansi: 6.0.1 3218 | 3219 | wrap-ansi@8.1.0: 3220 | dependencies: 3221 | ansi-styles: 6.2.1 3222 | string-width: 5.1.2 3223 | strip-ansi: 7.1.0 3224 | 3225 | yallist@3.1.1: {} 3226 | 3227 | yaml@2.7.0: {} 3228 | 3229 | yocto-queue@0.1.0: {} 3230 | -------------------------------------------------------------------------------- /web/public/images/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /web/src/app/App.css: -------------------------------------------------------------------------------- 1 | .nui-wrapper { 2 | text-align: center; 3 | height: 100%; 4 | display: flex; 5 | justify-content: center; 6 | align-items: center; 7 | } 8 | 9 | pre { 10 | font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; 11 | background: hsl(var(--muted)); 12 | color: hsl(var(--muted-foreground)); 13 | border-radius: 0.375rem; 14 | padding: 0.75rem; 15 | line-height: 1.5; 16 | overflow-x: auto; 17 | } 18 | 19 | .popup-thing { 20 | background: hsl(var(--card)); 21 | border-radius: 0.5rem; 22 | width: 500px; 23 | height: auto; 24 | display: flex; 25 | justify-content: center; 26 | align-items: center; 27 | color: hsl(var(--card-foreground)); 28 | box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05); 29 | } -------------------------------------------------------------------------------- /web/src/app/App.tsx: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from "react"; 2 | import { debugData } from "@/utils/debugData"; 3 | import { fetchNui } from "@/utils/fetchNui"; 4 | import ScaleFade from "@/transitions/ScaleFade"; 5 | import { useNuiEvent } from "@/hooks/useNuiEvent"; 6 | import { Button } from "@/components/ui/button"; 7 | import { Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle } from "@/components/ui/card"; 8 | import { Badge } from "@/components/ui/badge"; 9 | import { Separator } from "@/components/ui/separator"; 10 | import { Code } from "@/components/ui/code"; 11 | import { ScrollArea } from "@/components/ui/scroll-area"; 12 | import { setClipboard } from "@/utils/setClipboard"; 13 | import LibIcon from "@/components/LibIcon"; 14 | 15 | // This will set the NUI to visible if we are developing in browser 16 | debugData([ 17 | { 18 | action: "showUi", 19 | data: true, 20 | }, 21 | ]); 22 | 23 | interface ReturnClientDataCompProps { 24 | data: unknown; 25 | } 26 | 27 | const ReturnClientDataComp: React.FC = ({ data }) => ( 28 |
29 |
30 |
31 | 32 | System Data 33 |
34 | 43 |
44 | 45 | 46 | {JSON.stringify(data, null, 2)} 47 | 48 | 49 |
50 | ); 51 | 52 | interface ReturnData { 53 | x: number; 54 | y: number; 55 | z: number; 56 | } 57 | 58 | const App: React.FC = () => { 59 | const [visible, setVisible] = useState(false); 60 | const [clientData, setClientData] = useState(null); 61 | 62 | useNuiEvent("showUi", (data) => { 63 | setVisible(true); 64 | }); 65 | 66 | useNuiEvent("hideHub", () => setVisible(false)); 67 | 68 | const handleGetClientData = () => { 69 | fetchNui("getClientData") 70 | .then((retData) => { 71 | console.log("Got return data from client scripts:"); 72 | setClientData(retData); 73 | }) 74 | .catch((e) => { 75 | console.error("Setting mock data due to error", e); 76 | setClientData({ x: 500, y: 300, z: 200 }); 77 | }); 78 | }; 79 | 80 | useEffect(() => { 81 | const handleKeyDown = (event: KeyboardEvent) => { 82 | if (event.key === 'Escape' && visible) { 83 | handleClose(); 84 | } 85 | }; 86 | 87 | window.addEventListener('keydown', handleKeyDown); 88 | 89 | return () => { 90 | window.removeEventListener('keydown', handleKeyDown); 91 | }; 92 | }, [visible]); 93 | 94 | const handleClose = () => { 95 | setVisible(false); 96 | setClientData(null); 97 | fetchNui("hideFrame"); 98 | }; 99 | 100 | return ( 101 |
102 | 103 |
104 | 105 | 106 |
107 | 110 |
111 |
112 | 113 | 114 | Interface 115 | 116 |
117 | System Interface 118 | 119 | Access system data and controls 120 | 121 |
122 | 123 | 124 |
125 |

126 | Press ESC key to exit this interface or use the close button. 127 |

128 | 129 | 137 | 138 | {clientData && } 139 |
140 |
141 |
142 |
143 |
144 |
145 | ); 146 | }; 147 | 148 | export default App; -------------------------------------------------------------------------------- /web/src/components/LibIcon.tsx: -------------------------------------------------------------------------------- 1 | import { FontAwesomeIcon, FontAwesomeIconProps } from '@fortawesome/react-fontawesome'; 2 | 3 | export type IconAnimation = 4 | | 'spin' 5 | | 'spinPulse' 6 | | 'spinReverse' 7 | | 'pulse' 8 | | 'beat' 9 | | 'fade' 10 | | 'beatFade' 11 | | 'bounce' 12 | | 'shake'; 13 | 14 | const LibIcon: React.FC = (props) => { 15 | const animationProps = { 16 | spin: props.animation === 'spin', 17 | spinPulse: props.animation === 'spinPulse', 18 | spinReverse: props.animation === 'spinReverse', 19 | pulse: props.animation === 'pulse', 20 | beat: props.animation === 'beat', 21 | fade: props.animation === 'fade', 22 | beatFade: props.animation === 'beatFade', 23 | bounce: props.animation === 'bounce', 24 | shake: props.animation === 'shake', 25 | }; 26 | 27 | return ; 28 | }; 29 | 30 | export default LibIcon; -------------------------------------------------------------------------------- /web/src/components/ui/badge.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { cva, type VariantProps } from "class-variance-authority" 3 | 4 | import { cn } from "@/lib/utils" 5 | 6 | const badgeVariants = cva( 7 | "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2", 8 | { 9 | variants: { 10 | variant: { 11 | default: 12 | "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80", 13 | secondary: 14 | "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80", 15 | destructive: 16 | "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80", 17 | outline: "text-foreground", 18 | }, 19 | }, 20 | defaultVariants: { 21 | variant: "default", 22 | }, 23 | } 24 | ) 25 | 26 | export interface BadgeProps 27 | extends React.HTMLAttributes, 28 | VariantProps {} 29 | 30 | function Badge({ className, variant, ...props }: BadgeProps) { 31 | return ( 32 |
33 | ) 34 | } 35 | 36 | export { Badge, badgeVariants } 37 | -------------------------------------------------------------------------------- /web/src/components/ui/button.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import { Slot } from "@radix-ui/react-slot" 3 | import { cva, type VariantProps } from "class-variance-authority" 4 | 5 | import { cn } from "@/lib/utils" 6 | 7 | const buttonVariants = cva( 8 | "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", 9 | { 10 | variants: { 11 | variant: { 12 | default: 13 | "bg-primary text-primary-foreground shadow hover:bg-primary/90", 14 | destructive: 15 | "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", 16 | outline: 17 | "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", 18 | secondary: 19 | "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", 20 | ghost: "hover:bg-accent hover:text-accent-foreground", 21 | link: "text-primary underline-offset-4 hover:underline", 22 | }, 23 | size: { 24 | default: "h-9 px-4 py-2", 25 | sm: "h-8 rounded-md px-3 text-xs", 26 | lg: "h-10 rounded-md px-8", 27 | icon: "h-9 w-9", 28 | }, 29 | }, 30 | defaultVariants: { 31 | variant: "default", 32 | size: "default", 33 | }, 34 | } 35 | ) 36 | 37 | export interface ButtonProps 38 | extends React.ButtonHTMLAttributes, 39 | VariantProps { 40 | asChild?: boolean 41 | } 42 | 43 | const Button = React.forwardRef( 44 | ({ className, variant, size, asChild = false, ...props }, ref) => { 45 | const Comp = asChild ? Slot : "button" 46 | return ( 47 | 52 | ) 53 | } 54 | ) 55 | Button.displayName = "Button" 56 | 57 | export { Button, buttonVariants } 58 | -------------------------------------------------------------------------------- /web/src/components/ui/card.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | 3 | import { cn } from "@/lib/utils" 4 | 5 | const Card = React.forwardRef< 6 | HTMLDivElement, 7 | React.HTMLAttributes 8 | >(({ className, ...props }, ref) => ( 9 |
17 | )) 18 | Card.displayName = "Card" 19 | 20 | const CardHeader = React.forwardRef< 21 | HTMLDivElement, 22 | React.HTMLAttributes 23 | >(({ className, ...props }, ref) => ( 24 |
29 | )) 30 | CardHeader.displayName = "CardHeader" 31 | 32 | const CardTitle = React.forwardRef< 33 | HTMLDivElement, 34 | React.HTMLAttributes 35 | >(({ className, ...props }, ref) => ( 36 |
41 | )) 42 | CardTitle.displayName = "CardTitle" 43 | 44 | const CardDescription = React.forwardRef< 45 | HTMLDivElement, 46 | React.HTMLAttributes 47 | >(({ className, ...props }, ref) => ( 48 |
53 | )) 54 | CardDescription.displayName = "CardDescription" 55 | 56 | const CardContent = React.forwardRef< 57 | HTMLDivElement, 58 | React.HTMLAttributes 59 | >(({ className, ...props }, ref) => ( 60 |
61 | )) 62 | CardContent.displayName = "CardContent" 63 | 64 | const CardFooter = React.forwardRef< 65 | HTMLDivElement, 66 | React.HTMLAttributes 67 | >(({ className, ...props }, ref) => ( 68 |
73 | )) 74 | CardFooter.displayName = "CardFooter" 75 | 76 | export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent } 77 | -------------------------------------------------------------------------------- /web/src/components/ui/code.tsx: -------------------------------------------------------------------------------- 1 | import React from "react" 2 | import { cn } from "@/lib/utils" 3 | 4 | interface CodeProps extends React.HTMLAttributes { 5 | children: React.ReactNode 6 | } 7 | 8 | const Code = React.forwardRef( 9 | ({ className, children, ...props }, ref) => { 10 | return ( 11 |
19 |         {children}
20 |       
21 | ) 22 | } 23 | ) 24 | 25 | Code.displayName = "Code" 26 | 27 | export { Code } -------------------------------------------------------------------------------- /web/src/components/ui/scroll-area.tsx: -------------------------------------------------------------------------------- 1 | "use client" 2 | 3 | import * as React from "react" 4 | import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" 5 | 6 | import { cn } from "@/lib/utils" 7 | 8 | const ScrollArea = React.forwardRef< 9 | React.ElementRef, 10 | React.ComponentPropsWithoutRef 11 | >(({ className, children, ...props }, ref) => ( 12 | 17 | 18 | {children} 19 | 20 | 21 | 22 | 23 | )) 24 | ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName 25 | 26 | const ScrollBar = React.forwardRef< 27 | React.ElementRef, 28 | React.ComponentPropsWithoutRef 29 | >(({ className, orientation = "vertical", ...props }, ref) => ( 30 | 43 | 44 | 45 | )) 46 | ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName 47 | 48 | export { ScrollArea, ScrollBar } 49 | -------------------------------------------------------------------------------- /web/src/components/ui/separator.tsx: -------------------------------------------------------------------------------- 1 | import * as React from "react" 2 | import * as SeparatorPrimitive from "@radix-ui/react-separator" 3 | 4 | import { cn } from "@/lib/utils" 5 | 6 | const Separator = React.forwardRef< 7 | React.ElementRef, 8 | React.ComponentPropsWithoutRef 9 | >( 10 | ( 11 | { className, orientation = "horizontal", decorative = true, ...props }, 12 | ref 13 | ) => ( 14 | 25 | ) 26 | ) 27 | Separator.displayName = SeparatorPrimitive.Root.displayName 28 | 29 | export { Separator } 30 | -------------------------------------------------------------------------------- /web/src/hooks/useNuiEvent.ts: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/overextended/ox_lib/blob/master/web/src/hooks/useNuiEvent.ts 2 | import { MutableRefObject, useEffect, useRef } from 'react'; 3 | import { noop } from '../utils/misc'; 4 | 5 | interface NuiMessageData { 6 | action: string; 7 | data: T; 8 | } 9 | 10 | type NuiHandlerSignature = (data: T) => void; 11 | 12 | /** 13 | * A hook that manage events listeners for receiving data from the client scripts 14 | * @param action The specific `action` that should be listened for. 15 | * @param handler The callback function that will handle data relayed by this hook 16 | * 17 | * @example 18 | * useNuiEvent<{visibility: true, wasVisible: 'something'}>('setVisible', (data) => { 19 | * // whatever logic you want 20 | * }) 21 | * 22 | **/ 23 | 24 | export const useNuiEvent = (action: string, handler: (data: T) => void) => { 25 | const savedHandler: MutableRefObject> = useRef(noop); 26 | 27 | // Make sure we handle for a reactive handler 28 | useEffect(() => { 29 | savedHandler.current = handler; 30 | }, [handler]); 31 | 32 | useEffect(() => { 33 | const eventListener = (event: MessageEvent>) => { 34 | const { action: eventAction, data } = event.data; 35 | 36 | if (savedHandler.current) { 37 | if (eventAction === action) { 38 | savedHandler.current(data); 39 | } 40 | } 41 | }; 42 | 43 | window.addEventListener('message', eventListener); 44 | // Remove Event Listener on component cleanup 45 | return () => window.removeEventListener('message', eventListener); 46 | }, [action]); 47 | }; -------------------------------------------------------------------------------- /web/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | @layer base { 6 | :root { 7 | --background: 0 0% 100%; 8 | --foreground: 0 0% 3.9%; 9 | --card: 0 0% 100%; 10 | --card-foreground: 0 0% 3.9%; 11 | --popover: 0 0% 100%; 12 | --popover-foreground: 0 0% 3.9%; 13 | --primary: 0 0% 9%; 14 | --primary-foreground: 0 0% 98%; 15 | --secondary: 0 0% 96.1%; 16 | --secondary-foreground: 0 0% 9%; 17 | --muted: 0 0% 96.1%; 18 | --muted-foreground: 0 0% 45.1%; 19 | --accent: 0 0% 96.1%; 20 | --accent-foreground: 0 0% 9%; 21 | --destructive: 0 84.2% 60.2%; 22 | --destructive-foreground: 0 0% 98%; 23 | --border: 0 0% 89.8%; 24 | --input: 0 0% 89.8%; 25 | --ring: 0 0% 3.9%; 26 | --chart-1: 12 76% 61%; 27 | --chart-2: 173 58% 39%; 28 | --chart-3: 197 37% 24%; 29 | --chart-4: 43 74% 66%; 30 | --chart-5: 27 87% 67%; 31 | --radius: 0.5rem 32 | } 33 | .dark { 34 | --background: 0 0% 3.9%; 35 | --foreground: 0 0% 98%; 36 | --card: 0 0% 3.9%; 37 | --card-foreground: 0 0% 98%; 38 | --popover: 0 0% 3.9%; 39 | --popover-foreground: 0 0% 98%; 40 | --primary: 0 0% 98%; 41 | --primary-foreground: 0 0% 9%; 42 | --secondary: 0 0% 14.9%; 43 | --secondary-fonoreground: 0 0% 98%; 44 | --muted: 0 0% 14.9%; 45 | --muted-foreground: 0 0% 63.9%; 46 | --accent: 0 0% 14.9%; 47 | --accent-foreground: 0 0% 98%; 48 | --destructive: 0 62.8% 30.6%; 49 | --destructive-foreground: 0 0% 98%; 50 | --border: 0 0% 14.9%; 51 | --input: 0 0% 14.9%; 52 | --ring: 0 0% 83.1%; 53 | --chart-1: 220 70% 50%; 54 | --chart-2: 160 60% 45%; 55 | --chart-3: 30 80% 55%; 56 | --chart-4: 280 65% 60%; 57 | --chart-5: 340 75% 55% 58 | } 59 | } 60 | 61 | @layer base { 62 | * { 63 | @apply border-border; 64 | } 65 | /* body { 66 | @apply margin-0; 67 | } */ 68 | } 69 | -------------------------------------------------------------------------------- /web/src/lib/utils.ts: -------------------------------------------------------------------------------- 1 | import { clsx, type ClassValue } from "clsx" 2 | import { twMerge } from "tailwind-merge" 3 | 4 | export function cn(...inputs: ClassValue[]) { 5 | return twMerge(clsx(inputs)) 6 | } 7 | -------------------------------------------------------------------------------- /web/src/main.tsx: -------------------------------------------------------------------------------- 1 | import { StrictMode } from 'react'; 2 | import { createRoot } from 'react-dom/client'; 3 | import './index.css'; 4 | import App from './app/App'; 5 | import { fas } from '@fortawesome/free-solid-svg-icons'; 6 | import { far } from '@fortawesome/free-regular-svg-icons'; 7 | import { fab } from '@fortawesome/free-brands-svg-icons'; 8 | import { library } from '@fortawesome/fontawesome-svg-core'; 9 | import { isEnvBrowser } from './utils/misc'; 10 | import ErrorBoundary from './providers/errorBoundary'; 11 | 12 | library.add(fas, far, fab); 13 | 14 | if (isEnvBrowser()) { 15 | const root = document.getElementById('root'); 16 | 17 | // https://i.imgur.com/iPTAdYV.png - Night time img 18 | root!.style.backgroundImage = 'url("https://i.imgur.com/3pzRj9n.png")'; 19 | root!.style.backgroundSize = 'cover'; 20 | root!.style.backgroundRepeat = 'no-repeat'; 21 | root!.style.backgroundPosition = 'center'; 22 | } 23 | 24 | const root = document.getElementById('root'); 25 | 26 | createRoot(root!).render( 27 | 28 | {/* Catches JS errors without hiding UI and keeps the app running */} 29 | 30 | 31 | 32 | ); -------------------------------------------------------------------------------- /web/src/providers/errorBoundary.tsx: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/overextended/ox_lib/blob/master/web/src/providers/errorBoundary.tsx 2 | import { fetchNui } from '@/utils/fetchNui'; 3 | import { Component, ReactNode, ErrorInfo } from 'react'; 4 | 5 | class ErrorBoundary extends Component<{ children: ReactNode }, { hasError: boolean }> { 6 | constructor(props: { children: ReactNode }) { 7 | super(props); 8 | this.state = { hasError: false }; 9 | } 10 | 11 | static getDerivedStateFromError(err: Error) { 12 | return { hasError: true }; 13 | } 14 | 15 | componentDidCatch(error: Error, info: ErrorInfo) { 16 | console.error(error, info) 17 | this.setState({ hasError: false }); 18 | // Will hide frame as soon as we encouter NUI error 19 | fetchNui('hideFrame') 20 | } 21 | 22 | render() { 23 | return this.state.hasError ? null : this.props.children; 24 | } 25 | } 26 | 27 | export default ErrorBoundary; -------------------------------------------------------------------------------- /web/src/transitions/ScaleFade.tsx: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/overextended/ox_lib/blob/master/web/src/transitions/ScaleFade.tsx 2 | import { AnimatePresence, motion } from 'framer-motion'; 3 | 4 | const ScaleFade: React.FC<{ visible: boolean; children: React.ReactNode; onExitComplete?: () => void }> = ({ 5 | visible, 6 | children, 7 | onExitComplete, 8 | }) => { 9 | return ( 10 | <> 11 | 12 | {visible && ( 13 | 18 | {children} 19 | 20 | )} 21 | 22 | 23 | ); 24 | }; 25 | 26 | export default ScaleFade; -------------------------------------------------------------------------------- /web/src/utils/debugData.ts: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/overextended/ox_lib/blob/master/web/src/utils/debugData.ts 2 | import { isEnvBrowser } from './misc'; 3 | 4 | interface DebugEvent { 5 | action: string; 6 | data: T; 7 | } 8 | 9 | /** 10 | * Emulates dispatching an event using SendNuiMessage in the lua scripts. 11 | * This is used when developing in browser 12 | * 13 | * @param events - The event you want to cover 14 | * @param timer - How long until it should trigger (ms) 15 | */ 16 | export const debugData =

(events: DebugEvent

[], timer = 1000): void => { 17 | if (process.env.NODE_ENV === 'development' && isEnvBrowser()) { 18 | for (const event of events) { 19 | setTimeout(() => { 20 | window.dispatchEvent( 21 | new MessageEvent('message', { 22 | data: { 23 | action: event.action, 24 | data: event.data, 25 | }, 26 | }) 27 | ); 28 | }, timer); 29 | } 30 | } 31 | }; -------------------------------------------------------------------------------- /web/src/utils/fetchNui.ts: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/overextended/ox_lib/blob/master/web/src/utils/fetchNui.ts 2 | /** 3 | * Simple wrapper around fetch API tailored for CEF/NUI use. This abstraction 4 | * can be extended to include AbortController if needed or if the response isn't 5 | * JSON. Tailor it to your needs. 6 | * 7 | * @param eventName - The endpoint eventname to target 8 | * @param data - Data you wish to send in the NUI Callback 9 | * 10 | * @return returnData - A promise for the data sent back by the NuiCallbacks CB argument 11 | */ 12 | 13 | const fetch = window.fetch; 14 | // @ts-expect-error 15 | window.fetch = () => {}; 16 | // @ts-expect-error 17 | window.XMLHttpRequest = window.fetch; 18 | 19 | export async function fetchNui(eventName: string, data?: any): Promise { 20 | const options = { 21 | method: 'post', 22 | headers: { 23 | 'Content-Type': 'application/json; charset=UTF-8', 24 | }, 25 | body: JSON.stringify(data), 26 | }; 27 | 28 | const resourceName = (window as any).GetParentResourceName 29 | ? (window as any).GetParentResourceName() 30 | : 'err_boilerplate'; 31 | 32 | const resp = await fetch(`https://${resourceName}/${eventName}`, options); 33 | const respFormatted = await resp.json(); 34 | 35 | return respFormatted; 36 | } -------------------------------------------------------------------------------- /web/src/utils/misc.ts: -------------------------------------------------------------------------------- 1 | // Will return whether the current environment is in a regular browser 2 | // and not CEF 3 | export const isEnvBrowser = (): boolean => !(window as any).invokeNative; 4 | 5 | // Basic no operation function 6 | export const noop = () => {}; -------------------------------------------------------------------------------- /web/src/utils/setClipboard.ts: -------------------------------------------------------------------------------- 1 | // yoinked from https://github.com/project-error/npwd/blob/d8dc5b7f47faf5fc581ffee30f31ff61d184cfe7/phone/src/os/phone/hooks/useClipboard.ts#L1 2 | export const setClipboard = (value: string) => { 3 | const clipElem = document.createElement('textarea'); 4 | clipElem.value = value; 5 | document.body.appendChild(clipElem); 6 | clipElem.select(); 7 | document.execCommand('copy'); 8 | document.body.removeChild(clipElem); 9 | }; -------------------------------------------------------------------------------- /web/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// -------------------------------------------------------------------------------- /web/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | darkMode: ["class"], 4 | content: [ 5 | "./src/**/*.{js,jsx,ts,tsx}", 6 | ], 7 | theme: { 8 | extend: { 9 | borderRadius: { 10 | lg: 'var(--radius)', 11 | md: 'calc(var(--radius) - 2px)', 12 | sm: 'calc(var(--radius) - 4px)' 13 | }, 14 | colors: { 15 | background: 'hsl(var(--background))', 16 | foreground: 'hsl(var(--foreground))', 17 | card: { 18 | DEFAULT: 'hsl(var(--card))', 19 | foreground: 'hsl(var(--card-foreground))' 20 | }, 21 | popover: { 22 | DEFAULT: 'hsl(var(--popover))', 23 | foreground: 'hsl(var(--popover-foreground))' 24 | }, 25 | primary: { 26 | DEFAULT: 'hsl(var(--primary))', 27 | foreground: 'hsl(var(--primary-foreground))' 28 | }, 29 | secondary: { 30 | DEFAULT: 'hsl(var(--secondary))', 31 | foreground: 'hsl(var(--secondary-foreground))' 32 | }, 33 | muted: { 34 | DEFAULT: 'hsl(var(--muted))', 35 | foreground: 'hsl(var(--muted-foreground))' 36 | }, 37 | accent: { 38 | DEFAULT: 'hsl(var(--accent))', 39 | foreground: 'hsl(var(--accent-foreground))' 40 | }, 41 | destructive: { 42 | DEFAULT: 'hsl(var(--destructive))', 43 | foreground: 'hsl(var(--destructive-foreground))' 44 | }, 45 | border: 'hsl(var(--border))', 46 | input: 'hsl(var(--input))', 47 | ring: 'hsl(var(--ring))', 48 | chart: { 49 | '1': 'hsl(var(--chart-1))', 50 | '2': 'hsl(var(--chart-2))', 51 | '3': 'hsl(var(--chart-3))', 52 | '4': 'hsl(var(--chart-4))', 53 | '5': 'hsl(var(--chart-5))' 54 | } 55 | } 56 | } 57 | }, 58 | plugins: [require("tailwindcss-animate")], 59 | } 60 | 61 | -------------------------------------------------------------------------------- /web/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ESNext", 4 | "useDefineForClassFields": true, 5 | "lib": ["DOM", "DOM.Iterable", "ESNext"], 6 | "allowJs": false, 7 | "skipLibCheck": true, 8 | "esModuleInterop": true, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "ESNext", 13 | "moduleResolution": "bundler", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true, 17 | "jsx": "react-jsx", 18 | "baseUrl": ".", 19 | "paths": { 20 | "@/*": ["./src/*"] 21 | } 22 | }, 23 | "include": ["src"], 24 | "references": [{ "path": "./tsconfig.node.json" }] 25 | } -------------------------------------------------------------------------------- /web/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "esModuleInterop": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /web/vite.config.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { defineConfig } from 'vite'; 3 | import react from '@vitejs/plugin-react'; 4 | import tailwindcss from 'tailwindcss'; 5 | import autoprefixer from 'autoprefixer'; 6 | 7 | // https://vitejs.dev/config/ 8 | export default defineConfig({ 9 | plugins: [react()], 10 | css: { 11 | postcss: { 12 | plugins: [ 13 | tailwindcss, 14 | autoprefixer, 15 | ], 16 | }, 17 | }, 18 | resolve: { 19 | alias: { 20 | "@": path.resolve(__dirname, "./src"), 21 | }, 22 | }, 23 | server: { 24 | port: 3000, 25 | }, 26 | base: './', 27 | build: { 28 | outDir: 'build', 29 | target: 'esnext', 30 | }, 31 | esbuild: { 32 | logOverride: { 'this-is-undefined-in-esm': 'silent' }, 33 | }, 34 | }); 35 | --------------------------------------------------------------------------------