diff --git a/.env.example b/.env.example
index c564639..764df58 100644
--- a/.env.example
+++ b/.env.example
@@ -6,7 +6,5 @@ NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=
NEXT_PUBLIC_FIREBASE_APP_ID=
-PRINTERZ_API_KEY=
NEXT_PUBLIC_GOOGLE_ANALYTICS_ID=
NEXT_PUBLIC_MICROSOFT_CLARITY_ID=
-NEXT_PUBLIC_PRINTERZ_TEMPLATE_ID=
diff --git a/.github/workflows/biome.yml b/.github/workflows/biome.yml
new file mode 100644
index 0000000..3042b30
--- /dev/null
+++ b/.github/workflows/biome.yml
@@ -0,0 +1,28 @@
+name: Biome
+
+on:
+ push:
+ branches:
+ - "**"
+ pull_request:
+ branches:
+ - "**"
+
+jobs:
+ biome:
+ name: biome ci
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: oven-sh/setup-bun@v2
+ with:
+ bun-version: "1.x"
+ cache: true
+
+ - name: Install dependencies
+ run: bun install --frozen-lockfile
+
+ - name: Lint & format check
+ run: bun run ci
diff --git a/.github/workflows/typecheck.yml b/.github/workflows/typecheck.yml
new file mode 100644
index 0000000..380aa87
--- /dev/null
+++ b/.github/workflows/typecheck.yml
@@ -0,0 +1,28 @@
+name: Typecheck
+
+on:
+ push:
+ branches:
+ - "**"
+ pull_request:
+ branches:
+ - "**"
+
+jobs:
+ typecheck:
+ name: tsc --noEmit
+ runs-on: ubuntu-latest
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - uses: oven-sh/setup-bun@v2
+ with:
+ bun-version: "1.x"
+ cache: true
+
+ - name: Install dependencies
+ run: bun install --frozen-lockfile
+
+ - name: Type check
+ run: bun x tsc --noEmit --ignoreDeprecations 6.0
diff --git a/.gitignore b/.gitignore
index 6e6569d..47f684b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,6 +11,7 @@ node_modules
dist
dist-ssr
*.local
+package-lock.json
# Editor directories and files
.vscode/*
diff --git a/biome.json b/biome.json
new file mode 100644
index 0000000..df2a4d2
--- /dev/null
+++ b/biome.json
@@ -0,0 +1,311 @@
+{
+ "$schema": "https://biomejs.dev/schemas/2.4.13/schema.json",
+ "vcs": { "enabled": true, "clientKind": "git", "useIgnoreFile": true },
+ "files": { "ignoreUnknown": false },
+ "formatter": {
+ "enabled": true,
+ "formatWithErrors": false,
+ "indentStyle": "space",
+ "indentWidth": 2,
+ "lineEnding": "lf",
+ "lineWidth": 80,
+ "attributePosition": "auto",
+ "bracketSameLine": false,
+ "bracketSpacing": true,
+ "expand": "auto",
+ "useEditorconfig": true
+ },
+ "linter": {
+ "enabled": true,
+ "rules": {
+ "recommended": false,
+ "complexity": {
+ "noAdjacentSpacesInRegex": "error",
+ "noExtraBooleanCast": "error",
+ "noUselessCatch": "error",
+ "noUselessEscapeInRegex": "error",
+ "noUselessTypeConstraint": "error"
+ },
+ "correctness": {
+ "noConstAssign": "error",
+ "noConstantCondition": "error",
+ "noEmptyCharacterClassInRegex": "error",
+ "noEmptyPattern": "error",
+ "noGlobalObjectCalls": "error",
+ "noInvalidBuiltinInstantiation": "error",
+ "noInvalidConstructorSuper": "error",
+ "noNonoctalDecimalEscape": "error",
+ "noPrecisionLoss": "error",
+ "noSelfAssign": "error",
+ "noSetterReturn": "error",
+ "noSwitchDeclarations": "error",
+ "noUndeclaredVariables": "error",
+ "noUnreachable": "error",
+ "noUnreachableSuper": "error",
+ "noUnsafeFinally": "error",
+ "noUnsafeOptionalChaining": "error",
+ "noUnusedLabels": "error",
+ "noUnusedPrivateClassMembers": "error",
+ "noUnusedVariables": "error",
+ "useIsNan": "error",
+ "useValidForDirection": "error",
+ "useValidTypeof": "error",
+ "useYield": "error"
+ },
+ "style": {
+ "noCommonJs": "error",
+ "noNamespace": "error",
+ "useArrayLiterals": "error",
+ "useAsConstAssertion": "error"
+ },
+ "suspicious": {
+ "noAsyncPromiseExecutor": "error",
+ "noCatchAssign": "error",
+ "noClassAssign": "error",
+ "noCompareNegZero": "error",
+ "noConstantBinaryExpressions": "error",
+ "noControlCharactersInRegex": "error",
+ "noDebugger": "error",
+ "noDuplicateCase": "error",
+ "noDuplicateClassMembers": "error",
+ "noDuplicateElseIf": "error",
+ "noDuplicateObjectKeys": "error",
+ "noDuplicateParameters": "error",
+ "noEmptyBlockStatements": "error",
+ "noExplicitAny": "error",
+ "noExtraNonNullAssertion": "error",
+ "noFallthroughSwitchClause": "error",
+ "noFunctionAssign": "error",
+ "noGlobalAssign": "error",
+ "noImportAssign": "error",
+ "noIrregularWhitespace": "error",
+ "noMisleadingCharacterClass": "error",
+ "noMisleadingInstantiator": "error",
+ "noNonNullAssertedOptionalChain": "error",
+ "noPrototypeBuiltins": "error",
+ "noRedeclare": "error",
+ "noShadowRestrictedNames": "error",
+ "noSparseArray": "error",
+ "noUnassignedVariables": "error",
+ "noUnsafeDeclarationMerging": "error",
+ "noUnsafeNegation": "error",
+ "noUnusedExpressions": "off",
+ "noUselessRegexBackrefs": "error",
+ "noWith": "error",
+ "useGetterReturn": "error",
+ "useNamespaceKeyword": "error"
+ }
+ },
+ "includes": ["**", "!dist", "!.next", "!node_modules"]
+ },
+ "javascript": {
+ "formatter": {
+ "jsxQuoteStyle": "double",
+ "quoteProperties": "asNeeded",
+ "trailingCommas": "all",
+ "semicolons": "asNeeded",
+ "arrowParentheses": "always",
+ "bracketSameLine": false,
+ "quoteStyle": "double",
+ "attributePosition": "auto",
+ "bracketSpacing": true
+ },
+ "globals": []
+ },
+ "css": {
+ "parser": {
+ "cssModules": false,
+ "allowWrongLineComments": true,
+ "tailwindDirectives": true
+ },
+ "linter": { "enabled": true },
+ "formatter": { "enabled": true }
+ },
+ "html": {
+ "formatter": {
+ "indentScriptAndStyle": false,
+ "selfCloseVoidElements": "always"
+ }
+ },
+ "overrides": [
+ {
+ "includes": ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts"],
+ "linter": {
+ "rules": {
+ "complexity": { "noArguments": "error" },
+ "correctness": {
+ "noConstAssign": "off",
+ "noGlobalObjectCalls": "off",
+ "noInvalidBuiltinInstantiation": "off",
+ "noInvalidConstructorSuper": "off",
+ "noSetterReturn": "off",
+ "noUndeclaredVariables": "off",
+ "noUnreachable": "off",
+ "noUnreachableSuper": "off"
+ },
+ "style": { "useConst": "error" },
+ "suspicious": {
+ "noClassAssign": "off",
+ "noDuplicateClassMembers": "off",
+ "noDuplicateObjectKeys": "off",
+ "noDuplicateParameters": "off",
+ "noFunctionAssign": "off",
+ "noImportAssign": "off",
+ "noRedeclare": "off",
+ "noUnsafeNegation": "off",
+ "noVar": "error",
+ "noWith": "off",
+ "useGetterReturn": "off"
+ }
+ }
+ }
+ },
+ {
+ "includes": ["**/*.{js,jsx,ts,tsx}"],
+ "javascript": {
+ "globals": [
+ "onanimationend",
+ "exports",
+ "ongamepadconnected",
+ "onlostpointercapture",
+ "onanimationiteration",
+ "onkeyup",
+ "onmousedown",
+ "onanimationstart",
+ "onslotchange",
+ "onprogress",
+ "ontransitionstart",
+ "onpause",
+ "onended",
+ "onpointerover",
+ "onscrollend",
+ "onformdata",
+ "ontransitionrun",
+ "onanimationcancel",
+ "ondrag",
+ "onchange",
+ "onbeforeinstallprompt",
+ "onbeforexrselect",
+ "onmessage",
+ "ontransitioncancel",
+ "onpointerdown",
+ "onabort",
+ "onpointerout",
+ "oncuechange",
+ "ongotpointercapture",
+ "onscrollsnapchanging",
+ "onsearch",
+ "onsubmit",
+ "onstalled",
+ "onsuspend",
+ "onreset",
+ "onerror",
+ "onresize",
+ "onmouseenter",
+ "ongamepaddisconnected",
+ "ondragover",
+ "onbeforetoggle",
+ "onmouseover",
+ "onpagehide",
+ "onmousemove",
+ "onratechange",
+ "oncommand",
+ "onmessageerror",
+ "onwheel",
+ "ondevicemotion",
+ "onauxclick",
+ "ontransitionend",
+ "onpaste",
+ "onpageswap",
+ "ononline",
+ "ondeviceorientationabsolute",
+ "onkeydown",
+ "onclose",
+ "onselect",
+ "onpageshow",
+ "onpointercancel",
+ "onbeforematch",
+ "onpointerrawupdate",
+ "ondragleave",
+ "onscrollsnapchange",
+ "onseeked",
+ "onwaiting",
+ "onbeforeunload",
+ "onplaying",
+ "onvolumechange",
+ "ondragend",
+ "onstorage",
+ "onloadeddata",
+ "onfocus",
+ "onoffline",
+ "onplay",
+ "onafterprint",
+ "onclick",
+ "oncut",
+ "onmouseout",
+ "ondblclick",
+ "oncanplay",
+ "onloadstart",
+ "onappinstalled",
+ "onpointermove",
+ "ontoggle",
+ "oncontextmenu",
+ "onblur",
+ "oncancel",
+ "onbeforeprint",
+ "oncontextrestored",
+ "onloadedmetadata",
+ "onpointerup",
+ "onlanguagechange",
+ "oncopy",
+ "onselectstart",
+ "onscroll",
+ "onload",
+ "ondragstart",
+ "onbeforeinput",
+ "oncanplaythrough",
+ "oninput",
+ "oninvalid",
+ "ontimeupdate",
+ "ondurationchange",
+ "onselectionchange",
+ "onmouseup",
+ "location",
+ "onkeypress",
+ "onpointerleave",
+ "oncontextlost",
+ "ondrop",
+ "onsecuritypolicyviolation",
+ "oncontentvisibilityautostatechange",
+ "ondeviceorientation",
+ "onseeking",
+ "onrejectionhandled",
+ "onunload",
+ "onmouseleave",
+ "onhashchange",
+ "onpointerenter",
+ "onmousewheel",
+ "onunhandledrejection",
+ "ondragenter",
+ "onpopstate",
+ "onpagereveal",
+ "onemptied"
+ ]
+ },
+ "linter": {
+ "rules": {
+ "correctness": {
+ "noUnusedVariables": "error",
+ "useExhaustiveDependencies": "warn",
+ "useHookAtTopLevel": "error"
+ }
+ }
+ }
+ },
+ { "includes": ["**/*.cjs"], "javascript": { "globals": ["exports"] } }
+ ],
+ "assist": {
+ "enabled": true,
+ "actions": { "source": { "organizeImports": "on" } }
+ }
+}
diff --git a/bun.lock b/bun.lock
index a5429c5..834716f 100644
--- a/bun.lock
+++ b/bun.lock
@@ -1,13 +1,12 @@
{
"lockfileVersion": 1,
- "configVersion": 0,
+ "configVersion": 1,
"workspaces": {
"": {
"name": "transcriptr",
"dependencies": {
- "@base-ui/react": "^1.2.0",
+ "@base-ui/react": "^1.4.1",
"@google-cloud/storage": "^7.19.0",
- "@microsoft/clarity": "^1.0.2",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.8",
@@ -16,74 +15,69 @@
"@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
- "@tabler/icons-react": "^3.36.1",
+ "@tabler/icons-react": "^3.41.1",
"@tailwindcss/typography": "^0.5.19",
- "assemblyai": "^4.23.0",
- "clarity-js": "^0.8.54",
+ "@vercel/analytics": "^2.0.1",
+ "assemblyai": "^4.30.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cors": "^2.8.6",
"device-detector-js": "^3.0.3",
- "docx": "^9.5.2",
- "dotenv": "^17.3.1",
+ "docx": "^9.6.1",
+ "dotenv": "^17.4.2",
"express": "^5.2.1",
"file-saver": "^2.0.5",
- "firebase": "^12.9.0",
- "framer-motion": "^12.34.0",
- "jspdf": "^4.1.0",
- "jspdf-autotable": "^5.0.7",
+ "firebase": "^12.12.1",
+ "framer-motion": "^12.38.0",
"jszip": "^3.10.1",
- "lucide-react": "^0.562.0",
- "marked": "^17.0.2",
- "motion": "^12.34.0",
- "next": "^16.1.6",
+ "lucide-react": "^1.11.0",
+ "marked": "^18.0.2",
+ "motion": "^12.38.0",
+ "next": "^16.2.4",
"next-themes": "^0.4.6",
"node-fetch": "^3.3.2",
- "pdfmake": "^0.3.4",
"radix-ui": "^1.4.3",
- "react": "^19.2.4",
+ "react": "^19.2.5",
"react-confetti": "^6.4.0",
- "react-dom": "^19.2.4",
- "react-dropzone": "^14.4.1",
- "react-ga4": "^2.1.0",
- "react-pdf": "^10.3.0",
- "shadcn": "^3.8.4",
+ "react-dom": "^19.2.5",
+ "react-dropzone": "^15.0.0",
+ "react-pdf": "^10.4.1",
+ "shadcn": "^4.5.0",
"shadcn-ui": "^0.9.5",
"sonner": "^2.0.7",
- "tailwind-merge": "^3.4.0",
+ "tailwind-merge": "^3.5.0",
"tw-animate-css": "^1.4.0",
- "uuid": "^13.0.0",
+ "uuid": "^14.0.0",
+ "zustand": "^5.0.12",
},
"devDependencies": {
- "@eslint/js": "^9.39.2",
- "@netlify/plugin-nextjs": "^5.15.8",
- "@tailwindcss/postcss": "^4.1.18",
+ "@biomejs/biome": "^2.4.13",
+ "@netlify/plugin-nextjs": "^5.15.9",
+ "@tailwindcss/postcss": "^4.2.4",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/file-saver": "^2.0.7",
"@types/marked": "^6.0.0",
- "@types/node": "^25.2.3",
- "@types/pdfmake": "^0.2.13",
+ "@types/node": "^25.6.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/uuid": "^11.0.0",
- "autoprefixer": "^10.4.24",
- "eslint": "^9.39.2",
- "eslint-config-next": "^16.1.6",
- "eslint-plugin-react-hooks": "^7.0.1",
- "eslint-plugin-react-refresh": "^0.4.26",
- "globals": "^17.3.0",
- "postcss": "^8.5.6",
- "prettier": "^3.8.1",
- "prettier-plugin-tailwindcss": "^0.7.2",
- "tailwindcss": "^4.1.18",
+ "autoprefixer": "^10.5.0",
+ "globals": "^17.5.0",
+ "postcss": "^8.5.12",
+ "prettier": "^3.8.3",
+ "prettier-plugin-tailwindcss": "^0.8.0",
+ "tailwindcss": "^4.2.4",
"tailwindcss-animate": "^1.0.7",
"tsx": "^4.21.0",
- "typescript": "~5.9.3",
- "typescript-eslint": "^8.55.0",
+ "typescript": "~6.0.3",
},
},
},
+ "trustedDependencies": [
+ "@firebase/util",
+ "protobufjs",
+ ],
"overrides": {
"js-yaml": ">=4.1.1",
"qs": ">=6.14.2",
@@ -92,8 +86,6 @@
"packages": {
"@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="],
- "@antfu/ni": ["@antfu/ni@25.0.0", "", { "dependencies": { "ansis": "^4.0.0", "fzf": "^0.5.2", "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" }, "bin": { "na": "bin/na.mjs", "ni": "bin/ni.mjs", "nr": "bin/nr.mjs", "nci": "bin/nci.mjs", "nlx": "bin/nlx.mjs", "nun": "bin/nun.mjs", "nup": "bin/nup.mjs" } }, "sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA=="],
-
"@babel/code-frame": ["@babel/code-frame@7.29.0", "", { "dependencies": { "@babel/helper-validator-identifier": "^7.28.5", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" } }, "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw=="],
"@babel/compat-data": ["@babel/compat-data@7.29.0", "", {}, "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg=="],
@@ -144,7 +136,7 @@
"@babel/preset-typescript": ["@babel/preset-typescript@7.28.5", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.27.1", "@babel/helper-validator-option": "^7.27.1", "@babel/plugin-syntax-jsx": "^7.27.1", "@babel/plugin-transform-modules-commonjs": "^7.27.1", "@babel/plugin-transform-typescript": "^7.28.5" }, "peerDependencies": { "@babel/core": "^7.0.0-0" } }, "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g=="],
- "@babel/runtime": ["@babel/runtime@7.28.6", "", {}, "sha512-05WQkdpL9COIMz4LjTxGpPNCdlpyimKppYNoJ5Di5EUObifl8t4tuLuUBBZEpoLYOmfvIWrsp9fCl0HoPRVTdA=="],
+ "@babel/runtime": ["@babel/runtime@7.29.2", "", {}, "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g=="],
"@babel/template": ["@babel/template@7.28.6", "", { "dependencies": { "@babel/code-frame": "^7.28.6", "@babel/parser": "^7.28.6", "@babel/types": "^7.28.6" } }, "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ=="],
@@ -152,19 +144,33 @@
"@babel/types": ["@babel/types@7.29.0", "", { "dependencies": { "@babel/helper-string-parser": "^7.27.1", "@babel/helper-validator-identifier": "^7.28.5" } }, "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A=="],
- "@base-ui/react": ["@base-ui/react@1.2.0", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@base-ui/utils": "0.2.5", "@floating-ui/react-dom": "^2.1.6", "@floating-ui/utils": "^0.2.10", "tabbable": "^6.4.0", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-O6aEQHcm+QyGTFY28xuwRD3SEJGZOBDpyjN2WvpfWYFVhg+3zfXPysAILqtM0C1kWC82MccOE/v1j+GHXE4qIw=="],
+ "@base-ui/react": ["@base-ui/react@1.4.1", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@base-ui/utils": "0.2.8", "@floating-ui/react-dom": "^2.1.8", "@floating-ui/utils": "^0.2.11", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@date-fns/tz": "^1.2.0", "@types/react": "^17 || ^18 || ^19", "date-fns": "^4.0.0", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@date-fns/tz", "@types/react", "date-fns"] }, "sha512-Ab5/LIhcmL8BQcsBUYiOfkSDRdLpvgUBzMK30cu684JPcLclYlztharvCZyNNgzJtbAiREzI9q0pI5erHCMgCw=="],
- "@base-ui/utils": ["@base-ui/utils@0.2.5", "", { "dependencies": { "@babel/runtime": "^7.28.6", "@floating-ui/utils": "^0.2.10", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-oYC7w0gp76RI5MxprlGLV0wze0SErZaRl3AAkeP3OnNB/UBMb6RqNf6ZSIlxOc9Qp68Ab3C2VOcJQyRs7Xc7Vw=="],
+ "@base-ui/utils": ["@base-ui/utils@0.2.8", "", { "dependencies": { "@babel/runtime": "^7.29.2", "@floating-ui/utils": "^0.2.11", "reselect": "^5.1.1", "use-sync-external-store": "^1.6.0" }, "peerDependencies": { "@types/react": "^17 || ^18 || ^19", "react": "^17 || ^18 || ^19", "react-dom": "^17 || ^18 || ^19" }, "optionalPeers": ["@types/react"] }, "sha512-jvOi+c+ftGlGotNcKnzPVg2IhCaDTB6/6R3JeqdjdXktuAJi3wKH9T7+svuaKh1mmfVU11UWzUZVH74JDfi/wQ=="],
- "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.52.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w=="],
+ "@biomejs/biome": ["@biomejs/biome@2.4.13", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.4.13", "@biomejs/cli-darwin-x64": "2.4.13", "@biomejs/cli-linux-arm64": "2.4.13", "@biomejs/cli-linux-arm64-musl": "2.4.13", "@biomejs/cli-linux-x64": "2.4.13", "@biomejs/cli-linux-x64-musl": "2.4.13", "@biomejs/cli-win32-arm64": "2.4.13", "@biomejs/cli-win32-x64": "2.4.13" }, "bin": { "biome": "bin/biome" } }, "sha512-gLXOwkOBBg0tr7bDsqlkIh4uFeKuMjxvqsrb1Tukww1iDmHcfr4Uu8MoQxp0Rcte+69+osRNWXwHsu/zxT6XqA=="],
- "@ecies/ciphers": ["@ecies/ciphers@0.2.5", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A=="],
+ "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.4.13", "", { "os": "darwin", "cpu": "arm64" }, "sha512-2KImO1jhNFBa2oWConyr0x6flxbQpGKv6902uGXpYM62Xyem8U80j441SyUJ8KyngsmKbQjeIv1q2CQfDkNnYg=="],
+
+ "@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.4.13", "", { "os": "darwin", "cpu": "x64" }, "sha512-BKrJklbaFN4p1Ts4kPBczo+PkbsHQg57kmJ+vON9u2t6uN5okYHaSr7h/MutPCWQgg2lglaWoSmm+zhYW+oOkg=="],
+
+ "@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.4.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-NzkUDSqfvMBrPplKgVr3aXLHZ2NEELvvF4vZxXulEylKWIGqlvNEcwUcj9OLrn75TD3lJ/GIqCVlBwd1MZCuYQ=="],
+
+ "@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.4.13", "", { "os": "linux", "cpu": "arm64" }, "sha512-U5MsuBQW25dXaYtqWWSPM3P96H6Y+fHuja3TQpMNnylocHW0tEbtFTDlUj6oM+YJLntvEkQy4grBvQNUD4+RCg=="],
+
+ "@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.4.13", "", { "os": "linux", "cpu": "x64" }, "sha512-Az3ZZedYRBo9EQzNnD9SxFcR1G5QsGo6VEc2hIyVPZ1rdKwee/7E9oeBBZFpE8Z44ekxsDQBqbiWGW5ShOhUSQ=="],
+
+ "@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.4.13", "", { "os": "linux", "cpu": "x64" }, "sha512-Z601MienRgTBDza/+u2CH3RSrWoXo9rtr8NK6A4KJzqGgfxx+H3VlyLgTJ4sRo40T3pIsqpTmiOQEvYzQvBRvQ=="],
+
+ "@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.4.13", "", { "os": "win32", "cpu": "arm64" }, "sha512-Px9PS2B5/Q183bUwy/5VHqp3J2lzdOCeVGzMpphYfl8oSa7VDCqenBdqWpy6DCy/en4Rbf/Y1RieZF6dJPcc9A=="],
+
+ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.4.13", "", { "os": "win32", "cpu": "x64" }, "sha512-tTcMkXyBrmHi9BfrD2VNHs/5rYIUKETqsBlYOvSAABwBkJhSDVb5e7wPukftsQbO3WzQkXe6kaztC6WtUOXSoQ=="],
- "@emnapi/core": ["@emnapi/core@1.4.5", "", { "dependencies": { "@emnapi/wasi-threads": "1.0.4", "tslib": "^2.4.0" } }, "sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q=="],
+ "@dotenvx/dotenvx": ["@dotenvx/dotenvx@1.52.0", "", { "dependencies": { "commander": "^11.1.0", "dotenv": "^17.2.1", "eciesjs": "^0.4.10", "execa": "^5.1.1", "fdir": "^6.2.0", "ignore": "^5.3.0", "object-treeify": "1.1.33", "picomatch": "^4.0.2", "which": "^4.0.0" }, "bin": { "dotenvx": "src/cli/dotenvx.js" } }, "sha512-CaQcc8JvtzQhUSm9877b6V4Tb7HCotkcyud9X2YwdqtQKwgljkMRwU96fVYKnzN3V0Hj74oP7Es+vZ0mS+Aa1w=="],
- "@emnapi/runtime": ["@emnapi/runtime@1.7.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q=="],
+ "@ecies/ciphers": ["@ecies/ciphers@0.2.5", "", { "peerDependencies": { "@noble/ciphers": "^1.0.0" } }, "sha512-GalEZH4JgOMHYYcYmVqnFirFsjZHeoGMDt9IxEnM9F7GRUUyUksJ7Ou53L83WHJq3RWKD3AcBpo0iQh0oMpf8A=="],
- "@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.0.4", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g=="],
+ "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="],
"@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="],
@@ -218,119 +224,101 @@
"@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="],
- "@eslint-community/eslint-utils": ["@eslint-community/eslint-utils@4.9.1", "", { "dependencies": { "eslint-visitor-keys": "^3.4.3" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ=="],
-
- "@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.1", "", {}, "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ=="],
-
- "@eslint/config-array": ["@eslint/config-array@0.21.1", "", { "dependencies": { "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", "minimatch": "^3.1.2" } }, "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA=="],
-
- "@eslint/config-helpers": ["@eslint/config-helpers@0.4.2", "", { "dependencies": { "@eslint/core": "^0.17.0" } }, "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw=="],
-
- "@eslint/core": ["@eslint/core@0.17.0", "", { "dependencies": { "@types/json-schema": "^7.0.15" } }, "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ=="],
-
- "@eslint/eslintrc": ["@eslint/eslintrc@3.3.1", "", { "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", "espree": "^10.0.1", "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" } }, "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ=="],
-
- "@eslint/js": ["@eslint/js@9.39.2", "", {}, "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA=="],
-
- "@eslint/object-schema": ["@eslint/object-schema@2.1.7", "", {}, "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="],
-
- "@eslint/plugin-kit": ["@eslint/plugin-kit@0.4.1", "", { "dependencies": { "@eslint/core": "^0.17.0", "levn": "^0.4.1" } }, "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA=="],
+ "@firebase/ai": ["@firebase/ai@2.11.1", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@firebase/app-types": "0.x" } }, "sha512-WGTF81W3WBKJY+c7xqTzO15OGAkCAs8cpADqflAI0skhTZjIkhF0qyf55rq4Ctt6jKygkv99rPfMrjAHTgXaVQ=="],
- "@firebase/ai": ["@firebase/ai@2.8.0", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@firebase/app-types": "0.x" } }, "sha512-grWYGFPsSo+pt+6CYeKR0kWnUfoLLS3xgWPvNrhAS5EPxl6xWq7+HjDZqX24yLneETyl45AVgDsTbVgxeWeRfg=="],
+ "@firebase/analytics": ["@firebase/analytics@0.10.21", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/installations": "0.6.21", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-j2y2q65BlgLGB5Pwjhv/Jopw2X/TBTzvAtI5z/DSp56U4wBj7LfhBfzbdCtFPges+Wz0g55GdoawXibOH5jGng=="],
- "@firebase/analytics": ["@firebase/analytics@0.10.19", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-3wU676fh60gaiVYQEEXsbGS4HbF2XsiBphyvvqDbtC1U4/dO4coshbYktcCHq+HFaGIK07iHOh4pME0hEq1fcg=="],
-
- "@firebase/analytics-compat": ["@firebase/analytics-compat@0.2.25", "", { "dependencies": { "@firebase/analytics": "0.10.19", "@firebase/analytics-types": "0.8.3", "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-fdzoaG0BEKbqksRDhmf4JoyZf16Wosrl0Y7tbZtJyVDOOwziE0vrFjmZuTdviL0yhak+Nco6rMsUUbkbD+qb6Q=="],
+ "@firebase/analytics-compat": ["@firebase/analytics-compat@0.2.27", "", { "dependencies": { "@firebase/analytics": "0.10.21", "@firebase/analytics-types": "0.8.3", "@firebase/component": "0.7.2", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-ZObpYpAxL6JfgH7GnvlDD0sbzGZ0o4nijV8skatV9ZX49hJtCYbFqaEcPYptT94rgX1KUoKEderC7/fa7hybtw=="],
"@firebase/analytics-types": ["@firebase/analytics-types@0.8.3", "", {}, "sha512-VrIp/d8iq2g501qO46uGz3hjbDb8xzYMrbu8Tp0ovzIzrvJZ2fvmj649gTjge/b7cCCcjT0H37g1gVtlNhnkbg=="],
- "@firebase/app": ["@firebase/app@0.14.8", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "idb": "7.1.1", "tslib": "^2.1.0" } }, "sha512-WiE9uCGRLUnShdjb9iP20sA3ToWrBbNXr14/N5mow7Nls9dmKgfGaGX5cynLvrltxq2OrDLh1VDNaUgsnS/k/g=="],
+ "@firebase/app": ["@firebase/app@0.14.11", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "idb": "7.1.1", "tslib": "^2.1.0" } }, "sha512-yxADFW35LYkP8oSGobGsYIrI42I+GPCvKTNHx4meT9Yq3C950IVz1eANoBk822I9tbKv1wyv9P4Bv1G5TpucFw=="],
- "@firebase/app-check": ["@firebase/app-check@0.11.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-XAvALQayUMBJo58U/rxW02IhsesaxxfWVmVkauZvGEz3vOAjMEQnzFlyblqkc2iAaO82uJ2ZVyZv9XzPfxjJ6w=="],
+ "@firebase/app-check": ["@firebase/app-check@0.11.2", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-jcXQVMHAQ5AEKzVD5C7s5fmAYeFOuN6lAJeNTgZK2B9aLnofWaJt8u1A8Idm8gpsBBYSaY3cVyeH5SWMOVPBLQ=="],
- "@firebase/app-check-compat": ["@firebase/app-check-compat@0.4.0", "", { "dependencies": { "@firebase/app-check": "0.11.0", "@firebase/app-check-types": "0.5.3", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-UfK2Q8RJNjYM/8MFORltZRG9lJj11k0nW84rrffiKvcJxLf1jf6IEjCIkCamykHE73C6BwqhVfhIBs69GXQV0g=="],
+ "@firebase/app-check-compat": ["@firebase/app-check-compat@0.4.2", "", { "dependencies": { "@firebase/app-check": "0.11.2", "@firebase/app-check-types": "0.5.3", "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-M91NhxqbSkI0ChkJWy69blC+rPr6HEgaeRllddSaU1pQ/7IiegeCQM9pPDIgvWnwnBSzKhUHpe6ro/jhJ+cvzw=="],
"@firebase/app-check-interop-types": ["@firebase/app-check-interop-types@0.3.3", "", {}, "sha512-gAlxfPLT2j8bTI/qfe3ahl2I2YcBQ8cFIBdhAQA4I2f3TndcO+22YizyGYuttLHPQEpWkhmpFW60VCFEPg4g5A=="],
"@firebase/app-check-types": ["@firebase/app-check-types@0.5.3", "", {}, "sha512-hyl5rKSj0QmwPdsAxrI5x1otDlByQ7bvNvVt8G/XPO2CSwE++rmSVf3VEhaeOR4J8ZFaF0Z0NDSmLejPweZ3ng=="],
- "@firebase/app-compat": ["@firebase/app-compat@0.5.8", "", { "dependencies": { "@firebase/app": "0.14.8", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" } }, "sha512-4De6SUZ36zozl9kh5rZSxKWULpgty27rMzZ6x+xkoo7+NWyhWyFdsdvhFsWhTw/9GGj0wXIcbTjwHYCUIUuHyg=="],
+ "@firebase/app-compat": ["@firebase/app-compat@0.5.11", "", { "dependencies": { "@firebase/app": "0.14.11", "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" } }, "sha512-KaACDjXkK5VLpI01vEs592R7/8s5DjFdIXfKoR385ly1SmK3Tu+jMHCIB4MsiY5jsez6v7VlEX/3rJ90dVkHyA=="],
- "@firebase/app-types": ["@firebase/app-types@0.9.3", "", {}, "sha512-kRVpIl4vVGJ4baogMDINbyrIOtOxqhkZQg4jTq3l8Lw6WSk0xfpEYzezFu+Kl4ve4fbPl79dvwRtaFqAC/ucCw=="],
+ "@firebase/app-types": ["@firebase/app-types@0.9.4", "", { "dependencies": { "@firebase/logger": "0.5.0" } }, "sha512-crX9TA5SVYZwLPG7/R16IsH8FLlgkPXjJUVhsVpHVDSqJiq3D/NuFTM5ctxGTExXAOeIn//69tQw47CPerM8MQ=="],
- "@firebase/auth": ["@firebase/auth@1.12.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@react-native-async-storage/async-storage": "^2.2.0" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-zkvLpsrxynWHk07qGrUDfCSqKf4AvfZGEqJ7mVCtYGjNNDbGE71k0Yn84rg8QEZu4hQw1BC0qDEHzpNVBcSVmA=="],
+ "@firebase/auth": ["@firebase/auth@1.13.0", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x", "@react-native-async-storage/async-storage": "^2.2.0 || ^3.0.0" }, "optionalPeers": ["@react-native-async-storage/async-storage"] }, "sha512-mKkSLNym3UbnnZ06dAmtqzp5EpPGCANGCZDJbkoR135aoUdKG6Aizwcnp29RzsQpwH0nmy5nay17Sfbsh9oY8A=="],
- "@firebase/auth-compat": ["@firebase/auth-compat@0.6.2", "", { "dependencies": { "@firebase/auth": "1.12.0", "@firebase/auth-types": "0.13.0", "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-8UhCzF6pav9bw/eXA8Zy1QAKssPRYEYXaWagie1ewLTwHkXv6bKp/j6/IwzSYQP67sy/BMFXIFaCCsoXzFLr7A=="],
+ "@firebase/auth-compat": ["@firebase/auth-compat@0.6.5", "", { "dependencies": { "@firebase/auth": "1.13.0", "@firebase/auth-types": "0.13.0", "@firebase/component": "0.7.2", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-IfVsafZ3QiXbsydXTP/XMI0wVYbJLI1rkb8Qqf03/h5FnL+upbbPOb+6Yj3RpcX+Y1iP5Uh18lxTHlXfbiyAow=="],
"@firebase/auth-interop-types": ["@firebase/auth-interop-types@0.2.4", "", {}, "sha512-JPgcXKCuO+CWqGDnigBtvo09HeBs5u/Ktc2GaFj2m01hLarbxthLNm7Fk8iOP1aqAtXV+fnnGj7U28xmk7IwVA=="],
"@firebase/auth-types": ["@firebase/auth-types@0.13.0", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-S/PuIjni0AQRLF+l9ck0YpsMOdE8GO2KU6ubmBB7P+7TJUCQDa3R1dlgYm9UzGbbePMZsp0xzB93f2b/CgxMOg=="],
- "@firebase/component": ["@firebase/component@0.7.0", "", { "dependencies": { "@firebase/util": "1.13.0", "tslib": "^2.1.0" } }, "sha512-wR9En2A+WESUHexjmRHkqtaVH94WLNKt6rmeqZhSLBybg4Wyf0Umk04SZsS6sBq4102ZsDBFwoqMqJYj2IoDSg=="],
+ "@firebase/component": ["@firebase/component@0.7.2", "", { "dependencies": { "@firebase/util": "1.15.0", "tslib": "^2.1.0" } }, "sha512-iyVDGc6Vjx7Rm0cAdccLH/NG6fADsgJak/XW9IA2lPf8AjIlsemOpFGKczYyPHxm4rnKdR8z6sK4+KEC7NwmEg=="],
- "@firebase/data-connect": ["@firebase/data-connect@0.3.12", "", { "dependencies": { "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-baPddcoNLj/+vYo+HSJidJUdr5W4OkhT109c5qhR8T1dJoZcyJpkv/dFpYlw/VJ3dV66vI8GHQFrmAZw/xUS4g=="],
+ "@firebase/data-connect": ["@firebase/data-connect@0.6.0", "", { "dependencies": { "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-OiugPRcdlhqXF97oR9CjVObILmsWU0dFUS0gXNYEe4bDfpW8pZmQ5GqhIPPtLWbT/0W2lMJJD7VILFMk+xuHPg=="],
- "@firebase/database": ["@firebase/database@1.1.0", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "sha512-gM6MJFae3pTyNLoc9VcJNuaUDej0ctdjn3cVtILo3D5lpp0dmUHHLFN/pUKe7ImyeB1KAvRlEYxvIHNF04Filg=="],
+ "@firebase/database": ["@firebase/database@1.1.2", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "faye-websocket": "0.11.4", "tslib": "^2.1.0" } }, "sha512-lP96CMjMPy/+d1d9qaaHjHHdzdwvEOuyyLq9ehX89e2XMKwS1jHNzYBO+42bdSumuj5ukPbmnFtViZu8YOMT+w=="],
- "@firebase/database-compat": ["@firebase/database-compat@2.1.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/database": "1.1.0", "@firebase/database-types": "1.0.16", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" } }, "sha512-8nYc43RqxScsePVd1qe1xxvWNf0OBnbwHxmXJ7MHSuuTVYFO3eLyLW3PiCKJ9fHnmIz4p4LbieXwz+qtr9PZDg=="],
+ "@firebase/database-compat": ["@firebase/database-compat@2.1.3", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/database": "1.1.2", "@firebase/database-types": "1.0.19", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" } }, "sha512-GMyfWjD8mehjg/QpNkY/tl9G/MoeugPeg91n9D0atggxbWuKF/2KhVPHZDH+XmoP0EKYqMWYTtKxBsaBaNKLYQ=="],
- "@firebase/database-types": ["@firebase/database-types@1.0.16", "", { "dependencies": { "@firebase/app-types": "0.9.3", "@firebase/util": "1.13.0" } }, "sha512-xkQLQfU5De7+SPhEGAXFBnDryUWhhlFXelEg2YeZOQMCdoe7dL64DDAd77SQsR+6uoXIZY5MB4y/inCs4GTfcw=="],
+ "@firebase/database-types": ["@firebase/database-types@1.0.19", "", { "dependencies": { "@firebase/app-types": "0.9.4", "@firebase/util": "1.15.0" } }, "sha512-FqewjUZmV9LqFfuEnmgdcUpiOUz7qwLXxnm/H8BcMFEzQXtd1yyUDm8ex5VRad2nuTE+ahOuCjUAM/cyDncO+g=="],
- "@firebase/firestore": ["@firebase/firestore@4.11.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "@firebase/webchannel-wrapper": "1.0.5", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-Zb88s8rssBd0J2Tt+NUXMPt2sf+Dq7meatKiJf5t9oto1kZ8w9gK59Koe1uPVbaKfdgBp++N/z0I4G/HamyEhg=="],
+ "@firebase/firestore": ["@firebase/firestore@4.14.0", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "@firebase/webchannel-wrapper": "1.0.5", "@grpc/grpc-js": "~1.9.0", "@grpc/proto-loader": "^0.7.8", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-bZc6YOjRkMBVA16527tgzi6iN9n//xRB3Mmx/R+Gr6UAP/+xrIKOejQIcn1hh+tCzNT8jO0jI+kWox5J4tB/qQ=="],
- "@firebase/firestore-compat": ["@firebase/firestore-compat@0.4.5", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/firestore": "4.11.0", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-yVX1CkVvqBI4qbA56uZo42xFA4TNU0ICQ+9AFDvYq9U9Xu6iAx9lFDAk/tN+NGereQQXXCSnpISwc/oxsQqPLA=="],
+ "@firebase/firestore-compat": ["@firebase/firestore-compat@0.4.8", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/firestore": "4.14.0", "@firebase/firestore-types": "3.0.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-WK9NJRpnosGD2nuyjdr7K+Ht7AxRYJlTF62myI4rRA7ibJOosbecvjacR5oirJ7s1BgNS6qzcBw7n4fD3a5w1w=="],
"@firebase/firestore-types": ["@firebase/firestore-types@3.0.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-hD2jGdiWRxB/eZWF89xcK9gF8wvENDJkzpVFb4aGkzfEaKxVRD1kjz1t1Wj8VZEp2LCB53Yx1zD8mrhQu87R6Q=="],
- "@firebase/functions": ["@firebase/functions@0.13.1", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.0", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-sUeWSb0rw5T+6wuV2o9XNmh9yHxjFI9zVGFnjFi+n7drTEWpl7ZTz1nROgGrSu472r+LAaj+2YaSicD4R8wfbw=="],
+ "@firebase/functions": ["@firebase/functions@0.13.3", "", { "dependencies": { "@firebase/app-check-interop-types": "0.3.3", "@firebase/auth-interop-types": "0.2.4", "@firebase/component": "0.7.2", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-csO7ckK3SSs+NUZW1nms9EK7ckHe/1QOjiP8uAkCYa7ND18s44vjE9g3KxEeIUpyEPqZaX1EhJuFyZjHigAcYw=="],
- "@firebase/functions-compat": ["@firebase/functions-compat@0.4.1", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/functions": "0.13.1", "@firebase/functions-types": "0.6.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-AxxUBXKuPrWaVNQ8o1cG1GaCAtXT8a0eaTDfqgS5VsRYLAR0ALcfqDLwo/QyijZj1w8Qf8n3Qrfy/+Im245hOQ=="],
+ "@firebase/functions-compat": ["@firebase/functions-compat@0.4.3", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/functions": "0.13.3", "@firebase/functions-types": "0.6.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-BxkEwWgx1of0tKaao/r2VR6WBLk/RAiyztatiONPrPE8gkitFkOnOCxf8i9cUyA5hX5RGt5H30uNn25Q6QNEmQ=="],
"@firebase/functions-types": ["@firebase/functions-types@0.6.3", "", {}, "sha512-EZoDKQLUHFKNx6VLipQwrSMh01A1SaL3Wg6Hpi//x6/fJ6Ee4hrAeswK99I5Ht8roiniKHw4iO0B1Oxj5I4plg=="],
- "@firebase/installations": ["@firebase/installations@0.6.19", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", "idb": "7.1.1", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-nGDmiwKLI1lerhwfwSHvMR9RZuIH5/8E3kgUWnVRqqL7kGVSktjLTWEMva7oh5yxQ3zXfIlIwJwMcaM5bK5j8Q=="],
+ "@firebase/installations": ["@firebase/installations@0.6.21", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/util": "1.15.0", "idb": "7.1.1", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-xGFGTeICJZ5vhrmmDukeczIcFULFXybojML2+QSDFoKj5A7zbGN7KzFGSKNhDkIxpjzsYG9IleJyUebuAcmqWA=="],
- "@firebase/installations-compat": ["@firebase/installations-compat@0.2.19", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", "@firebase/installations-types": "0.5.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-khfzIY3EI5LePePo7vT19/VEIH1E3iYsHknI/6ek9T8QCozAZshWT9CjlwOzZrKvTHMeNcbpo/VSOSIWDSjWdQ=="],
+ "@firebase/installations-compat": ["@firebase/installations-compat@0.2.21", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/installations": "0.6.21", "@firebase/installations-types": "0.5.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-zahIUkaVKbR8zmTeBHkdfaVl6JGWlhVoSjF7CVH33nFqD3SlPEpEEegn2GNT5iAfsVdtlCyJJ9GW4YKjq+RJKQ=="],
"@firebase/installations-types": ["@firebase/installations-types@0.5.3", "", { "peerDependencies": { "@firebase/app-types": "0.x" } }, "sha512-2FJI7gkLqIE0iYsNQ1P751lO3hER+Umykel+TkLwHj6plzWVxqvfclPUZhcKFVQObqloEBTmpi2Ozn7EkCABAA=="],
"@firebase/logger": ["@firebase/logger@0.5.0", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-cGskaAvkrnh42b3BA3doDWeBmuHFO/Mx5A83rbRDYakPjO9bJtRL3dX7javzc2Rr/JHZf4HlterTW2lUkfeN4g=="],
- "@firebase/messaging": ["@firebase/messaging@0.12.23", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.13.0", "idb": "7.1.1", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-cfuzv47XxqW4HH/OcR5rM+AlQd1xL/VhuaeW/wzMW1LFrsFcTn0GND/hak1vkQc2th8UisBcrkVcQAnOnKwYxg=="],
+ "@firebase/messaging": ["@firebase/messaging@0.12.25", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/installations": "0.6.21", "@firebase/messaging-interop-types": "0.2.3", "@firebase/util": "1.15.0", "idb": "7.1.1", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-7RhDwoDHlOK1/ou0/LeubxmjcngsTjDdrY/ssg2vwAVpUuVAhQzQvuCAOYxcX5wNC1zCgQ54AP1vdngBwbCmOQ=="],
- "@firebase/messaging-compat": ["@firebase/messaging-compat@0.2.23", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/messaging": "0.12.23", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-SN857v/kBUvlQ9X/UjAqBoQ2FEaL1ZozpnmL1ByTe57iXkmnVVFm9KqAsTfmf+OEwWI4kJJe9NObtN/w22lUgg=="],
+ "@firebase/messaging-compat": ["@firebase/messaging-compat@0.2.25", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/messaging": "0.12.25", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-eoOQqGLtRlseTdiemTN44LlHZpltK5gnhq8XVUuLgtIOG+odtDzrz2UoTpcJWSzaJQVxNLb/x9f39tHdDM4N4w=="],
"@firebase/messaging-interop-types": ["@firebase/messaging-interop-types@0.2.3", "", {}, "sha512-xfzFaJpzcmtDjycpDeCUj0Ge10ATFi/VHVIvEEjDNc3hodVBQADZ7BWQU7CuFpjSHE+eLuBI13z5F/9xOoGX8Q=="],
- "@firebase/performance": ["@firebase/performance@0.7.9", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0", "web-vitals": "^4.2.4" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-UzybENl1EdM2I1sjYm74xGt/0JzRnU/0VmfMAKo2LSpHJzaj77FCLZXmYQ4oOuE+Pxtt8Wy2BVJEENiZkaZAzQ=="],
+ "@firebase/performance": ["@firebase/performance@0.7.11", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/installations": "0.6.21", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0", "web-vitals": "^4.2.4" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-V3uAhrz7IYJuji+OgT3qYTGKxpek/TViXti9OSsUJ4AexZ3jQjYH5Yrn7JvBxk8MGiSLsC872hh+BxQiPZsm7g=="],
- "@firebase/performance-compat": ["@firebase/performance-compat@0.2.22", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/performance": "0.7.9", "@firebase/performance-types": "0.2.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-xLKxaSAl/FVi10wDX/CHIYEUP13jXUjinL+UaNXT9ByIvxII5Ne5150mx6IgM8G6Q3V+sPiw9C8/kygkyHUVxg=="],
+ "@firebase/performance-compat": ["@firebase/performance-compat@0.2.24", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/performance": "0.7.11", "@firebase/performance-types": "0.2.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-YRlejH8wLt7ThWao+HXoKUHUrZKGYq+otxkPS+8nuE5PeN1cBXX7NAJl9ueuUkBwMIrnKdnDqL/voHXxDAAt3g=="],
"@firebase/performance-types": ["@firebase/performance-types@0.2.3", "", {}, "sha512-IgkyTz6QZVPAq8GSkLYJvwSLr3LS9+V6vNPQr0x4YozZJiLF5jYixj0amDtATf1X0EtYHqoPO48a9ija8GocxQ=="],
- "@firebase/remote-config": ["@firebase/remote-config@0.8.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/installations": "0.6.19", "@firebase/logger": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-sJz7C2VACeE257Z/3kY9Ap2WXbFsgsDLfaGfZmmToKAK39ipXxFan+vzB9CSbF6mP7bzjyzEnqPcMXhAnYE6fQ=="],
+ "@firebase/remote-config": ["@firebase/remote-config@0.8.2", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/installations": "0.6.21", "@firebase/logger": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-5EXqOThV4upjK9D38d/qOSVwOqRhemlaOFk9vCkMNNALeIlwr+4pLjtLNo4qoY8etQmU/1q4aIATE9N8PFqg0g=="],
- "@firebase/remote-config-compat": ["@firebase/remote-config-compat@0.2.21", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/logger": "0.5.0", "@firebase/remote-config": "0.8.0", "@firebase/remote-config-types": "0.5.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-9+lm0eUycxbu8GO25JfJe4s6R2xlDqlVt0CR6CvN9E6B4AFArEV4qfLoDVRgIEB7nHKwvH2nYRocPWfmjRQTnw=="],
+ "@firebase/remote-config-compat": ["@firebase/remote-config-compat@0.2.23", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/logger": "0.5.0", "@firebase/remote-config": "0.8.2", "@firebase/remote-config-types": "0.5.0", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-4+KqRRHEUUmKT6tFmnpWATOsaFfmSuBs1jXH8JzVtMLEYqq/WS9IDM92OdefFDSrAA2xGd0WN004z8mKeIIscw=="],
"@firebase/remote-config-types": ["@firebase/remote-config-types@0.5.0", "", {}, "sha512-vI3bqLoF14L/GchtgayMiFpZJF+Ao3uR8WCde0XpYNkSokDpAKca2DxvcfeZv7lZUqkUwQPL2wD83d3vQ4vvrg=="],
- "@firebase/storage": ["@firebase/storage@0.14.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-xWWbb15o6/pWEw8H01UQ1dC5U3rf8QTAzOChYyCpafV6Xki7KVp3Yaw2nSklUwHEziSWE9KoZJS7iYeyqWnYFA=="],
+ "@firebase/storage": ["@firebase/storage@0.14.2", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app": "0.x" } }, "sha512-o/culaTeJ8GRpKXRJov21rux/n9dRaSOWLebyatFP2sqEdCxQPjVA1H9Z2fzYwQxMIU0JVmC7SPPmU11v7L6vQ=="],
- "@firebase/storage-compat": ["@firebase/storage-compat@0.4.0", "", { "dependencies": { "@firebase/component": "0.7.0", "@firebase/storage": "0.14.0", "@firebase/storage-types": "0.8.3", "@firebase/util": "1.13.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-vDzhgGczr1OfcOy285YAPur5pWDEvD67w4thyeCUh6Ys0izN9fNYtA1MJERmNBfqjqu0lg0FM5GLbw0Il21M+g=="],
+ "@firebase/storage-compat": ["@firebase/storage-compat@0.4.2", "", { "dependencies": { "@firebase/component": "0.7.2", "@firebase/storage": "0.14.2", "@firebase/storage-types": "0.8.3", "@firebase/util": "1.15.0", "tslib": "^2.1.0" }, "peerDependencies": { "@firebase/app-compat": "0.x" } }, "sha512-R+aB38wxCH5zjIO/xu9KznI7fgiPuZAG98uVm1NcidHyyupGgIDLKigGmRGBZMnxibe/m2oxNKoZpfEbUX2aQQ=="],
"@firebase/storage-types": ["@firebase/storage-types@0.8.3", "", { "peerDependencies": { "@firebase/app-types": "0.x", "@firebase/util": "1.x" } }, "sha512-+Muk7g9uwngTpd8xn9OdF/D48uiQ7I1Fae7ULsWPuKoCH3HU7bfFPhxtJYzyhjdniowhuDpQcfPmuNRAqZEfvg=="],
- "@firebase/util": ["@firebase/util@1.13.0", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-0AZUyYUfpMNcztR5l09izHwXkZpghLgCUaAGjtMwXnCg3bj4ml5VgiwqOMOxJ+Nw4qN/zJAaOQBcJ7KGkWStqQ=="],
+ "@firebase/util": ["@firebase/util@1.15.0", "", { "dependencies": { "tslib": "^2.1.0" } }, "sha512-AmWf3cHAOMbrCPG4xdPKQaj5iHnyYfyLKZxwz+Xf55bqKbpAmcYifB4jQinT2W9XhDRHISOoPyBOariJpCG6FA=="],
"@firebase/webchannel-wrapper": ["@firebase/webchannel-wrapper@1.0.5", "", {}, "sha512-+uGNN7rkfn41HLO0vekTFhTxk61eKa8mTpRGLO0QSqlQdKvIoGAvLp3ppdVIWbTGYJWM6Kp0iN+PjMIOcnVqTw=="],
- "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "^0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="],
+ "@floating-ui/core": ["@floating-ui/core@1.7.5", "", { "dependencies": { "@floating-ui/utils": "^0.2.11" } }, "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ=="],
- "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "^1.7.4", "@floating-ui/utils": "^0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="],
+ "@floating-ui/dom": ["@floating-ui/dom@1.7.6", "", { "dependencies": { "@floating-ui/core": "^1.7.5", "@floating-ui/utils": "^0.2.11" } }, "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ=="],
- "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.7", "", { "dependencies": { "@floating-ui/dom": "^1.7.5" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-0tLRojf/1Go2JgEVm+3Frg9A3IW8bJgKgdO0BN5RkF//ufuz2joZM63Npau2ff3J6lUVYgDSNzNkR+aH3IVfjg=="],
+ "@floating-ui/react-dom": ["@floating-ui/react-dom@2.1.8", "", { "dependencies": { "@floating-ui/dom": "^1.7.6" }, "peerDependencies": { "react": ">=16.8.0", "react-dom": ">=16.8.0" } }, "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A=="],
- "@floating-ui/utils": ["@floating-ui/utils@0.2.10", "", {}, "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ=="],
+ "@floating-ui/utils": ["@floating-ui/utils@0.2.11", "", {}, "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg=="],
"@google-cloud/paginator": ["@google-cloud/paginator@5.0.2", "", { "dependencies": { "arrify": "^2.0.0", "extend": "^3.0.2" } }, "sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg=="],
@@ -346,59 +334,55 @@
"@hono/node-server": ["@hono/node-server@1.19.9", "", { "peerDependencies": { "hono": "^4" } }, "sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw=="],
- "@humanfs/core": ["@humanfs/core@0.19.1", "", {}, "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA=="],
-
- "@humanfs/node": ["@humanfs/node@0.16.6", "", { "dependencies": { "@humanfs/core": "^0.19.1", "@humanwhocodes/retry": "^0.3.0" } }, "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw=="],
-
- "@humanwhocodes/module-importer": ["@humanwhocodes/module-importer@1.0.1", "", {}, "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA=="],
+ "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
- "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="],
+ "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="],
- "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="],
+ "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.4" }, "os": "darwin", "cpu": "x64" }, "sha512-YNEFAF/4KQ/PeW0N+r+aVVsoIY0/qxxikF2SWdp+NRkmMB7y9LBZAVqQ4yhGCm/H3H270OSykqmQMKLBhBJDEw=="],
- "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.3" }, "os": "darwin", "cpu": "arm64" }, "sha512-sitdlPzDVyvmINUdJle3TNHl+AG9QcwiAMsXmccqsCOMZNIdW2/7S26w0LyU8euiLVzFBL3dXPwVCq/ODnf2vA=="],
+ "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zqjjo7RatFfFoP0MkQ51jfuFZBnVE2pRiaydKJ1G/rHZvnsrHAOcQALIi9sA5co5xenQdTugCvtb1cuf78Vf4g=="],
- "@img/sharp-darwin-x64": ["@img/sharp-darwin-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-x64": "1.2.3" }, "os": "darwin", "cpu": "x64" }, "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg=="],
+ "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-1IOd5xfVhlGwX+zXv2N93k0yMONvUlANylbJw1eTah8K/Jtpi15KC+WSiaX/nBmbm2HxRM1gZ0nSdjSsrZbGKg=="],
- "@img/sharp-libvips-darwin-arm64": ["@img/sharp-libvips-darwin-arm64@1.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-QzWAKo7kpHxbuHqUC28DZ9pIKpSi2ts2OJnoIGI26+HMgq92ZZ4vk8iJd4XsxN+tYfNJxzH6W62X5eTcsBymHw=="],
+ "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-bFI7xcKFELdiNCVov8e44Ia4u2byA+l3XtsAj+Q8tfCwO6BQ8iDojYdvoPMqsKDkuoOo+X6HZA0s0q11ANMQ8A=="],
- "@img/sharp-libvips-darwin-x64": ["@img/sharp-libvips-darwin-x64@1.2.3", "", { "os": "darwin", "cpu": "x64" }, "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA=="],
+ "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-excjX8DfsIcJ10x1Kzr4RcWe1edC9PquDRRPx3YVCvQv+U5p7Yin2s32ftzikXojb1PIFc/9Mt28/y+iRklkrw=="],
- "@img/sharp-libvips-linux-arm": ["@img/sharp-libvips-linux-arm@1.2.3", "", { "os": "linux", "cpu": "arm" }, "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA=="],
+ "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.4", "", { "os": "linux", "cpu": "ppc64" }, "sha512-FMuvGijLDYG6lW+b/UvyilUWu5Ayu+3r2d1S8notiGCIyYU/76eig1UfMmkZ7vwgOrzKzlQbFSuQfgm7GYUPpA=="],
- "@img/sharp-libvips-linux-arm64": ["@img/sharp-libvips-linux-arm64@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ=="],
+ "@img/sharp-libvips-linux-riscv64": ["@img/sharp-libvips-linux-riscv64@1.2.4", "", { "os": "linux", "cpu": "none" }, "sha512-oVDbcR4zUC0ce82teubSm+x6ETixtKZBh/qbREIOcI3cULzDyb18Sr/Wcyx7NRQeQzOiHTNbZFF1UwPS2scyGA=="],
- "@img/sharp-libvips-linux-ppc64": ["@img/sharp-libvips-linux-ppc64@1.2.3", "", { "os": "linux", "cpu": "ppc64" }, "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg=="],
+ "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.4", "", { "os": "linux", "cpu": "s390x" }, "sha512-qmp9VrzgPgMoGZyPvrQHqk02uyjA0/QrTO26Tqk6l4ZV0MPWIW6LTkqOIov+J1yEu7MbFQaDpwdwJKhbJvuRxQ=="],
- "@img/sharp-libvips-linux-s390x": ["@img/sharp-libvips-linux-s390x@1.2.3", "", { "os": "linux", "cpu": "s390x" }, "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w=="],
+ "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-tJxiiLsmHc9Ax1bz3oaOYBURTXGIRDODBqhveVHonrHJ9/+k89qbLl0bcJns+e4t4rvaNBxaEZsFtSfAdquPrw=="],
- "@img/sharp-libvips-linux-x64": ["@img/sharp-libvips-linux-x64@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg=="],
+ "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-FVQHuwx1IIuNow9QAbYUzJ+En8KcVm9Lk5+uGUQJHaZmMECZmOlix9HnH7n1TRkXMS0pGxIJokIVB9SuqZGGXw=="],
- "@img/sharp-libvips-linuxmusl-arm64": ["@img/sharp-libvips-linuxmusl-arm64@1.2.3", "", { "os": "linux", "cpu": "arm64" }, "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw=="],
+ "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-+LpyBk7L44ZIXwz/VYfglaX/okxezESc6UxDSoyo2Ks6Jxc4Y7sGjpgU9s4PMgqgjj1gZCylTieNamqA1MF7Dg=="],
- "@img/sharp-libvips-linuxmusl-x64": ["@img/sharp-libvips-linuxmusl-x64@1.2.3", "", { "os": "linux", "cpu": "x64" }, "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g=="],
+ "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.4" }, "os": "linux", "cpu": "arm" }, "sha512-9dLqsvwtg1uuXBGZKsxem9595+ujv0sJ6Vi8wcTANSFpwV/GONat5eCkzQo/1O6zRIkh0m/8+5BjrRr7jDUSZw=="],
- "@img/sharp-linux-arm": ["@img/sharp-linux-arm@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm": "1.2.3" }, "os": "linux", "cpu": "arm" }, "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA=="],
+ "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-bKQzaJRY/bkPOXyKx5EVup7qkaojECG6NLYswgktOZjaXecSAeCWiZwwiFf3/Y+O1HrauiE3FVsGxFg8c24rZg=="],
- "@img/sharp-linux-arm64": ["@img/sharp-linux-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-arm64": "1.2.3" }, "os": "linux", "cpu": "arm64" }, "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ=="],
+ "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.4" }, "os": "linux", "cpu": "ppc64" }, "sha512-7zznwNaqW6YtsfrGGDA6BRkISKAAE1Jo0QdpNYXNMHu2+0dTrPflTLNkpc8l7MUP5M16ZJcUvysVWWrMefZquA=="],
- "@img/sharp-linux-ppc64": ["@img/sharp-linux-ppc64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-ppc64": "1.2.3" }, "os": "linux", "cpu": "ppc64" }, "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ=="],
+ "@img/sharp-linux-riscv64": ["@img/sharp-linux-riscv64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-riscv64": "1.2.4" }, "os": "linux", "cpu": "none" }, "sha512-51gJuLPTKa7piYPaVs8GmByo7/U7/7TZOq+cnXJIHZKavIRHAP77e3N2HEl3dgiqdD/w0yUfiJnII77PuDDFdw=="],
- "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.3" }, "os": "linux", "cpu": "s390x" }, "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw=="],
+ "@img/sharp-linux-s390x": ["@img/sharp-linux-s390x@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-s390x": "1.2.4" }, "os": "linux", "cpu": "s390x" }, "sha512-nQtCk0PdKfho3eC5MrbQoigJ2gd1CgddUMkabUj+rBevs8tZ2cULOx46E7oyX+04WGfABgIwmMC0VqieTiR4jg=="],
- "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.3" }, "os": "linux", "cpu": "x64" }, "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A=="],
+ "@img/sharp-linux-x64": ["@img/sharp-linux-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linux-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-MEzd8HPKxVxVenwAa+JRPwEC7QFjoPWuS5NZnBt6B3pu7EG2Ge0id1oLHZpPJdn3OQK+BQDiw9zStiHBTJQQQQ=="],
- "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.3" }, "os": "linux", "cpu": "arm64" }, "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA=="],
+ "@img/sharp-linuxmusl-arm64": ["@img/sharp-linuxmusl-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-arm64": "1.2.4" }, "os": "linux", "cpu": "arm64" }, "sha512-fprJR6GtRsMt6Kyfq44IsChVZeGN97gTD331weR1ex1c1rypDEABN6Tm2xa1wE6lYb5DdEnk03NZPqA7Id21yg=="],
- "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.4", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.3" }, "os": "linux", "cpu": "x64" }, "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg=="],
+ "@img/sharp-linuxmusl-x64": ["@img/sharp-linuxmusl-x64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-linuxmusl-x64": "1.2.4" }, "os": "linux", "cpu": "x64" }, "sha512-Jg8wNT1MUzIvhBFxViqrEhWDGzqymo3sV7z7ZsaWbZNDLXRJZoRGrjulp60YYtV4wfY8VIKcWidjojlLcWrd8Q=="],
- "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.4", "", { "dependencies": { "@emnapi/runtime": "^1.5.0" }, "cpu": "none" }, "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA=="],
+ "@img/sharp-wasm32": ["@img/sharp-wasm32@0.34.5", "", { "dependencies": { "@emnapi/runtime": "^1.7.0" }, "cpu": "none" }, "sha512-OdWTEiVkY2PHwqkbBI8frFxQQFekHaSSkUIJkwzclWZe64O1X4UlUjqqqLaPbUpMOQk6FBu/HtlGXNblIs0huw=="],
- "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA=="],
+ "@img/sharp-win32-arm64": ["@img/sharp-win32-arm64@0.34.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-WQ3AgWCWYSb2yt+IG8mnC6Jdk9Whs7O0gxphblsLvdhSpSTtmu69ZG1Gkb6NuvxsNACwiPV6cNSZNzt0KPsw7g=="],
- "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.4", "", { "os": "win32", "cpu": "ia32" }, "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw=="],
+ "@img/sharp-win32-ia32": ["@img/sharp-win32-ia32@0.34.5", "", { "os": "win32", "cpu": "ia32" }, "sha512-FV9m/7NmeCmSHDD5j4+4pNI8Cp3aW+JvLoXcTUo0IqyjSfAZJ8dIUmijx1qaJsIiU+Hosw6xM5KijAWRJCSgNg=="],
- "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.4", "", { "os": "win32", "cpu": "x64" }, "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig=="],
+ "@img/sharp-win32-x64": ["@img/sharp-win32-x64@0.34.5", "", { "os": "win32", "cpu": "x64" }, "sha512-+29YMsqY2/9eFEiW93eqWnuLcWcufowXewwSNIT6UwZdUUCrM3oFjMWH/Z6/TMmb4hlFenmfAVbpWeup2jryCw=="],
"@inquirer/ansi": ["@inquirer/ansi@1.0.2", "", {}, "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ=="],
@@ -424,8 +408,6 @@
"@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.25", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ=="],
- "@microsoft/clarity": ["@microsoft/clarity@1.0.2", "", {}, "sha512-9EZYROFpJxEGmQpHvUFqvD3ZJ7QQSqnibYSWmS+1xusoZfG1QQ1/Al9yVBBc11DWMbJrs1pe1hLT273it/skJg=="],
-
"@modelcontextprotocol/sdk": ["@modelcontextprotocol/sdk@1.26.0", "", { "dependencies": { "@hono/node-server": "^1.19.9", "ajv": "^8.17.1", "ajv-formats": "^3.0.1", "content-type": "^1.0.5", "cors": "^2.8.5", "cross-spawn": "^7.0.5", "eventsource": "^3.0.2", "eventsource-parser": "^3.0.0", "express": "^5.2.1", "express-rate-limit": "^8.2.1", "hono": "^4.11.4", "jose": "^6.1.3", "json-schema-typed": "^8.0.2", "pkce-challenge": "^5.0.0", "raw-body": "^3.0.0", "zod": "^3.25 || ^4.0", "zod-to-json-schema": "^3.25.1" }, "peerDependencies": { "@cfworker/json-schema": "^4.1.1" }, "optionalPeers": ["@cfworker/json-schema"] }, "sha512-Y5RmPncpiDtTXDbLKswIJzTqu2hyBKxTNsgKqKclDbhIgg1wgtf1fRuvxgTnRfcnxtvvgbIEcqUOzZrJ6iSReg=="],
"@mswjs/interceptors": ["@mswjs/interceptors@0.41.3", "", { "dependencies": { "@open-draft/deferred-promise": "^2.2.0", "@open-draft/logger": "^0.3.0", "@open-draft/until": "^2.0.0", "is-node-process": "^1.2.0", "outvariant": "^1.4.3", "strict-event-emitter": "^0.5.1" } }, "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA=="],
@@ -454,29 +436,25 @@
"@napi-rs/canvas-win32-x64-msvc": ["@napi-rs/canvas-win32-x64-msvc@0.1.92", "", { "os": "win32", "cpu": "x64" }, "sha512-KEhyZLzq1MXCNlXybz4k25MJmHFp+uK1SIb8yJB0xfrQjz5aogAMhyseSzewo+XxAq3OAOdyKvfHGNzT3w1RPg=="],
- "@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@0.2.12", "", { "dependencies": { "@emnapi/core": "^1.4.3", "@emnapi/runtime": "^1.4.3", "@tybys/wasm-util": "^0.10.0" } }, "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ=="],
-
- "@netlify/plugin-nextjs": ["@netlify/plugin-nextjs@5.15.8", "", {}, "sha512-zxHVtYhNV1ixLX/4xX6PFTxpM5ltfQIMXUo0JbppUWvDaYeeZIqoEmlYdfIHx6BKyjLSMm8D/b3IRReK5VYuyA=="],
-
- "@next/env": ["@next/env@16.1.6", "", {}, "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ=="],
+ "@netlify/plugin-nextjs": ["@netlify/plugin-nextjs@5.15.9", "", {}, "sha512-4kJvV+wrt4/ncehfaOXfhv1FYKCv9EFjq6/tgXXYSlqPDcbsuTXR0DTz9IvyZ/CpPRadRD/zzIqD9wXgCmA2lg=="],
- "@next/eslint-plugin-next": ["@next/eslint-plugin-next@16.1.6", "", { "dependencies": { "fast-glob": "3.3.1" } }, "sha512-/Qq3PTagA6+nYVfryAtQ7/9FEr/6YVyvOtl6rZnGsbReGLf0jZU6gkpr1FuChAQpvV46a78p4cmHOVP8mbfSMQ=="],
+ "@next/env": ["@next/env@16.2.4", "", {}, "sha512-dKkkOzOSwFYe5RX6y26fZgkSpVAlIOJKQHIiydQcrWH6y/97+RceSOAdjZ14Qa3zLduVUy0TXcn+EiM6t4rPgw=="],
- "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw=="],
+ "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-OXTFFox5EKN1Ym08vfrz+OXxmCcEjT4SFMbNRsWZE99dMqt2Kcusl5MqPXcW232RYkMLQTy0hqgAMEsfEd/l2A=="],
- "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.1.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ=="],
+ "@next/swc-darwin-x64": ["@next/swc-darwin-x64@16.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-XhpVnUfmYWvD3YrXu55XdcAkQtOnvaI6wtQa8fuF5fGoKoxIUZ0kWPtcOfqJEWngFF/lOS9l3+O9CcownhiQxQ=="],
- "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw=="],
+ "@next/swc-linux-arm64-gnu": ["@next/swc-linux-arm64-gnu@16.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-Mx/tjlNA3G8kg14QvuGAJ4xBwPk1tUHq56JxZ8CXnZwz1Etz714soCEzGQQzVMz4bEnGPowzkV6Xrp6wAkEWOQ=="],
- "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.1.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ=="],
+ "@next/swc-linux-arm64-musl": ["@next/swc-linux-arm64-musl@16.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-iVMMp14514u7Nup2umQS03nT/bN9HurK8ufylC3FZNykrwjtx7V1A7+4kvhbDSCeonTVqV3Txnv0Lu+m2oDXNg=="],
- "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ=="],
+ "@next/swc-linux-x64-gnu": ["@next/swc-linux-x64-gnu@16.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-EZOvm1aQWgnI/N/xcWOlnS3RQBk0VtVav5Zo7n4p0A7UKyTDx047k8opDbXgBpHl4CulRqRfbw3QrX2w5UOXMQ=="],
- "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.1.6", "", { "os": "linux", "cpu": "x64" }, "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg=="],
+ "@next/swc-linux-x64-musl": ["@next/swc-linux-x64-musl@16.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-h9FxsngCm9cTBf71AR4fGznDEDx1hS7+kSEiIRjq5kO1oXWm07DxVGZjCvk0SGx7TSjlUqhI8oOyz7NfwAdPoA=="],
- "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.1.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw=="],
+ "@next/swc-win32-arm64-msvc": ["@next/swc-win32-arm64-msvc@16.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-3NdJV5OXMSOeJYijX+bjaLge3mJBlh4ybydbT4GFoB/2hAojWHtMhl3CYlYoMrjPuodp0nzFVi4Tj2+WaMg+Ow=="],
- "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A=="],
+ "@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-kMVGgsqhO5YTYODD9IPGGhA6iprWidQckK3LmPeW08PIFENRmgfb4MjXHO+p//d+ts2rpjvK5gXWzXSMrPl9cw=="],
"@noble/ciphers": ["@noble/ciphers@1.3.0", "", {}, "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw=="],
@@ -490,8 +468,6 @@
"@nodelib/fs.walk": ["@nodelib/fs.walk@1.2.8", "", { "dependencies": { "@nodelib/fs.scandir": "2.1.5", "fastq": "^1.6.0" } }, "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg=="],
- "@nolyfill/is-core-module": ["@nolyfill/is-core-module@1.0.39", "", {}, "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA=="],
-
"@open-draft/deferred-promise": ["@open-draft/deferred-promise@2.2.0", "", {}, "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA=="],
"@open-draft/logger": ["@open-draft/logger@0.3.0", "", { "dependencies": { "is-node-process": "^1.2.0", "outvariant": "^1.4.0" } }, "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ=="],
@@ -638,47 +614,45 @@
"@radix-ui/rect": ["@radix-ui/rect@1.1.1", "", {}, "sha512-HPwpGIzkl28mWyZqG52jiqDJ12waP11Pa1lGoiyUkIEuMLBP0oeK/C89esbXrxsky5we7dfd8U58nm0SgAWpVw=="],
- "@rtsao/scc": ["@rtsao/scc@1.1.0", "", {}, "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g=="],
-
"@sec-ant/readable-stream": ["@sec-ant/readable-stream@0.4.1", "", {}, "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg=="],
"@sindresorhus/merge-streams": ["@sindresorhus/merge-streams@4.0.0", "", {}, "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ=="],
"@swc/helpers": ["@swc/helpers@0.5.15", "", { "dependencies": { "tslib": "^2.8.0" } }, "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g=="],
- "@tabler/icons": ["@tabler/icons@3.36.1", "", {}, "sha512-f4Jg3Fof/Vru5ioix/UO4GX+sdDsF9wQo47FbtvG+utIYYVQ/QVAC0QYgcBbAjQGfbdOh2CCf0BgiFOF9Ixtjw=="],
+ "@tabler/icons": ["@tabler/icons@3.41.1", "", {}, "sha512-OaRnVbRmH2nHtFeg+RmMJ/7m2oBIF9XCJAUD5gQnMrpK9f05ydj8MZrAf3NZQqOXyxGN1UBL0D5IKLLEUfr74Q=="],
- "@tabler/icons-react": ["@tabler/icons-react@3.36.1", "", { "dependencies": { "@tabler/icons": "" }, "peerDependencies": { "react": ">= 16" } }, "sha512-/8nOXeNeMoze9xY/QyEKG65wuvRhkT3q9aytaur6Gj8bYU2A98YVJyLc9MRmc5nVvpy+bRlrrwK/Ykr8WGyUWg=="],
+ "@tabler/icons-react": ["@tabler/icons-react@3.41.1", "", { "dependencies": { "@tabler/icons": "3.41.1" }, "peerDependencies": { "react": ">= 16" } }, "sha512-kUgweE+DJtAlMZVIns1FTDdcbpRVnkK7ZpUOXmoxy3JAF0rSHj0TcP4VHF14+gMJGnF+psH2Zt26BLT6owetBA=="],
- "@tailwindcss/node": ["@tailwindcss/node@4.1.18", "", { "dependencies": { "@jridgewell/remapping": "^2.3.4", "enhanced-resolve": "^5.18.3", "jiti": "^2.6.1", "lightningcss": "1.30.2", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.1.18" } }, "sha512-DoR7U1P7iYhw16qJ49fgXUlry1t4CpXeErJHnQ44JgTSKMaZUdf17cfn5mHchfJ4KRBZRFA/Coo+MUF5+gOaCQ=="],
+ "@tailwindcss/node": ["@tailwindcss/node@4.2.4", "", { "dependencies": { "@jridgewell/remapping": "^2.3.5", "enhanced-resolve": "^5.19.0", "jiti": "^2.6.1", "lightningcss": "1.32.0", "magic-string": "^0.30.21", "source-map-js": "^1.2.1", "tailwindcss": "4.2.4" } }, "sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA=="],
- "@tailwindcss/oxide": ["@tailwindcss/oxide@4.1.18", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.1.18", "@tailwindcss/oxide-darwin-arm64": "4.1.18", "@tailwindcss/oxide-darwin-x64": "4.1.18", "@tailwindcss/oxide-freebsd-x64": "4.1.18", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18", "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18", "@tailwindcss/oxide-linux-arm64-musl": "4.1.18", "@tailwindcss/oxide-linux-x64-gnu": "4.1.18", "@tailwindcss/oxide-linux-x64-musl": "4.1.18", "@tailwindcss/oxide-wasm32-wasi": "4.1.18", "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18", "@tailwindcss/oxide-win32-x64-msvc": "4.1.18" } }, "sha512-EgCR5tTS5bUSKQgzeMClT6iCY3ToqE1y+ZB0AKldj809QXk1Y+3jB0upOYZrn9aGIzPtUsP7sX4QQ4XtjBB95A=="],
+ "@tailwindcss/oxide": ["@tailwindcss/oxide@4.2.4", "", { "optionalDependencies": { "@tailwindcss/oxide-android-arm64": "4.2.4", "@tailwindcss/oxide-darwin-arm64": "4.2.4", "@tailwindcss/oxide-darwin-x64": "4.2.4", "@tailwindcss/oxide-freebsd-x64": "4.2.4", "@tailwindcss/oxide-linux-arm-gnueabihf": "4.2.4", "@tailwindcss/oxide-linux-arm64-gnu": "4.2.4", "@tailwindcss/oxide-linux-arm64-musl": "4.2.4", "@tailwindcss/oxide-linux-x64-gnu": "4.2.4", "@tailwindcss/oxide-linux-x64-musl": "4.2.4", "@tailwindcss/oxide-wasm32-wasi": "4.2.4", "@tailwindcss/oxide-win32-arm64-msvc": "4.2.4", "@tailwindcss/oxide-win32-x64-msvc": "4.2.4" } }, "sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q=="],
- "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.1.18", "", { "os": "android", "cpu": "arm64" }, "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q=="],
+ "@tailwindcss/oxide-android-arm64": ["@tailwindcss/oxide-android-arm64@4.2.4", "", { "os": "android", "cpu": "arm64" }, "sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g=="],
- "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.1.18", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Gc2q4Qhs660bhjyBSKgq6BYvwDz4G+BuyJ5H1xfhmDR3D8HnHCmT/BSkvSL0vQLy/nkMLY20PQ2OoYMO15Jd0A=="],
+ "@tailwindcss/oxide-darwin-arm64": ["@tailwindcss/oxide-darwin-arm64@4.2.4", "", { "os": "darwin", "cpu": "arm64" }, "sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg=="],
- "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.1.18", "", { "os": "darwin", "cpu": "x64" }, "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw=="],
+ "@tailwindcss/oxide-darwin-x64": ["@tailwindcss/oxide-darwin-x64@4.2.4", "", { "os": "darwin", "cpu": "x64" }, "sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg=="],
- "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.1.18", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA=="],
+ "@tailwindcss/oxide-freebsd-x64": ["@tailwindcss/oxide-freebsd-x64@4.2.4", "", { "os": "freebsd", "cpu": "x64" }, "sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw=="],
- "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.1.18", "", { "os": "linux", "cpu": "arm" }, "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA=="],
+ "@tailwindcss/oxide-linux-arm-gnueabihf": ["@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4", "", { "os": "linux", "cpu": "arm" }, "sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA=="],
- "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw=="],
+ "@tailwindcss/oxide-linux-arm64-gnu": ["@tailwindcss/oxide-linux-arm64-gnu@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw=="],
- "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.1.18", "", { "os": "linux", "cpu": "arm64" }, "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg=="],
+ "@tailwindcss/oxide-linux-arm64-musl": ["@tailwindcss/oxide-linux-arm64-musl@4.2.4", "", { "os": "linux", "cpu": "arm64" }, "sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g=="],
- "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g=="],
+ "@tailwindcss/oxide-linux-x64-gnu": ["@tailwindcss/oxide-linux-x64-gnu@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA=="],
- "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.1.18", "", { "os": "linux", "cpu": "x64" }, "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ=="],
+ "@tailwindcss/oxide-linux-x64-musl": ["@tailwindcss/oxide-linux-x64-musl@4.2.4", "", { "os": "linux", "cpu": "x64" }, "sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA=="],
- "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.1.18", "", { "dependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.0", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.4.0" }, "cpu": "none" }, "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA=="],
+ "@tailwindcss/oxide-wasm32-wasi": ["@tailwindcss/oxide-wasm32-wasi@4.2.4", "", { "dependencies": { "@emnapi/core": "^1.8.1", "@emnapi/runtime": "^1.8.1", "@emnapi/wasi-threads": "^1.1.0", "@napi-rs/wasm-runtime": "^1.1.1", "@tybys/wasm-util": "^0.10.1", "tslib": "^2.8.1" }, "cpu": "none" }, "sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw=="],
- "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.1.18", "", { "os": "win32", "cpu": "arm64" }, "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA=="],
+ "@tailwindcss/oxide-win32-arm64-msvc": ["@tailwindcss/oxide-win32-arm64-msvc@4.2.4", "", { "os": "win32", "cpu": "arm64" }, "sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ=="],
- "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.1.18", "", { "os": "win32", "cpu": "x64" }, "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q=="],
+ "@tailwindcss/oxide-win32-x64-msvc": ["@tailwindcss/oxide-win32-x64-msvc@4.2.4", "", { "os": "win32", "cpu": "x64" }, "sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw=="],
- "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.18", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "postcss": "^8.4.41", "tailwindcss": "4.1.18" } }, "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g=="],
+ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.2.4", "", { "dependencies": { "@alloc/quick-lru": "^5.2.0", "@tailwindcss/node": "4.2.4", "@tailwindcss/oxide": "4.2.4", "postcss": "^8.5.6", "tailwindcss": "4.2.4" } }, "sha512-wgAVj6nUWAolAu8YFvzT2cTBIElWHkjZwFYovF+xsqKsW2ADxM/X2opxj5NsF/qVccAOjRNe8X2IdPzMsWyHTg=="],
"@tailwindcss/typography": ["@tailwindcss/typography@0.5.19", "", { "dependencies": { "postcss-selector-parser": "6.0.10" }, "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1" } }, "sha512-w31dd8HOx3k9vPtcQh5QHP9GwKcgbMp87j58qi6xgiBnFFtKEAgCWnDw4qUT8aHwkCp8bKvb/KGKWWHedP0AAg=="],
@@ -686,8 +660,6 @@
"@ts-morph/common": ["@ts-morph/common@0.27.0", "", { "dependencies": { "fast-glob": "^3.3.3", "minimatch": "^10.0.1", "path-browserify": "^1.0.1" } }, "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ=="],
- "@tybys/wasm-util": ["@tybys/wasm-util@0.10.0", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ=="],
-
"@types/body-parser": ["@types/body-parser@1.19.6", "", { "dependencies": { "@types/connect": "*", "@types/node": "*" } }, "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g=="],
"@types/caseless": ["@types/caseless@0.12.5", "", {}, "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg=="],
@@ -696,8 +668,6 @@
"@types/cors": ["@types/cors@2.8.19", "", { "dependencies": { "@types/node": "*" } }, "sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg=="],
- "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="],
-
"@types/express": ["@types/express@5.0.6", "", { "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^5.0.0", "@types/serve-static": "^2" } }, "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA=="],
"@types/express-serve-static-core": ["@types/express-serve-static-core@5.0.6", "", { "dependencies": { "@types/node": "*", "@types/qs": "*", "@types/range-parser": "*", "@types/send": "*" } }, "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA=="],
@@ -706,26 +676,14 @@
"@types/http-errors": ["@types/http-errors@2.0.5", "", {}, "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg=="],
- "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="],
-
- "@types/json5": ["@types/json5@0.0.29", "", {}, "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ=="],
-
"@types/marked": ["@types/marked@6.0.0", "", { "dependencies": { "marked": "*" } }, "sha512-jmjpa4BwUsmhxcfsgUit/7A9KbrC48Q0q8KvnY107ogcjGgTFDlIL3RpihNpx2Mu1hM4mdFQjoVc4O6JoGKHsA=="],
"@types/mime": ["@types/mime@1.3.5", "", {}, "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w=="],
- "@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="],
-
- "@types/pako": ["@types/pako@2.0.4", "", {}, "sha512-VWDCbrLeVXJM9fihYodcLiIv0ku+AlOa/TQ1SvYOaBuyrSKgEcro95LJyIsJ4vSo6BXIxOKxiJAat04CmST9Fw=="],
-
- "@types/pdfkit": ["@types/pdfkit@0.14.0", "", { "dependencies": { "@types/node": "*" } }, "sha512-X94hoZVr9dNfV23roeXRm57AWS+AOMak3gq2wZvn4TXiLvXE8+TrYaM5IkMyZbGRw49jEqI49rP/UVL3+C3Svg=="],
-
- "@types/pdfmake": ["@types/pdfmake@0.2.13", "", { "dependencies": { "@types/node": "*", "@types/pdfkit": "*" } }, "sha512-QzOwk3dMTZOwVbDZNHGIQcpwBgprp1y1vzRBmR+p+vMtCZo00G1CN+YhNebkygtmaGjdzvyXJVOHMEuTbvhJ8A=="],
+ "@types/node": ["@types/node@25.6.0", "", { "dependencies": { "undici-types": "~7.19.0" } }, "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ=="],
"@types/qs": ["@types/qs@6.14.0", "", {}, "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ=="],
- "@types/raf": ["@types/raf@3.4.3", "", {}, "sha512-c4YAvMedbPZ5tEyxzQdMoOhhJ4RD3rngZIdwC2/qDN3d7JpEhB6fiBRKVY1lg5B7Wk+uPBjn5f39j1/2MY1oOw=="],
-
"@types/range-parser": ["@types/range-parser@1.2.7", "", {}, "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ=="],
"@types/react": ["@types/react@19.2.14", "", { "dependencies": { "csstype": "^3.2.2" } }, "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w=="],
@@ -742,81 +700,19 @@
"@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="],
- "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="],
-
"@types/uuid": ["@types/uuid@11.0.0", "", { "dependencies": { "uuid": "*" } }, "sha512-HVyk8nj2m+jcFRNazzqyVKiZezyhDKrGUA3jlEcg/nZ6Ms+qHwocba1Y/AaVaznJTAM9xpdFSh+ptbNrhOGvZA=="],
"@types/validate-npm-package-name": ["@types/validate-npm-package-name@4.0.2", "", {}, "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw=="],
- "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.55.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.12.2", "@typescript-eslint/scope-manager": "8.55.0", "@typescript-eslint/type-utils": "8.55.0", "@typescript-eslint/utils": "8.55.0", "@typescript-eslint/visitor-keys": "8.55.0", "ignore": "^7.0.5", "natural-compare": "^1.4.0", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.55.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-1y/MVSz0NglV1ijHC8OT49mPJ4qhPYjiK08YUQVbIOyu+5k862LKUHFkpKHWu//zmr7hDR2rhwUm6gnCGNmGBQ=="],
-
- "@typescript-eslint/parser": ["@typescript-eslint/parser@8.55.0", "", { "dependencies": { "@typescript-eslint/scope-manager": "8.55.0", "@typescript-eslint/types": "8.55.0", "@typescript-eslint/typescript-estree": "8.55.0", "@typescript-eslint/visitor-keys": "8.55.0", "debug": "^4.4.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-4z2nCSBfVIMnbuu8uinj+f0o4qOeggYJLbjpPHka3KH1om7e+H9yLKTYgksTaHcGco+NClhhY2vyO3HsMH1RGw=="],
-
- "@typescript-eslint/project-service": ["@typescript-eslint/project-service@8.55.0", "", { "dependencies": { "@typescript-eslint/tsconfig-utils": "^8.55.0", "@typescript-eslint/types": "^8.55.0", "debug": "^4.4.3" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-zRcVVPFUYWa3kNnjaZGXSu3xkKV1zXy8M4nO/pElzQhFweb7PPtluDLQtKArEOGmjXoRjnUZ29NjOiF0eCDkcQ=="],
-
- "@typescript-eslint/scope-manager": ["@typescript-eslint/scope-manager@8.55.0", "", { "dependencies": { "@typescript-eslint/types": "8.55.0", "@typescript-eslint/visitor-keys": "8.55.0" } }, "sha512-fVu5Omrd3jeqeQLiB9f1YsuK/iHFOwb04bCtY4BSCLgjNbOD33ZdV6KyEqplHr+IlpgT0QTZ/iJ+wT7hvTx49Q=="],
-
- "@typescript-eslint/tsconfig-utils": ["@typescript-eslint/tsconfig-utils@8.55.0", "", { "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-1R9cXqY7RQd7WuqSN47PK9EDpgFUK3VqdmbYrvWJZYDd0cavROGn+74ktWBlmJ13NXUQKlZ/iAEQHI/V0kKe0Q=="],
-
- "@typescript-eslint/type-utils": ["@typescript-eslint/type-utils@8.55.0", "", { "dependencies": { "@typescript-eslint/types": "8.55.0", "@typescript-eslint/typescript-estree": "8.55.0", "@typescript-eslint/utils": "8.55.0", "debug": "^4.4.3", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-x1iH2unH4qAt6I37I2CGlsNs+B9WGxurP2uyZLRz6UJoZWDBx9cJL1xVN/FiOmHEONEg6RIufdvyT0TEYIgC5g=="],
-
- "@typescript-eslint/types": ["@typescript-eslint/types@8.55.0", "", {}, "sha512-ujT0Je8GI5BJWi+/mMoR0wxwVEQaxM+pi30xuMiJETlX80OPovb2p9E8ss87gnSVtYXtJoU9U1Cowcr6w2FE0w=="],
-
- "@typescript-eslint/typescript-estree": ["@typescript-eslint/typescript-estree@8.55.0", "", { "dependencies": { "@typescript-eslint/project-service": "8.55.0", "@typescript-eslint/tsconfig-utils": "8.55.0", "@typescript-eslint/types": "8.55.0", "@typescript-eslint/visitor-keys": "8.55.0", "debug": "^4.4.3", "minimatch": "^9.0.5", "semver": "^7.7.3", "tinyglobby": "^0.2.15", "ts-api-utils": "^2.4.0" }, "peerDependencies": { "typescript": ">=4.8.4 <6.0.0" } }, "sha512-EwrH67bSWdx/3aRQhCoxDaHM+CrZjotc2UCCpEDVqfCE+7OjKAGWNY2HsCSTEVvWH2clYQK8pdeLp42EVs+xQw=="],
-
- "@typescript-eslint/utils": ["@typescript-eslint/utils@8.55.0", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.9.1", "@typescript-eslint/scope-manager": "8.55.0", "@typescript-eslint/types": "8.55.0", "@typescript-eslint/typescript-estree": "8.55.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-BqZEsnPGdYpgyEIkDC1BadNY8oMwckftxBT+C8W0g1iKPdeqKZBtTfnvcq0nf60u7MkjFO8RBvpRGZBPw4L2ow=="],
-
- "@typescript-eslint/visitor-keys": ["@typescript-eslint/visitor-keys@8.55.0", "", { "dependencies": { "@typescript-eslint/types": "8.55.0", "eslint-visitor-keys": "^4.2.1" } }, "sha512-AxNRwEie8Nn4eFS1FzDMJWIISMGoXMb037sgCBJ3UR6o0fQTzr2tqN9WT+DkWJPhIdQCfV7T6D387566VtnCJA=="],
-
- "@unrs/resolver-binding-android-arm-eabi": ["@unrs/resolver-binding-android-arm-eabi@1.11.1", "", { "os": "android", "cpu": "arm" }, "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw=="],
-
- "@unrs/resolver-binding-android-arm64": ["@unrs/resolver-binding-android-arm64@1.11.1", "", { "os": "android", "cpu": "arm64" }, "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g=="],
-
- "@unrs/resolver-binding-darwin-arm64": ["@unrs/resolver-binding-darwin-arm64@1.11.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g=="],
-
- "@unrs/resolver-binding-darwin-x64": ["@unrs/resolver-binding-darwin-x64@1.11.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ=="],
-
- "@unrs/resolver-binding-freebsd-x64": ["@unrs/resolver-binding-freebsd-x64@1.11.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw=="],
-
- "@unrs/resolver-binding-linux-arm-gnueabihf": ["@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw=="],
-
- "@unrs/resolver-binding-linux-arm-musleabihf": ["@unrs/resolver-binding-linux-arm-musleabihf@1.11.1", "", { "os": "linux", "cpu": "arm" }, "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw=="],
-
- "@unrs/resolver-binding-linux-arm64-gnu": ["@unrs/resolver-binding-linux-arm64-gnu@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ=="],
-
- "@unrs/resolver-binding-linux-arm64-musl": ["@unrs/resolver-binding-linux-arm64-musl@1.11.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w=="],
-
- "@unrs/resolver-binding-linux-ppc64-gnu": ["@unrs/resolver-binding-linux-ppc64-gnu@1.11.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA=="],
-
- "@unrs/resolver-binding-linux-riscv64-gnu": ["@unrs/resolver-binding-linux-riscv64-gnu@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ=="],
-
- "@unrs/resolver-binding-linux-riscv64-musl": ["@unrs/resolver-binding-linux-riscv64-musl@1.11.1", "", { "os": "linux", "cpu": "none" }, "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew=="],
-
- "@unrs/resolver-binding-linux-s390x-gnu": ["@unrs/resolver-binding-linux-s390x-gnu@1.11.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg=="],
-
- "@unrs/resolver-binding-linux-x64-gnu": ["@unrs/resolver-binding-linux-x64-gnu@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w=="],
-
- "@unrs/resolver-binding-linux-x64-musl": ["@unrs/resolver-binding-linux-x64-musl@1.11.1", "", { "os": "linux", "cpu": "x64" }, "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA=="],
-
- "@unrs/resolver-binding-wasm32-wasi": ["@unrs/resolver-binding-wasm32-wasi@1.11.1", "", { "dependencies": { "@napi-rs/wasm-runtime": "^0.2.11" }, "cpu": "none" }, "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ=="],
-
- "@unrs/resolver-binding-win32-arm64-msvc": ["@unrs/resolver-binding-win32-arm64-msvc@1.11.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw=="],
-
- "@unrs/resolver-binding-win32-ia32-msvc": ["@unrs/resolver-binding-win32-ia32-msvc@1.11.1", "", { "os": "win32", "cpu": "ia32" }, "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ=="],
-
- "@unrs/resolver-binding-win32-x64-msvc": ["@unrs/resolver-binding-win32-x64-msvc@1.11.1", "", { "os": "win32", "cpu": "x64" }, "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g=="],
+ "@vercel/analytics": ["@vercel/analytics@2.0.1", "", { "peerDependencies": { "@remix-run/react": "^2", "@sveltejs/kit": "^1 || ^2", "next": ">= 13", "nuxt": ">= 3", "react": "^18 || ^19 || ^19.0.0-rc", "svelte": ">= 4", "vue": "^3", "vue-router": "^4" }, "optionalPeers": ["@remix-run/react", "@sveltejs/kit", "next", "nuxt", "react", "svelte", "vue", "vue-router"] }, "sha512-MTQG6V9qQrt1tsDeF+2Uoo5aPjqbVPys1xvnIftXSJYG2SrwXRHnqEvVoYID7BTruDz4lCd2Z7rM1BdkUehk2g=="],
"abort-controller": ["abort-controller@3.0.0", "", { "dependencies": { "event-target-shim": "^5.0.0" } }, "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg=="],
"accepts": ["accepts@2.0.0", "", { "dependencies": { "mime-types": "^3.0.0", "negotiator": "^1.0.0" } }, "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng=="],
- "acorn": ["acorn@8.15.0", "", { "bin": "bin/acorn" }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="],
-
- "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="],
-
"agent-base": ["agent-base@7.1.3", "", {}, "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw=="],
- "ajv": ["ajv@6.12.6", "", { "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" } }, "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g=="],
+ "ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
"ajv-formats": ["ajv-formats@3.0.1", "", { "dependencies": { "ajv": "^8.0.0" } }, "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ=="],
@@ -824,57 +720,25 @@
"ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="],
- "ansis": ["ansis@4.2.0", "", {}, "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig=="],
-
"argparse": ["argparse@2.0.1", "", {}, "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q=="],
"aria-hidden": ["aria-hidden@1.2.6", "", { "dependencies": { "tslib": "^2.0.0" } }, "sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA=="],
- "aria-query": ["aria-query@5.3.2", "", {}, "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw=="],
-
- "array-buffer-byte-length": ["array-buffer-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "is-array-buffer": "^3.0.5" } }, "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw=="],
-
- "array-includes": ["array-includes@3.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.24.0", "es-object-atoms": "^1.1.1", "get-intrinsic": "^1.3.0", "is-string": "^1.1.1", "math-intrinsics": "^1.1.0" } }, "sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ=="],
-
- "array.prototype.findlast": ["array.prototype.findlast@1.2.5", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ=="],
-
- "array.prototype.findlastindex": ["array.prototype.findlastindex@1.2.6", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-shim-unscopables": "^1.1.0" } }, "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ=="],
-
- "array.prototype.flat": ["array.prototype.flat@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg=="],
-
- "array.prototype.flatmap": ["array.prototype.flatmap@1.3.3", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-shim-unscopables": "^1.0.2" } }, "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg=="],
-
- "array.prototype.tosorted": ["array.prototype.tosorted@1.1.4", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3", "es-errors": "^1.3.0", "es-shim-unscopables": "^1.0.2" } }, "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA=="],
-
- "arraybuffer.prototype.slice": ["arraybuffer.prototype.slice@1.0.4", "", { "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "is-array-buffer": "^3.0.4" } }, "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ=="],
-
"arrify": ["arrify@2.0.1", "", {}, "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug=="],
- "assemblyai": ["assemblyai@4.23.0", "", { "dependencies": { "ws": "^8.18.0" } }, "sha512-UtmCR4QD5qDy6uYLC+LJJmn8vcUrKOIXbS2VrciiPOSYrBoL+o18SbAZ/viwN4WoNAowKu9dPgvE+F7McebMgA=="],
+ "assemblyai": ["assemblyai@4.30.0", "", { "dependencies": { "ws": "^8.18.0" } }, "sha512-F3X0YTOYBJSPhFHakvxlcKu3HjuEt3Nxs3xSSi1cDaK7i7X4hUdq/0RJcxanId3dQj3IKbkNdUbBnZiasMUf7Q=="],
"ast-types": ["ast-types@0.16.1", "", { "dependencies": { "tslib": "^2.0.1" } }, "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg=="],
- "ast-types-flow": ["ast-types-flow@0.0.8", "", {}, "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ=="],
-
- "async-function": ["async-function@1.0.0", "", {}, "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA=="],
-
"async-retry": ["async-retry@1.3.3", "", { "dependencies": { "retry": "0.13.1" } }, "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw=="],
"asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
"attr-accept": ["attr-accept@2.2.5", "", {}, "sha512-0bDNnY/u6pPwHDMoF0FieU354oBi0a8rD9FcsLwzcGWbc8KS8KPIi7y+s13OlVY+gMWc/9xEMUgNE6Qm8ZllYQ=="],
- "autoprefixer": ["autoprefixer@10.4.24", "", { "dependencies": { "browserslist": "^4.28.1", "caniuse-lite": "^1.0.30001766", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-uHZg7N9ULTVbutaIsDRoUkoS8/h3bdsmVJYZ5l3wv8Cp/6UIIoRDm90hZ+BwxUj/hGBEzLxdHNSKuFpn8WOyZw=="],
-
- "available-typed-arrays": ["available-typed-arrays@1.0.7", "", { "dependencies": { "possible-typed-array-names": "^1.0.0" } }, "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ=="],
-
- "axe-core": ["axe-core@4.10.3", "", {}, "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg=="],
-
- "axobject-query": ["axobject-query@4.1.0", "", {}, "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ=="],
+ "autoprefixer": ["autoprefixer@10.5.0", "", { "dependencies": { "browserslist": "^4.28.2", "caniuse-lite": "^1.0.30001787", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" }, "peerDependencies": { "postcss": "^8.1.0" }, "bin": { "autoprefixer": "bin/autoprefixer" } }, "sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong=="],
- "balanced-match": ["balanced-match@1.0.2", "", {}, "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="],
-
- "base64-arraybuffer": ["base64-arraybuffer@1.0.2", "", {}, "sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ=="],
+ "balanced-match": ["balanced-match@4.0.2", "", { "dependencies": { "jackspeak": "^4.2.3" } }, "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg=="],
"base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
@@ -884,13 +748,11 @@
"body-parser": ["body-parser@2.2.2", "", { "dependencies": { "bytes": "^3.1.2", "content-type": "^1.0.5", "debug": "^4.4.3", "http-errors": "^2.0.0", "iconv-lite": "^0.7.0", "on-finished": "^2.4.1", "qs": "^6.14.1", "raw-body": "^3.0.1", "type-is": "^2.0.1" } }, "sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA=="],
- "brace-expansion": ["brace-expansion@1.1.12", "", { "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg=="],
+ "brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="],
"braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
- "brotli": ["brotli@1.3.3", "", { "dependencies": { "base64-js": "^1.1.2" } }, "sha512-oTKjJdShmDuGW94SyyaoQvAjf30dZaHnjJ8uAF+u2/vGJkJbJPJAT1gDiOJP5v1Zb6f9KEyW/1HpuaWIXtGHPg=="],
-
- "browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="],
+ "browserslist": ["browserslist@4.28.2", "", { "dependencies": { "baseline-browser-mapping": "^2.10.12", "caniuse-lite": "^1.0.30001782", "electron-to-chromium": "^1.5.328", "node-releases": "^2.0.36", "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" } }, "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg=="],
"buffer-equal-constant-time": ["buffer-equal-constant-time@1.0.1", "", {}, "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="],
@@ -898,21 +760,15 @@
"bytes": ["bytes@3.1.2", "", {}, "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg=="],
- "call-bind": ["call-bind@1.0.8", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", "get-intrinsic": "^1.2.4", "set-function-length": "^1.2.2" } }, "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww=="],
-
"call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
"call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="],
"callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="],
- "caniuse-lite": ["caniuse-lite@1.0.30001769", "", {}, "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg=="],
-
- "canvg": ["canvg@3.0.11", "", { "dependencies": { "@babel/runtime": "^7.12.5", "@types/raf": "^3.4.0", "core-js": "^3.8.3", "raf": "^3.4.1", "regenerator-runtime": "^0.13.7", "rgbcolor": "^1.0.1", "stackblur-canvas": "^2.0.0", "svg-pathdata": "^6.0.3" } }, "sha512-5ON+q7jCTgMp9cjpu4Jo6XbvfYwSB2Ow3kzHKfIyJfaCAOHLbdKPQqGKgfED/R5B+3TFFfe8pegYA+b423SRyA=="],
-
- "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="],
+ "caniuse-lite": ["caniuse-lite@1.0.30001791", "", {}, "sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ=="],
- "clarity-js": ["clarity-js@0.8.54", "", {}, "sha512-pMwah1UMcdNfdavnhANCHeER8tb00d8NJzUa7Equh2O8wTasdH/+uZ0YXUtRbjGDUR3fs8hR9XPmMBAf4YXHMQ=="],
+ "chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
"class-variance-authority": ["class-variance-authority@0.7.1", "", { "dependencies": { "clsx": "^2.1.1" } }, "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg=="],
@@ -926,8 +782,6 @@
"cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="],
- "clone": ["clone@2.1.2", "", {}, "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w=="],
-
"clsx": ["clsx@2.1.1", "", {}, "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA=="],
"code-block-writer": ["code-block-writer@13.0.3", "", {}, "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg=="],
@@ -940,8 +794,6 @@
"commander": ["commander@14.0.3", "", {}, "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw=="],
- "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="],
-
"content-disposition": ["content-disposition@1.0.0", "", { "dependencies": { "safe-buffer": "5.2.1" } }, "sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg=="],
"content-type": ["content-type@1.0.5", "", {}, "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA=="],
@@ -952,8 +804,6 @@
"cookie-signature": ["cookie-signature@1.2.2", "", {}, "sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg=="],
- "core-js": ["core-js@3.43.0", "", {}, "sha512-N6wEbTTZSYOY2rYAn85CuvWWkCK6QweMn7/4Nr3w+gDBeBhk/x4EJeY6FPo4QzDoJZxVTv8U7CMvgWk6pOHHqA=="],
-
"core-util-is": ["core-util-is@1.0.3", "", {}, "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="],
"cors": ["cors@2.8.6", "", { "dependencies": { "object-assign": "^4", "vary": "^1" } }, "sha512-tJtZBBHA6vjIAaF6EnIaq6laBBP9aq/Y3ouVJjEfoHbRBcHBAHYcMh/w8LDrk2PvIMMq8gmopa5D4V8RmbrxGw=="],
@@ -962,42 +812,24 @@
"cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", "which": "^2.0.1" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="],
- "crypto-js": ["crypto-js@4.2.0", "", {}, "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q=="],
-
- "css-line-break": ["css-line-break@2.1.0", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-FHcKFCZcAha3LwfVBhCQbW2nCNbkZXn7KVUJcsT5/P8YmfsVja0FMPJr0B903j/E69HUphKiV9iQArX8SDYA4w=="],
-
"cssesc": ["cssesc@3.0.0", "", { "bin": "bin/cssesc" }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="],
"csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="],
- "damerau-levenshtein": ["damerau-levenshtein@1.0.8", "", {}, "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA=="],
-
"data-uri-to-buffer": ["data-uri-to-buffer@4.0.1", "", {}, "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A=="],
- "data-view-buffer": ["data-view-buffer@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ=="],
-
- "data-view-byte-length": ["data-view-byte-length@1.0.2", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-data-view": "^1.0.2" } }, "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ=="],
-
- "data-view-byte-offset": ["data-view-byte-offset@1.0.1", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" } }, "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ=="],
-
"debug": ["debug@4.4.1", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ=="],
"dedent": ["dedent@1.7.1", "", { "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, "optionalPeers": ["babel-plugin-macros"] }, "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg=="],
- "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="],
-
"deepmerge": ["deepmerge@4.3.1", "", {}, "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A=="],
"default-browser": ["default-browser@5.5.0", "", { "dependencies": { "bundle-name": "^4.1.0", "default-browser-id": "^5.0.0" } }, "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw=="],
"default-browser-id": ["default-browser-id@5.0.1", "", {}, "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q=="],
- "define-data-property": ["define-data-property@1.1.4", "", { "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "gopd": "^1.0.1" } }, "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A=="],
-
"define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="],
- "define-properties": ["define-properties@1.2.1", "", { "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", "object-keys": "^1.1.1" } }, "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg=="],
-
"delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
"depd": ["depd@2.0.0", "", {}, "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="],
@@ -1010,17 +842,11 @@
"device-detector-js": ["device-detector-js@3.0.3", "", {}, "sha512-jM89LJAvP6uOd84at8OlD9dWP8KeYCCHUde0RT0HQo/stdoRH4b54Xl/fntx2nEXCmqiFhmo+/cJetS2VGUHPw=="],
- "dfa": ["dfa@1.2.0", "", {}, "sha512-ED3jP8saaweFTjeGX8HQPjeC1YYyZs98jGNZx6IiBvxW7JG5v492kamAQB3m2wop07CvU/RQmzcKr6bgcC5D/Q=="],
-
"diff": ["diff@8.0.3", "", {}, "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ=="],
- "doctrine": ["doctrine@2.1.0", "", { "dependencies": { "esutils": "^2.0.2" } }, "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw=="],
-
- "docx": ["docx@9.5.2", "", { "dependencies": { "@types/node": "^24.0.1", "hash.js": "^1.1.7", "jszip": "^3.10.1", "nanoid": "^5.1.3", "xml": "^1.0.1", "xml-js": "^1.6.8" } }, "sha512-IJDqLzYeCGtnHJRtljEHCX/v9aQS0jgzpyD3BSxClEepFfn4h/H/5RVRminu05Kf4e29oMDZKRGyQo/5nQZmMg=="],
-
- "dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="],
+ "docx": ["docx@9.6.1", "", { "dependencies": { "@types/node": "^25.2.3", "hash.js": "^1.1.7", "jszip": "^3.10.1", "nanoid": "^5.1.3", "xml": "^1.0.1", "xml-js": "^1.6.8" } }, "sha512-ZJja9/KBUuFC109sCMzovoq2GR2wCG/AuxivjA+OHj/q0TEgJIm3S7yrlUxIy3B+bV8YDj/BiHfWyrRFmyWpDQ=="],
- "dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="],
+ "dotenv": ["dotenv@17.4.2", "", {}, "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw=="],
"dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
@@ -1032,9 +858,9 @@
"ee-first": ["ee-first@1.1.1", "", {}, "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="],
- "electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="],
+ "electron-to-chromium": ["electron-to-chromium@1.5.344", "", {}, "sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg=="],
- "emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="],
+ "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
"encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="],
@@ -1046,66 +872,22 @@
"error-ex": ["error-ex@1.3.4", "", { "dependencies": { "is-arrayish": "^0.2.1" } }, "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ=="],
- "es-abstract": ["es-abstract@1.24.0", "", { "dependencies": { "array-buffer-byte-length": "^1.0.2", "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "data-view-buffer": "^1.0.2", "data-view-byte-length": "^1.0.2", "data-view-byte-offset": "^1.0.1", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "es-set-tostringtag": "^2.1.0", "es-to-primitive": "^1.3.0", "function.prototype.name": "^1.1.8", "get-intrinsic": "^1.3.0", "get-proto": "^1.0.1", "get-symbol-description": "^1.1.0", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", "is-regex": "^1.2.1", "is-set": "^2.0.3", "is-shared-array-buffer": "^1.0.4", "is-string": "^1.1.1", "is-typed-array": "^1.1.15", "is-weakref": "^1.1.1", "math-intrinsics": "^1.1.0", "object-inspect": "^1.13.4", "object-keys": "^1.1.1", "object.assign": "^4.1.7", "own-keys": "^1.0.1", "regexp.prototype.flags": "^1.5.4", "safe-array-concat": "^1.1.3", "safe-push-apply": "^1.0.0", "safe-regex-test": "^1.1.0", "set-proto": "^1.0.0", "stop-iteration-iterator": "^1.1.0", "string.prototype.trim": "^1.2.10", "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.3", "typed-array-byte-length": "^1.0.3", "typed-array-byte-offset": "^1.0.4", "typed-array-length": "^1.0.7", "unbox-primitive": "^1.1.0", "which-typed-array": "^1.1.19" } }, "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg=="],
-
"es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
"es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
- "es-iterator-helpers": ["es-iterator-helpers@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-set-tostringtag": "^2.0.3", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.6", "globalthis": "^1.0.4", "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", "has-proto": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "iterator.prototype": "^1.1.4", "safe-array-concat": "^1.1.3" } }, "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w=="],
-
"es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
"es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
- "es-shim-unscopables": ["es-shim-unscopables@1.1.0", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw=="],
-
- "es-to-primitive": ["es-to-primitive@1.3.0", "", { "dependencies": { "is-callable": "^1.2.7", "is-date-object": "^1.0.5", "is-symbol": "^1.0.4" } }, "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g=="],
-
"esbuild": ["esbuild@0.27.3", "", { "optionalDependencies": { "@esbuild/aix-ppc64": "0.27.3", "@esbuild/android-arm": "0.27.3", "@esbuild/android-arm64": "0.27.3", "@esbuild/android-x64": "0.27.3", "@esbuild/darwin-arm64": "0.27.3", "@esbuild/darwin-x64": "0.27.3", "@esbuild/freebsd-arm64": "0.27.3", "@esbuild/freebsd-x64": "0.27.3", "@esbuild/linux-arm": "0.27.3", "@esbuild/linux-arm64": "0.27.3", "@esbuild/linux-ia32": "0.27.3", "@esbuild/linux-loong64": "0.27.3", "@esbuild/linux-mips64el": "0.27.3", "@esbuild/linux-ppc64": "0.27.3", "@esbuild/linux-riscv64": "0.27.3", "@esbuild/linux-s390x": "0.27.3", "@esbuild/linux-x64": "0.27.3", "@esbuild/netbsd-arm64": "0.27.3", "@esbuild/netbsd-x64": "0.27.3", "@esbuild/openbsd-arm64": "0.27.3", "@esbuild/openbsd-x64": "0.27.3", "@esbuild/openharmony-arm64": "0.27.3", "@esbuild/sunos-x64": "0.27.3", "@esbuild/win32-arm64": "0.27.3", "@esbuild/win32-ia32": "0.27.3", "@esbuild/win32-x64": "0.27.3" }, "bin": { "esbuild": "bin/esbuild" } }, "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg=="],
"escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="],
"escape-html": ["escape-html@1.0.3", "", {}, "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="],
- "escape-string-regexp": ["escape-string-regexp@4.0.0", "", {}, "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="],
-
- "eslint": ["eslint@9.39.2", "", { "dependencies": { "@eslint-community/eslint-utils": "^4.8.0", "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.21.1", "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.4.2", "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", "eslint-scope": "^8.4.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "json-stable-stringify-without-jsonify": "^1.0.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3" }, "peerDependencies": { "jiti": "*" }, "optionalPeers": ["jiti"], "bin": { "eslint": "bin/eslint.js" } }, "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw=="],
-
- "eslint-config-next": ["eslint-config-next@16.1.6", "", { "dependencies": { "@next/eslint-plugin-next": "16.1.6", "eslint-import-resolver-node": "^0.3.6", "eslint-import-resolver-typescript": "^3.5.2", "eslint-plugin-import": "^2.32.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.0", "eslint-plugin-react-hooks": "^7.0.0", "globals": "16.4.0", "typescript-eslint": "^8.46.0" }, "peerDependencies": { "eslint": ">=9.0.0", "typescript": ">=3.3.1" }, "optionalPeers": ["typescript"] }, "sha512-vKq40io2B0XtkkNDYyleATwblNt8xuh3FWp8SpSz3pt7P01OkBFlKsJZ2mWt5WsCySlDQLckb1zMY9yE9Qy0LA=="],
-
- "eslint-import-resolver-node": ["eslint-import-resolver-node@0.3.9", "", { "dependencies": { "debug": "^3.2.7", "is-core-module": "^2.13.0", "resolve": "^1.22.4" } }, "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g=="],
-
- "eslint-import-resolver-typescript": ["eslint-import-resolver-typescript@3.10.1", "", { "dependencies": { "@nolyfill/is-core-module": "1.0.39", "debug": "^4.4.0", "get-tsconfig": "^4.10.0", "is-bun-module": "^2.0.0", "stable-hash": "^0.0.5", "tinyglobby": "^0.2.13", "unrs-resolver": "^1.6.2" }, "peerDependencies": { "eslint": "*", "eslint-plugin-import": "*", "eslint-plugin-import-x": "*" }, "optionalPeers": ["eslint-plugin-import-x"] }, "sha512-A1rHYb06zjMGAxdLSkN2fXPBwuSaQ0iO5M/hdyS0Ajj1VBaRp0sPD3dn1FhME3c/JluGFbwSxyCfqdSbtQLAHQ=="],
-
- "eslint-module-utils": ["eslint-module-utils@2.12.1", "", { "dependencies": { "debug": "^3.2.7" } }, "sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw=="],
-
- "eslint-plugin-import": ["eslint-plugin-import@2.32.0", "", { "dependencies": { "@rtsao/scc": "^1.1.0", "array-includes": "^3.1.9", "array.prototype.findlastindex": "^1.2.6", "array.prototype.flat": "^1.3.3", "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", "object.values": "^1.2.1", "semver": "^6.3.1", "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "peerDependencies": { "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, "sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA=="],
-
- "eslint-plugin-jsx-a11y": ["eslint-plugin-jsx-a11y@6.10.2", "", { "dependencies": { "aria-query": "^5.3.2", "array-includes": "^3.1.8", "array.prototype.flatmap": "^1.3.2", "ast-types-flow": "^0.0.8", "axe-core": "^4.10.0", "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", "hasown": "^2.0.2", "jsx-ast-utils": "^3.3.5", "language-tags": "^1.0.9", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "safe-regex-test": "^1.0.3", "string.prototype.includes": "^2.0.1" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q=="],
-
- "eslint-plugin-react": ["eslint-plugin-react@7.37.5", "", { "dependencies": { "array-includes": "^3.1.8", "array.prototype.findlast": "^1.2.5", "array.prototype.flatmap": "^1.3.3", "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", "object.entries": "^1.1.9", "object.fromentries": "^2.0.8", "object.values": "^1.2.1", "prop-types": "^15.8.1", "resolve": "^2.0.0-next.5", "semver": "^6.3.1", "string.prototype.matchall": "^4.0.12", "string.prototype.repeat": "^1.0.0" }, "peerDependencies": { "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA=="],
-
- "eslint-plugin-react-hooks": ["eslint-plugin-react-hooks@7.0.1", "", { "dependencies": { "@babel/core": "^7.24.4", "@babel/parser": "^7.24.4", "hermes-parser": "^0.25.1", "zod": "^3.25.0 || ^4.0.0", "zod-validation-error": "^3.5.0 || ^4.0.0" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA=="],
-
- "eslint-plugin-react-refresh": ["eslint-plugin-react-refresh@0.4.26", "", { "peerDependencies": { "eslint": ">=8.40" } }, "sha512-1RETEylht2O6FM/MvgnyvT+8K21wLqDNg4qD51Zj3guhjt433XbnnkVttHMyaVyAFD03QSV4LPS5iE3VQmO7XQ=="],
-
- "eslint-scope": ["eslint-scope@8.4.0", "", { "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" } }, "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg=="],
-
- "eslint-visitor-keys": ["eslint-visitor-keys@4.2.1", "", {}, "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="],
-
- "espree": ["espree@10.4.0", "", { "dependencies": { "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", "eslint-visitor-keys": "^4.2.1" } }, "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ=="],
-
"esprima": ["esprima@4.0.1", "", { "bin": { "esparse": "./bin/esparse.js", "esvalidate": "./bin/esvalidate.js" } }, "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="],
- "esquery": ["esquery@1.6.0", "", { "dependencies": { "estraverse": "^5.1.0" } }, "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg=="],
-
- "esrecurse": ["esrecurse@4.3.0", "", { "dependencies": { "estraverse": "^5.2.0" } }, "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag=="],
-
- "estraverse": ["estraverse@5.3.0", "", {}, "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA=="],
-
- "esutils": ["esutils@2.0.3", "", {}, "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="],
-
"etag": ["etag@1.8.1", "", {}, "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="],
"event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="],
@@ -1126,12 +908,6 @@
"fast-glob": ["fast-glob@3.3.3", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.8" } }, "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg=="],
- "fast-json-stable-stringify": ["fast-json-stable-stringify@2.1.0", "", {}, "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="],
-
- "fast-levenshtein": ["fast-levenshtein@2.0.6", "", {}, "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw=="],
-
- "fast-png": ["fast-png@6.4.0", "", { "dependencies": { "@types/pako": "^2.0.3", "iobuffer": "^5.3.2", "pako": "^2.1.0" } }, "sha512-kAqZq1TlgBjZcLr5mcN6NP5Rv4V2f22z00c3g8vRrwkcqjerx7BEhPbOnWCPqaHUl2XWQBJQvOT/FQhdMT7X/Q=="],
-
"fast-uri": ["fast-uri@3.1.0", "", {}, "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA=="],
"fast-xml-parser": ["fast-xml-parser@5.3.6", "", { "dependencies": { "strnum": "^2.1.2" }, "bin": { "fxparser": "src/cli/cli.js" } }, "sha512-QNI3sAvSvaOiaMl8FYU4trnEzCwiRr8XMWgAHzlrWpTSj+QaCSvOf1h82OEP1s4hiAXhnbXSyFWCf4ldZzZRVA=="],
@@ -1144,12 +920,8 @@
"fetch-blob": ["fetch-blob@3.2.0", "", { "dependencies": { "node-domexception": "^1.0.0", "web-streams-polyfill": "^3.0.3" } }, "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ=="],
- "fflate": ["fflate@0.8.2", "", {}, "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A=="],
-
"figures": ["figures@6.1.0", "", { "dependencies": { "is-unicode-supported": "^2.0.0" } }, "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg=="],
- "file-entry-cache": ["file-entry-cache@8.0.0", "", { "dependencies": { "flat-cache": "^4.0.0" } }, "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ=="],
-
"file-saver": ["file-saver@2.0.5", "", {}, "sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA=="],
"file-selector": ["file-selector@2.1.2", "", { "dependencies": { "tslib": "^2.7.0" } }, "sha512-QgXo+mXTe8ljeqUFaX3QVHc5osSItJ/Km+xpocx0aSqWGMSCf6qYs/VnzZgS864Pjn5iceMRFigeAV7AfTlaig=="],
@@ -1158,17 +930,7 @@
"finalhandler": ["finalhandler@2.1.0", "", { "dependencies": { "debug": "^4.4.0", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "on-finished": "^2.4.1", "parseurl": "^1.3.3", "statuses": "^2.0.1" } }, "sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q=="],
- "find-up": ["find-up@5.0.0", "", { "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" } }, "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng=="],
-
- "firebase": ["firebase@12.9.0", "", { "dependencies": { "@firebase/ai": "2.8.0", "@firebase/analytics": "0.10.19", "@firebase/analytics-compat": "0.2.25", "@firebase/app": "0.14.8", "@firebase/app-check": "0.11.0", "@firebase/app-check-compat": "0.4.0", "@firebase/app-compat": "0.5.8", "@firebase/app-types": "0.9.3", "@firebase/auth": "1.12.0", "@firebase/auth-compat": "0.6.2", "@firebase/data-connect": "0.3.12", "@firebase/database": "1.1.0", "@firebase/database-compat": "2.1.0", "@firebase/firestore": "4.11.0", "@firebase/firestore-compat": "0.4.5", "@firebase/functions": "0.13.1", "@firebase/functions-compat": "0.4.1", "@firebase/installations": "0.6.19", "@firebase/installations-compat": "0.2.19", "@firebase/messaging": "0.12.23", "@firebase/messaging-compat": "0.2.23", "@firebase/performance": "0.7.9", "@firebase/performance-compat": "0.2.22", "@firebase/remote-config": "0.8.0", "@firebase/remote-config-compat": "0.2.21", "@firebase/storage": "0.14.0", "@firebase/storage-compat": "0.4.0", "@firebase/util": "1.13.0" } }, "sha512-CwwTYoqZg6KxygPOaaJqIc4aoLvo0RCRrXoln9GoxLE8QyAwTydBaSLGVlR4WPcuOgN3OEL0tJLT1H4IU/dv7w=="],
-
- "flat-cache": ["flat-cache@4.0.1", "", { "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.4" } }, "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw=="],
-
- "flatted": ["flatted@3.3.3", "", {}, "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg=="],
-
- "fontkit": ["fontkit@2.0.4", "", { "dependencies": { "@swc/helpers": "^0.5.12", "brotli": "^1.3.2", "clone": "^2.1.2", "dfa": "^1.2.0", "fast-deep-equal": "^3.1.3", "restructure": "^3.0.0", "tiny-inflate": "^1.0.3", "unicode-properties": "^1.4.0", "unicode-trie": "^2.0.0" } }, "sha512-syetQadaUEDNdxdugga9CpEYVaQIxOwk7GlwZWWZ19//qW4zE5bknOKeMBDYAASwnpaSHKJITRLMF9m1fp3s6g=="],
-
- "for-each": ["for-each@0.3.5", "", { "dependencies": { "is-callable": "^1.2.7" } }, "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg=="],
+ "firebase": ["firebase@12.12.1", "", { "dependencies": { "@firebase/ai": "2.11.1", "@firebase/analytics": "0.10.21", "@firebase/analytics-compat": "0.2.27", "@firebase/app": "0.14.11", "@firebase/app-check": "0.11.2", "@firebase/app-check-compat": "0.4.2", "@firebase/app-compat": "0.5.11", "@firebase/app-types": "0.9.4", "@firebase/auth": "1.13.0", "@firebase/auth-compat": "0.6.5", "@firebase/data-connect": "0.6.0", "@firebase/database": "1.1.2", "@firebase/database-compat": "2.1.3", "@firebase/firestore": "4.14.0", "@firebase/firestore-compat": "0.4.8", "@firebase/functions": "0.13.3", "@firebase/functions-compat": "0.4.3", "@firebase/installations": "0.6.21", "@firebase/installations-compat": "0.2.21", "@firebase/messaging": "0.12.25", "@firebase/messaging-compat": "0.2.25", "@firebase/performance": "0.7.11", "@firebase/performance-compat": "0.2.24", "@firebase/remote-config": "0.8.2", "@firebase/remote-config-compat": "0.2.23", "@firebase/storage": "0.14.2", "@firebase/storage-compat": "0.4.2", "@firebase/util": "1.15.0" } }, "sha512-ee7xA+bTJLfjB9BP/8FQr3EkxmpAAGc1lNc5QkWgTDpUw24HYXFPm7FEWRdLtGnygxIdYpFmepSc5VjkI6NHhw=="],
"form-data": ["form-data@2.5.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.35", "safe-buffer": "^5.2.1" } }, "sha512-jqdObeR2rxZZbPSGL+3VckHMYtu+f9//KXBsVny6JSX/pa38Fy+bGjuG8eW/H6USNQWhLi8Num++cU2yOCNz4A=="],
@@ -1178,7 +940,7 @@
"fraction.js": ["fraction.js@5.3.4", "", {}, "sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ=="],
- "framer-motion": ["framer-motion@12.34.0", "", { "dependencies": { "motion-dom": "^12.34.0", "motion-utils": "^12.29.2", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-+/H49owhzkzQyxtn7nZeF4kdH++I2FWrESQ184Zbcw5cEqNHYkE5yxWxcTLSj5lNx3NWdbIRy5FHqUvetD8FWg=="],
+ "framer-motion": ["framer-motion@12.38.0", "", { "dependencies": { "motion-dom": "^12.38.0", "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g=="],
"fresh": ["fresh@2.0.0", "", {}, "sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A=="],
@@ -1188,14 +950,8 @@
"function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
- "function.prototype.name": ["function.prototype.name@1.1.8", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "functions-have-names": "^1.2.3", "hasown": "^2.0.2", "is-callable": "^1.2.7" } }, "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q=="],
-
- "functions-have-names": ["functions-have-names@1.2.3", "", {}, "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ=="],
-
"fuzzysort": ["fuzzysort@3.1.0", "", {}, "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ=="],
- "fzf": ["fzf@0.5.2", "", {}, "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q=="],
-
"gaxios": ["gaxios@6.7.1", "", { "dependencies": { "extend": "^3.0.2", "https-proxy-agent": "^7.0.1", "is-stream": "^2.0.0", "node-fetch": "^2.6.9", "uuid": "^9.0.1" } }, "sha512-LDODD4TMYx7XXdpwxAVRAIAuB0bzv0s+ywFonY46k126qzQHT9ygyoa9tncmOiQmmDrik65UYsEkv3lbfqQ3yQ=="],
"gcp-metadata": ["gcp-metadata@6.1.1", "", { "dependencies": { "gaxios": "^6.1.1", "google-logging-utils": "^0.0.2", "json-bigint": "^1.0.0" } }, "sha512-a4tiq7E0/5fTjxPAaH4jpjkSv/uCaU2p5KC6HVGrvl0cDjA8iBZv4vv1gyzlmK0ZUKqwpOyQMKzZQe3lTit77A=="],
@@ -1216,15 +972,11 @@
"get-stream": ["get-stream@9.0.1", "", { "dependencies": { "@sec-ant/readable-stream": "^0.4.1", "is-stream": "^4.0.1" } }, "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA=="],
- "get-symbol-description": ["get-symbol-description@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6" } }, "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg=="],
-
"get-tsconfig": ["get-tsconfig@4.10.1", "", { "dependencies": { "resolve-pkg-maps": "^1.0.0" } }, "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ=="],
- "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="],
-
- "globals": ["globals@17.3.0", "", {}, "sha512-yMqGUQVVCkD4tqjOJf3TnrvaaHDMYp4VlUSObbkIiuCPe/ofdMBFIAcBbCSRFWOnos6qRiTVStDwqPLUclaxIw=="],
+ "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
- "globalthis": ["globalthis@1.0.4", "", { "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" } }, "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ=="],
+ "globals": ["globals@17.5.0", "", {}, "sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g=="],
"google-auth-library": ["google-auth-library@9.15.1", "", { "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", "gaxios": "^6.1.1", "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", "jws": "^4.0.0" } }, "sha512-Jb6Z0+nvECVz+2lzSMt9u98UsoakXxA2HGHMCxh+so3n90XgYWkq5dur19JAJV7ONiJY22yBTyJB1TSkvPq9Ng=="],
@@ -1238,14 +990,6 @@
"gtoken": ["gtoken@7.1.0", "", { "dependencies": { "gaxios": "^6.0.0", "jws": "^4.0.0" } }, "sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw=="],
- "has-bigints": ["has-bigints@1.1.0", "", {}, "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg=="],
-
- "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="],
-
- "has-property-descriptors": ["has-property-descriptors@1.0.2", "", { "dependencies": { "es-define-property": "^1.0.0" } }, "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg=="],
-
- "has-proto": ["has-proto@1.2.0", "", { "dependencies": { "dunder-proto": "^1.0.0" } }, "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ=="],
-
"has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
"has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
@@ -1256,16 +1000,10 @@
"headers-polyfill": ["headers-polyfill@4.0.3", "", {}, "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ=="],
- "hermes-estree": ["hermes-estree@0.25.1", "", {}, "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw=="],
-
- "hermes-parser": ["hermes-parser@0.25.1", "", { "dependencies": { "hermes-estree": "0.25.1" } }, "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA=="],
-
"hono": ["hono@4.11.9", "", {}, "sha512-Eaw2YTGM6WOxA6CXbckaEvslr2Ne4NFsKrvc0v97JD5awbmeBLO5w9Ho9L9kmKonrwF9RJlW6BxT1PVv/agBHQ=="],
"html-entities": ["html-entities@2.6.0", "", {}, "sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ=="],
- "html2canvas": ["html2canvas@1.4.1", "", { "dependencies": { "css-line-break": "^2.1.0", "text-segmentation": "^1.0.3" } }, "sha512-fPU6BHNpsyIhr8yyMpTLLxAbkaK8ArIBcmZIRiBLiDhjeqvXolaEmDGmELFuX9I4xDcaKKcJl+TKZLqruBbmWA=="],
-
"http-errors": ["http-errors@2.0.0", "", { "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", "setprototypeof": "1.2.0", "statuses": "2.0.1", "toidentifier": "1.0.1" } }, "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ=="],
"http-parser-js": ["http-parser-js@0.5.10", "", {}, "sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA=="],
@@ -1286,48 +1024,20 @@
"import-fresh": ["import-fresh@3.3.1", "", { "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" } }, "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ=="],
- "imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
-
"inherits": ["inherits@2.0.4", "", {}, "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="],
- "internal-slot": ["internal-slot@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw=="],
-
- "iobuffer": ["iobuffer@5.4.0", "", {}, "sha512-DRebOWuqDvxunfkNJAlc3IzWIPD5xVxwUNbHr7xKB8E6aLJxIPfNX3CoMJghcFjpv6RWQsrcJbghtEwSPoJqMA=="],
-
"ip-address": ["ip-address@10.0.1", "", {}, "sha512-NWv9YLW4PoW2B7xtzaS3NCot75m6nK7Icdv0o3lfMceJVRfSoQwqD4wEH5rLwoKJwUiZ/rfpiVBhnaF0FK4HoA=="],
"ipaddr.js": ["ipaddr.js@1.9.1", "", {}, "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="],
- "is-array-buffer": ["is-array-buffer@3.0.5", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A=="],
-
"is-arrayish": ["is-arrayish@0.2.1", "", {}, "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg=="],
- "is-async-function": ["is-async-function@2.1.1", "", { "dependencies": { "async-function": "^1.0.0", "call-bound": "^1.0.3", "get-proto": "^1.0.1", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ=="],
-
- "is-bigint": ["is-bigint@1.1.0", "", { "dependencies": { "has-bigints": "^1.0.2" } }, "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ=="],
-
- "is-boolean-object": ["is-boolean-object@1.2.2", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A=="],
-
- "is-bun-module": ["is-bun-module@2.0.0", "", { "dependencies": { "semver": "^7.7.1" } }, "sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ=="],
-
- "is-callable": ["is-callable@1.2.7", "", {}, "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA=="],
-
- "is-core-module": ["is-core-module@2.16.1", "", { "dependencies": { "hasown": "^2.0.2" } }, "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w=="],
-
- "is-data-view": ["is-data-view@1.0.2", "", { "dependencies": { "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" } }, "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw=="],
-
- "is-date-object": ["is-date-object@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "has-tostringtag": "^1.0.2" } }, "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg=="],
-
"is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="],
"is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
- "is-finalizationregistry": ["is-finalizationregistry@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg=="],
-
"is-fullwidth-code-point": ["is-fullwidth-code-point@3.0.0", "", {}, "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="],
- "is-generator-function": ["is-generator-function@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "get-proto": "^1.0.0", "has-tostringtag": "^1.0.2", "safe-regex-test": "^1.1.0" } }, "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ=="],
-
"is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
"is-in-ssh": ["is-in-ssh@1.0.0", "", {}, "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw=="],
@@ -1336,53 +1046,27 @@
"is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="],
- "is-map": ["is-map@2.0.3", "", {}, "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw=="],
-
- "is-negative-zero": ["is-negative-zero@2.0.3", "", {}, "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw=="],
-
"is-node-process": ["is-node-process@1.2.0", "", {}, "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw=="],
"is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
- "is-number-object": ["is-number-object@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw=="],
-
"is-obj": ["is-obj@3.0.0", "", {}, "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ=="],
"is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="],
"is-promise": ["is-promise@4.0.0", "", {}, "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ=="],
- "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="],
-
"is-regexp": ["is-regexp@3.1.0", "", {}, "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA=="],
- "is-set": ["is-set@2.0.3", "", {}, "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg=="],
-
- "is-shared-array-buffer": ["is-shared-array-buffer@1.0.4", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A=="],
-
"is-stream": ["is-stream@2.0.1", "", {}, "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg=="],
- "is-string": ["is-string@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3", "has-tostringtag": "^1.0.2" } }, "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA=="],
-
- "is-symbol": ["is-symbol@1.1.1", "", { "dependencies": { "call-bound": "^1.0.2", "has-symbols": "^1.1.0", "safe-regex-test": "^1.1.0" } }, "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w=="],
-
- "is-typed-array": ["is-typed-array@1.1.15", "", { "dependencies": { "which-typed-array": "^1.1.16" } }, "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ=="],
-
"is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
- "is-weakmap": ["is-weakmap@2.0.2", "", {}, "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w=="],
-
- "is-weakref": ["is-weakref@1.1.1", "", { "dependencies": { "call-bound": "^1.0.3" } }, "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew=="],
-
- "is-weakset": ["is-weakset@2.0.4", "", { "dependencies": { "call-bound": "^1.0.3", "get-intrinsic": "^1.2.6" } }, "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ=="],
-
"is-wsl": ["is-wsl@3.1.0", "", { "dependencies": { "is-inside-container": "^1.0.0" } }, "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw=="],
"isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="],
- "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
-
- "iterator.prototype": ["iterator.prototype@1.1.5", "", { "dependencies": { "define-data-property": "^1.1.4", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "get-proto": "^1.0.0", "has-symbols": "^1.1.0", "set-function-name": "^2.0.2" } }, "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g=="],
+ "isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
"jackspeak": ["jackspeak@4.2.3", "", { "dependencies": { "@isaacs/cliui": "^9.0.0" } }, "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg=="],
@@ -1390,8 +1074,6 @@
"jose": ["jose@6.1.3", "", {}, "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ=="],
- "jpeg-exif": ["jpeg-exif@1.1.4", "", {}, "sha512-a+bKEcCjtuW5WTdgeXFzswSrdqi0jk4XlEtZlx5A94wCoBpFjfFTbo/Tra5SpNCl/YFZPvcV1dJc+TAYeg6ROQ=="],
-
"js-tokens": ["js-tokens@4.0.0", "", {}, "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="],
"js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "^2.0.1" }, "bin": "bin/js-yaml.js" }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="],
@@ -1400,78 +1082,54 @@
"json-bigint": ["json-bigint@1.0.0", "", { "dependencies": { "bignumber.js": "^9.0.0" } }, "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ=="],
- "json-buffer": ["json-buffer@3.0.1", "", {}, "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ=="],
-
"json-parse-even-better-errors": ["json-parse-even-better-errors@2.3.1", "", {}, "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w=="],
- "json-schema-traverse": ["json-schema-traverse@0.4.1", "", {}, "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="],
+ "json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
"json-schema-typed": ["json-schema-typed@8.0.2", "", {}, "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA=="],
- "json-stable-stringify-without-jsonify": ["json-stable-stringify-without-jsonify@1.0.1", "", {}, "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw=="],
-
"json5": ["json5@2.2.3", "", { "bin": { "json5": "lib/cli.js" } }, "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="],
"jsonfile": ["jsonfile@6.2.0", "", { "dependencies": { "universalify": "^2.0.0" }, "optionalDependencies": { "graceful-fs": "^4.1.6" } }, "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg=="],
- "jspdf": ["jspdf@4.1.0", "", { "dependencies": { "@babel/runtime": "^7.28.4", "fast-png": "^6.2.0", "fflate": "^0.8.1" }, "optionalDependencies": { "canvg": "^3.0.11", "core-js": "^3.6.0", "dompurify": "^3.3.1", "html2canvas": "^1.0.0-rc.5" } }, "sha512-xd1d/XRkwqnsq6FP3zH1Q+Ejqn2ULIJeDZ+FTKpaabVpZREjsJKRJwuokTNgdqOU+fl55KgbvgZ1pRTSWCP2kQ=="],
-
- "jspdf-autotable": ["jspdf-autotable@5.0.7", "", { "peerDependencies": { "jspdf": "^2 || ^3 || ^4" } }, "sha512-2wr7H6liNDBYNwt25hMQwXkEWFOEopgKIvR1Eukuw6Zmprm/ZcnmLTQEjW7Xx3FCbD3v7pflLcnMAv/h1jFDQw=="],
-
- "jsx-ast-utils": ["jsx-ast-utils@3.3.5", "", { "dependencies": { "array-includes": "^3.1.6", "array.prototype.flat": "^1.3.1", "object.assign": "^4.1.4", "object.values": "^1.1.6" } }, "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ=="],
-
"jszip": ["jszip@3.10.1", "", { "dependencies": { "lie": "~3.3.0", "pako": "~1.0.2", "readable-stream": "~2.3.6", "setimmediate": "^1.0.5" } }, "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g=="],
"jwa": ["jwa@2.0.1", "", { "dependencies": { "buffer-equal-constant-time": "^1.0.1", "ecdsa-sig-formatter": "1.0.11", "safe-buffer": "^5.0.1" } }, "sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg=="],
"jws": ["jws@4.0.1", "", { "dependencies": { "jwa": "^2.0.1", "safe-buffer": "^5.0.1" } }, "sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA=="],
- "keyv": ["keyv@4.5.4", "", { "dependencies": { "json-buffer": "3.0.1" } }, "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw=="],
-
"kleur": ["kleur@4.1.5", "", {}, "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ=="],
- "language-subtag-registry": ["language-subtag-registry@0.3.23", "", {}, "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ=="],
-
- "language-tags": ["language-tags@1.0.9", "", { "dependencies": { "language-subtag-registry": "^0.3.20" } }, "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA=="],
-
- "levn": ["levn@0.4.1", "", { "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" } }, "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ=="],
-
"lie": ["lie@3.3.0", "", { "dependencies": { "immediate": "~3.0.5" } }, "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ=="],
- "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="],
+ "lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
- "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="],
+ "lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
- "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.30.2", "", { "os": "darwin", "cpu": "arm64" }, "sha512-ylTcDJBN3Hp21TdhRT5zBOIi73P6/W0qwvlFEk22fkdXchtNTOU4Qc37SkzV+EKYxLouZ6M4LG9NfZ1qkhhBWA=="],
+ "lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
- "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.30.2", "", { "os": "darwin", "cpu": "x64" }, "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ=="],
+ "lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
- "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.30.2", "", { "os": "freebsd", "cpu": "x64" }, "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA=="],
+ "lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
- "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.30.2", "", { "os": "linux", "cpu": "arm" }, "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA=="],
+ "lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
- "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A=="],
+ "lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
- "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.30.2", "", { "os": "linux", "cpu": "arm64" }, "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA=="],
+ "lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
- "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w=="],
+ "lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
- "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.30.2", "", { "os": "linux", "cpu": "x64" }, "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA=="],
+ "lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
- "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.30.2", "", { "os": "win32", "cpu": "arm64" }, "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ=="],
+ "lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
- "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.30.2", "", { "os": "win32", "cpu": "x64" }, "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw=="],
-
- "linebreak": ["linebreak@1.1.0", "", { "dependencies": { "base64-js": "0.0.8", "unicode-trie": "^2.0.0" } }, "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ=="],
+ "lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
"lines-and-columns": ["lines-and-columns@1.2.4", "", {}, "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg=="],
- "locate-path": ["locate-path@6.0.0", "", { "dependencies": { "p-locate": "^5.0.0" } }, "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw=="],
-
"lodash.camelcase": ["lodash.camelcase@4.3.0", "", {}, "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA=="],
- "lodash.merge": ["lodash.merge@4.6.2", "", {}, "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="],
-
"log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="],
"long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="],
@@ -1480,7 +1138,7 @@
"lru-cache": ["lru-cache@5.1.1", "", { "dependencies": { "yallist": "^3.0.2" } }, "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w=="],
- "lucide-react": ["lucide-react@0.562.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-82hOAu7y0dbVuFfmO4bYF1XEwYk/mEbM5E+b1jgci/udUBEE/R7LF5Ip0CCEmXe8AybRM8L+04eP+LGZeDvkiw=="],
+ "lucide-react": ["lucide-react@1.11.0", "", { "peerDependencies": { "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "sha512-UOhjdztXCgdBReRcIhsvz2siIBogfv/lhJEIViCpLt924dO+GDms9T7DNoucI23s6kEPpe988m5N0D2ajnzb2g=="],
"magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="],
@@ -1488,7 +1146,7 @@
"make-event-props": ["make-event-props@2.0.0", "", {}, "sha512-G/hncXrl4Qt7mauJEXSg3AcdYzmpkIITTNl5I+rH9sog5Yw0kK6vseJjCaPfOXqOqQuPUP89Rkhfz5kPS8ijtw=="],
- "marked": ["marked@17.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-s5HZGFQea7Huv5zZcAGhJLT3qLpAfnY7v7GWkICUr0+Wd5TFEtdlRR2XUL5Gg+RH7u2Df595ifrxR03mBaw7gA=="],
+ "marked": ["marked@18.0.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-NsmlUYBS/Zg57rgDWMYdnre6OTj4e+qq/JS2ot3KrYLSoHLw+sDu0Nm1ZGpRgYAq6c+b1ekaY5NzVchMCQnzcg=="],
"math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
@@ -1516,15 +1174,15 @@
"minimalistic-assert": ["minimalistic-assert@1.0.1", "", {}, "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A=="],
- "minimatch": ["minimatch@3.1.2", "", { "dependencies": { "brace-expansion": "^1.1.7" } }, "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw=="],
+ "minimatch": ["minimatch@10.2.0", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w=="],
"minimist": ["minimist@1.2.8", "", {}, "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA=="],
- "motion": ["motion@12.34.0", "", { "dependencies": { "framer-motion": "^12.34.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-01Sfa/zgsD/di8zA/uFW5Eb7/SPXoGyUfy+uMRMW5Spa8j0z/UbfQewAYvPMYFCXRlyD6e5aLHh76TxeeJD+RA=="],
+ "motion": ["motion@12.38.0", "", { "dependencies": { "framer-motion": "^12.38.0", "tslib": "^2.4.0" }, "peerDependencies": { "@emotion/is-prop-valid": "*", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" }, "optionalPeers": ["@emotion/is-prop-valid", "react", "react-dom"] }, "sha512-uYfXzeHlgThchzwz5Te47dlv5JOUC7OB4rjJ/7XTUgtBZD8CchMN8qEJ4ZVsUmTyYA44zjV0fBwsiktRuFnn+w=="],
- "motion-dom": ["motion-dom@12.34.0", "", { "dependencies": { "motion-utils": "^12.29.2" } }, "sha512-Lql3NuEcScRDxTAO6GgUsRHBZOWI/3fnMlkMcH5NftzcN37zJta+bpbMAV9px4Nj057TuvRooMK7QrzMCgtz6Q=="],
+ "motion-dom": ["motion-dom@12.38.0", "", { "dependencies": { "motion-utils": "^12.36.0" } }, "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA=="],
- "motion-utils": ["motion-utils@12.29.2", "", {}, "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A=="],
+ "motion-utils": ["motion-utils@12.36.0", "", {}, "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg=="],
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
@@ -1534,13 +1192,9 @@
"nanoid": ["nanoid@3.3.11", "", { "bin": "bin/nanoid.cjs" }, "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="],
- "napi-postinstall": ["napi-postinstall@0.3.2", "", { "bin": "lib/cli.js" }, "sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw=="],
-
- "natural-compare": ["natural-compare@1.4.0", "", {}, "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw=="],
-
"negotiator": ["negotiator@1.0.0", "", {}, "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg=="],
- "next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.8.3", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "sharp": "^0.34.4" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="],
+ "next": ["next@16.2.4", "", { "dependencies": { "@next/env": "16.2.4", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "^2.9.19", "caniuse-lite": "^1.0.30001579", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.2.4", "@next/swc-darwin-x64": "16.2.4", "@next/swc-linux-arm64-gnu": "16.2.4", "@next/swc-linux-arm64-musl": "16.2.4", "@next/swc-linux-x64-gnu": "16.2.4", "@next/swc-linux-x64-musl": "16.2.4", "@next/swc-win32-arm64-msvc": "16.2.4", "@next/swc-win32-x64-msvc": "16.2.4", "sharp": "^0.34.5" }, "peerDependencies": { "@opentelemetry/api": "^1.1.0", "@playwright/test": "^1.51.1", "babel-plugin-react-compiler": "*", "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", "sass": "^1.3.0" }, "optionalPeers": ["@opentelemetry/api", "@playwright/test", "babel-plugin-react-compiler", "sass"], "bin": { "next": "dist/bin/next" } }, "sha512-kPvz56wF5frc+FxlHI5qnklCzbq53HTwORaWBGdT0vNoKh1Aya9XC8aPauH4NJxqtzbWsS5mAbctm4cr+EkQ2Q=="],
"next-themes": ["next-themes@0.4.6", "", { "peerDependencies": { "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc", "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc" } }, "sha512-pZvgD5L0IEvX5/9GWyHMf3m8BKiVQwsCMHfoFosXtXBMnaS0ZnIJ9ST4b4NqLVKDEm8QBxoNNGNaBv2JNF6XNA=="],
@@ -1548,7 +1202,7 @@
"node-fetch": ["node-fetch@3.3.2", "", { "dependencies": { "data-uri-to-buffer": "^4.0.0", "fetch-blob": "^3.1.4", "formdata-polyfill": "^4.0.10" } }, "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA=="],
- "node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
+ "node-releases": ["node-releases@2.0.38", "", {}, "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw=="],
"npm-run-path": ["npm-run-path@6.0.0", "", { "dependencies": { "path-key": "^4.0.0", "unicorn-magic": "^0.3.0" } }, "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA=="],
@@ -1556,20 +1210,8 @@
"object-inspect": ["object-inspect@1.13.4", "", {}, "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew=="],
- "object-keys": ["object-keys@1.1.1", "", {}, "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA=="],
-
"object-treeify": ["object-treeify@1.1.33", "", {}, "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A=="],
- "object.assign": ["object.assign@4.1.7", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0", "has-symbols": "^1.1.0", "object-keys": "^1.1.1" } }, "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw=="],
-
- "object.entries": ["object.entries@1.1.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.4", "define-properties": "^1.2.1", "es-object-atoms": "^1.1.1" } }, "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw=="],
-
- "object.fromentries": ["object.fromentries@2.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2", "es-object-atoms": "^1.0.0" } }, "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ=="],
-
- "object.groupby": ["object.groupby@1.0.3", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.2" } }, "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ=="],
-
- "object.values": ["object.values@1.2.1", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA=="],
-
"on-finished": ["on-finished@2.4.1", "", { "dependencies": { "ee-first": "1.1.1" } }, "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg=="],
"once": ["once@1.4.0", "", { "dependencies": { "wrappy": "1" } }, "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w=="],
@@ -1578,20 +1220,12 @@
"open": ["open@11.0.0", "", { "dependencies": { "default-browser": "^5.4.0", "define-lazy-prop": "^3.0.0", "is-in-ssh": "^1.0.0", "is-inside-container": "^1.0.0", "powershell-utils": "^0.1.0", "wsl-utils": "^0.3.0" } }, "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw=="],
- "optionator": ["optionator@0.9.4", "", { "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", "type-check": "^0.4.0", "word-wrap": "^1.2.5" } }, "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g=="],
-
"ora": ["ora@8.2.0", "", { "dependencies": { "chalk": "^5.3.0", "cli-cursor": "^5.0.0", "cli-spinners": "^2.9.2", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.0.0", "log-symbols": "^6.0.0", "stdin-discarder": "^0.2.2", "string-width": "^7.2.0", "strip-ansi": "^7.1.0" } }, "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw=="],
"outvariant": ["outvariant@1.4.3", "", {}, "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA=="],
- "own-keys": ["own-keys@1.0.1", "", { "dependencies": { "get-intrinsic": "^1.2.6", "object-keys": "^1.1.1", "safe-push-apply": "^1.0.0" } }, "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg=="],
-
"p-limit": ["p-limit@3.1.0", "", { "dependencies": { "yocto-queue": "^0.1.0" } }, "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ=="],
- "p-locate": ["p-locate@5.0.0", "", { "dependencies": { "p-limit": "^3.0.2" } }, "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw=="],
-
- "package-manager-detector": ["package-manager-detector@1.6.0", "", {}, "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA=="],
-
"pako": ["pako@1.0.11", "", {}, "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw=="],
"parent-module": ["parent-module@1.0.1", "", { "dependencies": { "callsites": "^3.0.0" } }, "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g=="],
@@ -1604,33 +1238,19 @@
"path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="],
- "path-exists": ["path-exists@4.0.0", "", {}, "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w=="],
-
"path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="],
- "path-parse": ["path-parse@1.0.7", "", {}, "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw=="],
-
"path-to-regexp": ["path-to-regexp@8.2.0", "", {}, "sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ=="],
"pdfjs-dist": ["pdfjs-dist@5.4.296", "", { "optionalDependencies": { "@napi-rs/canvas": "^0.1.80" } }, "sha512-DlOzet0HO7OEnmUmB6wWGJrrdvbyJKftI1bhMitK7O2N8W2gc757yyYBbINy9IDafXAV9wmKr9t7xsTaNKRG5Q=="],
- "pdfkit": ["pdfkit@0.17.2", "", { "dependencies": { "crypto-js": "^4.2.0", "fontkit": "^2.0.4", "jpeg-exif": "^1.1.4", "linebreak": "^1.1.0", "png-js": "^1.0.0" } }, "sha512-UnwF5fXy08f0dnp4jchFYAROKMNTaPqb/xgR8GtCzIcqoTnbOqtp3bwKvO4688oHI6vzEEs8Q6vqqEnC5IUELw=="],
-
- "pdfmake": ["pdfmake@0.3.4", "", { "dependencies": { "linebreak": "^1.1.0", "pdfkit": "^0.17.2", "xmldoc": "^2.0.3" } }, "sha512-zbGBox6pgNeGdG7tlLVBbQJlYIlTHtXo5q8+dNhCb2O0Q2+Nc5bcpsgNzbzqfzlcJ0gX9f+ZBv1z4FuJjUHwVA=="],
-
- "performance-now": ["performance-now@2.1.0", "", {}, "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="],
-
"picocolors": ["picocolors@1.1.1", "", {}, "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="],
"picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="],
"pkce-challenge": ["pkce-challenge@5.0.1", "", {}, "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ=="],
- "png-js": ["png-js@1.0.0", "", {}, "sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g=="],
-
- "possible-typed-array-names": ["possible-typed-array-names@1.1.0", "", {}, "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg=="],
-
- "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="],
+ "postcss": ["postcss@8.5.12", "", { "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-W62t/Se6rA0Az3DfCL0AqJwXuKwBeYg6nOaIgzP+xZ7N5BFCI7DYi1qs6ygUYT6rvfi6t9k65UMLJC+PHZpDAA=="],
"postcss-selector-parser": ["postcss-selector-parser@6.0.10", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w=="],
@@ -1638,11 +1258,9 @@
"powershell-utils": ["powershell-utils@0.1.0", "", {}, "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A=="],
- "prelude-ls": ["prelude-ls@1.2.1", "", {}, "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="],
-
- "prettier": ["prettier@3.8.1", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg=="],
+ "prettier": ["prettier@3.8.3", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-7igPTM53cGHMW8xWuVTydi2KO233VFiTNyF5hLJqpilHfmn8C8gPf+PS7dUT64YcXFbiMGZxS9pCSxL/Dxm/Jw=="],
- "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.7.2", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-LkphyK3Fw+q2HdMOoiEHWf93fNtYJwfamoKPl7UwtjFQdei/iIBoX11G6j706FzN3ymX9mPVi97qIY8328vdnA=="],
+ "prettier-plugin-tailwindcss": ["prettier-plugin-tailwindcss@0.8.0", "", { "peerDependencies": { "@ianvs/prettier-plugin-sort-imports": "*", "@prettier/plugin-hermes": "*", "@prettier/plugin-oxc": "*", "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", "@zackad/prettier-plugin-twig": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", "prettier-plugin-jsdoc": "*", "prettier-plugin-marko": "*", "prettier-plugin-multiline-arrays": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", "prettier-plugin-sort-imports": "*", "prettier-plugin-svelte": "*" }, "optionalPeers": ["@ianvs/prettier-plugin-sort-imports", "@prettier/plugin-hermes", "@prettier/plugin-oxc", "@prettier/plugin-pug", "@shopify/prettier-plugin-liquid", "@trivago/prettier-plugin-sort-imports", "@zackad/prettier-plugin-twig", "prettier-plugin-astro", "prettier-plugin-css-order", "prettier-plugin-jsdoc", "prettier-plugin-marko", "prettier-plugin-multiline-arrays", "prettier-plugin-organize-attributes", "prettier-plugin-organize-imports", "prettier-plugin-sort-imports", "prettier-plugin-svelte"] }, "sha512-V8ITGH87yuBDF6JpEZTOVlUz/saAwqb8f3HRgUj8Lh+tGCcrmorhsLpYqzygwFwK0PE2Ib6Mv3M7T/uE2tZV1g=="],
"pretty-ms": ["pretty-ms@9.3.0", "", { "dependencies": { "parse-ms": "^4.0.0" } }, "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ=="],
@@ -1656,33 +1274,27 @@
"proxy-addr": ["proxy-addr@2.0.7", "", { "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" } }, "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg=="],
- "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="],
-
"qs": ["qs@6.14.2", "", { "dependencies": { "side-channel": "^1.1.0" } }, "sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q=="],
"queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="],
"radix-ui": ["radix-ui@1.4.3", "", { "dependencies": { "@radix-ui/primitive": "1.1.3", "@radix-ui/react-accessible-icon": "1.1.7", "@radix-ui/react-accordion": "1.2.12", "@radix-ui/react-alert-dialog": "1.1.15", "@radix-ui/react-arrow": "1.1.7", "@radix-ui/react-aspect-ratio": "1.1.7", "@radix-ui/react-avatar": "1.1.10", "@radix-ui/react-checkbox": "1.3.3", "@radix-ui/react-collapsible": "1.1.12", "@radix-ui/react-collection": "1.1.7", "@radix-ui/react-compose-refs": "1.1.2", "@radix-ui/react-context": "1.1.2", "@radix-ui/react-context-menu": "2.2.16", "@radix-ui/react-dialog": "1.1.15", "@radix-ui/react-direction": "1.1.1", "@radix-ui/react-dismissable-layer": "1.1.11", "@radix-ui/react-dropdown-menu": "2.1.16", "@radix-ui/react-focus-guards": "1.1.3", "@radix-ui/react-focus-scope": "1.1.7", "@radix-ui/react-form": "0.1.8", "@radix-ui/react-hover-card": "1.1.15", "@radix-ui/react-label": "2.1.7", "@radix-ui/react-menu": "2.1.16", "@radix-ui/react-menubar": "1.1.16", "@radix-ui/react-navigation-menu": "1.2.14", "@radix-ui/react-one-time-password-field": "0.1.8", "@radix-ui/react-password-toggle-field": "0.1.3", "@radix-ui/react-popover": "1.1.15", "@radix-ui/react-popper": "1.2.8", "@radix-ui/react-portal": "1.1.9", "@radix-ui/react-presence": "1.1.5", "@radix-ui/react-primitive": "2.1.3", "@radix-ui/react-progress": "1.1.7", "@radix-ui/react-radio-group": "1.3.8", "@radix-ui/react-roving-focus": "1.1.11", "@radix-ui/react-scroll-area": "1.2.10", "@radix-ui/react-select": "2.2.6", "@radix-ui/react-separator": "1.1.7", "@radix-ui/react-slider": "1.3.6", "@radix-ui/react-slot": "1.2.3", "@radix-ui/react-switch": "1.2.6", "@radix-ui/react-tabs": "1.1.13", "@radix-ui/react-toast": "1.2.15", "@radix-ui/react-toggle": "1.1.10", "@radix-ui/react-toggle-group": "1.1.11", "@radix-ui/react-toolbar": "1.1.11", "@radix-ui/react-tooltip": "1.2.8", "@radix-ui/react-use-callback-ref": "1.1.1", "@radix-ui/react-use-controllable-state": "1.2.2", "@radix-ui/react-use-effect-event": "0.0.2", "@radix-ui/react-use-escape-keydown": "1.1.1", "@radix-ui/react-use-is-hydrated": "0.1.0", "@radix-ui/react-use-layout-effect": "1.1.1", "@radix-ui/react-use-size": "1.1.1", "@radix-ui/react-visually-hidden": "1.2.3" }, "peerDependencies": { "@types/react": "*", "@types/react-dom": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" }, "optionalPeers": ["@types/react", "@types/react-dom"] }, "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA=="],
- "raf": ["raf@3.4.1", "", { "dependencies": { "performance-now": "^2.1.0" } }, "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA=="],
-
"range-parser": ["range-parser@1.2.1", "", {}, "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="],
"raw-body": ["raw-body@3.0.2", "", { "dependencies": { "bytes": "~3.1.2", "http-errors": "~2.0.1", "iconv-lite": "~0.7.0", "unpipe": "~1.0.0" } }, "sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA=="],
- "react": ["react@19.2.4", "", {}, "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ=="],
+ "react": ["react@19.2.5", "", {}, "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA=="],
"react-confetti": ["react-confetti@6.4.0", "", { "dependencies": { "tween-functions": "^1.2.0" }, "peerDependencies": { "react": "^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0" } }, "sha512-5MdGUcqxrTU26I2EU7ltkWPwxvucQTuqMm8dUz72z2YMqTD6s9vMcDUysk7n9jnC+lXuCPeJJ7Knf98VEYE9Rg=="],
- "react-dom": ["react-dom@19.2.4", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.4" } }, "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ=="],
-
- "react-dropzone": ["react-dropzone@14.4.1", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-QDuV76v3uKbHiH34SpwifZ+gOLi1+RdsCO1kl5vxMT4wW8R82+sthjvBw4th3NHF/XX6FBsqDYZVNN+pnhaw0g=="],
+ "react-dom": ["react-dom@19.2.5", "", { "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { "react": "^19.2.5" } }, "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag=="],
- "react-ga4": ["react-ga4@2.1.0", "", {}, "sha512-ZKS7PGNFqqMd3PJ6+C2Jtz/o1iU9ggiy8Y8nUeksgVuvNISbmrQtJiZNvC/TjDsqD0QlU5Wkgs7i+w9+OjHhhQ=="],
+ "react-dropzone": ["react-dropzone@15.0.0", "", { "dependencies": { "attr-accept": "^2.2.4", "file-selector": "^2.1.0", "prop-types": "^15.8.1" }, "peerDependencies": { "react": ">= 16.8 || 18.0.0" } }, "sha512-lGjYV/EoqEjEWPnmiSvH4v5IoIAwQM2W4Z1C0Q/Pw2xD0eVzKPS359BQTUMum+1fa0kH2nrKjuavmTPOGhpLPg=="],
"react-is": ["react-is@16.13.1", "", {}, "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ=="],
- "react-pdf": ["react-pdf@10.3.0", "", { "dependencies": { "clsx": "^2.0.0", "dequal": "^2.0.3", "make-cancellable-promise": "^2.0.0", "make-event-props": "^2.0.0", "merge-refs": "^2.0.0", "pdfjs-dist": "5.4.296", "tiny-invariant": "^1.0.0", "warning": "^4.0.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-2LQzC9IgNVAX8gM+6F+1t/70a9/5RWThYxc+CWAmT2LW/BRmnj+35x1os5j/nR2oldyf8L+hCAMBmVKU8wrYFA=="],
+ "react-pdf": ["react-pdf@10.4.1", "", { "dependencies": { "clsx": "^2.0.0", "dequal": "^2.0.3", "make-cancellable-promise": "^2.0.0", "make-event-props": "^2.0.0", "merge-refs": "^2.0.0", "pdfjs-dist": "5.4.296", "tiny-invariant": "^1.0.0", "warning": "^4.0.0" }, "peerDependencies": { "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, "optionalPeers": ["@types/react"] }, "sha512-kS/35staVCBqS29verTQJQZXw7RfsRCPO3fdJoW1KXylcv7A9dw6DZ3vJXC2w+bIBgLw5FN4pOFvKSQtkQhPfA=="],
"react-remove-scroll": ["react-remove-scroll@2.7.1", "", { "dependencies": { "react-remove-scroll-bar": "^2.3.7", "react-style-singleton": "^2.2.3", "tslib": "^2.1.0", "use-callback-ref": "^1.3.3", "use-sidecar": "^1.1.3" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-HpMh8+oahmIdOuS5aFKKY6Pyog+FNaZV/XyJOq7b4YFwsFHe5yYfdbIalI4k3vU2nSDql7YskmUseHsRrJqIPA=="],
@@ -1694,28 +1306,18 @@
"recast": ["recast@0.23.11", "", { "dependencies": { "ast-types": "^0.16.1", "esprima": "~4.0.0", "source-map": "~0.6.1", "tiny-invariant": "^1.3.3", "tslib": "^2.0.1" } }, "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA=="],
- "reflect.getprototypeof": ["reflect.getprototypeof@1.0.10", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-abstract": "^1.23.9", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.7", "get-proto": "^1.0.1", "which-builtin-type": "^1.2.1" } }, "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw=="],
-
- "regenerator-runtime": ["regenerator-runtime@0.13.11", "", {}, "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg=="],
-
- "regexp.prototype.flags": ["regexp.prototype.flags@1.5.4", "", { "dependencies": { "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", "get-proto": "^1.0.1", "gopd": "^1.2.0", "set-function-name": "^2.0.2" } }, "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA=="],
-
"require-directory": ["require-directory@2.1.1", "", {}, "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q=="],
"require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="],
"reselect": ["reselect@5.1.1", "", {}, "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w=="],
- "resolve": ["resolve@1.22.10", "", { "dependencies": { "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w=="],
-
"resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="],
"resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="],
"restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
- "restructure": ["restructure@3.0.2", "", {}, "sha512-gSfoiOEA0VPE6Tukkrr7I0RBdE0s7H1eFCDBk05l1KIQT1UIKNc5JZy6jdyW6eYH3aR3g5b3PuL77rq0hvwtAw=="],
-
"retry": ["retry@0.13.1", "", {}, "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg=="],
"retry-request": ["retry-request@7.0.2", "", { "dependencies": { "@types/request": "^2.48.8", "extend": "^3.0.2", "teeny-request": "^9.0.0" } }, "sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w=="],
@@ -1724,49 +1326,35 @@
"reusify": ["reusify@1.1.0", "", {}, "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw=="],
- "rgbcolor": ["rgbcolor@1.0.1", "", {}, "sha512-9aZLIrhRaD97sgVhtJOW6ckOEh6/GnvQtdVNfdZ6s67+3/XwLS9lBcQYzEEhYVeUowN7pRzMLsyGhK2i/xvWbw=="],
-
"router": ["router@2.2.0", "", { "dependencies": { "debug": "^4.4.0", "depd": "^2.0.0", "is-promise": "^4.0.0", "parseurl": "^1.3.3", "path-to-regexp": "^8.0.0" } }, "sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ=="],
"run-applescript": ["run-applescript@7.1.0", "", {}, "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q=="],
"run-parallel": ["run-parallel@1.2.0", "", { "dependencies": { "queue-microtask": "^1.2.2" } }, "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA=="],
- "safe-array-concat": ["safe-array-concat@1.1.3", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "get-intrinsic": "^1.2.6", "has-symbols": "^1.1.0", "isarray": "^2.0.5" } }, "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q=="],
-
"safe-buffer": ["safe-buffer@5.2.1", "", {}, "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="],
- "safe-push-apply": ["safe-push-apply@1.0.0", "", { "dependencies": { "es-errors": "^1.3.0", "isarray": "^2.0.5" } }, "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA=="],
-
- "safe-regex-test": ["safe-regex-test@1.1.0", "", { "dependencies": { "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-regex": "^1.2.1" } }, "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw=="],
-
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
"sax": ["sax@1.4.1", "", {}, "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg=="],
"scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="],
- "semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
+ "semver": ["semver@7.7.3", "", { "bin": "bin/semver.js" }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
"send": ["send@1.2.0", "", { "dependencies": { "debug": "^4.3.5", "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "etag": "^1.8.1", "fresh": "^2.0.0", "http-errors": "^2.0.0", "mime-types": "^3.0.1", "ms": "^2.1.3", "on-finished": "^2.4.1", "range-parser": "^1.2.1", "statuses": "^2.0.1" } }, "sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw=="],
"serve-static": ["serve-static@2.2.0", "", { "dependencies": { "encodeurl": "^2.0.0", "escape-html": "^1.0.3", "parseurl": "^1.3.3", "send": "^1.2.0" } }, "sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ=="],
- "set-function-length": ["set-function-length@1.2.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2" } }, "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg=="],
-
- "set-function-name": ["set-function-name@2.0.2", "", { "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", "has-property-descriptors": "^1.0.2" } }, "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ=="],
-
- "set-proto": ["set-proto@1.0.0", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0" } }, "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw=="],
-
"setimmediate": ["setimmediate@1.0.5", "", {}, "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA=="],
"setprototypeof": ["setprototypeof@1.2.0", "", {}, "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="],
- "shadcn": ["shadcn@3.8.4", "", { "dependencies": { "@antfu/ni": "^25.0.0", "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-pSad/m1+PGzB0aLsRBV0EkyGg9al1nJqYUuucg6d8v8xZspPZ5/ehGNEp5M4b1KQYqdO5/gGPbkhVbgmXqG9Pw=="],
+ "shadcn": ["shadcn@4.5.0", "", { "dependencies": { "@babel/core": "^7.28.0", "@babel/parser": "^7.28.0", "@babel/plugin-transform-typescript": "^7.28.0", "@babel/preset-typescript": "^7.27.1", "@dotenvx/dotenvx": "^1.48.4", "@modelcontextprotocol/sdk": "^1.26.0", "@types/validate-npm-package-name": "^4.0.2", "browserslist": "^4.26.2", "commander": "^14.0.0", "cosmiconfig": "^9.0.0", "dedent": "^1.6.0", "deepmerge": "^4.3.1", "diff": "^8.0.2", "execa": "^9.6.0", "fast-glob": "^3.3.3", "fs-extra": "^11.3.1", "fuzzysort": "^3.1.0", "https-proxy-agent": "^7.0.6", "kleur": "^4.1.5", "msw": "^2.10.4", "node-fetch": "^3.3.2", "open": "^11.0.0", "ora": "^8.2.0", "postcss": "^8.5.6", "postcss-selector-parser": "^7.1.0", "prompts": "^2.4.2", "recast": "^0.23.11", "stringify-object": "^5.0.0", "tailwind-merge": "^3.0.1", "ts-morph": "^26.0.0", "tsconfig-paths": "^4.2.0", "validate-npm-package-name": "^7.0.1", "zod": "^3.24.1", "zod-to-json-schema": "^3.24.6" }, "bin": { "shadcn": "dist/index.js" } }, "sha512-ZpNOz7IMI5aezbMEWNxBvl2aJ1ek6NuAMqpL/FUnk5IuRxERl8ohYEnqqAmhPOcur8RbGuCoqTZLQ3Oi4Xkf8A=="],
"shadcn-ui": ["shadcn-ui@0.9.5", "", { "dependencies": { "chalk": "^5.4.1" }, "bin": "dist/index.js" }, "sha512-dsBQWpdLLYCdSdmvOmu53nJhhWnQD1OiblhuhkI4rPYxPKTyfbmZ2NTJHWMu1fXN9PTfN6IVK5vvh+BrjHJx2g=="],
- "sharp": ["sharp@0.34.4", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.0", "semver": "^7.7.2" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.4", "@img/sharp-darwin-x64": "0.34.4", "@img/sharp-libvips-darwin-arm64": "1.2.3", "@img/sharp-libvips-darwin-x64": "1.2.3", "@img/sharp-libvips-linux-arm": "1.2.3", "@img/sharp-libvips-linux-arm64": "1.2.3", "@img/sharp-libvips-linux-ppc64": "1.2.3", "@img/sharp-libvips-linux-s390x": "1.2.3", "@img/sharp-libvips-linux-x64": "1.2.3", "@img/sharp-libvips-linuxmusl-arm64": "1.2.3", "@img/sharp-libvips-linuxmusl-x64": "1.2.3", "@img/sharp-linux-arm": "0.34.4", "@img/sharp-linux-arm64": "0.34.4", "@img/sharp-linux-ppc64": "0.34.4", "@img/sharp-linux-s390x": "0.34.4", "@img/sharp-linux-x64": "0.34.4", "@img/sharp-linuxmusl-arm64": "0.34.4", "@img/sharp-linuxmusl-x64": "0.34.4", "@img/sharp-wasm32": "0.34.4", "@img/sharp-win32-arm64": "0.34.4", "@img/sharp-win32-ia32": "0.34.4", "@img/sharp-win32-x64": "0.34.4" } }, "sha512-FUH39xp3SBPnxWvd5iib1X8XY7J0K0X7d93sie9CJg2PO8/7gmg89Nve6OjItK53/MlAushNNxteBYfM6DEuoA=="],
+ "sharp": ["sharp@0.34.5", "", { "dependencies": { "@img/colour": "^1.0.0", "detect-libc": "^2.1.2", "semver": "^7.7.3" }, "optionalDependencies": { "@img/sharp-darwin-arm64": "0.34.5", "@img/sharp-darwin-x64": "0.34.5", "@img/sharp-libvips-darwin-arm64": "1.2.4", "@img/sharp-libvips-darwin-x64": "1.2.4", "@img/sharp-libvips-linux-arm": "1.2.4", "@img/sharp-libvips-linux-arm64": "1.2.4", "@img/sharp-libvips-linux-ppc64": "1.2.4", "@img/sharp-libvips-linux-riscv64": "1.2.4", "@img/sharp-libvips-linux-s390x": "1.2.4", "@img/sharp-libvips-linux-x64": "1.2.4", "@img/sharp-libvips-linuxmusl-arm64": "1.2.4", "@img/sharp-libvips-linuxmusl-x64": "1.2.4", "@img/sharp-linux-arm": "0.34.5", "@img/sharp-linux-arm64": "0.34.5", "@img/sharp-linux-ppc64": "0.34.5", "@img/sharp-linux-riscv64": "0.34.5", "@img/sharp-linux-s390x": "0.34.5", "@img/sharp-linux-x64": "0.34.5", "@img/sharp-linuxmusl-arm64": "0.34.5", "@img/sharp-linuxmusl-x64": "0.34.5", "@img/sharp-wasm32": "0.34.5", "@img/sharp-win32-arm64": "0.34.5", "@img/sharp-win32-ia32": "0.34.5", "@img/sharp-win32-x64": "0.34.5" } }, "sha512-Ou9I5Ft9WNcCbXrU9cMgPBcCK8LiwLqcbywW3t4oDV37n1pzpuNLsYiAV8eODnjbtQlSDwZ2cUEeQz4E54Hltg=="],
"shebang-command": ["shebang-command@2.0.0", "", { "dependencies": { "shebang-regex": "^3.0.0" } }, "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA=="],
@@ -1790,16 +1378,10 @@
"source-map-js": ["source-map-js@1.2.1", "", {}, "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="],
- "stable-hash": ["stable-hash@0.0.5", "", {}, "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA=="],
-
- "stackblur-canvas": ["stackblur-canvas@2.7.0", "", {}, "sha512-yf7OENo23AGJhBriGx0QivY5JP6Y1HbrrDI6WLt6C5auYZXlQrheoY8hD4ibekFKz1HOfE48Ww8kMWMnJD/zcQ=="],
-
"statuses": ["statuses@2.0.2", "", {}, "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw=="],
"stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
- "stop-iteration-iterator": ["stop-iteration-iterator@1.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "internal-slot": "^1.1.0" } }, "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ=="],
-
"stream-events": ["stream-events@1.0.5", "", { "dependencies": { "stubs": "^3.0.0" } }, "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg=="],
"stream-shift": ["stream-shift@1.0.3", "", {}, "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ=="],
@@ -1808,18 +1390,6 @@
"string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
- "string.prototype.includes": ["string.prototype.includes@2.0.1", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-abstract": "^1.23.3" } }, "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg=="],
-
- "string.prototype.matchall": ["string.prototype.matchall@4.0.12", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-abstract": "^1.23.6", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "get-intrinsic": "^1.2.6", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "internal-slot": "^1.1.0", "regexp.prototype.flags": "^1.5.3", "set-function-name": "^2.0.2", "side-channel": "^1.1.0" } }, "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA=="],
-
- "string.prototype.repeat": ["string.prototype.repeat@1.0.0", "", { "dependencies": { "define-properties": "^1.1.3", "es-abstract": "^1.17.5" } }, "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w=="],
-
- "string.prototype.trim": ["string.prototype.trim@1.2.10", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-data-property": "^1.1.4", "define-properties": "^1.2.1", "es-abstract": "^1.23.5", "es-object-atoms": "^1.0.0", "has-property-descriptors": "^1.0.2" } }, "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA=="],
-
- "string.prototype.trimend": ["string.prototype.trimend@1.0.9", "", { "dependencies": { "call-bind": "^1.0.8", "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ=="],
-
- "string.prototype.trimstart": ["string.prototype.trimstart@1.0.8", "", { "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" } }, "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg=="],
-
"string_decoder": ["string_decoder@1.1.1", "", { "dependencies": { "safe-buffer": "~5.1.0" } }, "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg=="],
"stringify-object": ["stringify-object@5.0.0", "", { "dependencies": { "get-own-enumerable-keys": "^1.0.0", "is-obj": "^3.0.0", "is-regexp": "^3.1.0" } }, "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg=="],
@@ -1830,27 +1400,17 @@
"strip-final-newline": ["strip-final-newline@4.0.0", "", {}, "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw=="],
- "strip-json-comments": ["strip-json-comments@3.1.1", "", {}, "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig=="],
-
"strnum": ["strnum@2.1.2", "", {}, "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ=="],
"stubs": ["stubs@3.0.0", "", {}, "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="],
"styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="],
- "supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="],
-
- "supports-preserve-symlinks-flag": ["supports-preserve-symlinks-flag@1.0.0", "", {}, "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w=="],
-
- "svg-pathdata": ["svg-pathdata@6.0.3", "", {}, "sha512-qsjeeq5YjBZ5eMdFuUa4ZosMLxgr5RZ+F+Y1OrDhuOCEInRMA3x74XdBtggJcj9kOeInz0WE+LgCPDkZFlBYJw=="],
-
- "tabbable": ["tabbable@6.4.0", "", {}, "sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg=="],
-
"tagged-tag": ["tagged-tag@1.0.0", "", {}, "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng=="],
- "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="],
+ "tailwind-merge": ["tailwind-merge@3.5.0", "", {}, "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A=="],
- "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="],
+ "tailwindcss": ["tailwindcss@4.2.4", "", {}, "sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA=="],
"tailwindcss-animate": ["tailwindcss-animate@1.0.7", "", { "peerDependencies": { "tailwindcss": ">=3.0.0 || insiders" } }, "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA=="],
@@ -1858,16 +1418,8 @@
"teeny-request": ["teeny-request@9.0.0", "", { "dependencies": { "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "node-fetch": "^2.6.9", "stream-events": "^1.0.5", "uuid": "^9.0.0" } }, "sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g=="],
- "text-segmentation": ["text-segmentation@1.0.3", "", { "dependencies": { "utrie": "^1.0.2" } }, "sha512-iOiPUo/BGnZ6+54OsWxZidGCsdU8YbE4PSpdPinp7DeMtUJNJBoJ/ouUSTJjHkh1KntHaltHl/gDs2FC4i5+Nw=="],
-
- "tiny-inflate": ["tiny-inflate@1.0.3", "", {}, "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw=="],
-
"tiny-invariant": ["tiny-invariant@1.3.3", "", {}, "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg=="],
- "tinyexec": ["tinyexec@1.0.2", "", {}, "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg=="],
-
- "tinyglobby": ["tinyglobby@0.2.14", "", { "dependencies": { "fdir": "^6.4.4", "picomatch": "^4.0.2" } }, "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ=="],
-
"tldts": ["tldts@7.0.23", "", { "dependencies": { "tldts-core": "^7.0.23" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw=="],
"tldts-core": ["tldts-core@7.0.23", "", {}, "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ=="],
@@ -1880,8 +1432,6 @@
"tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="],
- "ts-api-utils": ["ts-api-utils@2.4.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA=="],
-
"ts-morph": ["ts-morph@26.0.0", "", { "dependencies": { "@ts-morph/common": "~0.27.0", "code-block-writer": "^13.0.3" } }, "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug=="],
"tsconfig-paths": ["tsconfig-paths@4.2.0", "", { "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg=="],
@@ -1894,31 +1444,13 @@
"tween-functions": ["tween-functions@1.2.0", "", {}, "sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA=="],
- "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="],
-
"type-fest": ["type-fest@5.4.4", "", { "dependencies": { "tagged-tag": "^1.0.0" } }, "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw=="],
"type-is": ["type-is@2.0.1", "", { "dependencies": { "content-type": "^1.0.5", "media-typer": "^1.1.0", "mime-types": "^3.0.0" } }, "sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw=="],
- "typed-array-buffer": ["typed-array-buffer@1.0.3", "", { "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", "is-typed-array": "^1.1.14" } }, "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw=="],
-
- "typed-array-byte-length": ["typed-array-byte-length@1.0.3", "", { "dependencies": { "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.14" } }, "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg=="],
-
- "typed-array-byte-offset": ["typed-array-byte-offset@1.0.4", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "for-each": "^0.3.3", "gopd": "^1.2.0", "has-proto": "^1.2.0", "is-typed-array": "^1.1.15", "reflect.getprototypeof": "^1.0.9" } }, "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ=="],
+ "typescript": ["typescript@6.0.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw=="],
- "typed-array-length": ["typed-array-length@1.0.7", "", { "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "is-typed-array": "^1.1.13", "possible-typed-array-names": "^1.0.0", "reflect.getprototypeof": "^1.0.6" } }, "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg=="],
-
- "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
-
- "typescript-eslint": ["typescript-eslint@8.55.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.55.0", "@typescript-eslint/parser": "8.55.0", "@typescript-eslint/typescript-estree": "8.55.0", "@typescript-eslint/utils": "8.55.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-HE4wj+r5lmDVS9gdaN0/+iqNvPZwGfnJ5lZuz7s5vLlg9ODw0bIiiETaios9LvFI1U94/VBXGm3CB2Y5cNFMpw=="],
-
- "unbox-primitive": ["unbox-primitive@1.1.0", "", { "dependencies": { "call-bound": "^1.0.3", "has-bigints": "^1.0.2", "has-symbols": "^1.1.0", "which-boxed-primitive": "^1.1.1" } }, "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw=="],
-
- "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
-
- "unicode-properties": ["unicode-properties@1.4.1", "", { "dependencies": { "base64-js": "^1.3.0", "unicode-trie": "^2.0.0" } }, "sha512-CLjCCLQ6UuMxWnbIylkisbRj31qxHPAurvena/0iwSVbQ2G1VY5/HjV0IRabOEbDHlzZlRdCrD4NhB0JtU40Pg=="],
-
- "unicode-trie": ["unicode-trie@2.0.0", "", { "dependencies": { "pako": "^0.2.5", "tiny-inflate": "^1.0.0" } }, "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ=="],
+ "undici-types": ["undici-types@7.19.2", "", {}, "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg=="],
"unicorn-magic": ["unicorn-magic@0.3.0", "", {}, "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA=="],
@@ -1926,14 +1458,10 @@
"unpipe": ["unpipe@1.0.0", "", {}, "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ=="],
- "unrs-resolver": ["unrs-resolver@1.11.1", "", { "dependencies": { "napi-postinstall": "^0.3.0" }, "optionalDependencies": { "@unrs/resolver-binding-android-arm-eabi": "1.11.1", "@unrs/resolver-binding-android-arm64": "1.11.1", "@unrs/resolver-binding-darwin-arm64": "1.11.1", "@unrs/resolver-binding-darwin-x64": "1.11.1", "@unrs/resolver-binding-freebsd-x64": "1.11.1", "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", "@unrs/resolver-binding-linux-x64-musl": "1.11.1", "@unrs/resolver-binding-wasm32-wasi": "1.11.1", "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" } }, "sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg=="],
-
"until-async": ["until-async@3.0.2", "", {}, "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw=="],
"update-browserslist-db": ["update-browserslist-db@1.2.3", "", { "dependencies": { "escalade": "^3.2.0", "picocolors": "^1.1.1" }, "peerDependencies": { "browserslist": ">= 4.21.0" }, "bin": { "update-browserslist-db": "cli.js" } }, "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w=="],
- "uri-js": ["uri-js@4.4.1", "", { "dependencies": { "punycode": "^2.1.0" } }, "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg=="],
-
"use-callback-ref": ["use-callback-ref@1.3.3", "", { "dependencies": { "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg=="],
"use-sidecar": ["use-sidecar@1.1.3", "", { "dependencies": { "detect-node-es": "^1.1.0", "tslib": "^2.0.0" }, "peerDependencies": { "@types/react": "*", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc" } }, "sha512-Fedw0aZvkhynoPYlA5WXrMCAMm+nSWdZt6lzJQ7Ok8S6Q+VsHmHpRWndVRJ8Be0ZbkfPc5LRYH+5XrzXcEeLRQ=="],
@@ -1942,9 +1470,7 @@
"util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="],
- "utrie": ["utrie@1.0.2", "", { "dependencies": { "base64-arraybuffer": "^1.0.2" } }, "sha512-1MLa5ouZiOmQzUbjbu9VmjLzn1QLXBhwpUa7kdLUQK+KQ5KA9I1vk5U4YHe/X2Ch7PYnJfWuWT+VbuxbGwljhw=="],
-
- "uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
+ "uuid": ["uuid@14.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-Qo+uWgilfSmAhXCMav1uYFynlQO7fMFiMVZsQqZRMIXp0O7rR7qjkj+cPvBHLgBqi960QCoo/PH2/6ZtVqKvrg=="],
"validate-npm-package-name": ["validate-npm-package-name@7.0.2", "", {}, "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A=="],
@@ -1964,17 +1490,7 @@
"whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
- "which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
-
- "which-boxed-primitive": ["which-boxed-primitive@1.1.1", "", { "dependencies": { "is-bigint": "^1.1.0", "is-boolean-object": "^1.2.1", "is-number-object": "^1.1.1", "is-string": "^1.1.1", "is-symbol": "^1.1.1" } }, "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA=="],
-
- "which-builtin-type": ["which-builtin-type@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", "is-date-object": "^1.1.0", "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", "which-typed-array": "^1.1.16" } }, "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q=="],
-
- "which-collection": ["which-collection@1.0.2", "", { "dependencies": { "is-map": "^2.0.3", "is-set": "^2.0.3", "is-weakmap": "^2.0.2", "is-weakset": "^2.0.3" } }, "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw=="],
-
- "which-typed-array": ["which-typed-array@1.1.19", "", { "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.8", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" } }, "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw=="],
-
- "word-wrap": ["word-wrap@1.2.5", "", {}, "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA=="],
+ "which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
"wrap-ansi": ["wrap-ansi@6.2.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA=="],
@@ -1988,8 +1504,6 @@
"xml-js": ["xml-js@1.6.11", "", { "dependencies": { "sax": "^1.2.4" }, "bin": "bin/cli.js" }, "sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g=="],
- "xmldoc": ["xmldoc@2.0.3", "", { "dependencies": { "sax": "^1.4.3" } }, "sha512-6gRk4NY/Jvg67xn7OzJuxLRsGgiXBaPUQplVJ/9l99uIugxh4FTOewYz5ic8WScj7Xx/2WvhENiQKwkK9RpE4w=="],
-
"y18n": ["y18n@5.0.8", "", {}, "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA=="],
"yallist": ["yallist@3.1.1", "", {}, "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="],
@@ -2004,43 +1518,41 @@
"yoctocolors-cjs": ["yoctocolors-cjs@2.1.3", "", {}, "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw=="],
- "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
+ "zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
"zod-to-json-schema": ["zod-to-json-schema@3.25.1", "", { "peerDependencies": { "zod": "^3.25 || ^4" } }, "sha512-pM/SU9d3YAggzi6MtR4h7ruuQlqKtad8e9S0fmxcMi+ueAK5Korys/aWcV9LIIHTVbj01NdzxcnXSN+O74ZIVA=="],
- "zod-validation-error": ["zod-validation-error@4.0.2", "", { "peerDependencies": { "zod": "^3.25.0 || ^4.0.0" } }, "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ=="],
+ "zustand": ["zustand@5.0.12", "", { "peerDependencies": { "@types/react": ">=18.0.0", "immer": ">=9.0.6", "react": ">=18.0.0", "use-sync-external-store": ">=1.2.0" }, "optionalPeers": ["@types/react", "immer", "react", "use-sync-external-store"] }, "sha512-i77ae3aZq4dhMlRhJVCYgMLKuSiZAaUPAct2AksxQ+gOtimhGMdXljRT21P5BNpeT4kXlLIckvkPM029OljD7g=="],
+
+ "@babel/core/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
"@babel/generator/@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="],
"@babel/generator/@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.31", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" } }, "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw=="],
- "@babel/traverse/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+ "@babel/helper-compilation-targets/browserslist": ["browserslist@4.28.1", "", { "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" } }, "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA=="],
- "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="],
+ "@babel/helper-compilation-targets/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
- "@dotenvx/dotenvx/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="],
+ "@babel/helper-create-class-features-plugin/semver": ["semver@6.3.1", "", { "bin": "bin/semver.js" }, "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA=="],
- "@dotenvx/dotenvx/which": ["which@4.0.0", "", { "dependencies": { "isexe": "^3.1.1" }, "bin": { "node-which": "bin/which.js" } }, "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg=="],
+ "@babel/traverse/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
- "@eslint-community/eslint-utils/eslint-visitor-keys": ["eslint-visitor-keys@3.4.3", "", {}, "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="],
+ "@dotenvx/dotenvx/commander": ["commander@11.1.0", "", {}, "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ=="],
- "@eslint/config-array/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+ "@dotenvx/dotenvx/dotenv": ["dotenv@17.3.1", "", {}, "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA=="],
- "@eslint/eslintrc/globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="],
+ "@dotenvx/dotenvx/execa": ["execa@5.1.1", "", { "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", "human-signals": "^2.1.0", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.1", "onetime": "^5.1.2", "signal-exit": "^3.0.3", "strip-final-newline": "^2.0.0" } }, "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg=="],
"@google-cloud/storage/uuid": ["uuid@8.3.2", "", { "bin": "dist/bin/uuid" }, "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="],
"@grpc/grpc-js/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
- "@humanfs/node/@humanwhocodes/retry": ["@humanwhocodes/retry@0.3.1", "", {}, "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA=="],
-
"@jridgewell/gen-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
"@jridgewell/trace-mapping/@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
- "@modelcontextprotocol/sdk/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
-
- "@next/eslint-plugin-next/fast-glob": ["fast-glob@3.3.1", "", { "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", "micromatch": "^4.0.4" } }, "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg=="],
+ "@modelcontextprotocol/sdk/zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="],
"@radix-ui/react-alert-dialog/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "peerDependencies": { "@types/react": "*", "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" } }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="],
@@ -2076,8 +1588,6 @@
"@tailwindcss/oxide-wasm32-wasi/tslib": ["tslib@2.8.1", "", { "bundled": true }, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
- "@ts-morph/common/minimatch": ["minimatch@10.2.0", "", { "dependencies": { "brace-expansion": "^5.0.2" } }, "sha512-ugkC31VaVg9cF0DFVoADH12k6061zNZkZON+aX8AWsR9GhPcErkcMBceb6znR8wLERM2AkkOxy2nWRLpT9Jq5w=="],
-
"@types/body-parser/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
"@types/connect/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
@@ -2088,35 +1598,17 @@
"@types/marked/marked": ["marked@15.0.12", "", { "bin": "bin/marked.js" }, "sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA=="],
- "@types/pdfkit/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
-
"@types/request/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
"@types/send/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
- "@typescript-eslint/eslint-plugin/@eslint-community/regexpp": ["@eslint-community/regexpp@4.12.2", "", {}, "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="],
-
- "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="],
-
- "@typescript-eslint/parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
-
- "@typescript-eslint/project-service/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
+ "@types/serve-static/@types/node": ["@types/node@25.2.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-m0jEgYlYz+mDJZ2+F4v8D1AyQb+QzsNqRuI7xg1VQX/KlKS0qT9r1Mo16yo5F/MtifXFgaofIFsdFMox2SxIbQ=="],
- "@typescript-eslint/type-utils/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
-
- "@typescript-eslint/typescript-estree/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
-
- "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="],
-
- "@typescript-eslint/typescript-estree/semver": ["semver@7.7.3", "", { "bin": "bin/semver.js" }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
-
- "@typescript-eslint/typescript-estree/tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="],
-
- "ajv-formats/ajv": ["ajv@8.18.0", "", { "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", "require-from-string": "^2.0.2" } }, "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A=="],
+ "@types/uuid/uuid": ["uuid@13.0.0", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-XQegIaBTVUjSHliKqcnFqYypAd4S+WCYt5NIeRs6w/UAry7z8Y9j5ZwRRL4kzq9U3sD6v+85er9FvkEaBpji2w=="],
"body-parser/debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
- "canvg/@babel/runtime": ["@babel/runtime@7.27.6", "", {}, "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q=="],
+ "browserslist/baseline-browser-mapping": ["baseline-browser-mapping@2.10.23", "", { "bin": { "baseline-browser-mapping": "dist/cli.cjs" } }, "sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g=="],
"cliui/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
@@ -2124,30 +1616,14 @@
"cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="],
- "docx/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
+ "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="],
"docx/nanoid": ["nanoid@5.1.5", "", { "bin": "bin/nanoid.js" }, "sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw=="],
"duplexify/readable-stream": ["readable-stream@3.6.2", "", { "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", "util-deprecate": "^1.0.1" } }, "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA=="],
- "eslint-config-next/globals": ["globals@16.4.0", "", {}, "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="],
-
- "eslint-import-resolver-node/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
-
- "eslint-module-utils/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
-
- "eslint-plugin-import/debug": ["debug@3.2.7", "", { "dependencies": { "ms": "^2.1.1" } }, "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ=="],
-
- "eslint-plugin-import/tsconfig-paths": ["tsconfig-paths@3.15.0", "", { "dependencies": { "@types/json5": "^0.0.29", "json5": "^1.0.2", "minimist": "^1.2.6", "strip-bom": "^3.0.0" } }, "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg=="],
-
- "eslint-plugin-react/resolve": ["resolve@2.0.0-next.5", "", { "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": "bin/resolve" }, "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA=="],
-
"execa/is-stream": ["is-stream@4.0.1", "", {}, "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A=="],
- "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
-
- "fast-png/pako": ["pako@2.1.0", "", {}, "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="],
-
"form-data/mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
"gaxios/node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
@@ -2160,12 +1636,6 @@
"http-proxy-agent/agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="],
- "is-bun-module/semver": ["semver@7.7.2", "", { "bin": "bin/semver.js" }, "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA=="],
-
- "linebreak/base64-js": ["base64-js@0.0.8", "", {}, "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw=="],
-
- "log-symbols/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
-
"log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="],
"micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
@@ -2174,14 +1644,10 @@
"msw/path-to-regexp": ["path-to-regexp@6.3.0", "", {}, "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ=="],
- "next/caniuse-lite": ["caniuse-lite@1.0.30001726", "", {}, "sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw=="],
-
"next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "^3.3.6", "picocolors": "^1.0.0", "source-map-js": "^1.0.2" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="],
"npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="],
- "ora/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
-
"prompts/kleur": ["kleur@3.0.3", "", {}, "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w=="],
"protobufjs/@types/node": ["@types/node@24.0.4", "", { "dependencies": { "undici-types": "~7.8.0" } }, "sha512-ulyqAkrhnuNq9pB76DRBTkcS6YsmDALy6Ua63V8OhrOBgbcYt6IOdzpw5P1+dyRIyMerzLkeYWBeOXPpA9GMAA=="],
@@ -2196,20 +1662,8 @@
"restore-cursor/onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
- "safe-array-concat/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
-
- "safe-push-apply/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
-
"shadcn/postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="],
- "shadcn/zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
-
- "shadcn-ui/chalk": ["chalk@5.4.1", "", {}, "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w=="],
-
- "sharp/semver": ["semver@7.7.3", "", { "bin": "bin/semver.js" }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="],
-
- "string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
-
"string_decoder/safe-buffer": ["safe-buffer@5.1.2", "", {}, "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="],
"teeny-request/https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="],
@@ -2218,20 +1672,18 @@
"teeny-request/uuid": ["uuid@9.0.1", "", { "bin": "dist/bin/uuid" }, "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA=="],
- "tinyglobby/fdir": ["fdir@6.4.6", "", { "peerDependencies": { "picomatch": "^3 || ^4" } }, "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w=="],
-
- "unicode-trie/pako": ["pako@0.2.9", "", {}, "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA=="],
-
- "which-builtin-type/isarray": ["isarray@2.0.5", "", {}, "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw=="],
-
"wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
"wrap-ansi/strip-ansi": ["strip-ansi@6.0.1", "", { "dependencies": { "ansi-regex": "^5.0.1" } }, "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A=="],
- "xmldoc/sax": ["sax@1.4.4", "", {}, "sha512-1n3r/tGXO6b6VXMdFT54SHzT9ytu9yr7TaELowdYpMqY/Ao7EnlQGmAQ1+RatX7Tkkdm6hONI2owqNx2aZj5Sw=="],
-
"yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="],
+ "@babel/helper-compilation-targets/browserslist/caniuse-lite": ["caniuse-lite@1.0.30001769", "", {}, "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg=="],
+
+ "@babel/helper-compilation-targets/browserslist/electron-to-chromium": ["electron-to-chromium@1.5.286", "", {}, "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A=="],
+
+ "@babel/helper-compilation-targets/browserslist/node-releases": ["node-releases@2.0.27", "", {}, "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA=="],
+
"@dotenvx/dotenvx/execa/get-stream": ["get-stream@6.0.1", "", {}, "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg=="],
"@dotenvx/dotenvx/execa/human-signals": ["human-signals@2.1.0", "", {}, "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw=="],
@@ -2242,18 +1694,10 @@
"@dotenvx/dotenvx/execa/strip-final-newline": ["strip-final-newline@2.0.0", "", {}, "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA=="],
- "@dotenvx/dotenvx/which/isexe": ["isexe@3.1.5", "", {}, "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w=="],
-
"@grpc/grpc-js/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
- "@modelcontextprotocol/sdk/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
-
- "@next/eslint-plugin-next/fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
-
"@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom": ["@floating-ui/dom@1.7.1", "", { "dependencies": { "@floating-ui/core": "^1.7.1", "@floating-ui/utils": "^0.2.9" } }, "sha512-cwsmW/zyw5ltYTUeeYJ60CnQuPqmGwuGVhG9w0PRaRKkAyi38BT5CKrpIbb+jtahSwUl04cWzSx9ZOIxeS6RsQ=="],
- "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@5.0.2", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw=="],
-
"@types/body-parser/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
"@types/connect/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
@@ -2262,26 +1706,20 @@
"@types/express-serve-static-core/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
- "@types/pdfkit/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
-
"@types/request/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
"@types/send/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
- "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="],
-
- "ajv-formats/ajv/json-schema-traverse": ["json-schema-traverse@1.0.0", "", {}, "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug=="],
+ "@types/serve-static/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
"cliui/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="],
"cliui/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
- "docx/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
+ "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="],
"duplexify/readable-stream/string_decoder": ["string_decoder@1.3.0", "", { "dependencies": { "safe-buffer": "~5.2.0" } }, "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA=="],
- "eslint-plugin-import/tsconfig-paths/json5": ["json5@1.0.2", "", { "dependencies": { "minimist": "^1.2.0" }, "bin": "lib/cli.js" }, "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA=="],
-
"form-data/mime-types/mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
"protobufjs/@types/node/undici-types": ["undici-types@7.8.0", "", {}, "sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw=="],
@@ -2300,8 +1738,6 @@
"@radix-ui/react-popper/@floating-ui/react-dom/@floating-ui/dom/@floating-ui/utils": ["@floating-ui/utils@0.2.9", "", {}, "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg=="],
- "@ts-morph/common/minimatch/brace-expansion/balanced-match": ["balanced-match@4.0.2", "", { "dependencies": { "jackspeak": "^4.2.3" } }, "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg=="],
-
"yargs/string-width/strip-ansi/ansi-regex": ["ansi-regex@5.0.1", "", {}, "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="],
}
}
diff --git a/eslint.config.js b/eslint.config.js
deleted file mode 100644
index 1da9553..0000000
--- a/eslint.config.js
+++ /dev/null
@@ -1,47 +0,0 @@
-import js from "@eslint/js";
-import globals from "globals";
-import reactHooks from "eslint-plugin-react-hooks";
-import reactRefresh from "eslint-plugin-react-refresh";
-import tseslint from "typescript-eslint";
-
-export default [
- { ignores: ["dist", ".next", "node_modules"] },
- js.configs.recommended,
- ...tseslint.configs.recommended,
- {
- files: ["**/*.{js,jsx,ts,tsx}"],
- languageOptions: {
- globals: {
- ...globals.browser,
- ...globals.node,
- },
- },
- plugins: {
- "react-hooks": reactHooks,
- "react-refresh": reactRefresh,
- },
- rules: {
- ...reactHooks.configs.recommended.rules,
- "react-refresh/only-export-components": [
- "warn",
- { allowConstantExport: true },
- ],
- // Next.js specific rules
- "@next/next/no-html-link-for-pages": "off",
- "@typescript-eslint/no-unused-vars": [
- "error",
- { argsIgnorePattern: "^_" },
- ],
- },
- },
- // Special config for CommonJS files
- {
- files: ["**/*.cjs"],
- languageOptions: {
- globals: {
- ...globals.node,
- },
- sourceType: "commonjs",
- },
- },
-];
diff --git a/next.config.mjs b/next.config.mjs
index 442dd68..282910c 100644
--- a/next.config.mjs
+++ b/next.config.mjs
@@ -1,6 +1,6 @@
/** @type {import('next').NextConfig} */
const nextConfig = {
// Removed output: "export" to enable API routes and server-side functionality
-};
+}
-export default nextConfig;
+export default nextConfig
diff --git a/package-lock.json b/package-lock.json
deleted file mode 100644
index c8e2761..0000000
--- a/package-lock.json
+++ /dev/null
@@ -1,14079 +0,0 @@
-{
- "name": "transcriptr",
- "version": "0.1.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "": {
- "name": "transcriptr",
- "version": "0.1.0",
- "dependencies": {
- "@base-ui/react": "^1.2.0",
- "@google-cloud/storage": "^7.19.0",
- "@microsoft/clarity": "^1.0.2",
- "@radix-ui/react-dialog": "^1.1.15",
- "@radix-ui/react-dropdown-menu": "^2.1.16",
- "@radix-ui/react-label": "^2.1.8",
- "@radix-ui/react-scroll-area": "^1.2.10",
- "@radix-ui/react-select": "^2.2.6",
- "@radix-ui/react-slot": "^1.2.4",
- "@radix-ui/react-switch": "^1.2.6",
- "@radix-ui/react-tabs": "^1.1.13",
- "@tabler/icons-react": "^3.36.1",
- "@tailwindcss/typography": "^0.5.19",
- "assemblyai": "^4.23.0",
- "clarity-js": "^0.8.54",
- "class-variance-authority": "^0.7.1",
- "clsx": "^2.1.1",
- "cors": "^2.8.6",
- "device-detector-js": "^3.0.3",
- "docx": "^9.5.2",
- "dotenv": "^17.3.1",
- "express": "^5.2.1",
- "file-saver": "^2.0.5",
- "firebase": "^12.9.0",
- "framer-motion": "^12.34.0",
- "jspdf": "^4.1.0",
- "jspdf-autotable": "^5.0.7",
- "jszip": "^3.10.1",
- "lucide-react": "^0.562.0",
- "marked": "^17.0.2",
- "motion": "^12.34.0",
- "next": "^16.1.6",
- "next-themes": "^0.4.6",
- "node-fetch": "^3.3.2",
- "pdfmake": "^0.3.4",
- "radix-ui": "^1.4.3",
- "react": "^19.2.4",
- "react-confetti": "^6.4.0",
- "react-dom": "^19.2.4",
- "react-dropzone": "^14.4.1",
- "react-ga4": "^2.1.0",
- "react-pdf": "^10.3.0",
- "shadcn": "^3.8.4",
- "shadcn-ui": "^0.9.5",
- "sonner": "^2.0.7",
- "tailwind-merge": "^3.4.0",
- "tw-animate-css": "^1.4.0",
- "uuid": "^13.0.0"
- },
- "devDependencies": {
- "@eslint/js": "^9.39.2",
- "@netlify/plugin-nextjs": "^5.15.8",
- "@tailwindcss/postcss": "^4.1.18",
- "@types/cors": "^2.8.19",
- "@types/express": "^5.0.6",
- "@types/file-saver": "^2.0.7",
- "@types/marked": "^6.0.0",
- "@types/node": "^25.2.3",
- "@types/pdfmake": "^0.2.13",
- "@types/react": "^19.2.14",
- "@types/react-dom": "^19.2.3",
- "@types/uuid": "^11.0.0",
- "autoprefixer": "^10.4.24",
- "eslint": "^9.39.2",
- "eslint-config-next": "^16.1.6",
- "eslint-plugin-react-hooks": "^7.0.1",
- "eslint-plugin-react-refresh": "^0.4.26",
- "globals": "^17.3.0",
- "postcss": "^8.5.6",
- "prettier": "^3.8.1",
- "prettier-plugin-tailwindcss": "^0.7.2",
- "tailwindcss": "^4.1.18",
- "tailwindcss-animate": "^1.0.7",
- "tsx": "^4.21.0",
- "typescript": "~5.9.3",
- "typescript-eslint": "^8.55.0"
- }
- },
- "node_modules/@alloc/quick-lru": {
- "version": "5.2.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@antfu/ni": {
- "version": "25.0.0",
- "resolved": "https://registry.npmjs.org/@antfu/ni/-/ni-25.0.0.tgz",
- "integrity": "sha512-9q/yCljni37pkMr4sPrI3G4jqdIk074+iukc5aFJl7kmDCCsiJrbZ6zKxnES1Gwg+i9RcDZwvktl23puGslmvA==",
- "license": "MIT",
- "dependencies": {
- "ansis": "^4.0.0",
- "fzf": "^0.5.2",
- "package-manager-detector": "^1.3.0",
- "tinyexec": "^1.0.1"
- },
- "bin": {
- "na": "bin/na.mjs",
- "nci": "bin/nci.mjs",
- "ni": "bin/ni.mjs",
- "nlx": "bin/nlx.mjs",
- "nr": "bin/nr.mjs",
- "nun": "bin/nun.mjs",
- "nup": "bin/nup.mjs"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.29.0",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.28.5",
- "js-tokens": "^4.0.0",
- "picocolors": "^1.1.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.29.0",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.29.0",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-compilation-targets": "^7.28.6",
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helpers": "^7.28.6",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/traverse": "^7.29.0",
- "@babel/types": "^7.29.0",
- "@jridgewell/remapping": "^2.3.5",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.29.1",
- "license": "MIT",
- "dependencies": {
- "@babel/parser": "^7.29.0",
- "@babel/types": "^7.29.0",
- "@jridgewell/gen-mapping": "^0.3.12",
- "@jridgewell/trace-mapping": "^0.3.28",
- "jsesc": "^3.0.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.13",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.0",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@babel/generator/node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.31",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.27.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz",
- "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.3"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.28.6",
- "license": "MIT",
- "dependencies": {
- "@babel/compat-data": "^7.28.6",
- "@babel/helper-validator-option": "^7.27.1",
- "browserslist": "^4.24.0",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz",
- "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/helper-replace-supers": "^7.28.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/traverse": "^7.28.6",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-globals": {
- "version": "7.28.0",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz",
- "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.28.5",
- "@babel/types": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.28.6",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.28.6",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-imports": "^7.28.6",
- "@babel/helper-validator-identifier": "^7.28.5",
- "@babel/traverse": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz",
- "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz",
- "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz",
- "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-member-expression-to-functions": "^7.28.5",
- "@babel/helper-optimise-call-expression": "^7.27.1",
- "@babel/traverse": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.27.1",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz",
- "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==",
- "license": "MIT",
- "dependencies": {
- "@babel/traverse": "^7.27.1",
- "@babel/types": "^7.27.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.27.1",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.28.5",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.27.1",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.28.6",
- "license": "MIT",
- "dependencies": {
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.29.0",
- "license": "MIT",
- "dependencies": {
- "@babel/types": "^7.29.0"
- },
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-syntax-jsx": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz",
- "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-typescript": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz",
- "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz",
- "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-module-transforms": "^7.28.6",
- "@babel/helper-plugin-utils": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typescript": {
- "version": "7.28.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz",
- "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.27.3",
- "@babel/helper-create-class-features-plugin": "^7.28.6",
- "@babel/helper-plugin-utils": "^7.28.6",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1",
- "@babel/plugin-syntax-typescript": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-typescript": {
- "version": "7.28.5",
- "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz",
- "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.27.1",
- "@babel/helper-validator-option": "^7.27.1",
- "@babel/plugin-syntax-jsx": "^7.27.1",
- "@babel/plugin-transform-modules-commonjs": "^7.27.1",
- "@babel/plugin-transform-typescript": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/runtime": {
- "version": "7.29.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz",
- "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.28.6",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.28.6",
- "@babel/parser": "^7.28.6",
- "@babel/types": "^7.28.6"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.29.0",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.29.0",
- "@babel/generator": "^7.29.0",
- "@babel/helper-globals": "^7.28.0",
- "@babel/parser": "^7.29.0",
- "@babel/template": "^7.28.6",
- "@babel/types": "^7.29.0",
- "debug": "^4.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse/node_modules/debug": {
- "version": "4.4.3",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@babel/types": {
- "version": "7.29.0",
- "license": "MIT",
- "dependencies": {
- "@babel/helper-string-parser": "^7.27.1",
- "@babel/helper-validator-identifier": "^7.28.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@base-ui/react": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@base-ui/react/-/react-1.4.0.tgz",
- "integrity": "sha512-QcqdVbr/+ba2/RAKJIV1PV6S02Q5+r6a4Eym8ndBw+ZbBILkkmQAyRxXCg/pArrHnkrGeU8goe26aw0h6eE8pg==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.2",
- "@base-ui/utils": "0.2.7",
- "@floating-ui/react-dom": "^2.1.8",
- "@floating-ui/utils": "^0.2.11",
- "use-sync-external-store": "^1.6.0"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/mui-org"
- },
- "peerDependencies": {
- "@date-fns/tz": "^1.2.0",
- "@types/react": "^17 || ^18 || ^19",
- "date-fns": "^4.0.0",
- "react": "^17 || ^18 || ^19",
- "react-dom": "^17 || ^18 || ^19"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@base-ui/utils": {
- "version": "0.2.7",
- "resolved": "https://registry.npmjs.org/@base-ui/utils/-/utils-0.2.7.tgz",
- "integrity": "sha512-nXYKhiL/0JafyJE8PfcflipGftOftlIwKd72rU15iZ1M5yqgg5J9P8NHU71GReDuXco5MJA/eVQqUT5WRqX9sA==",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.29.2",
- "@floating-ui/utils": "^0.2.11",
- "reselect": "^5.1.1",
- "use-sync-external-store": "^1.6.0"
- },
- "peerDependencies": {
- "@types/react": "^17 || ^18 || ^19",
- "react": "^17 || ^18 || ^19",
- "react-dom": "^17 || ^18 || ^19"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@date-fns/tz": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/@date-fns/tz/-/tz-1.4.1.tgz",
- "integrity": "sha512-P5LUNhtbj6YfI3iJjw5EL9eUAG6OitD0W3fWQcpQjDRc/QIsL0tRNuO1PcDvPccWL1fSTXXdE1ds+l95DV/OFA==",
- "license": "MIT",
- "peer": true
- },
- "node_modules/@dotenvx/dotenvx": {
- "version": "1.61.0",
- "resolved": "https://registry.npmjs.org/@dotenvx/dotenvx/-/dotenvx-1.61.0.tgz",
- "integrity": "sha512-utL3cpZoFzflyqUkjYbxYujI6STBTmO5LFn4bbin/NZnRWN6wQ7eErhr3/Vpa5h/jicPFC6kTa42r940mQftJQ==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "commander": "^11.1.0",
- "dotenv": "^17.2.1",
- "eciesjs": "^0.4.10",
- "execa": "^5.1.1",
- "fdir": "^6.2.0",
- "ignore": "^5.3.0",
- "object-treeify": "1.1.33",
- "picomatch": "^4.0.2",
- "which": "^4.0.0",
- "yocto-spinner": "^1.1.0"
- },
- "bin": {
- "dotenvx": "src/cli/dotenvx.js"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/commander": {
- "version": "11.1.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-11.1.0.tgz",
- "integrity": "sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/execa": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
- "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
- "license": "MIT",
- "dependencies": {
- "cross-spawn": "^7.0.3",
- "get-stream": "^6.0.0",
- "human-signals": "^2.1.0",
- "is-stream": "^2.0.0",
- "merge-stream": "^2.0.0",
- "npm-run-path": "^4.0.1",
- "onetime": "^5.1.2",
- "signal-exit": "^3.0.3",
- "strip-final-newline": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/get-stream": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
- "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/human-signals": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
- "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=10.17.0"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/isexe": {
- "version": "3.1.5",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz",
- "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/npm-run-path": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
- "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/onetime": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
- "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
- "license": "MIT",
- "dependencies": {
- "mimic-fn": "^2.1.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/signal-exit": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
- "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
- "license": "ISC"
- },
- "node_modules/@dotenvx/dotenvx/node_modules/strip-final-newline": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
- "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@dotenvx/dotenvx/node_modules/which": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz",
- "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==",
- "license": "ISC",
- "dependencies": {
- "isexe": "^3.1.1"
- },
- "bin": {
- "node-which": "bin/which.js"
- },
- "engines": {
- "node": "^16.13.0 || >=18.0.0"
- }
- },
- "node_modules/@ecies/ciphers": {
- "version": "0.2.6",
- "resolved": "https://registry.npmjs.org/@ecies/ciphers/-/ciphers-0.2.6.tgz",
- "integrity": "sha512-patgsRPKGkhhoBjETV4XxD0En4ui5fbX0hzayqI3M8tvNMGUoUvmyYAIWwlxBc1KX5cturfqByYdj5bYGRpN9g==",
- "license": "MIT",
- "engines": {
- "bun": ">=1",
- "deno": ">=2.7.10",
- "node": ">=16"
- },
- "peerDependencies": {
- "@noble/ciphers": "^1.0.0"
- }
- },
- "node_modules/@emnapi/core": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.8.1.tgz",
- "integrity": "sha512-AvT9QFpxK0Zd8J0jopedNm+w/2fIzvtPKPjqyw9jwvBaReTTqPBk9Hixaz7KbjimP+QNz605/XnjFcDAL2pqBg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/runtime": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.8.1.tgz",
- "integrity": "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg==",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz",
- "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@esbuild/aix-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz",
- "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "aix"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz",
- "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz",
- "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/android-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz",
- "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-arm64": {
- "version": "0.27.3",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/darwin-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz",
- "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz",
- "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/freebsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz",
- "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz",
- "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz",
- "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz",
- "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-loong64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz",
- "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==",
- "cpu": [
- "loong64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-mips64el": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz",
- "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==",
- "cpu": [
- "mips64el"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-ppc64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz",
- "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-riscv64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz",
- "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-s390x": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz",
- "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/linux-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz",
- "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/netbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz",
- "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "netbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz",
- "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openbsd-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz",
- "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openbsd"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/openharmony-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz",
- "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "openharmony"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/sunos-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz",
- "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "sunos"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-arm64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz",
- "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-ia32": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz",
- "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@esbuild/win32-x64": {
- "version": "0.27.3",
- "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz",
- "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@eslint-community/eslint-utils": {
- "version": "4.9.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- },
- "peerDependencies": {
- "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
- }
- },
- "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
- "version": "3.4.3",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint-community/regexpp": {
- "version": "4.12.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@eslint/config-array": {
- "version": "0.21.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/object-schema": "^2.1.7",
- "debug": "^4.3.1",
- "minimatch": "^3.1.2"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/config-array/node_modules/debug": {
- "version": "4.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@eslint/config-helpers": {
- "version": "0.4.2",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.17.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/core": {
- "version": "0.17.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@types/json-schema": "^7.0.15"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/eslintrc": {
- "version": "3.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ajv": "^6.12.4",
- "debug": "^4.3.2",
- "espree": "^10.0.1",
- "globals": "^14.0.0",
- "ignore": "^5.2.0",
- "import-fresh": "^3.2.1",
- "js-yaml": "^4.1.0",
- "minimatch": "^3.1.2",
- "strip-json-comments": "^3.1.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/@eslint/eslintrc/node_modules/globals": {
- "version": "14.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@eslint/js": {
- "version": "9.39.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- }
- },
- "node_modules/@eslint/object-schema": {
- "version": "2.1.7",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@eslint/plugin-kit": {
- "version": "0.4.1",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@eslint/core": "^0.17.0",
- "levn": "^0.4.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- }
- },
- "node_modules/@firebase/ai": {
- "version": "2.8.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.3",
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x",
- "@firebase/app-types": "0.x"
- }
- },
- "node_modules/@firebase/analytics": {
- "version": "0.10.19",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/installations": "0.6.19",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/analytics-compat": {
- "version": "0.2.25",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/analytics": "0.10.19",
- "@firebase/analytics-types": "0.8.3",
- "@firebase/component": "0.7.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/analytics-types": {
- "version": "0.8.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/app": {
- "version": "0.14.8",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "idb": "7.1.1",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/app-check": {
- "version": "0.11.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/app-check-compat": {
- "version": "0.4.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check": "0.11.0",
- "@firebase/app-check-types": "0.5.3",
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/app-check-interop-types": {
- "version": "0.3.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/app-check-types": {
- "version": "0.5.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/app-compat": {
- "version": "0.5.8",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app": "0.14.8",
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/app-types": {
- "version": "0.9.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/auth": {
- "version": "1.12.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x",
- "@react-native-async-storage/async-storage": "^2.2.0"
- },
- "peerDependenciesMeta": {
- "@react-native-async-storage/async-storage": {
- "optional": true
- }
- }
- },
- "node_modules/@firebase/auth-compat": {
- "version": "0.6.2",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/auth": "1.12.0",
- "@firebase/auth-types": "0.13.0",
- "@firebase/component": "0.7.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/auth-interop-types": {
- "version": "0.2.4",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/auth-types": {
- "version": "0.13.0",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/component": {
- "version": "0.7.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/data-connect": {
- "version": "0.3.12",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/auth-interop-types": "0.2.4",
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/database": {
- "version": "1.1.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.3",
- "@firebase/auth-interop-types": "0.2.4",
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "faye-websocket": "0.11.4",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/database-compat": {
- "version": "2.1.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/database": "1.1.0",
- "@firebase/database-types": "1.0.16",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/database-types": {
- "version": "1.0.16",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-types": "0.9.3",
- "@firebase/util": "1.13.0"
- }
- },
- "node_modules/@firebase/firestore": {
- "version": "4.11.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "@firebase/webchannel-wrapper": "1.0.5",
- "@grpc/grpc-js": "~1.9.0",
- "@grpc/proto-loader": "^0.7.8",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/firestore-compat": {
- "version": "0.4.5",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/firestore": "4.11.0",
- "@firebase/firestore-types": "3.0.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/firestore-types": {
- "version": "3.0.3",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/functions": {
- "version": "0.13.1",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/app-check-interop-types": "0.3.3",
- "@firebase/auth-interop-types": "0.2.4",
- "@firebase/component": "0.7.0",
- "@firebase/messaging-interop-types": "0.2.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/functions-compat": {
- "version": "0.4.1",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/functions": "0.13.1",
- "@firebase/functions-types": "0.6.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/functions-types": {
- "version": "0.6.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/installations": {
- "version": "0.6.19",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/util": "1.13.0",
- "idb": "7.1.1",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/installations-compat": {
- "version": "0.2.19",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/installations": "0.6.19",
- "@firebase/installations-types": "0.5.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/installations-types": {
- "version": "0.5.3",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x"
- }
- },
- "node_modules/@firebase/logger": {
- "version": "0.5.0",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/messaging": {
- "version": "0.12.23",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/installations": "0.6.19",
- "@firebase/messaging-interop-types": "0.2.3",
- "@firebase/util": "1.13.0",
- "idb": "7.1.1",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/messaging-compat": {
- "version": "0.2.23",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/messaging": "0.12.23",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/messaging-interop-types": {
- "version": "0.2.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/performance": {
- "version": "0.7.9",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/installations": "0.6.19",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0",
- "web-vitals": "^4.2.4"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/performance-compat": {
- "version": "0.2.22",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/performance": "0.7.9",
- "@firebase/performance-types": "0.2.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/performance-types": {
- "version": "0.2.3",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/remote-config": {
- "version": "0.8.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/installations": "0.6.19",
- "@firebase/logger": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/remote-config-compat": {
- "version": "0.2.21",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/logger": "0.5.0",
- "@firebase/remote-config": "0.8.0",
- "@firebase/remote-config-types": "0.5.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/remote-config-types": {
- "version": "0.5.0",
- "license": "Apache-2.0"
- },
- "node_modules/@firebase/storage": {
- "version": "0.14.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app": "0.x"
- }
- },
- "node_modules/@firebase/storage-compat": {
- "version": "0.4.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/component": "0.7.0",
- "@firebase/storage": "0.14.0",
- "@firebase/storage-types": "0.8.3",
- "@firebase/util": "1.13.0",
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- },
- "peerDependencies": {
- "@firebase/app-compat": "0.x"
- }
- },
- "node_modules/@firebase/storage-types": {
- "version": "0.8.3",
- "license": "Apache-2.0",
- "peerDependencies": {
- "@firebase/app-types": "0.x",
- "@firebase/util": "1.x"
- }
- },
- "node_modules/@firebase/util": {
- "version": "1.13.0",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.1.0"
- },
- "engines": {
- "node": ">=20.0.0"
- }
- },
- "node_modules/@firebase/webchannel-wrapper": {
- "version": "1.0.5",
- "license": "Apache-2.0"
- },
- "node_modules/@floating-ui/core": {
- "version": "1.7.5",
- "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.5.tgz",
- "integrity": "sha512-1Ih4WTWyw0+lKyFMcBHGbb5U5FtuHJuujoyyr5zTaWS5EYMeT6Jb2AuDeftsCsEuchO+mM2ij5+q9crhydzLhQ==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/utils": "^0.2.11"
- }
- },
- "node_modules/@floating-ui/dom": {
- "version": "1.7.6",
- "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.6.tgz",
- "integrity": "sha512-9gZSAI5XM36880PPMm//9dfiEngYoC6Am2izES1FF406YFsjvyBMmeJ2g4SAju3xWwtuynNRFL2s9hgxpLI5SQ==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/core": "^1.7.5",
- "@floating-ui/utils": "^0.2.11"
- }
- },
- "node_modules/@floating-ui/react-dom": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/@floating-ui/react-dom/-/react-dom-2.1.8.tgz",
- "integrity": "sha512-cC52bHwM/n/CxS87FH0yWdngEZrjdtLW/qVruo68qg+prK7ZQ4YGdut2GyDVpoGeAYe/h899rVeOVm6Oi40k2A==",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/dom": "^1.7.6"
- },
- "peerDependencies": {
- "react": ">=16.8.0",
- "react-dom": ">=16.8.0"
- }
- },
- "node_modules/@floating-ui/utils": {
- "version": "0.2.11",
- "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.11.tgz",
- "integrity": "sha512-RiB/yIh78pcIxl6lLMG0CgBXAZ2Y0eVHqMPYugu+9U0AeT6YBeiJpf7lbdJNIugFP5SIjwNRgo4DhR1Qxi26Gg==",
- "license": "MIT"
- },
- "node_modules/@google-cloud/paginator": {
- "version": "5.0.2",
- "license": "Apache-2.0",
- "dependencies": {
- "arrify": "^2.0.0",
- "extend": "^3.0.2"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@google-cloud/projectify": {
- "version": "4.0.0",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@google-cloud/promisify": {
- "version": "4.0.0",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@google-cloud/storage": {
- "version": "7.19.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@google-cloud/paginator": "^5.0.0",
- "@google-cloud/projectify": "^4.0.0",
- "@google-cloud/promisify": "<4.1.0",
- "abort-controller": "^3.0.0",
- "async-retry": "^1.3.3",
- "duplexify": "^4.1.3",
- "fast-xml-parser": "^5.3.4",
- "gaxios": "^6.0.2",
- "google-auth-library": "^9.6.3",
- "html-entities": "^2.5.2",
- "mime": "^3.0.0",
- "p-limit": "^3.0.1",
- "retry-request": "^7.0.0",
- "teeny-request": "^9.0.0",
- "uuid": "^8.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/@google-cloud/storage/node_modules/uuid": {
- "version": "8.3.2",
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/@grpc/grpc-js": {
- "version": "1.9.15",
- "license": "Apache-2.0",
- "dependencies": {
- "@grpc/proto-loader": "^0.7.8",
- "@types/node": ">=12.12.47"
- },
- "engines": {
- "node": "^8.13.0 || >=10.10.0"
- }
- },
- "node_modules/@grpc/proto-loader": {
- "version": "0.7.15",
- "license": "Apache-2.0",
- "dependencies": {
- "lodash.camelcase": "^4.3.0",
- "long": "^5.0.0",
- "protobufjs": "^7.2.5",
- "yargs": "^17.7.2"
- },
- "bin": {
- "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@hono/node-server": {
- "version": "1.19.14",
- "resolved": "https://registry.npmjs.org/@hono/node-server/-/node-server-1.19.14.tgz",
- "integrity": "sha512-GwtvgtXxnWsucXvbQXkRgqksiH2Qed37H9xHZocE5sA3N8O8O8/8FA3uclQXxXVzc9XBZuEOMK7+r02FmSpHtw==",
- "license": "MIT",
- "engines": {
- "node": ">=18.14.1"
- },
- "peerDependencies": {
- "hono": "^4"
- }
- },
- "node_modules/@humanfs/core": {
- "version": "0.19.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node": {
- "version": "0.16.6",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "@humanfs/core": "^0.19.1",
- "@humanwhocodes/retry": "^0.3.0"
- },
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": {
- "version": "0.3.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/module-importer": {
- "version": "1.0.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=12.22"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@humanwhocodes/retry": {
- "version": "0.4.3",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/nzakas"
- }
- },
- "node_modules/@img/colour": {
- "version": "1.0.0",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@img/sharp-darwin-arm64": {
- "version": "0.34.4",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-arm64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-darwin-x64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.34.4.tgz",
- "integrity": "sha512-rZheupWIoa3+SOdF/IcUe1ah4ZDpKBGWcsPX6MT0lYniH9micvIU7HQkYTfrx5Xi8u+YqwLtxC/3vl8TQN6rMg==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-darwin-x64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-arm64": {
- "version": "1.2.3",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-darwin-x64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.2.3.tgz",
- "integrity": "sha512-Ju+g2xn1E2AKO6YBhxjj+ACcsPQRHT0bhpglxcEf+3uyPY+/gL8veniKoo96335ZaPo03bdDXMv0t+BBFAbmRA==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "darwin"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.2.3.tgz",
- "integrity": "sha512-x1uE93lyP6wEwGvgAIV0gP6zmaL/a0tGzJs/BIDDG0zeBhMnuUPm7ptxGhUbcGs4okDJrk4nxgrmxpib9g6HpA==",
- "cpu": [
- "arm"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-arm64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.2.3.tgz",
- "integrity": "sha512-I4RxkXU90cpufazhGPyVujYwfIm9Nk1QDEmiIsaPwdnm013F7RIceaCc87kAH+oUB1ezqEvC6ga4m7MSlqsJvQ==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-ppc64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-ppc64/-/sharp-libvips-linux-ppc64-1.2.3.tgz",
- "integrity": "sha512-Y2T7IsQvJLMCBM+pmPbM3bKT/yYJvVtLJGfCs4Sp95SjvnFIjynbjzsa7dY1fRJX45FTSfDksbTp6AGWudiyCg==",
- "cpu": [
- "ppc64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-s390x": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.2.3.tgz",
- "integrity": "sha512-RgWrs/gVU7f+K7P+KeHFaBAJlNkD1nIZuVXdQv6S+fNA6syCcoboNjsV2Pou7zNlVdNQoQUpQTk8SWDHUA3y/w==",
- "cpu": [
- "s390x"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linux-x64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.2.3.tgz",
- "integrity": "sha512-3JU7LmR85K6bBiRzSUc/Ff9JBVIFVvq6bomKE0e63UXGeRw2HPVEjoJke1Yx+iU4rL7/7kUjES4dZ/81Qjhyxg==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-arm64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.2.3.tgz",
- "integrity": "sha512-F9q83RZ8yaCwENw1GieztSfj5msz7GGykG/BA+MOUefvER69K/ubgFHNeSyUu64amHIYKGDs4sRCMzXVj8sEyw==",
- "cpu": [
- "arm64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-libvips-linuxmusl-x64": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.2.3.tgz",
- "integrity": "sha512-U5PUY5jbc45ANM6tSJpsgqmBF/VsL6LnxJmIf11kB7J5DctHgqm0SkuXzVWtIY90GnJxKnC/JT251TDnk1fu/g==",
- "cpu": [
- "x64"
- ],
- "license": "LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "linux"
- ],
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-linux-arm": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.34.4.tgz",
- "integrity": "sha512-Xyam4mlqM0KkTHYVSuc6wXRmM7LGN0P12li03jAnZ3EJWZqj83+hi8Y9UxZUbxsgsK1qOEwg7O0Bc0LjqQVtxA==",
- "cpu": [
- "arm"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linux-arm64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.34.4.tgz",
- "integrity": "sha512-YXU1F/mN/Wu786tl72CyJjP/Ngl8mGHN1hST4BGl+hiW5jhCnV2uRVTNOcaYPs73NeT/H8Upm3y9582JVuZHrQ==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-arm64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linux-ppc64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-ppc64/-/sharp-linux-ppc64-0.34.4.tgz",
- "integrity": "sha512-F4PDtF4Cy8L8hXA2p3TO6s4aDt93v+LKmpcYFLAVdkkD3hSxZzee0rh6/+94FpAynsuMpLX5h+LRsSG3rIciUQ==",
- "cpu": [
- "ppc64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-ppc64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linux-s390x": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.34.4.tgz",
- "integrity": "sha512-qVrZKE9Bsnzy+myf7lFKvng6bQzhNUAYcVORq2P7bDlvmF6u2sCmK2KyEQEBdYk+u3T01pVsPrkj943T1aJAsw==",
- "cpu": [
- "s390x"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-s390x": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linux-x64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.34.4.tgz",
- "integrity": "sha512-ZfGtcp2xS51iG79c6Vhw9CWqQC8l2Ot8dygxoDoIQPTat/Ov3qAa8qpxSrtAEAJW+UjTXc4yxCjNfxm4h6Xm2A==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linux-x64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linuxmusl-arm64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.34.4.tgz",
- "integrity": "sha512-8hDVvW9eu4yHWnjaOOR8kHVrew1iIX+MUgwxSuH2XyYeNRtLUe4VNioSqbNkB7ZYQJj9rUTT4PyRscyk2PXFKA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-linuxmusl-x64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.34.4.tgz",
- "integrity": "sha512-lU0aA5L8QTlfKjpDCEFOZsTYGn3AEiO6db8W5aQDxj0nQkVrZWmN3ZP9sYKWJdtq3PWPhUNlqehWyXpYDcI9Sg==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-libvips-linuxmusl-x64": "1.2.3"
- }
- },
- "node_modules/@img/sharp-wasm32": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.34.4.tgz",
- "integrity": "sha512-33QL6ZO/qpRyG7woB/HUALz28WnTMI2W1jgX3Nu2bypqLIKx/QKMILLJzJjI+SIbvXdG9fUnmrxR7vbi1sTBeA==",
- "cpu": [
- "wasm32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/runtime": "^1.5.0"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-arm64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-arm64/-/sharp-win32-arm64-0.34.4.tgz",
- "integrity": "sha512-2Q250do/5WXTwxW3zjsEuMSv5sUU4Tq9VThWKlU2EYLm4MB7ZeMwF+SFJutldYODXF6jzc6YEOC+VfX0SZQPqA==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-ia32": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.34.4.tgz",
- "integrity": "sha512-3ZeLue5V82dT92CNL6rsal6I2weKw1cYu+rGKm8fOCCtJTR2gYeUfY3FqUnIJsMUPIH68oS5jmZ0NiJ508YpEw==",
- "cpu": [
- "ia32"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@img/sharp-win32-x64": {
- "version": "0.34.4",
- "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.34.4.tgz",
- "integrity": "sha512-xIyj4wpYs8J18sVN3mSQjwrw7fKUqRw+Z5rnHNCy5fYTxigBz81u5mOMPmFumwjcn8+ld1ppptMBCLic1nz6ig==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0 AND LGPL-3.0-or-later",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- }
- },
- "node_modules/@inquirer/ansi": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.5.tgz",
- "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==",
- "license": "MIT",
- "engines": {
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
- }
- },
- "node_modules/@inquirer/confirm": {
- "version": "6.0.11",
- "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.11.tgz",
- "integrity": "sha512-pTpHjg0iEIRMYV/7oCZUMf27/383E6Wyhfc/MY+AVQGEoUobffIYWOK9YLP2XFRGz/9i6WlTQh1CkFVIo2Y7XA==",
- "license": "MIT",
- "dependencies": {
- "@inquirer/core": "^11.1.8",
- "@inquirer/type": "^4.0.5"
- },
- "engines": {
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
- "node_modules/@inquirer/core": {
- "version": "11.1.8",
- "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.8.tgz",
- "integrity": "sha512-/u+yJk2pOKNDOh1ZgdUH2RQaRx6OOH4I0uwL95qPvTFTIL38YBsuSC4r1yXBB3Q6JvNqFFc202gk0Ew79rrcjA==",
- "license": "MIT",
- "dependencies": {
- "@inquirer/ansi": "^2.0.5",
- "@inquirer/figures": "^2.0.5",
- "@inquirer/type": "^4.0.5",
- "cli-width": "^4.1.0",
- "fast-wrap-ansi": "^0.2.0",
- "mute-stream": "^3.0.0",
- "signal-exit": "^4.1.0"
- },
- "engines": {
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
- "node_modules/@inquirer/figures": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.5.tgz",
- "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==",
- "license": "MIT",
- "engines": {
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
- }
- },
- "node_modules/@inquirer/type": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.5.tgz",
- "integrity": "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==",
- "license": "MIT",
- "engines": {
- "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0"
- },
- "peerDependencies": {
- "@types/node": ">=18"
- },
- "peerDependenciesMeta": {
- "@types/node": {
- "optional": true
- }
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.8",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/set-array": "^1.2.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.24"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/remapping": {
- "version": "2.3.5",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.5",
- "@jridgewell/trace-mapping": "^0.3.24"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.2",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.2.1",
- "license": "MIT",
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.5.5",
- "license": "MIT"
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.25",
- "license": "MIT",
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@microsoft/clarity": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/@modelcontextprotocol/sdk": {
- "version": "1.29.0",
- "resolved": "https://registry.npmjs.org/@modelcontextprotocol/sdk/-/sdk-1.29.0.tgz",
- "integrity": "sha512-zo37mZA9hJWpULgkRpowewez1y6ML5GsXJPY8FI0tBBCd77HEvza4jDqRKOXgHNn867PVGCyTdzqpz0izu5ZjQ==",
- "license": "MIT",
- "dependencies": {
- "@hono/node-server": "^1.19.9",
- "ajv": "^8.17.1",
- "ajv-formats": "^3.0.1",
- "content-type": "^1.0.5",
- "cors": "^2.8.5",
- "cross-spawn": "^7.0.5",
- "eventsource": "^3.0.2",
- "eventsource-parser": "^3.0.0",
- "express": "^5.2.1",
- "express-rate-limit": "^8.2.1",
- "hono": "^4.11.4",
- "jose": "^6.1.3",
- "json-schema-typed": "^8.0.2",
- "pkce-challenge": "^5.0.0",
- "raw-body": "^3.0.0",
- "zod": "^3.25 || ^4.0",
- "zod-to-json-schema": "^3.25.1"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "@cfworker/json-schema": "^4.1.1",
- "zod": "^3.25 || ^4.0"
- },
- "peerDependenciesMeta": {
- "@cfworker/json-schema": {
- "optional": true
- },
- "zod": {
- "optional": false
- }
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/@modelcontextprotocol/sdk/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
- "node_modules/@mswjs/interceptors": {
- "version": "0.41.3",
- "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz",
- "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==",
- "license": "MIT",
- "dependencies": {
- "@open-draft/deferred-promise": "^2.2.0",
- "@open-draft/logger": "^0.3.0",
- "@open-draft/until": "^2.0.0",
- "is-node-process": "^1.2.0",
- "outvariant": "^1.4.3",
- "strict-event-emitter": "^0.5.1"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/@mswjs/interceptors/node_modules/@open-draft/deferred-promise": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz",
- "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==",
- "license": "MIT"
- },
- "node_modules/@napi-rs/canvas": {
- "version": "0.1.92",
- "license": "MIT",
- "optional": true,
- "workspaces": [
- "e2e/*"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- },
- "optionalDependencies": {
- "@napi-rs/canvas-android-arm64": "0.1.92",
- "@napi-rs/canvas-darwin-arm64": "0.1.92",
- "@napi-rs/canvas-darwin-x64": "0.1.92",
- "@napi-rs/canvas-linux-arm-gnueabihf": "0.1.92",
- "@napi-rs/canvas-linux-arm64-gnu": "0.1.92",
- "@napi-rs/canvas-linux-arm64-musl": "0.1.92",
- "@napi-rs/canvas-linux-riscv64-gnu": "0.1.92",
- "@napi-rs/canvas-linux-x64-gnu": "0.1.92",
- "@napi-rs/canvas-linux-x64-musl": "0.1.92",
- "@napi-rs/canvas-win32-arm64-msvc": "0.1.92",
- "@napi-rs/canvas-win32-x64-msvc": "0.1.92"
- }
- },
- "node_modules/@napi-rs/canvas-android-arm64": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-android-arm64/-/canvas-android-arm64-0.1.92.tgz",
- "integrity": "sha512-rDOtq53ujfOuevD5taxAuIFALuf1QsQWZe1yS/N4MtT+tNiDBEdjufvQRPWZ11FubL2uwgP8ApYU3YOaNu1ZsQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-darwin-arm64": {
- "version": "0.1.92",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-darwin-x64": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-darwin-x64/-/canvas-darwin-x64-0.1.92.tgz",
- "integrity": "sha512-5e/3ZapP7CqPtDcZPtmowCsjoyQwuNMMD7c0GKPtZQ8pgQhLkeq/3fmk0HqNSD1i227FyJN/9pDrhw/UMTkaWA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm-gnueabihf": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm-gnueabihf/-/canvas-linux-arm-gnueabihf-0.1.92.tgz",
- "integrity": "sha512-j6KaLL9iir68lwpzzY+aBGag1PZp3+gJE2mQ3ar4VJVmyLRVOh+1qsdNK1gfWoAVy5w6U7OEYFrLzN2vOFUSng==",
- "cpu": [
- "arm"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm64-gnu": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-gnu/-/canvas-linux-arm64-gnu-0.1.92.tgz",
- "integrity": "sha512-s3NlnJMHOSotUYVoTCoC1OcomaChFdKmZg0VsHFeIkeHbwX0uPHP4eCX1irjSfMykyvsGHTQDfBAtGYuqxCxhQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-arm64-musl": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-arm64-musl/-/canvas-linux-arm64-musl-0.1.92.tgz",
- "integrity": "sha512-xV0GQnukYq5qY+ebkAwHjnP2OrSGBxS3vSi1zQNQj0bkXU6Ou+Tw7JjCM7pZcQ28MUyEBS1yKfo7rc7ip2IPFQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-riscv64-gnu": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-riscv64-gnu/-/canvas-linux-riscv64-gnu-0.1.92.tgz",
- "integrity": "sha512-+GKvIFbQ74eB/TopEdH6XIXcvOGcuKvCITLGXy7WLJAyNp3Kdn1ncjxg91ihatBaPR+t63QOE99yHuIWn3UQ9w==",
- "cpu": [
- "riscv64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-x64-gnu": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-gnu/-/canvas-linux-x64-gnu-0.1.92.tgz",
- "integrity": "sha512-tFd6MwbEhZ1g64iVY2asV+dOJC+GT3Yd6UH4G3Hp0/VHQ6qikB+nvXEULskFYZ0+wFqlGPtXjG1Jmv7sJy+3Ww==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-linux-x64-musl": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-linux-x64-musl/-/canvas-linux-x64-musl-0.1.92.tgz",
- "integrity": "sha512-uSuqeSveB/ZGd72VfNbHCSXO9sArpZTvznMVsb42nqPP7gBGEH6NJQ0+hmF+w24unEmxBhPYakP/Wiosm16KkA==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-win32-arm64-msvc": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-arm64-msvc/-/canvas-win32-arm64-msvc-0.1.92.tgz",
- "integrity": "sha512-20SK5AU/OUNz9ZuoAPj5ekWai45EIBDh/XsdrVZ8le/pJVlhjFU3olbumSQUXRFn7lBRS+qwM8kA//uLaDx6iQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/canvas-win32-x64-msvc": {
- "version": "0.1.92",
- "resolved": "https://registry.npmjs.org/@napi-rs/canvas-win32-x64-msvc/-/canvas-win32-x64-msvc-0.1.92.tgz",
- "integrity": "sha512-KEhyZLzq1MXCNlXybz4k25MJmHFp+uK1SIb8yJB0xfrQjz5aogAMhyseSzewo+XxAq3OAOdyKvfHGNzT3w1RPg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/Brooooooklyn"
- }
- },
- "node_modules/@napi-rs/wasm-runtime": {
- "version": "0.2.12",
- "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz",
- "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.4.3",
- "@emnapi/runtime": "^1.4.3",
- "@tybys/wasm-util": "^0.10.0"
- }
- },
- "node_modules/@netlify/plugin-nextjs": {
- "version": "5.15.8",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/@next/env": {
- "version": "16.1.6",
- "license": "MIT"
- },
- "node_modules/@next/eslint-plugin-next": {
- "version": "16.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-glob": "3.3.1"
- }
- },
- "node_modules/@next/swc-darwin-arm64": {
- "version": "16.1.6",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-darwin-x64": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-16.1.6.tgz",
- "integrity": "sha512-BLFPYPDO+MNJsiDWbeVzqvYd4NyuRrEYVB5k2N3JfWncuHAy2IVwMAOlVQDFjj+krkWzhY2apvmekMkfQR0CUQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-gnu": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-16.1.6.tgz",
- "integrity": "sha512-OJYkCd5pj/QloBvoEcJ2XiMnlJkRv9idWA/j0ugSuA34gMT6f5b7vOiCQHVRpvStoZUknhl6/UxOXL4OwtdaBw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-arm64-musl": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-16.1.6.tgz",
- "integrity": "sha512-S4J2v+8tT3NIO9u2q+S0G5KdvNDjXfAv06OhfOzNDaBn5rw84DGXWndOEB7d5/x852A20sW1M56vhC/tRVbccQ==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-gnu": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-16.1.6.tgz",
- "integrity": "sha512-2eEBDkFlMMNQnkTyPBhQOAyn2qMxyG2eE7GPH2WIDGEpEILcBPI/jdSv4t6xupSP+ot/jkfrCShLAa7+ZUPcJQ==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-linux-x64-musl": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-16.1.6.tgz",
- "integrity": "sha512-oicJwRlyOoZXVlxmIMaTq7f8pN9QNbdes0q2FXfRsPhfCi8n8JmOZJm5oo1pwDaFbnnD421rVU409M3evFbIqg==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-arm64-msvc": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-16.1.6.tgz",
- "integrity": "sha512-gQmm8izDTPgs+DCWH22kcDmuUp7NyiJgEl18bcr8irXA5N2m2O+JQIr6f3ct42GOs9c0h8QF3L5SzIxcYAAXXw==",
- "cpu": [
- "arm64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@next/swc-win32-x64-msvc": {
- "version": "16.1.6",
- "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-16.1.6.tgz",
- "integrity": "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A==",
- "cpu": [
- "x64"
- ],
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@noble/ciphers": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-1.3.0.tgz",
- "integrity": "sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==",
- "license": "MIT",
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/curves": {
- "version": "1.9.7",
- "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.9.7.tgz",
- "integrity": "sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw==",
- "license": "MIT",
- "dependencies": {
- "@noble/hashes": "1.8.0"
- },
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@noble/hashes": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz",
- "integrity": "sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==",
- "license": "MIT",
- "engines": {
- "node": "^14.21.3 || >=16"
- },
- "funding": {
- "url": "https://paulmillr.com/funding/"
- }
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nolyfill/is-core-module": {
- "version": "1.0.39",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.4.0"
- }
- },
- "node_modules/@open-draft/deferred-promise": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz",
- "integrity": "sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==",
- "license": "MIT"
- },
- "node_modules/@open-draft/logger": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz",
- "integrity": "sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==",
- "license": "MIT",
- "dependencies": {
- "is-node-process": "^1.2.0",
- "outvariant": "^1.4.0"
- }
- },
- "node_modules/@open-draft/until": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz",
- "integrity": "sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==",
- "license": "MIT"
- },
- "node_modules/@protobufjs/aspromise": {
- "version": "1.1.2",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/base64": {
- "version": "1.1.2",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/codegen": {
- "version": "2.0.4",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/eventemitter": {
- "version": "1.1.0",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/fetch": {
- "version": "1.1.0",
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "node_modules/@protobufjs/float": {
- "version": "1.0.2",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/inquire": {
- "version": "1.1.0",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/path": {
- "version": "1.1.2",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/pool": {
- "version": "1.1.0",
- "license": "BSD-3-Clause"
- },
- "node_modules/@protobufjs/utf8": {
- "version": "1.1.0",
- "license": "BSD-3-Clause"
- },
- "node_modules/@radix-ui/number": {
- "version": "1.1.1",
- "license": "MIT"
- },
- "node_modules/@radix-ui/primitive": {
- "version": "1.1.3",
- "license": "MIT"
- },
- "node_modules/@radix-ui/react-accessible-icon": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accessible-icon/-/react-accessible-icon-1.1.7.tgz",
- "integrity": "sha512-XM+E4WXl0OqUJFovy6GjmxxFyx9opfCAIUku4dlKRd5YEPqt4kALOkQOp0Of6reHuUkJuiPBEc5k0o4z4lTC8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-accordion": {
- "version": "1.2.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-accordion/-/react-accordion-1.2.12.tgz",
- "integrity": "sha512-T4nygeh9YE9dLRPhAHSeOZi7HBXo+0kYIPJXayZfvWOWA0+n3dESrZbjfDPUABkUNym6Hd+f2IR113To8D2GPA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collapsible": "1.1.12",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-alert-dialog": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-alert-dialog/-/react-alert-dialog-1.1.15.tgz",
- "integrity": "sha512-oTVLkEw5GpdRe29BqJ0LSDFWI3qu0vR1M0mUkOQWDIUnY/QIkLpgDMWuKxP94c2NAC2LGcgVhG1ImF3jkZ5wXw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dialog": "1.1.15",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-alert-dialog/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-arrow": {
- "version": "1.1.7",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-aspect-ratio": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-aspect-ratio/-/react-aspect-ratio-1.1.7.tgz",
- "integrity": "sha512-Yq6lvO9HQyPwev1onK1daHCHqXVLzPhSVjmsNjCa2Zcxy2f7uJD2itDtxknv6FzAKCwD1qQkeVDmX/cev13n/g==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-avatar": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-avatar/-/react-avatar-1.1.10.tgz",
- "integrity": "sha512-V8piFfWapM5OmNCXTzVQY+E1rDa53zY+MQ4Y7356v4fFz6vqCyUtIz2rUD44ZEdwg78/jKmMJHj07+C/Z/rcog==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-checkbox": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-checkbox/-/react-checkbox-1.3.3.tgz",
- "integrity": "sha512-wBbpv+NQftHDdG86Qc0pIyXk5IR3tM8Vd0nWLKDcX8nNn4nXFOFwsKuqw2okA/1D/mpaAkmuyndrPJTYDNZtFw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collapsible": {
- "version": "1.1.12",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-collapsible/-/react-collapsible-1.1.12.tgz",
- "integrity": "sha512-Uu+mSh4agx2ib1uIGPP4/CKNULyajb3p92LsVXmH2EHVMTfZWpll88XJ0j4W0z3f8NK1eYl1+Mf/szHPmcHzyA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collection": {
- "version": "1.1.7",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-compose-refs": {
- "version": "1.1.2",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-context": {
- "version": "1.1.2",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-context-menu": {
- "version": "2.2.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-context-menu/-/react-context-menu-2.2.16.tgz",
- "integrity": "sha512-O8morBEW+HsVG28gYDZPTrT9UUovQUlJue5YO836tiTJhuIWBm/zQHc7j388sHWtdH/xUZurK9olD2+pcqx5ww==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dialog": {
- "version": "1.1.15",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-direction": {
- "version": "1.1.1",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dismissable-layer": {
- "version": "1.1.11",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-escape-keydown": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-dropdown-menu": {
- "version": "2.1.16",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-guards": {
- "version": "1.1.3",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-focus-scope": {
- "version": "1.1.7",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-form": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-form/-/react-form-0.1.8.tgz",
- "integrity": "sha512-QM70k4Zwjttifr5a4sZFts9fn8FzHYvQ5PiB19O2HsYibaHSVt9fH9rzB0XZo/YcM+b7t/p7lYCT/F5eOeF5yQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-label": "2.1.7",
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
- "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-hover-card": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-hover-card/-/react-hover-card-1.1.15.tgz",
- "integrity": "sha512-qgTkjNT1CfKMoP0rcasmlH2r1DAiYicWsDsufxl940sT2wHNEWWv6FMWIQXWhVdmC1d/HYfbhQx60KYyAtKxjg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-id": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-label": {
- "version": "2.1.8",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.4"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive": {
- "version": "2.1.4",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-slot": "1.2.4"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-menu": {
- "version": "2.1.16",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-menu/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-menubar": {
- "version": "1.1.16",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-menubar/-/react-menubar-1.1.16.tgz",
- "integrity": "sha512-EB1FktTz5xRRi2Er974AUQZWg2yVBb1yjip38/lgwtCVRd3a+maUoGHN/xs9Yv8SY8QwbSEb+YrxGadVWbEutA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-navigation-menu": {
- "version": "1.2.14",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.14.tgz",
- "integrity": "sha512-YB9mTFQvCOAQMHU+C/jVl96WmuWeltyUEpRJJky51huhds5W2FQr1J8D/16sQlf0ozxkPK8uF3niQMdUwZPv5w==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-one-time-password-field": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-one-time-password-field/-/react-one-time-password-field-0.1.8.tgz",
- "integrity": "sha512-ycS4rbwURavDPVjCb5iS3aG4lURFDILi6sKI/WITUMZ13gMmn/xGjpLoqBAalhJaDk8I3UbCM5GzKHrnzwHbvg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-password-toggle-field": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-password-toggle-field/-/react-password-toggle-field-0.1.3.tgz",
- "integrity": "sha512-/UuCrDBWravcaMix4TdT+qlNdVwOM1Nck9kWx/vafXsdfj1ChfhOdfi3cy9SGBpWgTXwYCuboT/oYpJy3clqfw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-is-hydrated": "0.1.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popover": {
- "version": "1.1.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-popover/-/react-popover-1.1.15.tgz",
- "integrity": "sha512-kr0X2+6Yy/vJzLYJUPCZEc8SfQcf+1COFoAqauJm74umQhta9M7lNJHP7QQS3vkvcGLQUbWpMzwrXYwrYztHKA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popover/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-popper": {
- "version": "1.2.8",
- "license": "MIT",
- "dependencies": {
- "@floating-ui/react-dom": "^2.0.0",
- "@radix-ui/react-arrow": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-rect": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1",
- "@radix-ui/rect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-portal": {
- "version": "1.1.9",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-presence": {
- "version": "1.1.5",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive": {
- "version": "2.1.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-slot": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-progress": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-progress/-/react-progress-1.1.7.tgz",
- "integrity": "sha512-vPdg/tF6YC/ynuBIJlk1mm7Le0VgW6ub6J2UWnTQ7/D23KXcPI1qy+0vBkgKgd38RCMJavBXpB83HPNFMTb0Fg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-radio-group": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-radio-group/-/react-radio-group-1.3.8.tgz",
- "integrity": "sha512-VBKYIYImA5zsxACdisNQ3BjCBfmbGH3kQlnFVqlWU4tXwjy7cGX8ta80BcrO+WJXIn5iBylEH3K6ZTlee//lgQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-roving-focus": {
- "version": "1.1.11",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-scroll-area": {
- "version": "1.2.10",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-select": {
- "version": "2.2.6",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3",
- "aria-hidden": "^1.2.4",
- "react-remove-scroll": "^2.6.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-select/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-separator": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-separator/-/react-separator-1.1.7.tgz",
- "integrity": "sha512-0HEb8R9E8A+jZjvmFCy/J4xhbXy3TV+9XSnGJ3KvTtjlIUy/YQ/p6UYZvi7YbeoeXdyU9+Y3scizK6hkY37baA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-slider": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz",
- "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/number": "1.1.1",
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-slot": {
- "version": "1.2.4",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-switch": {
- "version": "1.2.6",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-switch/-/react-switch-1.2.6.tgz",
- "integrity": "sha512-bByzr1+ep1zk4VubeEVViV592vu2lHE2BZY5OnzehZqOOgogN80+mNtCqPkhn2gklJqOpxWgPoYTSnhBCqpOXQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-previous": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tabs": {
- "version": "1.1.13",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toast": {
- "version": "1.2.15",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toast/-/react-toast-1.2.15.tgz",
- "integrity": "sha512-3OSz3TacUWy4WtOXV38DggwxoqJK4+eDkNMl5Z/MJZaoUPaP4/9lf81xXMe1I2ReTAptverZUpbPY4wWwWyL5g==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toggle": {
- "version": "1.1.10",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle/-/react-toggle-1.1.10.tgz",
- "integrity": "sha512-lS1odchhFTeZv3xwHH31YPObmJn8gOg7Lq12inrr0+BH/l3Tsq32VfjqH1oh80ARM3mlkfMic15n0kg4sD1poQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toggle-group": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toggle-group/-/react-toggle-group-1.1.11.tgz",
- "integrity": "sha512-5umnS0T8JQzQT6HbPyO7Hh9dgd82NmS36DQr+X/YJ9ctFNCiiQd6IJAYYZ33LUwm8M+taCz5t2ui29fHZc4Y6Q==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-toggle": "1.1.10",
- "@radix-ui/react-use-controllable-state": "1.2.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-toolbar": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-toolbar/-/react-toolbar-1.1.11.tgz",
- "integrity": "sha512-4ol06/1bLoFu1nwUqzdD4Y5RZ9oDdKeiHIsntug54Hcr1pgaHiPqHFEaXI1IFP/EsOfROQZ8Mig9VTIRza6Tjg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-separator": "1.1.7",
- "@radix-ui/react-toggle-group": "1.1.11"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tooltip": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-tooltip/-/react-tooltip-1.2.8.tgz",
- "integrity": "sha512-tY7sVt1yL9ozIxvmbtN5qtmH2krXcBCfjEiCgKGLqunJHvgvZG2Pcl2oQ3kbcZARb1BGEHdkLzcYGO8ynVlieg==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-id": "1.1.1",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-tooltip/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-callback-ref": {
- "version": "1.1.1",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-controllable-state": {
- "version": "1.2.2",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-effect-event": {
- "version": "0.0.2",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-escape-keydown": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-callback-ref": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-is-hydrated": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-use-is-hydrated/-/react-use-is-hydrated-0.1.0.tgz",
- "integrity": "sha512-U+UORVEq+cTnRIaostJv9AGdV3G6Y+zbVd+12e18jQ5A3c0xL03IhnHuiU4UV69wolOQp5GfR58NW/EgdQhwOA==",
- "license": "MIT",
- "dependencies": {
- "use-sync-external-store": "^1.5.0"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-layout-effect": {
- "version": "1.1.1",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-previous": {
- "version": "1.1.1",
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-rect": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/rect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-use-size": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-use-layout-effect": "1.1.1"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/react-visually-hidden": {
- "version": "1.2.3",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/@radix-ui/rect": {
- "version": "1.1.1",
- "license": "MIT"
- },
- "node_modules/@rtsao/scc": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@sec-ant/readable-stream": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz",
- "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==",
- "license": "MIT"
- },
- "node_modules/@sindresorhus/merge-streams": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
- "integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/@swc/helpers": {
- "version": "0.5.15",
- "license": "Apache-2.0",
- "dependencies": {
- "tslib": "^2.8.0"
- }
- },
- "node_modules/@tabler/icons": {
- "version": "3.36.1",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- }
- },
- "node_modules/@tabler/icons-react": {
- "version": "3.36.1",
- "license": "MIT",
- "dependencies": {
- "@tabler/icons": ""
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/codecalm"
- },
- "peerDependencies": {
- "react": ">= 16"
- }
- },
- "node_modules/@tailwindcss/node": {
- "version": "4.1.18",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/remapping": "^2.3.4",
- "enhanced-resolve": "^5.18.3",
- "jiti": "^2.6.1",
- "lightningcss": "1.30.2",
- "magic-string": "^0.30.21",
- "source-map-js": "^1.2.1",
- "tailwindcss": "4.1.18"
- }
- },
- "node_modules/@tailwindcss/oxide": {
- "version": "4.1.18",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- },
- "optionalDependencies": {
- "@tailwindcss/oxide-android-arm64": "4.1.18",
- "@tailwindcss/oxide-darwin-arm64": "4.1.18",
- "@tailwindcss/oxide-darwin-x64": "4.1.18",
- "@tailwindcss/oxide-freebsd-x64": "4.1.18",
- "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.18",
- "@tailwindcss/oxide-linux-arm64-gnu": "4.1.18",
- "@tailwindcss/oxide-linux-arm64-musl": "4.1.18",
- "@tailwindcss/oxide-linux-x64-gnu": "4.1.18",
- "@tailwindcss/oxide-linux-x64-musl": "4.1.18",
- "@tailwindcss/oxide-wasm32-wasi": "4.1.18",
- "@tailwindcss/oxide-win32-arm64-msvc": "4.1.18",
- "@tailwindcss/oxide-win32-x64-msvc": "4.1.18"
- }
- },
- "node_modules/@tailwindcss/oxide-android-arm64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.18.tgz",
- "integrity": "sha512-dJHz7+Ugr9U/diKJA0W6N/6/cjI+ZTAoxPf9Iz9BFRF2GzEX8IvXxFIi/dZBloVJX/MZGvRuFA9rqwdiIEZQ0Q==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-arm64": {
- "version": "4.1.18",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-darwin-x64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.18.tgz",
- "integrity": "sha512-FL5oxr2xQsFrc3X9o1fjHKBYBMD1QZNyc1Xzw/h5Qu4XnEBi3dZn96HcHm41c/euGV+GRiXFfh2hUCyKi/e+yw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-freebsd-x64": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.18.tgz",
- "integrity": "sha512-Fj+RHgu5bDodmV1dM9yAxlfJwkkWvLiRjbhuO2LEtwtlYlBgiAT4x/j5wQr1tC3SANAgD+0YcmWVrj8R9trVMA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.18.tgz",
- "integrity": "sha512-Fp+Wzk/Ws4dZn+LV2Nqx3IilnhH51YZoRaYHQsVq3RQvEl+71VGKFpkfHrLM/Li+kt5c0DJe/bHXK1eHgDmdiA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-gnu": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.18.tgz",
- "integrity": "sha512-S0n3jboLysNbh55Vrt7pk9wgpyTTPD0fdQeh7wQfMqLPM/Hrxi+dVsLsPrycQjGKEQk85Kgbx+6+QnYNiHalnw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-arm64-musl": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.18.tgz",
- "integrity": "sha512-1px92582HkPQlaaCkdRcio71p8bc8i/ap5807tPRDK/uw953cauQBT8c5tVGkOwrHMfc2Yh6UuxaH4vtTjGvHg==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-gnu": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.18.tgz",
- "integrity": "sha512-v3gyT0ivkfBLoZGF9LyHmts0Isc8jHZyVcbzio6Wpzifg/+5ZJpDiRiUhDLkcr7f/r38SWNe7ucxmGW3j3Kb/g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-linux-x64-musl": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.18.tgz",
- "integrity": "sha512-bhJ2y2OQNlcRwwgOAGMY0xTFStt4/wyU6pvI6LSuZpRgKQwxTec0/3Scu91O8ir7qCR3AuepQKLU/kX99FouqQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.18.tgz",
- "integrity": "sha512-LffYTvPjODiP6PT16oNeUQJzNVyJl1cjIebq/rWWBF+3eDst5JGEFSc5cWxyRCJ0Mxl+KyIkqRxk1XPEs9x8TA==",
- "bundleDependencies": [
- "@napi-rs/wasm-runtime",
- "@emnapi/core",
- "@emnapi/runtime",
- "@tybys/wasm-util",
- "@emnapi/wasi-threads",
- "tslib"
- ],
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1",
- "@emnapi/wasi-threads": "^1.1.0",
- "@napi-rs/wasm-runtime": "^1.1.0",
- "@tybys/wasm-util": "^0.10.1",
- "tslib": "^2.4.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/core": {
- "version": "1.7.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/wasi-threads": "1.1.0",
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/runtime": {
- "version": "1.7.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@emnapi/wasi-threads": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@napi-rs/wasm-runtime": {
- "version": "1.1.0",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@emnapi/core": "^1.7.1",
- "@emnapi/runtime": "^1.7.1",
- "@tybys/wasm-util": "^0.10.1"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/@tybys/wasm-util": {
- "version": "0.10.1",
- "dev": true,
- "inBundle": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@tailwindcss/oxide-wasm32-wasi/node_modules/tslib": {
- "version": "2.8.1",
- "dev": true,
- "inBundle": true,
- "license": "0BSD",
- "optional": true
- },
- "node_modules/@tailwindcss/oxide-win32-arm64-msvc": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.18.tgz",
- "integrity": "sha512-HjSA7mr9HmC8fu6bdsZvZ+dhjyGCLdotjVOgLA2vEqxEBZaQo9YTX4kwgEvPCpRh8o4uWc4J/wEoFzhEmjvPbA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/oxide-win32-x64-msvc": {
- "version": "4.1.18",
- "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.18.tgz",
- "integrity": "sha512-bJWbyYpUlqamC8dpR7pfjA0I7vdF6t5VpUGMWRkXVE3AXgIZjYUYAK7II1GNaxR8J1SSrSrppRar8G++JekE3Q==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@tailwindcss/postcss": {
- "version": "4.1.18",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@alloc/quick-lru": "^5.2.0",
- "@tailwindcss/node": "4.1.18",
- "@tailwindcss/oxide": "4.1.18",
- "postcss": "^8.4.41",
- "tailwindcss": "4.1.18"
- }
- },
- "node_modules/@tailwindcss/typography": {
- "version": "0.5.19",
- "license": "MIT",
- "dependencies": {
- "postcss-selector-parser": "6.0.10"
- },
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20 || >=4.0.0-beta.1"
- }
- },
- "node_modules/@tootallnate/once": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/@ts-morph/common": {
- "version": "0.27.0",
- "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.27.0.tgz",
- "integrity": "sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==",
- "license": "MIT",
- "dependencies": {
- "fast-glob": "^3.3.3",
- "minimatch": "^10.0.1",
- "path-browserify": "^1.0.1"
- }
- },
- "node_modules/@ts-morph/common/node_modules/balanced-match": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
- "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
- "license": "MIT",
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@ts-morph/common/node_modules/brace-expansion": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz",
- "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^4.0.2"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- }
- },
- "node_modules/@ts-morph/common/node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/@ts-morph/common/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@ts-morph/common/node_modules/minimatch": {
- "version": "10.2.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz",
- "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==",
- "license": "BlueOak-1.0.0",
- "dependencies": {
- "brace-expansion": "^5.0.5"
- },
- "engines": {
- "node": "18 || 20 || >=22"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@tybys/wasm-util": {
- "version": "0.10.1",
- "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz",
- "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "tslib": "^2.4.0"
- }
- },
- "node_modules/@types/body-parser": {
- "version": "1.19.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/connect": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/caseless": {
- "version": "0.12.5",
- "license": "MIT"
- },
- "node_modules/@types/connect": {
- "version": "3.4.38",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/cors": {
- "version": "2.8.19",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/estree": {
- "version": "1.0.8",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/express": {
- "version": "5.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/body-parser": "*",
- "@types/express-serve-static-core": "^5.0.0",
- "@types/serve-static": "^2"
- }
- },
- "node_modules/@types/express-serve-static-core": {
- "version": "5.0.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/qs": "*",
- "@types/range-parser": "*",
- "@types/send": "*"
- }
- },
- "node_modules/@types/file-saver": {
- "version": "2.0.7",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/http-errors": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json-schema": {
- "version": "7.0.15",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/json5": {
- "version": "0.0.29",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/marked": {
- "version": "6.0.0",
- "deprecated": "This is a stub types definition. marked provides its own type definitions, so you do not need this installed.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "marked": "*"
- }
- },
- "node_modules/@types/mime": {
- "version": "1.3.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/node": {
- "version": "25.2.3",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.16.0"
- }
- },
- "node_modules/@types/pako": {
- "version": "2.0.4",
- "license": "MIT"
- },
- "node_modules/@types/pdfkit": {
- "version": "0.14.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/pdfmake": {
- "version": "0.2.13",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/node": "*",
- "@types/pdfkit": "*"
- }
- },
- "node_modules/@types/qs": {
- "version": "6.14.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/raf": {
- "version": "3.4.3",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/range-parser": {
- "version": "1.2.7",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/@types/react": {
- "version": "19.2.14",
- "devOptional": true,
- "license": "MIT",
- "dependencies": {
- "csstype": "^3.2.2"
- }
- },
- "node_modules/@types/react-dom": {
- "version": "19.2.3",
- "devOptional": true,
- "license": "MIT",
- "peerDependencies": {
- "@types/react": "^19.2.0"
- }
- },
- "node_modules/@types/request": {
- "version": "2.48.12",
- "license": "MIT",
- "dependencies": {
- "@types/caseless": "*",
- "@types/node": "*",
- "@types/tough-cookie": "*",
- "form-data": "^2.5.0"
- }
- },
- "node_modules/@types/send": {
- "version": "0.17.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/mime": "^1",
- "@types/node": "*"
- }
- },
- "node_modules/@types/serve-static": {
- "version": "2.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/http-errors": "*",
- "@types/node": "*"
- }
- },
- "node_modules/@types/set-cookie-parser": {
- "version": "2.4.10",
- "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz",
- "integrity": "sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==",
- "license": "MIT",
- "dependencies": {
- "@types/node": "*"
- }
- },
- "node_modules/@types/statuses": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz",
- "integrity": "sha512-xMAgYwceFhRA2zY+XbEA7mxYbA093wdiW8Vu6gZPGWy9cmOyU9XesH1tNcEWsKFd5Vzrqx5T3D38PWx1FIIXkA==",
- "license": "MIT"
- },
- "node_modules/@types/tough-cookie": {
- "version": "4.0.5",
- "license": "MIT"
- },
- "node_modules/@types/trusted-types": {
- "version": "2.0.7",
- "license": "MIT",
- "optional": true
- },
- "node_modules/@types/uuid": {
- "version": "11.0.0",
- "deprecated": "This is a stub types definition. uuid provides its own type definitions, so you do not need this installed.",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "uuid": "*"
- }
- },
- "node_modules/@types/validate-npm-package-name": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/@types/validate-npm-package-name/-/validate-npm-package-name-4.0.2.tgz",
- "integrity": "sha512-lrpDziQipxCEeK5kWxvljWYhUvOiB2A9izZd9B2AFarYAkqZshb4lPbRs7zKEic6eGtH8V/2qJW+dPp9OtF6bw==",
- "license": "MIT"
- },
- "node_modules/@typescript-eslint/eslint-plugin": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/regexpp": "^4.12.2",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/type-utils": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "ignore": "^7.0.5",
- "natural-compare": "^1.4.0",
- "ts-api-utils": "^2.4.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "@typescript-eslint/parser": "^8.55.0",
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/@eslint-community/regexpp": {
- "version": "4.12.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
- }
- },
- "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
- "version": "7.0.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/@typescript-eslint/parser": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "debug": "^4.4.3"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/parser/node_modules/debug": {
- "version": "4.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/project-service": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/tsconfig-utils": "^8.55.0",
- "@typescript-eslint/types": "^8.55.0",
- "debug": "^4.4.3"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/project-service/node_modules/debug": {
- "version": "4.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/scope-manager": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/tsconfig-utils": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/utils": "8.55.0",
- "debug": "^4.4.3",
- "ts-api-utils": "^2.4.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/debug": {
- "version": "4.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/types": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/project-service": "8.55.0",
- "@typescript-eslint/tsconfig-utils": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/visitor-keys": "8.55.0",
- "debug": "^4.4.3",
- "minimatch": "^9.0.5",
- "semver": "^7.7.3",
- "tinyglobby": "^0.2.15",
- "ts-api-utils": "^2.4.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": {
- "version": "4.4.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch/node_modules/brace-expansion": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": {
- "version": "7.7.3",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/tinyglobby": {
- "version": "0.2.15",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.5.0",
- "picomatch": "^4.0.3"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/tinyglobby/node_modules/fdir": {
- "version": "6.5.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=12.0.0"
- },
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.9.1",
- "@typescript-eslint/scope-manager": "8.55.0",
- "@typescript-eslint/types": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.55.0",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@unrs/resolver-binding-android-arm-eabi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz",
- "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-android-arm64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz",
- "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "android"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-arm64": {
- "version": "1.11.1",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-darwin-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz",
- "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ]
- },
- "node_modules/@unrs/resolver-binding-freebsd-x64": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz",
- "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "freebsd"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz",
- "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz",
- "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz",
- "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-arm64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz",
- "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz",
- "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==",
- "cpu": [
- "ppc64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz",
- "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-riscv64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz",
- "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==",
- "cpu": [
- "riscv64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-s390x-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz",
- "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==",
- "cpu": [
- "s390x"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-gnu": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz",
- "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-linux-x64-musl": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz",
- "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "linux"
- ]
- },
- "node_modules/@unrs/resolver-binding-wasm32-wasi": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz",
- "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==",
- "cpu": [
- "wasm32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@napi-rs/wasm-runtime": "^0.2.11"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/@unrs/resolver-binding-win32-arm64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz",
- "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-ia32-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz",
- "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==",
- "cpu": [
- "ia32"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/@unrs/resolver-binding-win32-x64-msvc": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz",
- "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "win32"
- ]
- },
- "node_modules/abort-controller": {
- "version": "3.0.0",
- "license": "MIT",
- "dependencies": {
- "event-target-shim": "^5.0.0"
- },
- "engines": {
- "node": ">=6.5"
- }
- },
- "node_modules/accepts": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "mime-types": "^3.0.0",
- "negotiator": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/acorn": {
- "version": "8.15.0",
- "dev": true,
- "license": "MIT",
- "bin": {
- "acorn": "bin/acorn"
- },
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/acorn-jsx": {
- "version": "5.3.2",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
- }
- },
- "node_modules/agent-base": {
- "version": "7.1.3",
- "license": "MIT",
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/ajv": {
- "version": "6.12.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.1",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.4.1",
- "uri-js": "^4.2.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
- "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
- "license": "MIT",
- "dependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependencies": {
- "ajv": "^8.0.0"
- },
- "peerDependenciesMeta": {
- "ajv": {
- "optional": true
- }
- }
- },
- "node_modules/ajv-formats/node_modules/ajv": {
- "version": "8.18.0",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz",
- "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==",
- "license": "MIT",
- "dependencies": {
- "fast-deep-equal": "^3.1.3",
- "fast-uri": "^3.0.1",
- "json-schema-traverse": "^1.0.0",
- "require-from-string": "^2.0.2"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/epoberezkin"
- }
- },
- "node_modules/ajv-formats/node_modules/json-schema-traverse": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
- "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
- "license": "MIT"
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "license": "MIT",
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/ansis": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/ansis/-/ansis-4.2.0.tgz",
- "integrity": "sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==",
- "license": "ISC",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/argparse": {
- "version": "2.0.1",
- "license": "Python-2.0"
- },
- "node_modules/aria-hidden": {
- "version": "1.2.6",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/aria-query": {
- "version": "5.3.2",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/array-buffer-byte-length": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "is-array-buffer": "^3.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array-includes": {
- "version": "3.1.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.24.0",
- "es-object-atoms": "^1.1.1",
- "get-intrinsic": "^1.3.0",
- "is-string": "^1.1.1",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlast": {
- "version": "1.2.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.findlastindex": {
- "version": "1.2.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-shim-unscopables": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flat": {
- "version": "1.3.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.flatmap": {
- "version": "1.3.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/array.prototype.tosorted": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3",
- "es-errors": "^1.3.0",
- "es-shim-unscopables": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/arraybuffer.prototype.slice": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.1",
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "is-array-buffer": "^3.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/assemblyai": {
- "version": "4.30.0",
- "resolved": "https://registry.npmjs.org/assemblyai/-/assemblyai-4.30.0.tgz",
- "integrity": "sha512-F3X0YTOYBJSPhFHakvxlcKu3HjuEt3Nxs3xSSi1cDaK7i7X4hUdq/0RJcxanId3dQj3IKbkNdUbBnZiasMUf7Q==",
- "license": "MIT",
- "dependencies": {
- "ws": "^8.18.0"
- },
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/assemblyai/node_modules/ws": {
- "version": "8.20.0",
- "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz",
- "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==",
- "license": "MIT",
- "engines": {
- "node": ">=10.0.0"
- },
- "peerDependencies": {
- "bufferutil": "^4.0.1",
- "utf-8-validate": ">=5.0.2"
- },
- "peerDependenciesMeta": {
- "bufferutil": {
- "optional": true
- },
- "utf-8-validate": {
- "optional": true
- }
- }
- },
- "node_modules/ast-types": {
- "version": "0.16.1",
- "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz",
- "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ast-types-flow": {
- "version": "0.0.8",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/async-function": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/async-retry": {
- "version": "1.3.3",
- "license": "MIT",
- "dependencies": {
- "retry": "0.13.1"
- }
- },
- "node_modules/asynckit": {
- "version": "0.4.0",
- "license": "MIT"
- },
- "node_modules/attr-accept": {
- "version": "2.2.5",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.24",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "browserslist": "^4.28.1",
- "caniuse-lite": "^1.0.30001766",
- "fraction.js": "^5.3.4",
- "picocolors": "^1.1.1",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/available-typed-arrays": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "possible-typed-array-names": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/axe-core": {
- "version": "4.10.3",
- "dev": true,
- "license": "MPL-2.0",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/axobject-query": {
- "version": "4.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/base64-arraybuffer": {
- "version": "1.0.2",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/base64-js": {
- "version": "1.5.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/baseline-browser-mapping": {
- "version": "2.9.19",
- "license": "Apache-2.0",
- "bin": {
- "baseline-browser-mapping": "dist/cli.js"
- }
- },
- "node_modules/bignumber.js": {
- "version": "9.3.0",
- "license": "MIT",
- "engines": {
- "node": "*"
- }
- },
- "node_modules/body-parser": {
- "version": "2.2.2",
- "license": "MIT",
- "dependencies": {
- "bytes": "^3.1.2",
- "content-type": "^1.0.5",
- "debug": "^4.4.3",
- "http-errors": "^2.0.0",
- "iconv-lite": "^0.7.0",
- "on-finished": "^2.4.1",
- "qs": "^6.14.1",
- "raw-body": "^3.0.1",
- "type-is": "^2.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/body-parser/node_modules/debug": {
- "version": "4.4.3",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/brace-expansion": {
- "version": "1.1.12",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.3",
- "license": "MIT",
- "dependencies": {
- "fill-range": "^7.1.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/brotli": {
- "version": "1.3.3",
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.1.2"
- }
- },
- "node_modules/browserslist": {
- "version": "4.28.1",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "baseline-browser-mapping": "^2.9.0",
- "caniuse-lite": "^1.0.30001759",
- "electron-to-chromium": "^1.5.263",
- "node-releases": "^2.0.27",
- "update-browserslist-db": "^1.2.0"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/buffer-equal-constant-time": {
- "version": "1.0.1",
- "license": "BSD-3-Clause"
- },
- "node_modules/bundle-name": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/bundle-name/-/bundle-name-4.1.0.tgz",
- "integrity": "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==",
- "license": "MIT",
- "dependencies": {
- "run-applescript": "^7.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/bytes": {
- "version": "3.1.2",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/call-bind": {
- "version": "1.0.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.0",
- "es-define-property": "^1.0.0",
- "get-intrinsic": "^1.2.4",
- "set-function-length": "^1.2.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/call-bind-apply-helpers": {
- "version": "1.0.2",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/call-bound": {
- "version": "1.0.4",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "get-intrinsic": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/callsites": {
- "version": "3.1.0",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001769",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "CC-BY-4.0"
- },
- "node_modules/canvg": {
- "version": "3.0.11",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "@babel/runtime": "^7.12.5",
- "@types/raf": "^3.4.0",
- "core-js": "^3.8.3",
- "raf": "^3.4.1",
- "regenerator-runtime": "^0.13.7",
- "rgbcolor": "^1.0.1",
- "stackblur-canvas": "^2.0.0",
- "svg-pathdata": "^6.0.3"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/chalk": {
- "version": "4.1.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/clarity-js": {
- "version": "0.8.54",
- "license": "MIT"
- },
- "node_modules/class-variance-authority": {
- "version": "0.7.1",
- "license": "Apache-2.0",
- "dependencies": {
- "clsx": "^2.1.1"
- },
- "funding": {
- "url": "https://polar.sh/cva"
- }
- },
- "node_modules/cli-cursor": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz",
- "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==",
- "license": "MIT",
- "dependencies": {
- "restore-cursor": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-spinners": {
- "version": "2.9.2",
- "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz",
- "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/cli-width": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz",
- "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==",
- "license": "ISC",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/client-only": {
- "version": "0.0.1",
- "license": "MIT"
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "license": "ISC",
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/clone": {
- "version": "2.1.2",
- "license": "MIT",
- "engines": {
- "node": ">=0.8"
- }
- },
- "node_modules/clsx": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/code-block-writer": {
- "version": "13.0.3",
- "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-13.0.3.tgz",
- "integrity": "sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==",
- "license": "MIT"
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "license": "MIT",
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "license": "MIT"
- },
- "node_modules/combined-stream": {
- "version": "1.0.8",
- "license": "MIT",
- "dependencies": {
- "delayed-stream": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/commander": {
- "version": "14.0.3",
- "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz",
- "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/content-disposition": {
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "5.2.1"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/content-type": {
- "version": "1.0.5",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "license": "MIT"
- },
- "node_modules/cookie": {
- "version": "0.7.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/cookie-signature": {
- "version": "1.2.2",
- "license": "MIT",
- "engines": {
- "node": ">=6.6.0"
- }
- },
- "node_modules/core-js": {
- "version": "3.43.0",
- "hasInstallScript": true,
- "license": "MIT",
- "optional": true,
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "license": "MIT"
- },
- "node_modules/cors": {
- "version": "2.8.6",
- "license": "MIT",
- "dependencies": {
- "object-assign": "^4",
- "vary": "^1"
- },
- "engines": {
- "node": ">= 0.10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/cosmiconfig": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.1.tgz",
- "integrity": "sha512-hr4ihw+DBqcvrsEDioRO31Z17x71pUYoNe/4h6Z0wB72p7MU7/9gH8Q3s12NFhHPfYBBOV3qyfUxmr/Yn3shnQ==",
- "license": "MIT",
- "dependencies": {
- "env-paths": "^2.2.1",
- "import-fresh": "^3.3.0",
- "js-yaml": "^4.1.0",
- "parse-json": "^5.2.0"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/d-fischer"
- },
- "peerDependencies": {
- "typescript": ">=4.9.5"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/cross-spawn": {
- "version": "7.0.6",
- "license": "MIT",
- "dependencies": {
- "path-key": "^3.1.0",
- "shebang-command": "^2.0.0",
- "which": "^2.0.1"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/crypto-js": {
- "version": "4.2.0",
- "license": "MIT"
- },
- "node_modules/css-line-break": {
- "version": "2.1.0",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "utrie": "^1.0.2"
- }
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "license": "MIT",
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/csstype": {
- "version": "3.2.3",
- "devOptional": true,
- "license": "MIT"
- },
- "node_modules/damerau-levenshtein": {
- "version": "1.0.8",
- "dev": true,
- "license": "BSD-2-Clause"
- },
- "node_modules/data-uri-to-buffer": {
- "version": "4.0.1",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/data-view-buffer": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/data-view-byte-length": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/inspect-js"
- }
- },
- "node_modules/data-view-byte-offset": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-data-view": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/date-fns": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-4.1.0.tgz",
- "integrity": "sha512-Ukq0owbQXxa/U3EGtsdVBkR1w7KOQ5gIBqdH2hkvknzZPYvBxb/aa6E8L7tmjFtkwZBu3UXBbjIgPo/Ez4xaNg==",
- "license": "MIT",
- "peer": true,
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/kossnocorp"
- }
- },
- "node_modules/debug": {
- "version": "4.4.1",
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.3"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dedent": {
- "version": "1.7.2",
- "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.2.tgz",
- "integrity": "sha512-WzMx3mW98SN+zn3hgemf4OzdmyNhhhKz5Ay0pUfQiMQ3e1g+xmTJWp/pKdwKVXhdSkAEGIIzqeuWrL3mV/AXbA==",
- "license": "MIT",
- "peerDependencies": {
- "babel-plugin-macros": "^3.1.0"
- },
- "peerDependenciesMeta": {
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/deep-is": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/deepmerge": {
- "version": "4.3.1",
- "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
- "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/default-browser": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz",
- "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==",
- "license": "MIT",
- "dependencies": {
- "bundle-name": "^4.1.0",
- "default-browser-id": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/default-browser-id": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz",
- "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/define-data-property": {
- "version": "1.1.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0",
- "es-errors": "^1.3.0",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/define-lazy-prop": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz",
- "integrity": "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/define-properties": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.0.1",
- "has-property-descriptors": "^1.0.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/delayed-stream": {
- "version": "1.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.4.0"
- }
- },
- "node_modules/depd": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/dequal": {
- "version": "2.0.3",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/detect-libc": {
- "version": "2.1.2",
- "devOptional": true,
- "license": "Apache-2.0",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/detect-node-es": {
- "version": "1.1.0",
- "license": "MIT"
- },
- "node_modules/device-detector-js": {
- "version": "3.0.3",
- "license": "LGPL-3.0",
- "engines": {
- "node": ">= 8.11.4"
- }
- },
- "node_modules/dfa": {
- "version": "1.2.0",
- "license": "MIT"
- },
- "node_modules/diff": {
- "version": "8.0.4",
- "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.4.tgz",
- "integrity": "sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.3.1"
- }
- },
- "node_modules/doctrine": {
- "version": "2.1.0",
- "dev": true,
- "license": "Apache-2.0",
- "dependencies": {
- "esutils": "^2.0.2"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/docx": {
- "version": "9.5.2",
- "license": "MIT",
- "dependencies": {
- "@types/node": "^24.0.1",
- "hash.js": "^1.1.7",
- "jszip": "^3.10.1",
- "nanoid": "^5.1.3",
- "xml": "^1.0.1",
- "xml-js": "^1.6.8"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/docx/node_modules/@types/node": {
- "version": "24.0.4",
- "license": "MIT",
- "dependencies": {
- "undici-types": "~7.8.0"
- }
- },
- "node_modules/docx/node_modules/@types/node/node_modules/undici-types": {
- "version": "7.8.0",
- "license": "MIT"
- },
- "node_modules/docx/node_modules/nanoid": {
- "version": "5.1.5",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.js"
- },
- "engines": {
- "node": "^18 || >=20"
- }
- },
- "node_modules/dompurify": {
- "version": "3.3.1",
- "license": "(MPL-2.0 OR Apache-2.0)",
- "optional": true,
- "optionalDependencies": {
- "@types/trusted-types": "^2.0.7"
- }
- },
- "node_modules/dotenv": {
- "version": "17.3.1",
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://dotenvx.com"
- }
- },
- "node_modules/dunder-proto": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.1",
- "es-errors": "^1.3.0",
- "gopd": "^1.2.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/duplexify": {
- "version": "4.1.3",
- "license": "MIT",
- "dependencies": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.2"
- }
- },
- "node_modules/duplexify/node_modules/readable-stream": {
- "version": "3.6.2",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/duplexify/node_modules/readable-stream/node_modules/string_decoder": {
- "version": "1.3.0",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/ecdsa-sig-formatter": {
- "version": "1.0.11",
- "license": "Apache-2.0",
- "dependencies": {
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/eciesjs": {
- "version": "0.4.18",
- "resolved": "https://registry.npmjs.org/eciesjs/-/eciesjs-0.4.18.tgz",
- "integrity": "sha512-wG99Zcfcys9fZux7Cft8BAX/YrOJLJSZ3jyYPfhZHqN2E+Ffx+QXBDsv3gubEgPtV6dTzJMSQUwk1H98/t/0wQ==",
- "license": "MIT",
- "dependencies": {
- "@ecies/ciphers": "^0.2.5",
- "@noble/ciphers": "^1.3.0",
- "@noble/curves": "^1.9.7",
- "@noble/hashes": "^1.8.0"
- },
- "engines": {
- "bun": ">=1",
- "deno": ">=2",
- "node": ">=16"
- }
- },
- "node_modules/ee-first": {
- "version": "1.1.1",
- "license": "MIT"
- },
- "node_modules/electron-to-chromium": {
- "version": "1.5.286",
- "license": "ISC"
- },
- "node_modules/emoji-regex": {
- "version": "9.2.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/encodeurl": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/end-of-stream": {
- "version": "1.4.5",
- "license": "MIT",
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/enhanced-resolve": {
- "version": "5.19.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.4",
- "tapable": "^2.3.0"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/env-paths": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz",
- "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/error-ex": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.4.tgz",
- "integrity": "sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==",
- "license": "MIT",
- "dependencies": {
- "is-arrayish": "^0.2.1"
- }
- },
- "node_modules/es-abstract": {
- "version": "1.24.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-buffer-byte-length": "^1.0.2",
- "arraybuffer.prototype.slice": "^1.0.4",
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "data-view-buffer": "^1.0.2",
- "data-view-byte-length": "^1.0.2",
- "data-view-byte-offset": "^1.0.1",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "es-set-tostringtag": "^2.1.0",
- "es-to-primitive": "^1.3.0",
- "function.prototype.name": "^1.1.8",
- "get-intrinsic": "^1.3.0",
- "get-proto": "^1.0.1",
- "get-symbol-description": "^1.1.0",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "internal-slot": "^1.1.0",
- "is-array-buffer": "^3.0.5",
- "is-callable": "^1.2.7",
- "is-data-view": "^1.0.2",
- "is-negative-zero": "^2.0.3",
- "is-regex": "^1.2.1",
- "is-set": "^2.0.3",
- "is-shared-array-buffer": "^1.0.4",
- "is-string": "^1.1.1",
- "is-typed-array": "^1.1.15",
- "is-weakref": "^1.1.1",
- "math-intrinsics": "^1.1.0",
- "object-inspect": "^1.13.4",
- "object-keys": "^1.1.1",
- "object.assign": "^4.1.7",
- "own-keys": "^1.0.1",
- "regexp.prototype.flags": "^1.5.4",
- "safe-array-concat": "^1.1.3",
- "safe-push-apply": "^1.0.0",
- "safe-regex-test": "^1.1.0",
- "set-proto": "^1.0.0",
- "stop-iteration-iterator": "^1.1.0",
- "string.prototype.trim": "^1.2.10",
- "string.prototype.trimend": "^1.0.9",
- "string.prototype.trimstart": "^1.0.8",
- "typed-array-buffer": "^1.0.3",
- "typed-array-byte-length": "^1.0.3",
- "typed-array-byte-offset": "^1.0.4",
- "typed-array-length": "^1.0.7",
- "unbox-primitive": "^1.1.0",
- "which-typed-array": "^1.1.19"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/es-define-property": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-errors": {
- "version": "1.3.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-iterator-helpers": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-set-tostringtag": "^2.0.3",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.6",
- "globalthis": "^1.0.4",
- "gopd": "^1.2.0",
- "has-property-descriptors": "^1.0.2",
- "has-proto": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "iterator.prototype": "^1.1.4",
- "safe-array-concat": "^1.1.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-object-atoms": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-set-tostringtag": {
- "version": "2.1.0",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-shim-unscopables": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/es-to-primitive": {
- "version": "1.3.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7",
- "is-date-object": "^1.0.5",
- "is-symbol": "^1.0.4"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/esbuild": {
- "version": "0.27.3",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "bin": {
- "esbuild": "bin/esbuild"
- },
- "engines": {
- "node": ">=18"
- },
- "optionalDependencies": {
- "@esbuild/aix-ppc64": "0.27.3",
- "@esbuild/android-arm": "0.27.3",
- "@esbuild/android-arm64": "0.27.3",
- "@esbuild/android-x64": "0.27.3",
- "@esbuild/darwin-arm64": "0.27.3",
- "@esbuild/darwin-x64": "0.27.3",
- "@esbuild/freebsd-arm64": "0.27.3",
- "@esbuild/freebsd-x64": "0.27.3",
- "@esbuild/linux-arm": "0.27.3",
- "@esbuild/linux-arm64": "0.27.3",
- "@esbuild/linux-ia32": "0.27.3",
- "@esbuild/linux-loong64": "0.27.3",
- "@esbuild/linux-mips64el": "0.27.3",
- "@esbuild/linux-ppc64": "0.27.3",
- "@esbuild/linux-riscv64": "0.27.3",
- "@esbuild/linux-s390x": "0.27.3",
- "@esbuild/linux-x64": "0.27.3",
- "@esbuild/netbsd-arm64": "0.27.3",
- "@esbuild/netbsd-x64": "0.27.3",
- "@esbuild/openbsd-arm64": "0.27.3",
- "@esbuild/openbsd-x64": "0.27.3",
- "@esbuild/openharmony-arm64": "0.27.3",
- "@esbuild/sunos-x64": "0.27.3",
- "@esbuild/win32-arm64": "0.27.3",
- "@esbuild/win32-ia32": "0.27.3",
- "@esbuild/win32-x64": "0.27.3"
- }
- },
- "node_modules/escalade": {
- "version": "3.2.0",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-html": {
- "version": "1.0.3",
- "license": "MIT"
- },
- "node_modules/escape-string-regexp": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint": {
- "version": "9.39.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.8.0",
- "@eslint-community/regexpp": "^4.12.1",
- "@eslint/config-array": "^0.21.1",
- "@eslint/config-helpers": "^0.4.2",
- "@eslint/core": "^0.17.0",
- "@eslint/eslintrc": "^3.3.1",
- "@eslint/js": "9.39.2",
- "@eslint/plugin-kit": "^0.4.1",
- "@humanfs/node": "^0.16.6",
- "@humanwhocodes/module-importer": "^1.0.1",
- "@humanwhocodes/retry": "^0.4.2",
- "@types/estree": "^1.0.6",
- "ajv": "^6.12.4",
- "chalk": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "debug": "^4.3.2",
- "escape-string-regexp": "^4.0.0",
- "eslint-scope": "^8.4.0",
- "eslint-visitor-keys": "^4.2.1",
- "espree": "^10.4.0",
- "esquery": "^1.5.0",
- "esutils": "^2.0.2",
- "fast-deep-equal": "^3.1.3",
- "file-entry-cache": "^8.0.0",
- "find-up": "^5.0.0",
- "glob-parent": "^6.0.2",
- "ignore": "^5.2.0",
- "imurmurhash": "^0.1.4",
- "is-glob": "^4.0.0",
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "lodash.merge": "^4.6.2",
- "minimatch": "^3.1.2",
- "natural-compare": "^1.4.0",
- "optionator": "^0.9.3"
- },
- "bin": {
- "eslint": "bin/eslint.js"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://eslint.org/donate"
- },
- "peerDependencies": {
- "jiti": "*"
- },
- "peerDependenciesMeta": {
- "jiti": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-next": {
- "version": "16.1.6",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@next/eslint-plugin-next": "16.1.6",
- "eslint-import-resolver-node": "^0.3.6",
- "eslint-import-resolver-typescript": "^3.5.2",
- "eslint-plugin-import": "^2.32.0",
- "eslint-plugin-jsx-a11y": "^6.10.0",
- "eslint-plugin-react": "^7.37.0",
- "eslint-plugin-react-hooks": "^7.0.0",
- "globals": "16.4.0",
- "typescript-eslint": "^8.46.0"
- },
- "peerDependencies": {
- "eslint": ">=9.0.0",
- "typescript": ">=3.3.1"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-config-next/node_modules/globals": {
- "version": "16.4.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/eslint-import-resolver-node": {
- "version": "0.3.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7",
- "is-core-module": "^2.13.0",
- "resolve": "^1.22.4"
- }
- },
- "node_modules/eslint-import-resolver-node/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-import-resolver-typescript": {
- "version": "3.10.1",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "@nolyfill/is-core-module": "1.0.39",
- "debug": "^4.4.0",
- "get-tsconfig": "^4.10.0",
- "is-bun-module": "^2.0.0",
- "stable-hash": "^0.0.5",
- "tinyglobby": "^0.2.13",
- "unrs-resolver": "^1.6.2"
- },
- "engines": {
- "node": "^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint-import-resolver-typescript"
- },
- "peerDependencies": {
- "eslint": "*",
- "eslint-plugin-import": "*",
- "eslint-plugin-import-x": "*"
- },
- "peerDependenciesMeta": {
- "eslint-plugin-import": {
- "optional": true
- },
- "eslint-plugin-import-x": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils": {
- "version": "2.12.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "debug": "^3.2.7"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependenciesMeta": {
- "eslint": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-module-utils/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-import": {
- "version": "2.32.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@rtsao/scc": "^1.1.0",
- "array-includes": "^3.1.9",
- "array.prototype.findlastindex": "^1.2.6",
- "array.prototype.flat": "^1.3.3",
- "array.prototype.flatmap": "^1.3.3",
- "debug": "^3.2.7",
- "doctrine": "^2.1.0",
- "eslint-import-resolver-node": "^0.3.9",
- "eslint-module-utils": "^2.12.1",
- "hasown": "^2.0.2",
- "is-core-module": "^2.16.1",
- "is-glob": "^4.0.3",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "object.groupby": "^1.0.3",
- "object.values": "^1.2.1",
- "semver": "^6.3.1",
- "string.prototype.trimend": "^1.0.9",
- "tsconfig-paths": "^3.15.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-import/node_modules/debug": {
- "version": "3.2.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "ms": "^2.1.1"
- }
- },
- "node_modules/eslint-plugin-jsx-a11y": {
- "version": "6.10.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "aria-query": "^5.3.2",
- "array-includes": "^3.1.8",
- "array.prototype.flatmap": "^1.3.2",
- "ast-types-flow": "^0.0.8",
- "axe-core": "^4.10.0",
- "axobject-query": "^4.1.0",
- "damerau-levenshtein": "^1.0.8",
- "emoji-regex": "^9.2.2",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^3.3.5",
- "language-tags": "^1.0.9",
- "minimatch": "^3.1.2",
- "object.fromentries": "^2.0.8",
- "safe-regex-test": "^1.0.3",
- "string.prototype.includes": "^2.0.1"
- },
- "engines": {
- "node": ">=4.0"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9"
- }
- },
- "node_modules/eslint-plugin-react": {
- "version": "7.37.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.8",
- "array.prototype.findlast": "^1.2.5",
- "array.prototype.flatmap": "^1.3.3",
- "array.prototype.tosorted": "^1.1.4",
- "doctrine": "^2.1.0",
- "es-iterator-helpers": "^1.2.1",
- "estraverse": "^5.3.0",
- "hasown": "^2.0.2",
- "jsx-ast-utils": "^2.4.1 || ^3.0.0",
- "minimatch": "^3.1.2",
- "object.entries": "^1.1.9",
- "object.fromentries": "^2.0.8",
- "object.values": "^1.2.1",
- "prop-types": "^15.8.1",
- "resolve": "^2.0.0-next.5",
- "semver": "^6.3.1",
- "string.prototype.matchall": "^4.0.12",
- "string.prototype.repeat": "^1.0.0"
- },
- "engines": {
- "node": ">=4"
- },
- "peerDependencies": {
- "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"
- }
- },
- "node_modules/eslint-plugin-react-hooks": {
- "version": "7.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@babel/core": "^7.24.4",
- "@babel/parser": "^7.24.4",
- "hermes-parser": "^0.25.1",
- "zod": "^3.25.0 || ^4.0.0",
- "zod-validation-error": "^3.5.0 || ^4.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "peerDependencies": {
- "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0"
- }
- },
- "node_modules/eslint-plugin-react-refresh": {
- "version": "0.4.26",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "eslint": ">=8.40"
- }
- },
- "node_modules/eslint-plugin-react/node_modules/resolve": {
- "version": "2.0.0-next.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/eslint-scope": {
- "version": "8.4.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-visitor-keys": {
- "version": "4.2.1",
- "dev": true,
- "license": "Apache-2.0",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/espree": {
- "version": "10.4.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.15.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^4.2.1"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/esprima": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
- "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
- "license": "BSD-2-Clause",
- "bin": {
- "esparse": "bin/esparse.js",
- "esvalidate": "bin/esvalidate.js"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/esquery": {
- "version": "1.6.0",
- "dev": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "estraverse": "^5.1.0"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/esrecurse": {
- "version": "4.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/estraverse": {
- "version": "5.3.0",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "dev": true,
- "license": "BSD-2-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/etag": {
- "version": "1.8.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/event-target-shim": {
- "version": "5.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/eventsource": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-3.0.7.tgz",
- "integrity": "sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA==",
- "license": "MIT",
- "dependencies": {
- "eventsource-parser": "^3.0.1"
- },
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/eventsource-parser": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-3.0.6.tgz",
- "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==",
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- }
- },
- "node_modules/execa": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/execa/-/execa-9.6.1.tgz",
- "integrity": "sha512-9Be3ZoN4LmYR90tUoVu2te2BsbzHfhJyfEiAVfz7N5/zv+jduIfLrV2xdQXOHbaD6KgpGdO9PRPM1Y4Q9QkPkA==",
- "license": "MIT",
- "dependencies": {
- "@sindresorhus/merge-streams": "^4.0.0",
- "cross-spawn": "^7.0.6",
- "figures": "^6.1.0",
- "get-stream": "^9.0.0",
- "human-signals": "^8.0.1",
- "is-plain-obj": "^4.1.0",
- "is-stream": "^4.0.1",
- "npm-run-path": "^6.0.0",
- "pretty-ms": "^9.2.0",
- "signal-exit": "^4.1.0",
- "strip-final-newline": "^4.0.0",
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": "^18.19.0 || >=20.5.0"
- },
- "funding": {
- "url": "https://github.com/sindresorhus/execa?sponsor=1"
- }
- },
- "node_modules/execa/node_modules/is-stream": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
- "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/express": {
- "version": "5.2.1",
- "license": "MIT",
- "dependencies": {
- "accepts": "^2.0.0",
- "body-parser": "^2.2.1",
- "content-disposition": "^1.0.0",
- "content-type": "^1.0.5",
- "cookie": "^0.7.1",
- "cookie-signature": "^1.2.1",
- "debug": "^4.4.0",
- "depd": "^2.0.0",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "etag": "^1.8.1",
- "finalhandler": "^2.1.0",
- "fresh": "^2.0.0",
- "http-errors": "^2.0.0",
- "merge-descriptors": "^2.0.0",
- "mime-types": "^3.0.0",
- "on-finished": "^2.4.1",
- "once": "^1.4.0",
- "parseurl": "^1.3.3",
- "proxy-addr": "^2.0.7",
- "qs": "^6.14.0",
- "range-parser": "^1.2.1",
- "router": "^2.2.0",
- "send": "^1.1.0",
- "serve-static": "^2.2.0",
- "statuses": "^2.0.1",
- "type-is": "^2.0.1",
- "vary": "^1.1.2"
- },
- "engines": {
- "node": ">= 18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/express-rate-limit": {
- "version": "8.3.2",
- "resolved": "https://registry.npmjs.org/express-rate-limit/-/express-rate-limit-8.3.2.tgz",
- "integrity": "sha512-77VmFeJkO0/rvimEDuUC5H30oqUC4EyOhyGccfqoLebB0oiEYfM7nwPrsDsBL1gsTpwfzX8SFy2MT3TDyRq+bg==",
- "license": "MIT",
- "dependencies": {
- "ip-address": "10.1.0"
- },
- "engines": {
- "node": ">= 16"
- },
- "funding": {
- "url": "https://github.com/sponsors/express-rate-limit"
- },
- "peerDependencies": {
- "express": ">= 4.11"
- }
- },
- "node_modules/extend": {
- "version": "3.0.2",
- "license": "MIT"
- },
- "node_modules/fast-deep-equal": {
- "version": "3.1.3",
- "license": "MIT"
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fast-glob/node_modules/glob-parent": {
- "version": "5.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/fast-json-stable-stringify": {
- "version": "2.1.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-levenshtein": {
- "version": "2.0.6",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/fast-png": {
- "version": "6.4.0",
- "license": "MIT",
- "dependencies": {
- "@types/pako": "^2.0.3",
- "iobuffer": "^5.3.2",
- "pako": "^2.1.0"
- }
- },
- "node_modules/fast-png/node_modules/pako": {
- "version": "2.1.0",
- "license": "(MIT AND Zlib)"
- },
- "node_modules/fast-string-truncated-width": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz",
- "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==",
- "license": "MIT"
- },
- "node_modules/fast-string-width": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz",
- "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==",
- "license": "MIT",
- "dependencies": {
- "fast-string-truncated-width": "^3.0.2"
- }
- },
- "node_modules/fast-uri": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz",
- "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fastify"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/fastify"
- }
- ],
- "license": "BSD-3-Clause"
- },
- "node_modules/fast-wrap-ansi": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz",
- "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==",
- "license": "MIT",
- "dependencies": {
- "fast-string-width": "^3.0.2"
- }
- },
- "node_modules/fast-xml-parser": {
- "version": "5.3.6",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "strnum": "^2.1.2"
- },
- "bin": {
- "fxparser": "src/cli/cli.js"
- }
- },
- "node_modules/fastq": {
- "version": "1.19.1",
- "license": "ISC",
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/faye-websocket": {
- "version": "0.11.4",
- "license": "Apache-2.0",
- "dependencies": {
- "websocket-driver": ">=0.5.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/fdir": {
- "version": "6.4.6",
- "license": "MIT",
- "peerDependencies": {
- "picomatch": "^3 || ^4"
- },
- "peerDependenciesMeta": {
- "picomatch": {
- "optional": true
- }
- }
- },
- "node_modules/fetch-blob": {
- "version": "3.2.0",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "paypal",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "node-domexception": "^1.0.0",
- "web-streams-polyfill": "^3.0.3"
- },
- "engines": {
- "node": "^12.20 || >= 14.13"
- }
- },
- "node_modules/fflate": {
- "version": "0.8.2",
- "license": "MIT"
- },
- "node_modules/figures": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-6.1.0.tgz",
- "integrity": "sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==",
- "license": "MIT",
- "dependencies": {
- "is-unicode-supported": "^2.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/file-entry-cache": {
- "version": "8.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flat-cache": "^4.0.0"
- },
- "engines": {
- "node": ">=16.0.0"
- }
- },
- "node_modules/file-saver": {
- "version": "2.0.5",
- "license": "MIT"
- },
- "node_modules/file-selector": {
- "version": "2.1.2",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.7.0"
- },
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/fill-range": {
- "version": "7.1.1",
- "license": "MIT",
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/finalhandler": {
- "version": "2.1.0",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.4.0",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "on-finished": "^2.4.1",
- "parseurl": "^1.3.3",
- "statuses": "^2.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/find-up": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "locate-path": "^6.0.0",
- "path-exists": "^4.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/firebase": {
- "version": "12.9.0",
- "license": "Apache-2.0",
- "dependencies": {
- "@firebase/ai": "2.8.0",
- "@firebase/analytics": "0.10.19",
- "@firebase/analytics-compat": "0.2.25",
- "@firebase/app": "0.14.8",
- "@firebase/app-check": "0.11.0",
- "@firebase/app-check-compat": "0.4.0",
- "@firebase/app-compat": "0.5.8",
- "@firebase/app-types": "0.9.3",
- "@firebase/auth": "1.12.0",
- "@firebase/auth-compat": "0.6.2",
- "@firebase/data-connect": "0.3.12",
- "@firebase/database": "1.1.0",
- "@firebase/database-compat": "2.1.0",
- "@firebase/firestore": "4.11.0",
- "@firebase/firestore-compat": "0.4.5",
- "@firebase/functions": "0.13.1",
- "@firebase/functions-compat": "0.4.1",
- "@firebase/installations": "0.6.19",
- "@firebase/installations-compat": "0.2.19",
- "@firebase/messaging": "0.12.23",
- "@firebase/messaging-compat": "0.2.23",
- "@firebase/performance": "0.7.9",
- "@firebase/performance-compat": "0.2.22",
- "@firebase/remote-config": "0.8.0",
- "@firebase/remote-config-compat": "0.2.21",
- "@firebase/storage": "0.14.0",
- "@firebase/storage-compat": "0.4.0",
- "@firebase/util": "1.13.0"
- }
- },
- "node_modules/flat-cache": {
- "version": "4.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "flatted": "^3.2.9",
- "keyv": "^4.5.4"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/flatted": {
- "version": "3.3.3",
- "dev": true,
- "license": "ISC"
- },
- "node_modules/fontkit": {
- "version": "2.0.4",
- "license": "MIT",
- "dependencies": {
- "@swc/helpers": "^0.5.12",
- "brotli": "^1.3.2",
- "clone": "^2.1.2",
- "dfa": "^1.2.0",
- "fast-deep-equal": "^3.1.3",
- "restructure": "^3.0.0",
- "tiny-inflate": "^1.0.3",
- "unicode-properties": "^1.4.0",
- "unicode-trie": "^2.0.0"
- }
- },
- "node_modules/for-each": {
- "version": "0.3.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/form-data": {
- "version": "2.5.5",
- "license": "MIT",
- "dependencies": {
- "asynckit": "^0.4.0",
- "combined-stream": "^1.0.8",
- "es-set-tostringtag": "^2.1.0",
- "hasown": "^2.0.2",
- "mime-types": "^2.1.35",
- "safe-buffer": "^5.2.1"
- },
- "engines": {
- "node": ">= 0.12"
- }
- },
- "node_modules/form-data/node_modules/mime-types": {
- "version": "2.1.35",
- "license": "MIT",
- "dependencies": {
- "mime-db": "1.52.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/form-data/node_modules/mime-types/node_modules/mime-db": {
- "version": "1.52.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/formdata-polyfill": {
- "version": "4.0.10",
- "license": "MIT",
- "dependencies": {
- "fetch-blob": "^3.1.2"
- },
- "engines": {
- "node": ">=12.20.0"
- }
- },
- "node_modules/forwarded": {
- "version": "0.2.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/fraction.js": {
- "version": "5.3.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/framer-motion": {
- "version": "12.34.0",
- "license": "MIT",
- "dependencies": {
- "motion-dom": "^12.34.0",
- "motion-utils": "^12.29.2",
- "tslib": "^2.4.0"
- },
- "peerDependencies": {
- "@emotion/is-prop-valid": "*",
- "react": "^18.0.0 || ^19.0.0",
- "react-dom": "^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@emotion/is-prop-valid": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/fresh": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.3.4",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz",
- "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==",
- "license": "MIT",
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "dev": true,
- "license": "MIT",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/function-bind": {
- "version": "1.1.2",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/function.prototype.name": {
- "version": "1.1.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "functions-have-names": "^1.2.3",
- "hasown": "^2.0.2",
- "is-callable": "^1.2.7"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/functions-have-names": {
- "version": "1.2.3",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/fuzzysort": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/fuzzysort/-/fuzzysort-3.1.0.tgz",
- "integrity": "sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ==",
- "license": "MIT"
- },
- "node_modules/fzf": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fzf/-/fzf-0.5.2.tgz",
- "integrity": "sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==",
- "license": "BSD-3-Clause"
- },
- "node_modules/gaxios": {
- "version": "6.7.1",
- "license": "Apache-2.0",
- "dependencies": {
- "extend": "^3.0.2",
- "https-proxy-agent": "^7.0.1",
- "is-stream": "^2.0.0",
- "node-fetch": "^2.6.9",
- "uuid": "^9.0.1"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/gaxios/node_modules/node-fetch": {
- "version": "2.7.0",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/gaxios/node_modules/uuid": {
- "version": "9.0.1",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/gcp-metadata": {
- "version": "6.1.1",
- "license": "Apache-2.0",
- "dependencies": {
- "gaxios": "^6.1.1",
- "google-logging-utils": "^0.0.2",
- "json-bigint": "^1.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "license": "MIT",
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "license": "ISC",
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-east-asian-width": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz",
- "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-intrinsic": {
- "version": "1.3.0",
- "license": "MIT",
- "dependencies": {
- "call-bind-apply-helpers": "^1.0.2",
- "es-define-property": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.1.1",
- "function-bind": "^1.1.2",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "hasown": "^2.0.2",
- "math-intrinsics": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-nonce": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/get-own-enumerable-keys": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz",
- "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==",
- "license": "MIT",
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-proto": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/get-stream": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz",
- "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==",
- "license": "MIT",
- "dependencies": {
- "@sec-ant/readable-stream": "^0.4.1",
- "is-stream": "^4.0.1"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-stream/node_modules/is-stream": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz",
- "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/get-symbol-description": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/get-tsconfig": {
- "version": "4.10.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "resolve-pkg-maps": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
- }
- },
- "node_modules/glob-parent": {
- "version": "6.0.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.3"
- },
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/globals": {
- "version": "17.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globalthis": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.2.1",
- "gopd": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/google-auth-library": {
- "version": "9.15.1",
- "license": "Apache-2.0",
- "dependencies": {
- "base64-js": "^1.3.0",
- "ecdsa-sig-formatter": "^1.0.11",
- "gaxios": "^6.1.1",
- "gcp-metadata": "^6.1.0",
- "gtoken": "^7.0.0",
- "jws": "^4.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/google-logging-utils": {
- "version": "0.0.2",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/gopd": {
- "version": "1.2.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "license": "ISC"
- },
- "node_modules/graphql": {
- "version": "16.13.2",
- "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz",
- "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==",
- "license": "MIT",
- "engines": {
- "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0"
- }
- },
- "node_modules/gtoken": {
- "version": "7.1.0",
- "license": "MIT",
- "dependencies": {
- "gaxios": "^6.0.0",
- "jws": "^4.0.0"
- },
- "engines": {
- "node": ">=14.0.0"
- }
- },
- "node_modules/has-bigints": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-flag": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/has-property-descriptors": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-define-property": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-proto": {
- "version": "1.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-symbols": {
- "version": "1.1.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/has-tostringtag": {
- "version": "1.0.2",
- "license": "MIT",
- "dependencies": {
- "has-symbols": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/hash.js": {
- "version": "1.1.7",
- "license": "MIT",
- "dependencies": {
- "inherits": "^2.0.3",
- "minimalistic-assert": "^1.0.1"
- }
- },
- "node_modules/hasown": {
- "version": "2.0.2",
- "license": "MIT",
- "dependencies": {
- "function-bind": "^1.1.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/headers-polyfill": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-5.0.1.tgz",
- "integrity": "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==",
- "license": "MIT",
- "dependencies": {
- "@types/set-cookie-parser": "^2.4.10",
- "set-cookie-parser": "^3.0.1"
- }
- },
- "node_modules/hermes-estree": {
- "version": "0.25.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/hermes-parser": {
- "version": "0.25.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hermes-estree": "0.25.1"
- }
- },
- "node_modules/hono": {
- "version": "4.12.14",
- "resolved": "https://registry.npmjs.org/hono/-/hono-4.12.14.tgz",
- "integrity": "sha512-am5zfg3yu6sqn5yjKBNqhnTX7Cv+m00ox+7jbaKkrLMRJ4rAdldd1xPd/JzbBWspqaQv6RSTrgFN95EsfhC+7w==",
- "license": "MIT",
- "engines": {
- "node": ">=16.9.0"
- }
- },
- "node_modules/html-entities": {
- "version": "2.6.0",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/mdevils"
- },
- {
- "type": "patreon",
- "url": "https://patreon.com/mdevils"
- }
- ],
- "license": "MIT"
- },
- "node_modules/html2canvas": {
- "version": "1.4.1",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "css-line-break": "^2.1.0",
- "text-segmentation": "^1.0.3"
- },
- "engines": {
- "node": ">=8.0.0"
- }
- },
- "node_modules/http-errors": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "depd": "2.0.0",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": "2.0.1",
- "toidentifier": "1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-errors/node_modules/statuses": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/http-parser-js": {
- "version": "0.5.10",
- "license": "MIT"
- },
- "node_modules/http-proxy-agent": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "@tootallnate/once": "2",
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/http-proxy-agent/node_modules/agent-base": {
- "version": "6.0.2",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/https-proxy-agent": {
- "version": "7.0.6",
- "license": "MIT",
- "dependencies": {
- "agent-base": "^7.1.2",
- "debug": "4"
- },
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/human-signals": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-8.0.1.tgz",
- "integrity": "sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=18.18.0"
- }
- },
- "node_modules/iconv-lite": {
- "version": "0.7.2",
- "license": "MIT",
- "dependencies": {
- "safer-buffer": ">= 2.1.2 < 3.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/idb": {
- "version": "7.1.1",
- "license": "ISC"
- },
- "node_modules/ignore": {
- "version": "5.3.2",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/immediate": {
- "version": "3.0.6",
- "license": "MIT"
- },
- "node_modules/import-fresh": {
- "version": "3.3.1",
- "license": "MIT",
- "dependencies": {
- "parent-module": "^1.0.0",
- "resolve-from": "^4.0.0"
- },
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/imurmurhash": {
- "version": "0.1.4",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.8.19"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "license": "ISC"
- },
- "node_modules/internal-slot": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "hasown": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/iobuffer": {
- "version": "5.4.0",
- "license": "MIT"
- },
- "node_modules/ip-address": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz",
- "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==",
- "license": "MIT",
- "engines": {
- "node": ">= 12"
- }
- },
- "node_modules/ipaddr.js": {
- "version": "1.9.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/is-array-buffer": {
- "version": "3.0.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "license": "MIT"
- },
- "node_modules/is-async-function": {
- "version": "2.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "async-function": "^1.0.0",
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.1",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bigint": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-bigints": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-boolean-object": {
- "version": "1.2.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-bun-module": {
- "version": "2.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "semver": "^7.7.1"
- }
- },
- "node_modules/is-bun-module/node_modules/semver": {
- "version": "7.7.2",
- "dev": true,
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/is-callable": {
- "version": "1.2.7",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.16.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-data-view": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "is-typed-array": "^1.1.13"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-date-object": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-docker": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz",
- "integrity": "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==",
- "license": "MIT",
- "bin": {
- "is-docker": "cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-finalizationregistry": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-generator-function": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-proto": "^1.0.0",
- "has-tostringtag": "^1.0.2",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "license": "MIT",
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-in-ssh": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-in-ssh/-/is-in-ssh-1.0.0.tgz",
- "integrity": "sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-inside-container": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz",
- "integrity": "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==",
- "license": "MIT",
- "dependencies": {
- "is-docker": "^3.0.0"
- },
- "bin": {
- "is-inside-container": "cli.js"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-interactive": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz",
- "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-map": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-negative-zero": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-node-process": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz",
- "integrity": "sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==",
- "license": "MIT"
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/is-number-object": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-obj": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz",
- "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-plain-obj": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz",
- "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-promise": {
- "version": "4.0.0",
- "license": "MIT"
- },
- "node_modules/is-regex": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2",
- "hasown": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-regexp": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz",
- "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-set": {
- "version": "2.0.3",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-shared-array-buffer": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-stream": {
- "version": "2.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-string": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-symbol": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "has-symbols": "^1.1.0",
- "safe-regex-test": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-typed-array": {
- "version": "1.1.15",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-unicode-supported": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz",
- "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/is-weakmap": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakref": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-weakset": {
- "version": "2.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "get-intrinsic": "^1.2.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-wsl": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz",
- "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==",
- "license": "MIT",
- "dependencies": {
- "is-inside-container": "^1.0.0"
- },
- "engines": {
- "node": ">=16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/isarray": {
- "version": "1.0.0",
- "license": "MIT"
- },
- "node_modules/isexe": {
- "version": "2.0.0",
- "license": "ISC"
- },
- "node_modules/iterator.prototype": {
- "version": "1.1.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "get-proto": "^1.0.0",
- "has-symbols": "^1.1.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/jiti": {
- "version": "2.6.1",
- "dev": true,
- "license": "MIT",
- "bin": {
- "jiti": "lib/jiti-cli.mjs"
- }
- },
- "node_modules/jose": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.2.tgz",
- "integrity": "sha512-d7kPDd34KO/YnzaDOlikGpOurfF0ByC2sEV4cANCtdqLlTfBlw2p14O/5d/zv40gJPbIQxfES3nSx1/oYNyuZQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/panva"
- }
- },
- "node_modules/jpeg-exif": {
- "version": "1.1.4",
- "license": "MIT"
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "license": "MIT"
- },
- "node_modules/js-yaml": {
- "version": "4.1.1",
- "license": "MIT",
- "dependencies": {
- "argparse": "^2.0.1"
- },
- "bin": {
- "js-yaml": "bin/js-yaml.js"
- }
- },
- "node_modules/jsesc": {
- "version": "3.1.0",
- "license": "MIT",
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/json-bigint": {
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "bignumber.js": "^9.0.0"
- }
- },
- "node_modules/json-buffer": {
- "version": "3.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-parse-even-better-errors": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
- "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
- "license": "MIT"
- },
- "node_modules/json-schema-traverse": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json-schema-typed": {
- "version": "8.0.2",
- "resolved": "https://registry.npmjs.org/json-schema-typed/-/json-schema-typed-8.0.2.tgz",
- "integrity": "sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==",
- "license": "BSD-2-Clause"
- },
- "node_modules/json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "license": "MIT",
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz",
- "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==",
- "license": "MIT",
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/jspdf": {
- "version": "4.1.0",
- "license": "MIT",
- "dependencies": {
- "@babel/runtime": "^7.28.4",
- "fast-png": "^6.2.0",
- "fflate": "^0.8.1"
- },
- "optionalDependencies": {
- "canvg": "^3.0.11",
- "core-js": "^3.6.0",
- "dompurify": "^3.3.1",
- "html2canvas": "^1.0.0-rc.5"
- }
- },
- "node_modules/jspdf-autotable": {
- "version": "5.0.7",
- "license": "MIT",
- "peerDependencies": {
- "jspdf": "^2 || ^3 || ^4"
- }
- },
- "node_modules/jsx-ast-utils": {
- "version": "3.3.5",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "array-includes": "^3.1.6",
- "array.prototype.flat": "^1.3.1",
- "object.assign": "^4.1.4",
- "object.values": "^1.1.6"
- },
- "engines": {
- "node": ">=4.0"
- }
- },
- "node_modules/jszip": {
- "version": "3.10.1",
- "license": "(MIT OR GPL-3.0-or-later)",
- "dependencies": {
- "lie": "~3.3.0",
- "pako": "~1.0.2",
- "readable-stream": "~2.3.6",
- "setimmediate": "^1.0.5"
- }
- },
- "node_modules/jwa": {
- "version": "2.0.1",
- "license": "MIT",
- "dependencies": {
- "buffer-equal-constant-time": "^1.0.1",
- "ecdsa-sig-formatter": "1.0.11",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/jws": {
- "version": "4.0.1",
- "license": "MIT",
- "dependencies": {
- "jwa": "^2.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
- "node_modules/keyv": {
- "version": "4.5.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "json-buffer": "3.0.1"
- }
- },
- "node_modules/kleur": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz",
- "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/language-subtag-registry": {
- "version": "0.3.23",
- "dev": true,
- "license": "CC0-1.0"
- },
- "node_modules/language-tags": {
- "version": "1.0.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "language-subtag-registry": "^0.3.20"
- },
- "engines": {
- "node": ">=0.10"
- }
- },
- "node_modules/levn": {
- "version": "0.4.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1",
- "type-check": "~0.4.0"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/lie": {
- "version": "3.3.0",
- "license": "MIT",
- "dependencies": {
- "immediate": "~3.0.5"
- }
- },
- "node_modules/lightningcss": {
- "version": "1.30.2",
- "dev": true,
- "license": "MPL-2.0",
- "dependencies": {
- "detect-libc": "^2.0.3"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- },
- "optionalDependencies": {
- "lightningcss-android-arm64": "1.30.2",
- "lightningcss-darwin-arm64": "1.30.2",
- "lightningcss-darwin-x64": "1.30.2",
- "lightningcss-freebsd-x64": "1.30.2",
- "lightningcss-linux-arm-gnueabihf": "1.30.2",
- "lightningcss-linux-arm64-gnu": "1.30.2",
- "lightningcss-linux-arm64-musl": "1.30.2",
- "lightningcss-linux-x64-gnu": "1.30.2",
- "lightningcss-linux-x64-musl": "1.30.2",
- "lightningcss-win32-arm64-msvc": "1.30.2",
- "lightningcss-win32-x64-msvc": "1.30.2"
- }
- },
- "node_modules/lightningcss-android-arm64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-android-arm64/-/lightningcss-android-arm64-1.30.2.tgz",
- "integrity": "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "android"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-arm64": {
- "version": "1.30.2",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-darwin-x64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.2.tgz",
- "integrity": "sha512-oBZgKchomuDYxr7ilwLcyms6BCyLn0z8J0+ZZmfpjwg9fRVZIR5/GMXd7r9RH94iDhld3UmSjBM6nXWM2TfZTQ==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-freebsd-x64": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.2.tgz",
- "integrity": "sha512-c2bH6xTrf4BDpK8MoGG4Bd6zAMZDAXS569UxCAGcA7IKbHNMlhGQ89eRmvpIUGfKWNVdbhSbkQaWhEoMGmGslA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "freebsd"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm-gnueabihf": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.2.tgz",
- "integrity": "sha512-eVdpxh4wYcm0PofJIZVuYuLiqBIakQ9uFZmipf6LF/HRj5Bgm0eb3qL/mr1smyXIS1twwOxNWndd8z0E374hiA==",
- "cpu": [
- "arm"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-gnu": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.2.tgz",
- "integrity": "sha512-UK65WJAbwIJbiBFXpxrbTNArtfuznvxAJw4Q2ZGlU8kPeDIWEX1dg3rn2veBVUylA2Ezg89ktszWbaQnxD/e3A==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-arm64-musl": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.2.tgz",
- "integrity": "sha512-5Vh9dGeblpTxWHpOx8iauV02popZDsCYMPIgiuw97OJ5uaDsL86cnqSFs5LZkG3ghHoX5isLgWzMs+eD1YzrnA==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-gnu": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.2.tgz",
- "integrity": "sha512-Cfd46gdmj1vQ+lR6VRTTadNHu6ALuw2pKR9lYq4FnhvgBc4zWY1EtZcAc6EffShbb1MFrIPfLDXD6Xprbnni4w==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-linux-x64-musl": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.2.tgz",
- "integrity": "sha512-XJaLUUFXb6/QG2lGIW6aIk6jKdtjtcffUT0NKvIqhSBY3hh9Ch+1LCeH80dR9q9LBjG3ewbDjnumefsLsP6aiA==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-arm64-msvc": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.2.tgz",
- "integrity": "sha512-FZn+vaj7zLv//D/192WFFVA0RgHawIcHqLX9xuWiQt7P0PtdFEVaxgF9rjM/IRYHQXNnk61/H/gb2Ei+kUQ4xQ==",
- "cpu": [
- "arm64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/lightningcss-win32-x64-msvc": {
- "version": "1.30.2",
- "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.2.tgz",
- "integrity": "sha512-5g1yc73p+iAkid5phb4oVFMB45417DkRevRbt/El/gKXJk4jid+vPFF/AXbxn05Aky8PapwzZrdJShv5C0avjw==",
- "cpu": [
- "x64"
- ],
- "dev": true,
- "license": "MPL-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "engines": {
- "node": ">= 12.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/parcel"
- }
- },
- "node_modules/linebreak": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "base64-js": "0.0.8",
- "unicode-trie": "^2.0.0"
- }
- },
- "node_modules/linebreak/node_modules/base64-js": {
- "version": "0.0.8",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/lines-and-columns": {
- "version": "1.2.4",
- "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
- "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
- "license": "MIT"
- },
- "node_modules/locate-path": {
- "version": "6.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-locate": "^5.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/lodash.camelcase": {
- "version": "4.3.0",
- "license": "MIT"
- },
- "node_modules/lodash.merge": {
- "version": "4.6.2",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/log-symbols": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz",
- "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^5.3.0",
- "is-unicode-supported": "^1.3.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/log-symbols/node_modules/chalk": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/log-symbols/node_modules/is-unicode-supported": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz",
- "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/long": {
- "version": "5.3.2",
- "license": "Apache-2.0"
- },
- "node_modules/loose-envify": {
- "version": "1.4.0",
- "license": "MIT",
- "dependencies": {
- "js-tokens": "^3.0.0 || ^4.0.0"
- },
- "bin": {
- "loose-envify": "cli.js"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "license": "ISC",
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/lucide-react": {
- "version": "0.562.0",
- "license": "ISC",
- "peerDependencies": {
- "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/magic-string": {
- "version": "0.30.21",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@jridgewell/sourcemap-codec": "^1.5.5"
- }
- },
- "node_modules/make-cancellable-promise": {
- "version": "2.0.0",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/wojtekmaj/make-cancellable-promise?sponsor=1"
- }
- },
- "node_modules/make-event-props": {
- "version": "2.0.0",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/wojtekmaj/make-event-props?sponsor=1"
- }
- },
- "node_modules/marked": {
- "version": "17.0.2",
- "license": "MIT",
- "bin": {
- "marked": "bin/marked.js"
- },
- "engines": {
- "node": ">= 20"
- }
- },
- "node_modules/math-intrinsics": {
- "version": "1.1.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/media-typer": {
- "version": "1.1.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/merge-descriptors": {
- "version": "2.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/merge-refs": {
- "version": "2.0.0",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/wojtekmaj/merge-refs?sponsor=1"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/merge-stream": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
- "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
- "license": "MIT"
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.8",
- "license": "MIT",
- "dependencies": {
- "braces": "^3.0.3",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/micromatch/node_modules/picomatch": {
- "version": "2.3.1",
- "license": "MIT",
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/mime": {
- "version": "3.0.0",
- "license": "MIT",
- "bin": {
- "mime": "cli.js"
- },
- "engines": {
- "node": ">=10.0.0"
- }
- },
- "node_modules/mime-db": {
- "version": "1.54.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mime-types": {
- "version": "3.0.1",
- "license": "MIT",
- "dependencies": {
- "mime-db": "^1.54.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/mimic-function": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz",
- "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/minimalistic-assert": {
- "version": "1.0.1",
- "license": "ISC"
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/motion": {
- "version": "12.34.0",
- "license": "MIT",
- "dependencies": {
- "framer-motion": "^12.34.0",
- "tslib": "^2.4.0"
- },
- "peerDependencies": {
- "@emotion/is-prop-valid": "*",
- "react": "^18.0.0 || ^19.0.0",
- "react-dom": "^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@emotion/is-prop-valid": {
- "optional": true
- },
- "react": {
- "optional": true
- },
- "react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/motion-dom": {
- "version": "12.34.0",
- "license": "MIT",
- "dependencies": {
- "motion-utils": "^12.29.2"
- }
- },
- "node_modules/motion-utils": {
- "version": "12.29.2",
- "license": "MIT"
- },
- "node_modules/ms": {
- "version": "2.1.3",
- "license": "MIT"
- },
- "node_modules/msw": {
- "version": "2.13.4",
- "resolved": "https://registry.npmjs.org/msw/-/msw-2.13.4.tgz",
- "integrity": "sha512-fPlKBeFe+8rpcyR3umUmmHuNwu6gc6T3STvkgEa9WDX/HEgal9wDeflpCUAIRtmvaLZM2igfI5y1bZ9G5J26KA==",
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "@inquirer/confirm": "^6.0.11",
- "@mswjs/interceptors": "^0.41.3",
- "@open-draft/deferred-promise": "^3.0.0",
- "@types/statuses": "^2.0.6",
- "cookie": "^1.1.1",
- "graphql": "^16.13.2",
- "headers-polyfill": "^5.0.1",
- "is-node-process": "^1.2.0",
- "outvariant": "^1.4.3",
- "path-to-regexp": "^6.3.0",
- "picocolors": "^1.1.1",
- "rettime": "^0.11.7",
- "statuses": "^2.0.2",
- "strict-event-emitter": "^0.5.1",
- "tough-cookie": "^6.0.1",
- "type-fest": "^5.5.0",
- "until-async": "^3.0.2",
- "yargs": "^17.7.2"
- },
- "bin": {
- "msw": "cli/index.js"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/mswjs"
- },
- "peerDependencies": {
- "typescript": ">= 4.8.x"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/msw/node_modules/cookie": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
- "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/msw/node_modules/path-to-regexp": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz",
- "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==",
- "license": "MIT"
- },
- "node_modules/mute-stream": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz",
- "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==",
- "license": "ISC",
- "engines": {
- "node": "^20.17.0 || >=22.9.0"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.11",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/napi-postinstall": {
- "version": "0.3.2",
- "dev": true,
- "license": "MIT",
- "bin": {
- "napi-postinstall": "lib/cli.js"
- },
- "engines": {
- "node": "^12.20.0 || ^14.18.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/napi-postinstall"
- }
- },
- "node_modules/natural-compare": {
- "version": "1.4.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/negotiator": {
- "version": "1.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/next": {
- "version": "16.1.6",
- "license": "MIT",
- "dependencies": {
- "@next/env": "16.1.6",
- "@swc/helpers": "0.5.15",
- "baseline-browser-mapping": "^2.8.3",
- "caniuse-lite": "^1.0.30001579",
- "postcss": "8.4.31",
- "styled-jsx": "5.1.6"
- },
- "bin": {
- "next": "dist/bin/next"
- },
- "engines": {
- "node": ">=20.9.0"
- },
- "optionalDependencies": {
- "@next/swc-darwin-arm64": "16.1.6",
- "@next/swc-darwin-x64": "16.1.6",
- "@next/swc-linux-arm64-gnu": "16.1.6",
- "@next/swc-linux-arm64-musl": "16.1.6",
- "@next/swc-linux-x64-gnu": "16.1.6",
- "@next/swc-linux-x64-musl": "16.1.6",
- "@next/swc-win32-arm64-msvc": "16.1.6",
- "@next/swc-win32-x64-msvc": "16.1.6",
- "sharp": "^0.34.4"
- },
- "peerDependencies": {
- "@opentelemetry/api": "^1.1.0",
- "@playwright/test": "^1.51.1",
- "babel-plugin-react-compiler": "*",
- "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0",
- "sass": "^1.3.0"
- },
- "peerDependenciesMeta": {
- "@opentelemetry/api": {
- "optional": true
- },
- "@playwright/test": {
- "optional": true
- },
- "babel-plugin-react-compiler": {
- "optional": true
- },
- "sass": {
- "optional": true
- }
- }
- },
- "node_modules/next-themes": {
- "version": "0.4.6",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17 || ^18 || ^19 || ^19.0.0-rc"
- }
- },
- "node_modules/next/node_modules/postcss": {
- "version": "8.4.31",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/node-domexception": {
- "version": "1.0.0",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/jimmywarting"
- },
- {
- "type": "github",
- "url": "https://paypal.me/jimmywarting"
- }
- ],
- "license": "MIT",
- "engines": {
- "node": ">=10.5.0"
- }
- },
- "node_modules/node-fetch": {
- "version": "3.3.2",
- "license": "MIT",
- "dependencies": {
- "data-uri-to-buffer": "^4.0.0",
- "fetch-blob": "^3.1.4",
- "formdata-polyfill": "^4.0.10"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/node-fetch"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.27",
- "license": "MIT"
- },
- "node_modules/npm-run-path": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz",
- "integrity": "sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==",
- "license": "MIT",
- "dependencies": {
- "path-key": "^4.0.0",
- "unicorn-magic": "^0.3.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/npm-run-path/node_modules/path-key": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
- "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/object-assign": {
- "version": "4.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/object-inspect": {
- "version": "1.13.4",
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object-keys": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object-treeify": {
- "version": "1.1.33",
- "resolved": "https://registry.npmjs.org/object-treeify/-/object-treeify-1.1.33.tgz",
- "integrity": "sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==",
- "license": "MIT",
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/object.assign": {
- "version": "4.1.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0",
- "has-symbols": "^1.1.0",
- "object-keys": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.entries": {
- "version": "1.1.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.fromentries": {
- "version": "2.0.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/object.groupby": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/object.values": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/on-finished": {
- "version": "2.4.1",
- "license": "MIT",
- "dependencies": {
- "ee-first": "1.1.1"
- },
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/once": {
- "version": "1.4.0",
- "license": "ISC",
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/onetime": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz",
- "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==",
- "license": "MIT",
- "dependencies": {
- "mimic-function": "^5.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/open": {
- "version": "11.0.0",
- "resolved": "https://registry.npmjs.org/open/-/open-11.0.0.tgz",
- "integrity": "sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==",
- "license": "MIT",
- "dependencies": {
- "default-browser": "^5.4.0",
- "define-lazy-prop": "^3.0.0",
- "is-in-ssh": "^1.0.0",
- "is-inside-container": "^1.0.0",
- "powershell-utils": "^0.1.0",
- "wsl-utils": "^0.3.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/optionator": {
- "version": "0.9.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "deep-is": "^0.1.3",
- "fast-levenshtein": "^2.0.6",
- "levn": "^0.4.1",
- "prelude-ls": "^1.2.1",
- "type-check": "^0.4.0",
- "word-wrap": "^1.2.5"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/ora": {
- "version": "8.2.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz",
- "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==",
- "license": "MIT",
- "dependencies": {
- "chalk": "^5.3.0",
- "cli-cursor": "^5.0.0",
- "cli-spinners": "^2.9.2",
- "is-interactive": "^2.0.0",
- "is-unicode-supported": "^2.0.0",
- "log-symbols": "^6.0.0",
- "stdin-discarder": "^0.2.2",
- "string-width": "^7.2.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/ansi-regex": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
- "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-regex?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/chalk": {
- "version": "5.6.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz",
- "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==",
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/ora/node_modules/emoji-regex": {
- "version": "10.6.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
- "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
- "license": "MIT"
- },
- "node_modules/ora/node_modules/string-width": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz",
- "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^10.3.0",
- "get-east-asian-width": "^1.0.0",
- "strip-ansi": "^7.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/ora/node_modules/strip-ansi": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
- "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^6.2.2"
- },
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/chalk/strip-ansi?sponsor=1"
- }
- },
- "node_modules/outvariant": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz",
- "integrity": "sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==",
- "license": "MIT"
- },
- "node_modules/own-keys": {
- "version": "1.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "get-intrinsic": "^1.2.6",
- "object-keys": "^1.1.1",
- "safe-push-apply": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/p-limit": {
- "version": "3.1.0",
- "license": "MIT",
- "dependencies": {
- "yocto-queue": "^0.1.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/p-locate": {
- "version": "5.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "p-limit": "^3.0.2"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/package-manager-detector": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz",
- "integrity": "sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==",
- "license": "MIT"
- },
- "node_modules/pako": {
- "version": "1.0.11",
- "license": "(MIT AND Zlib)"
- },
- "node_modules/parent-module": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "callsites": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/parse-json": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz",
- "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==",
- "license": "MIT",
- "dependencies": {
- "@babel/code-frame": "^7.0.0",
- "error-ex": "^1.3.1",
- "json-parse-even-better-errors": "^2.3.0",
- "lines-and-columns": "^1.1.6"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parse-ms": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-4.0.0.tgz",
- "integrity": "sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/parseurl": {
- "version": "1.3.3",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/path-browserify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz",
- "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==",
- "license": "MIT"
- },
- "node_modules/path-exists": {
- "version": "4.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-key": {
- "version": "3.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/path-to-regexp": {
- "version": "8.2.0",
- "license": "MIT",
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/pdfjs-dist": {
- "version": "5.4.296",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=20.16.0 || >=22.3.0"
- },
- "optionalDependencies": {
- "@napi-rs/canvas": "^0.1.80"
- }
- },
- "node_modules/pdfkit": {
- "version": "0.17.2",
- "license": "MIT",
- "dependencies": {
- "crypto-js": "^4.2.0",
- "fontkit": "^2.0.4",
- "jpeg-exif": "^1.1.4",
- "linebreak": "^1.1.0",
- "png-js": "^1.0.0"
- }
- },
- "node_modules/pdfmake": {
- "version": "0.3.4",
- "license": "MIT",
- "dependencies": {
- "linebreak": "^1.1.0",
- "pdfkit": "^0.17.2",
- "xmldoc": "^2.0.3"
- },
- "engines": {
- "node": ">=20"
- }
- },
- "node_modules/performance-now": {
- "version": "2.1.0",
- "license": "MIT",
- "optional": true
- },
- "node_modules/picocolors": {
- "version": "1.1.1",
- "license": "ISC"
- },
- "node_modules/picomatch": {
- "version": "4.0.3",
- "license": "MIT",
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pkce-challenge": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/pkce-challenge/-/pkce-challenge-5.0.1.tgz",
- "integrity": "sha512-wQ0b/W4Fr01qtpHlqSqspcj3EhBvimsdh0KlHhH8HRZnMsEa0ea2fTULOXOS9ccQr3om+GcGRk4e+isrZWV8qQ==",
- "license": "MIT",
- "engines": {
- "node": ">=16.20.0"
- }
- },
- "node_modules/png-js": {
- "version": "1.0.0"
- },
- "node_modules/possible-typed-array-names": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/postcss": {
- "version": "8.5.6",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "nanoid": "^3.3.11",
- "picocolors": "^1.1.1",
- "source-map-js": "^1.2.1"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.10",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/powershell-utils": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/powershell-utils/-/powershell-utils-0.1.0.tgz",
- "integrity": "sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/prelude-ls": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/prettier": {
- "version": "3.8.1",
- "dev": true,
- "license": "MIT",
- "bin": {
- "prettier": "bin/prettier.cjs"
- },
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/prettier/prettier?sponsor=1"
- }
- },
- "node_modules/prettier-plugin-tailwindcss": {
- "version": "0.7.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=20.19"
- },
- "peerDependencies": {
- "@ianvs/prettier-plugin-sort-imports": "*",
- "@prettier/plugin-hermes": "*",
- "@prettier/plugin-oxc": "*",
- "@prettier/plugin-pug": "*",
- "@shopify/prettier-plugin-liquid": "*",
- "@trivago/prettier-plugin-sort-imports": "*",
- "@zackad/prettier-plugin-twig": "*",
- "prettier": "^3.0",
- "prettier-plugin-astro": "*",
- "prettier-plugin-css-order": "*",
- "prettier-plugin-jsdoc": "*",
- "prettier-plugin-marko": "*",
- "prettier-plugin-multiline-arrays": "*",
- "prettier-plugin-organize-attributes": "*",
- "prettier-plugin-organize-imports": "*",
- "prettier-plugin-sort-imports": "*",
- "prettier-plugin-svelte": "*"
- },
- "peerDependenciesMeta": {
- "@ianvs/prettier-plugin-sort-imports": {
- "optional": true
- },
- "@prettier/plugin-hermes": {
- "optional": true
- },
- "@prettier/plugin-oxc": {
- "optional": true
- },
- "@prettier/plugin-pug": {
- "optional": true
- },
- "@shopify/prettier-plugin-liquid": {
- "optional": true
- },
- "@trivago/prettier-plugin-sort-imports": {
- "optional": true
- },
- "@zackad/prettier-plugin-twig": {
- "optional": true
- },
- "prettier-plugin-astro": {
- "optional": true
- },
- "prettier-plugin-css-order": {
- "optional": true
- },
- "prettier-plugin-jsdoc": {
- "optional": true
- },
- "prettier-plugin-marko": {
- "optional": true
- },
- "prettier-plugin-multiline-arrays": {
- "optional": true
- },
- "prettier-plugin-organize-attributes": {
- "optional": true
- },
- "prettier-plugin-organize-imports": {
- "optional": true
- },
- "prettier-plugin-sort-imports": {
- "optional": true
- },
- "prettier-plugin-svelte": {
- "optional": true
- }
- }
- },
- "node_modules/pretty-ms": {
- "version": "9.3.0",
- "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-9.3.0.tgz",
- "integrity": "sha512-gjVS5hOP+M3wMm5nmNOucbIrqudzs9v/57bWRHQWLYklXqoXKrVfYW2W9+glfGsqtPgpiz5WwyEEB+ksXIx3gQ==",
- "license": "MIT",
- "dependencies": {
- "parse-ms": "^4.0.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/process-nextick-args": {
- "version": "2.0.1",
- "license": "MIT"
- },
- "node_modules/prompts": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz",
- "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==",
- "license": "MIT",
- "dependencies": {
- "kleur": "^3.0.3",
- "sisteransi": "^1.0.5"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/prompts/node_modules/kleur": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz",
- "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==",
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/prop-types": {
- "version": "15.8.1",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.4.0",
- "object-assign": "^4.1.1",
- "react-is": "^16.13.1"
- }
- },
- "node_modules/protobufjs": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.5.5.tgz",
- "integrity": "sha512-3wY1AxV+VBNW8Yypfd1yQY9pXnqTAN+KwQxL8iYm3/BjKYMNg4i0owhEe26PWDOMaIrzeeF98Lqd5NGz4omiIg==",
- "hasInstallScript": true,
- "license": "BSD-3-Clause",
- "dependencies": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/node": ">=13.7.0",
- "long": "^5.0.0"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/proxy-addr": {
- "version": "2.0.7",
- "license": "MIT",
- "dependencies": {
- "forwarded": "0.2.0",
- "ipaddr.js": "1.9.1"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/punycode": {
- "version": "2.3.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/qs": {
- "version": "6.14.2",
- "license": "BSD-3-Clause",
- "dependencies": {
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">=0.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/radix-ui": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/radix-ui/-/radix-ui-1.4.3.tgz",
- "integrity": "sha512-aWizCQiyeAenIdUbqEpXgRA1ya65P13NKn/W8rWkcN0OPkRDxdBVLWnIEDsS2RpwCK2nobI7oMUSmexzTDyAmA==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/primitive": "1.1.3",
- "@radix-ui/react-accessible-icon": "1.1.7",
- "@radix-ui/react-accordion": "1.2.12",
- "@radix-ui/react-alert-dialog": "1.1.15",
- "@radix-ui/react-arrow": "1.1.7",
- "@radix-ui/react-aspect-ratio": "1.1.7",
- "@radix-ui/react-avatar": "1.1.10",
- "@radix-ui/react-checkbox": "1.3.3",
- "@radix-ui/react-collapsible": "1.1.12",
- "@radix-ui/react-collection": "1.1.7",
- "@radix-ui/react-compose-refs": "1.1.2",
- "@radix-ui/react-context": "1.1.2",
- "@radix-ui/react-context-menu": "2.2.16",
- "@radix-ui/react-dialog": "1.1.15",
- "@radix-ui/react-direction": "1.1.1",
- "@radix-ui/react-dismissable-layer": "1.1.11",
- "@radix-ui/react-dropdown-menu": "2.1.16",
- "@radix-ui/react-focus-guards": "1.1.3",
- "@radix-ui/react-focus-scope": "1.1.7",
- "@radix-ui/react-form": "0.1.8",
- "@radix-ui/react-hover-card": "1.1.15",
- "@radix-ui/react-label": "2.1.7",
- "@radix-ui/react-menu": "2.1.16",
- "@radix-ui/react-menubar": "1.1.16",
- "@radix-ui/react-navigation-menu": "1.2.14",
- "@radix-ui/react-one-time-password-field": "0.1.8",
- "@radix-ui/react-password-toggle-field": "0.1.3",
- "@radix-ui/react-popover": "1.1.15",
- "@radix-ui/react-popper": "1.2.8",
- "@radix-ui/react-portal": "1.1.9",
- "@radix-ui/react-presence": "1.1.5",
- "@radix-ui/react-primitive": "2.1.3",
- "@radix-ui/react-progress": "1.1.7",
- "@radix-ui/react-radio-group": "1.3.8",
- "@radix-ui/react-roving-focus": "1.1.11",
- "@radix-ui/react-scroll-area": "1.2.10",
- "@radix-ui/react-select": "2.2.6",
- "@radix-ui/react-separator": "1.1.7",
- "@radix-ui/react-slider": "1.3.6",
- "@radix-ui/react-slot": "1.2.3",
- "@radix-ui/react-switch": "1.2.6",
- "@radix-ui/react-tabs": "1.1.13",
- "@radix-ui/react-toast": "1.2.15",
- "@radix-ui/react-toggle": "1.1.10",
- "@radix-ui/react-toggle-group": "1.1.11",
- "@radix-ui/react-toolbar": "1.1.11",
- "@radix-ui/react-tooltip": "1.2.8",
- "@radix-ui/react-use-callback-ref": "1.1.1",
- "@radix-ui/react-use-controllable-state": "1.2.2",
- "@radix-ui/react-use-effect-event": "0.0.2",
- "@radix-ui/react-use-escape-keydown": "1.1.1",
- "@radix-ui/react-use-is-hydrated": "0.1.0",
- "@radix-ui/react-use-layout-effect": "1.1.1",
- "@radix-ui/react-use-size": "1.1.1",
- "@radix-ui/react-visually-hidden": "1.2.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-label": {
- "version": "2.1.7",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-label/-/react-label-2.1.7.tgz",
- "integrity": "sha512-YT1GqPSL8kJn20djelMX7/cTRp/Y9w5IZHvfxQTVHrOqa2yMl7i/UfMqKRU5V7mEyKTrUVgJXhNQPVCG8PBLoQ==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-primitive": "2.1.3"
- },
- "peerDependencies": {
- "@types/react": "*",
- "@types/react-dom": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc",
- "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- },
- "@types/react-dom": {
- "optional": true
- }
- }
- },
- "node_modules/radix-ui/node_modules/@radix-ui/react-slot": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.3.tgz",
- "integrity": "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A==",
- "license": "MIT",
- "dependencies": {
- "@radix-ui/react-compose-refs": "1.1.2"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/raf": {
- "version": "3.4.1",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "performance-now": "^2.1.0"
- }
- },
- "node_modules/range-parser": {
- "version": "1.2.1",
- "license": "MIT",
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/raw-body": {
- "version": "3.0.2",
- "license": "MIT",
- "dependencies": {
- "bytes": "~3.1.2",
- "http-errors": "~2.0.1",
- "iconv-lite": "~0.7.0",
- "unpipe": "~1.0.0"
- },
- "engines": {
- "node": ">= 0.10"
- }
- },
- "node_modules/raw-body/node_modules/http-errors": {
- "version": "2.0.1",
- "license": "MIT",
- "dependencies": {
- "depd": "~2.0.0",
- "inherits": "~2.0.4",
- "setprototypeof": "~1.2.0",
- "statuses": "~2.0.2",
- "toidentifier": "~1.0.1"
- },
- "engines": {
- "node": ">= 0.8"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/express"
- }
- },
- "node_modules/react": {
- "version": "19.2.4",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/react-confetti": {
- "version": "6.4.0",
- "license": "MIT",
- "dependencies": {
- "tween-functions": "^1.2.0"
- },
- "engines": {
- "node": ">=16"
- },
- "peerDependencies": {
- "react": "^16.3.0 || ^17.0.1 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/react-dom": {
- "version": "19.2.4",
- "license": "MIT",
- "dependencies": {
- "scheduler": "^0.27.0"
- },
- "peerDependencies": {
- "react": "^19.2.4"
- }
- },
- "node_modules/react-dropzone": {
- "version": "14.4.1",
- "license": "MIT",
- "dependencies": {
- "attr-accept": "^2.2.4",
- "file-selector": "^2.1.0",
- "prop-types": "^15.8.1"
- },
- "engines": {
- "node": ">= 10.13"
- },
- "peerDependencies": {
- "react": ">= 16.8 || 18.0.0"
- }
- },
- "node_modules/react-ga4": {
- "version": "2.1.0",
- "license": "MIT"
- },
- "node_modules/react-is": {
- "version": "16.13.1",
- "license": "MIT"
- },
- "node_modules/react-pdf": {
- "version": "10.3.0",
- "license": "MIT",
- "dependencies": {
- "clsx": "^2.0.0",
- "dequal": "^2.0.3",
- "make-cancellable-promise": "^2.0.0",
- "make-event-props": "^2.0.0",
- "merge-refs": "^2.0.0",
- "pdfjs-dist": "5.4.296",
- "tiny-invariant": "^1.0.0",
- "warning": "^4.0.0"
- },
- "funding": {
- "url": "https://github.com/wojtekmaj/react-pdf?sponsor=1"
- },
- "peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0",
- "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-remove-scroll": {
- "version": "2.7.1",
- "license": "MIT",
- "dependencies": {
- "react-remove-scroll-bar": "^2.3.7",
- "react-style-singleton": "^2.2.3",
- "tslib": "^2.1.0",
- "use-callback-ref": "^1.3.3",
- "use-sidecar": "^1.1.3"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-remove-scroll-bar": {
- "version": "2.3.8",
- "license": "MIT",
- "dependencies": {
- "react-style-singleton": "^2.2.2",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/react-style-singleton": {
- "version": "2.2.3",
- "license": "MIT",
- "dependencies": {
- "get-nonce": "^1.0.0",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/readable-stream": {
- "version": "2.3.8",
- "license": "MIT",
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "node_modules/readable-stream/node_modules/safe-buffer": {
- "version": "5.1.2",
- "license": "MIT"
- },
- "node_modules/recast": {
- "version": "0.23.11",
- "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.11.tgz",
- "integrity": "sha512-YTUo+Flmw4ZXiWfQKGcwwc11KnoRAYgzAE2E7mXKCjSviTKShtxBsN6YUUBB2gtaBzKzeKunxhUwNHQuRryhWA==",
- "license": "MIT",
- "dependencies": {
- "ast-types": "^0.16.1",
- "esprima": "~4.0.0",
- "source-map": "~0.6.1",
- "tiny-invariant": "^1.3.3",
- "tslib": "^2.0.1"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/reflect.getprototypeof": {
- "version": "1.0.10",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.9",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.7",
- "get-proto": "^1.0.1",
- "which-builtin-type": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.13.11",
- "license": "MIT",
- "optional": true
- },
- "node_modules/regexp.prototype.flags": {
- "version": "1.5.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "define-properties": "^1.2.1",
- "es-errors": "^1.3.0",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "set-function-name": "^2.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/require-from-string": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
- "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/reselect": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz",
- "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==",
- "license": "MIT"
- },
- "node_modules/resolve": {
- "version": "1.22.10",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-core-module": "^2.16.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/resolve-from": {
- "version": "4.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/resolve-pkg-maps": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "funding": {
- "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
- }
- },
- "node_modules/restore-cursor": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz",
- "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==",
- "license": "MIT",
- "dependencies": {
- "onetime": "^7.0.0",
- "signal-exit": "^4.1.0"
- },
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/restructure": {
- "version": "3.0.2",
- "license": "MIT"
- },
- "node_modules/retry": {
- "version": "0.13.1",
- "license": "MIT",
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/retry-request": {
- "version": "7.0.2",
- "license": "MIT",
- "dependencies": {
- "@types/request": "^2.48.8",
- "extend": "^3.0.2",
- "teeny-request": "^9.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/rettime": {
- "version": "0.11.7",
- "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.11.7.tgz",
- "integrity": "sha512-DoAm1WjR1eH7z8sHPtvvUMIZh4/CSKkGCz6CxPqOrEAnOGtOuHSnSE9OC+razqxKuf4ub7pAYyl/vZV0vGs5tg==",
- "license": "MIT"
- },
- "node_modules/reusify": {
- "version": "1.1.0",
- "license": "MIT",
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rgbcolor": {
- "version": "1.0.1",
- "license": "MIT OR SEE LICENSE IN FEEL-FREE.md",
- "optional": true,
- "engines": {
- "node": ">= 0.8.15"
- }
- },
- "node_modules/router": {
- "version": "2.2.0",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.4.0",
- "depd": "^2.0.0",
- "is-promise": "^4.0.0",
- "parseurl": "^1.3.3",
- "path-to-regexp": "^8.0.0"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/run-applescript": {
- "version": "7.1.0",
- "resolved": "https://registry.npmjs.org/run-applescript/-/run-applescript-7.1.0.tgz",
- "integrity": "sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-array-concat": {
- "version": "1.1.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "get-intrinsic": "^1.2.6",
- "has-symbols": "^1.1.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">=0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-array-concat/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "license": "MIT"
- },
- "node_modules/safe-push-apply": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "isarray": "^2.0.5"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safe-push-apply/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/safe-regex-test": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "is-regex": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/safer-buffer": {
- "version": "2.1.2",
- "license": "MIT"
- },
- "node_modules/sax": {
- "version": "1.4.1",
- "license": "ISC"
- },
- "node_modules/scheduler": {
- "version": "0.27.0",
- "license": "MIT"
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "license": "ISC",
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/send": {
- "version": "1.2.0",
- "license": "MIT",
- "dependencies": {
- "debug": "^4.3.5",
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "etag": "^1.8.1",
- "fresh": "^2.0.0",
- "http-errors": "^2.0.0",
- "mime-types": "^3.0.1",
- "ms": "^2.1.3",
- "on-finished": "^2.4.1",
- "range-parser": "^1.2.1",
- "statuses": "^2.0.1"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/serve-static": {
- "version": "2.2.0",
- "license": "MIT",
- "dependencies": {
- "encodeurl": "^2.0.0",
- "escape-html": "^1.0.3",
- "parseurl": "^1.3.3",
- "send": "^1.2.0"
- },
- "engines": {
- "node": ">= 18"
- }
- },
- "node_modules/set-cookie-parser": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz",
- "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==",
- "license": "MIT"
- },
- "node_modules/set-function-length": {
- "version": "1.2.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "function-bind": "^1.1.2",
- "get-intrinsic": "^1.2.4",
- "gopd": "^1.0.1",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-function-name": {
- "version": "2.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-data-property": "^1.1.4",
- "es-errors": "^1.3.0",
- "functions-have-names": "^1.2.3",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/set-proto": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "dunder-proto": "^1.0.1",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/setimmediate": {
- "version": "1.0.5",
- "license": "MIT"
- },
- "node_modules/setprototypeof": {
- "version": "1.2.0",
- "license": "ISC"
- },
- "node_modules/shadcn": {
- "version": "3.8.5",
- "resolved": "https://registry.npmjs.org/shadcn/-/shadcn-3.8.5.tgz",
- "integrity": "sha512-jPRx44e+eyeV7xwY3BLJXcfrks00+M0h5BGB9l6DdcBW4BpAj4x3lVmVy0TXPEs2iHEisxejr62sZAAw6B1EVA==",
- "license": "MIT",
- "dependencies": {
- "@antfu/ni": "^25.0.0",
- "@babel/core": "^7.28.0",
- "@babel/parser": "^7.28.0",
- "@babel/plugin-transform-typescript": "^7.28.0",
- "@babel/preset-typescript": "^7.27.1",
- "@dotenvx/dotenvx": "^1.48.4",
- "@modelcontextprotocol/sdk": "^1.26.0",
- "@types/validate-npm-package-name": "^4.0.2",
- "browserslist": "^4.26.2",
- "commander": "^14.0.0",
- "cosmiconfig": "^9.0.0",
- "dedent": "^1.6.0",
- "deepmerge": "^4.3.1",
- "diff": "^8.0.2",
- "execa": "^9.6.0",
- "fast-glob": "^3.3.3",
- "fs-extra": "^11.3.1",
- "fuzzysort": "^3.1.0",
- "https-proxy-agent": "^7.0.6",
- "kleur": "^4.1.5",
- "msw": "^2.10.4",
- "node-fetch": "^3.3.2",
- "open": "^11.0.0",
- "ora": "^8.2.0",
- "postcss": "^8.5.6",
- "postcss-selector-parser": "^7.1.0",
- "prompts": "^2.4.2",
- "recast": "^0.23.11",
- "stringify-object": "^5.0.0",
- "tailwind-merge": "^3.0.1",
- "ts-morph": "^26.0.0",
- "tsconfig-paths": "^4.2.0",
- "validate-npm-package-name": "^7.0.1",
- "zod": "^3.24.1",
- "zod-to-json-schema": "^3.24.6"
- },
- "bin": {
- "shadcn": "dist/index.js"
- }
- },
- "node_modules/shadcn-ui": {
- "version": "0.9.5",
- "license": "MIT",
- "dependencies": {
- "chalk": "^5.4.1"
- },
- "bin": {
- "shadcn-ui": "dist/index.js"
- }
- },
- "node_modules/shadcn-ui/node_modules/chalk": {
- "version": "5.4.1",
- "license": "MIT",
- "engines": {
- "node": "^12.17.0 || ^14.13 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/chalk/chalk?sponsor=1"
- }
- },
- "node_modules/shadcn/node_modules/fast-glob": {
- "version": "3.3.3",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz",
- "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==",
- "license": "MIT",
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.8"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/shadcn/node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "license": "ISC",
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/shadcn/node_modules/postcss-selector-parser": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz",
- "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==",
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/shadcn/node_modules/tsconfig-paths": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz",
- "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==",
- "license": "MIT",
- "dependencies": {
- "json5": "^2.2.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/shadcn/node_modules/zod": {
- "version": "3.25.76",
- "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
- "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/sharp": {
- "version": "0.34.4",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "optional": true,
- "dependencies": {
- "@img/colour": "^1.0.0",
- "detect-libc": "^2.1.0",
- "semver": "^7.7.2"
- },
- "engines": {
- "node": "^18.17.0 || ^20.3.0 || >=21.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/libvips"
- },
- "optionalDependencies": {
- "@img/sharp-darwin-arm64": "0.34.4",
- "@img/sharp-darwin-x64": "0.34.4",
- "@img/sharp-libvips-darwin-arm64": "1.2.3",
- "@img/sharp-libvips-darwin-x64": "1.2.3",
- "@img/sharp-libvips-linux-arm": "1.2.3",
- "@img/sharp-libvips-linux-arm64": "1.2.3",
- "@img/sharp-libvips-linux-ppc64": "1.2.3",
- "@img/sharp-libvips-linux-s390x": "1.2.3",
- "@img/sharp-libvips-linux-x64": "1.2.3",
- "@img/sharp-libvips-linuxmusl-arm64": "1.2.3",
- "@img/sharp-libvips-linuxmusl-x64": "1.2.3",
- "@img/sharp-linux-arm": "0.34.4",
- "@img/sharp-linux-arm64": "0.34.4",
- "@img/sharp-linux-ppc64": "0.34.4",
- "@img/sharp-linux-s390x": "0.34.4",
- "@img/sharp-linux-x64": "0.34.4",
- "@img/sharp-linuxmusl-arm64": "0.34.4",
- "@img/sharp-linuxmusl-x64": "0.34.4",
- "@img/sharp-wasm32": "0.34.4",
- "@img/sharp-win32-arm64": "0.34.4",
- "@img/sharp-win32-ia32": "0.34.4",
- "@img/sharp-win32-x64": "0.34.4"
- }
- },
- "node_modules/sharp/node_modules/semver": {
- "version": "7.7.3",
- "license": "ISC",
- "optional": true,
- "bin": {
- "semver": "bin/semver.js"
- },
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/shebang-command": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "shebang-regex": "^3.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/shebang-regex": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/side-channel": {
- "version": "1.1.0",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3",
- "side-channel-list": "^1.0.0",
- "side-channel-map": "^1.0.1",
- "side-channel-weakmap": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-list": {
- "version": "1.0.0",
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-map": {
- "version": "1.0.1",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/side-channel-weakmap": {
- "version": "1.0.2",
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "es-errors": "^1.3.0",
- "get-intrinsic": "^1.2.5",
- "object-inspect": "^1.13.3",
- "side-channel-map": "^1.0.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/signal-exit": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
- "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
- "license": "ISC",
- "engines": {
- "node": ">=14"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/sisteransi": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz",
- "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==",
- "license": "MIT"
- },
- "node_modules/sonner": {
- "version": "2.0.7",
- "license": "MIT",
- "peerDependencies": {
- "react": "^18.0.0 || ^19.0.0 || ^19.0.0-rc",
- "react-dom": "^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.2.1",
- "license": "BSD-3-Clause",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/stable-hash": {
- "version": "0.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/stackblur-canvas": {
- "version": "2.7.0",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=0.1.14"
- }
- },
- "node_modules/statuses": {
- "version": "2.0.2",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/stdin-discarder": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.2.2.tgz",
- "integrity": "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/stop-iteration-iterator": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "es-errors": "^1.3.0",
- "internal-slot": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/stream-events": {
- "version": "1.0.5",
- "license": "MIT",
- "dependencies": {
- "stubs": "^3.0.0"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.3",
- "license": "MIT"
- },
- "node_modules/strict-event-emitter": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz",
- "integrity": "sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==",
- "license": "MIT"
- },
- "node_modules/string_decoder": {
- "version": "1.1.1",
- "license": "MIT",
- "dependencies": {
- "safe-buffer": "~5.1.0"
- }
- },
- "node_modules/string_decoder/node_modules/safe-buffer": {
- "version": "5.1.2",
- "license": "MIT"
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "license": "MIT",
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/string-width/node_modules/emoji-regex": {
- "version": "8.0.0",
- "license": "MIT"
- },
- "node_modules/string.prototype.includes": {
- "version": "2.0.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.3"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/string.prototype.matchall": {
- "version": "4.0.12",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.3",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.6",
- "es-errors": "^1.3.0",
- "es-object-atoms": "^1.0.0",
- "get-intrinsic": "^1.2.6",
- "gopd": "^1.2.0",
- "has-symbols": "^1.1.0",
- "internal-slot": "^1.1.0",
- "regexp.prototype.flags": "^1.5.3",
- "set-function-name": "^2.0.2",
- "side-channel": "^1.1.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.repeat": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.5"
- }
- },
- "node_modules/string.prototype.trim": {
- "version": "1.2.10",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-data-property": "^1.1.4",
- "define-properties": "^1.2.1",
- "es-abstract": "^1.23.5",
- "es-object-atoms": "^1.0.0",
- "has-property-descriptors": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimend": {
- "version": "1.0.9",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.2",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/string.prototype.trimstart": {
- "version": "1.0.8",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "define-properties": "^1.2.1",
- "es-object-atoms": "^1.0.0"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/stringify-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-5.0.0.tgz",
- "integrity": "sha512-zaJYxz2FtcMb4f+g60KsRNFOpVMUyuJgA51Zi5Z1DOTC3S59+OQiVOzE9GZt0x72uBGWKsQIuBKeF9iusmKFsg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "get-own-enumerable-keys": "^1.0.0",
- "is-obj": "^3.0.0",
- "is-regexp": "^3.1.0"
- },
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/yeoman/stringify-object?sponsor=1"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "license": "MIT",
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-bom": {
- "version": "3.0.0",
- "license": "MIT",
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/strip-final-newline": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-4.0.0.tgz",
- "integrity": "sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strip-json-comments": {
- "version": "3.1.1",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/strnum": {
- "version": "2.1.2",
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/NaturalIntelligence"
- }
- ],
- "license": "MIT"
- },
- "node_modules/stubs": {
- "version": "3.0.0",
- "license": "MIT"
- },
- "node_modules/styled-jsx": {
- "version": "5.1.6",
- "license": "MIT",
- "dependencies": {
- "client-only": "0.0.1"
- },
- "engines": {
- "node": ">= 12.0.0"
- },
- "peerDependencies": {
- "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0"
- },
- "peerDependenciesMeta": {
- "@babel/core": {
- "optional": true
- },
- "babel-plugin-macros": {
- "optional": true
- }
- }
- },
- "node_modules/supports-color": {
- "version": "7.2.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "has-flag": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/svg-pathdata": {
- "version": "6.0.3",
- "license": "MIT",
- "optional": true,
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/tagged-tag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/tagged-tag/-/tagged-tag-1.0.0.tgz",
- "integrity": "sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==",
- "license": "MIT",
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/tailwind-merge": {
- "version": "3.4.0",
- "license": "MIT",
- "funding": {
- "type": "github",
- "url": "https://github.com/sponsors/dcastil"
- }
- },
- "node_modules/tailwindcss": {
- "version": "4.1.18",
- "license": "MIT"
- },
- "node_modules/tailwindcss-animate": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "peerDependencies": {
- "tailwindcss": ">=3.0.0 || insiders"
- }
- },
- "node_modules/tapable": {
- "version": "2.3.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=6"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/webpack"
- }
- },
- "node_modules/teeny-request": {
- "version": "9.0.0",
- "license": "Apache-2.0",
- "dependencies": {
- "http-proxy-agent": "^5.0.0",
- "https-proxy-agent": "^5.0.0",
- "node-fetch": "^2.6.9",
- "stream-events": "^1.0.5",
- "uuid": "^9.0.0"
- },
- "engines": {
- "node": ">=14"
- }
- },
- "node_modules/teeny-request/node_modules/https-proxy-agent": {
- "version": "5.0.1",
- "license": "MIT",
- "dependencies": {
- "agent-base": "6",
- "debug": "4"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/teeny-request/node_modules/https-proxy-agent/node_modules/agent-base": {
- "version": "6.0.2",
- "license": "MIT",
- "dependencies": {
- "debug": "4"
- },
- "engines": {
- "node": ">= 6.0.0"
- }
- },
- "node_modules/teeny-request/node_modules/node-fetch": {
- "version": "2.7.0",
- "license": "MIT",
- "dependencies": {
- "whatwg-url": "^5.0.0"
- },
- "engines": {
- "node": "4.x || >=6.0.0"
- },
- "peerDependencies": {
- "encoding": "^0.1.0"
- },
- "peerDependenciesMeta": {
- "encoding": {
- "optional": true
- }
- }
- },
- "node_modules/teeny-request/node_modules/uuid": {
- "version": "9.0.1",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist/bin/uuid"
- }
- },
- "node_modules/text-segmentation": {
- "version": "1.0.3",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "utrie": "^1.0.2"
- }
- },
- "node_modules/tiny-inflate": {
- "version": "1.0.3",
- "license": "MIT"
- },
- "node_modules/tiny-invariant": {
- "version": "1.3.3",
- "license": "MIT"
- },
- "node_modules/tinyexec": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz",
- "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- }
- },
- "node_modules/tinyglobby": {
- "version": "0.2.14",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "fdir": "^6.4.4",
- "picomatch": "^4.0.2"
- },
- "engines": {
- "node": ">=12.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/SuperchupuDev"
- }
- },
- "node_modules/tldts": {
- "version": "7.0.28",
- "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.28.tgz",
- "integrity": "sha512-+Zg3vWhRUv8B1maGSTFdev9mjoo8Etn2Ayfs4cnjlD3CsGkxXX4QyW3j2WJ0wdjYcYmy7Lx2RDsZMhgCWafKIw==",
- "license": "MIT",
- "dependencies": {
- "tldts-core": "^7.0.28"
- },
- "bin": {
- "tldts": "bin/cli.js"
- }
- },
- "node_modules/tldts-core": {
- "version": "7.0.28",
- "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.28.tgz",
- "integrity": "sha512-7W5Efjhsc3chVdFhqtaU0KtK32J37Zcr9RKtID54nG+tIpcY79CQK/veYPODxtD/LJ4Lue66jvrQzIX2Z2/pUQ==",
- "license": "MIT"
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "license": "MIT",
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/toidentifier": {
- "version": "1.0.1",
- "license": "MIT",
- "engines": {
- "node": ">=0.6"
- }
- },
- "node_modules/tough-cookie": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz",
- "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==",
- "license": "BSD-3-Clause",
- "dependencies": {
- "tldts": "^7.0.5"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/tr46": {
- "version": "0.0.3",
- "license": "MIT"
- },
- "node_modules/ts-api-utils": {
- "version": "2.4.0",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.12"
- },
- "peerDependencies": {
- "typescript": ">=4.8.4"
- }
- },
- "node_modules/ts-morph": {
- "version": "26.0.0",
- "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-26.0.0.tgz",
- "integrity": "sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==",
- "license": "MIT",
- "dependencies": {
- "@ts-morph/common": "~0.27.0",
- "code-block-writer": "^13.0.3"
- }
- },
- "node_modules/tsconfig-paths": {
- "version": "3.15.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@types/json5": "^0.0.29",
- "json5": "^1.0.2",
- "minimist": "^1.2.6",
- "strip-bom": "^3.0.0"
- }
- },
- "node_modules/tsconfig-paths/node_modules/json5": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "minimist": "^1.2.0"
- },
- "bin": {
- "json5": "lib/cli.js"
- }
- },
- "node_modules/tslib": {
- "version": "2.8.1",
- "license": "0BSD"
- },
- "node_modules/tsx": {
- "version": "4.21.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "esbuild": "~0.27.0",
- "get-tsconfig": "^4.7.5"
- },
- "bin": {
- "tsx": "dist/cli.mjs"
- },
- "engines": {
- "node": ">=18.0.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.3"
- }
- },
- "node_modules/tw-animate-css": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/tw-animate-css/-/tw-animate-css-1.4.0.tgz",
- "integrity": "sha512-7bziOlRqH0hJx80h/3mbicLW7o8qLsH5+RaLR2t+OHM3D0JlWGODQKQ4cxbK7WlvmUxpcj6Kgu6EKqjrGFe3QQ==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/Wombosvideo"
- }
- },
- "node_modules/tween-functions": {
- "version": "1.2.0",
- "license": "BSD"
- },
- "node_modules/type-check": {
- "version": "0.4.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "prelude-ls": "^1.2.1"
- },
- "engines": {
- "node": ">= 0.8.0"
- }
- },
- "node_modules/type-fest": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.5.0.tgz",
- "integrity": "sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==",
- "license": "(MIT OR CC0-1.0)",
- "dependencies": {
- "tagged-tag": "^1.0.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/type-is": {
- "version": "2.0.1",
- "license": "MIT",
- "dependencies": {
- "content-type": "^1.0.5",
- "media-typer": "^1.1.0",
- "mime-types": "^3.0.0"
- },
- "engines": {
- "node": ">= 0.6"
- }
- },
- "node_modules/typed-array-buffer": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "es-errors": "^1.3.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- }
- },
- "node_modules/typed-array-byte-length": {
- "version": "1.0.3",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.14"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-byte-offset": {
- "version": "1.0.4",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "for-each": "^0.3.3",
- "gopd": "^1.2.0",
- "has-proto": "^1.2.0",
- "is-typed-array": "^1.1.15",
- "reflect.getprototypeof": "^1.0.9"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typed-array-length": {
- "version": "1.0.7",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bind": "^1.0.7",
- "for-each": "^0.3.3",
- "gopd": "^1.0.1",
- "is-typed-array": "^1.1.13",
- "possible-typed-array-names": "^1.0.0",
- "reflect.getprototypeof": "^1.0.6"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/typescript": {
- "version": "5.9.3",
- "devOptional": true,
- "license": "Apache-2.0",
- "bin": {
- "tsc": "bin/tsc",
- "tsserver": "bin/tsserver"
- },
- "engines": {
- "node": ">=14.17"
- }
- },
- "node_modules/typescript-eslint": {
- "version": "8.55.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/eslint-plugin": "8.55.0",
- "@typescript-eslint/parser": "8.55.0",
- "@typescript-eslint/typescript-estree": "8.55.0",
- "@typescript-eslint/utils": "8.55.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.57.0 || ^9.0.0",
- "typescript": ">=4.8.4 <6.0.0"
- }
- },
- "node_modules/unbox-primitive": {
- "version": "1.1.0",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.3",
- "has-bigints": "^1.0.2",
- "has-symbols": "^1.1.0",
- "which-boxed-primitive": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/undici-types": {
- "version": "7.16.0",
- "license": "MIT"
- },
- "node_modules/unicode-properties": {
- "version": "1.4.1",
- "license": "MIT",
- "dependencies": {
- "base64-js": "^1.3.0",
- "unicode-trie": "^2.0.0"
- }
- },
- "node_modules/unicode-trie": {
- "version": "2.0.0",
- "license": "MIT",
- "dependencies": {
- "pako": "^0.2.5",
- "tiny-inflate": "^1.0.0"
- }
- },
- "node_modules/unicode-trie/node_modules/pako": {
- "version": "0.2.9",
- "license": "MIT"
- },
- "node_modules/unicorn-magic": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.3.0.tgz",
- "integrity": "sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/universalify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
- "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==",
- "license": "MIT",
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/unpipe": {
- "version": "1.0.0",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/unrs-resolver": {
- "version": "1.11.1",
- "dev": true,
- "hasInstallScript": true,
- "license": "MIT",
- "dependencies": {
- "napi-postinstall": "^0.3.0"
- },
- "funding": {
- "url": "https://opencollective.com/unrs-resolver"
- },
- "optionalDependencies": {
- "@unrs/resolver-binding-android-arm-eabi": "1.11.1",
- "@unrs/resolver-binding-android-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-arm64": "1.11.1",
- "@unrs/resolver-binding-darwin-x64": "1.11.1",
- "@unrs/resolver-binding-freebsd-x64": "1.11.1",
- "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-arm64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1",
- "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-gnu": "1.11.1",
- "@unrs/resolver-binding-linux-x64-musl": "1.11.1",
- "@unrs/resolver-binding-wasm32-wasi": "1.11.1",
- "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1",
- "@unrs/resolver-binding-win32-x64-msvc": "1.11.1"
- }
- },
- "node_modules/until-async": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz",
- "integrity": "sha512-IiSk4HlzAMqTUseHHe3VhIGyuFmN90zMTpD3Z3y8jeQbzLIq500MVM7Jq2vUAnTKAFPJrqwkzr6PoTcPhGcOiw==",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/kettanaito"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.2.3",
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "license": "MIT",
- "dependencies": {
- "escalade": "^3.2.0",
- "picocolors": "^1.1.1"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/uri-js": {
- "version": "4.4.1",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "punycode": "^2.1.0"
- }
- },
- "node_modules/use-callback-ref": {
- "version": "1.3.3",
- "license": "MIT",
- "dependencies": {
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-sidecar": {
- "version": "1.1.3",
- "license": "MIT",
- "dependencies": {
- "detect-node-es": "^1.1.0",
- "tslib": "^2.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "peerDependencies": {
- "@types/react": "*",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
- },
- "peerDependenciesMeta": {
- "@types/react": {
- "optional": true
- }
- }
- },
- "node_modules/use-sync-external-store": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.6.0.tgz",
- "integrity": "sha512-Pp6GSwGP/NrPIrxVFAIkOQeyw8lFenOHijQWkUTrDvrF4ALqylP2C/KCkeS9dpUM3KvYRQhna5vt7IL95+ZQ9w==",
- "license": "MIT",
- "peerDependencies": {
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "license": "MIT"
- },
- "node_modules/utrie": {
- "version": "1.0.2",
- "license": "MIT",
- "optional": true,
- "dependencies": {
- "base64-arraybuffer": "^1.0.2"
- }
- },
- "node_modules/uuid": {
- "version": "13.0.0",
- "funding": [
- "https://github.com/sponsors/broofa",
- "https://github.com/sponsors/ctavan"
- ],
- "license": "MIT",
- "bin": {
- "uuid": "dist-node/bin/uuid"
- }
- },
- "node_modules/validate-npm-package-name": {
- "version": "7.0.2",
- "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-7.0.2.tgz",
- "integrity": "sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==",
- "license": "ISC",
- "engines": {
- "node": "^20.17.0 || >=22.9.0"
- }
- },
- "node_modules/vary": {
- "version": "1.1.2",
- "license": "MIT",
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/warning": {
- "version": "4.0.3",
- "license": "MIT",
- "dependencies": {
- "loose-envify": "^1.0.0"
- }
- },
- "node_modules/web-streams-polyfill": {
- "version": "3.3.3",
- "license": "MIT",
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/web-vitals": {
- "version": "4.2.4",
- "license": "Apache-2.0"
- },
- "node_modules/webidl-conversions": {
- "version": "3.0.1",
- "license": "BSD-2-Clause"
- },
- "node_modules/websocket-driver": {
- "version": "0.7.4",
- "license": "Apache-2.0",
- "dependencies": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/websocket-extensions": {
- "version": "0.1.4",
- "license": "Apache-2.0",
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/whatwg-url": {
- "version": "5.0.0",
- "license": "MIT",
- "dependencies": {
- "tr46": "~0.0.3",
- "webidl-conversions": "^3.0.0"
- }
- },
- "node_modules/which": {
- "version": "2.0.2",
- "license": "ISC",
- "dependencies": {
- "isexe": "^2.0.0"
- },
- "bin": {
- "node-which": "bin/node-which"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/which-boxed-primitive": {
- "version": "1.1.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-bigint": "^1.1.0",
- "is-boolean-object": "^1.2.1",
- "is-number-object": "^1.1.1",
- "is-string": "^1.1.1",
- "is-symbol": "^1.1.1"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type": {
- "version": "1.2.1",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "call-bound": "^1.0.2",
- "function.prototype.name": "^1.1.6",
- "has-tostringtag": "^1.0.2",
- "is-async-function": "^2.0.0",
- "is-date-object": "^1.1.0",
- "is-finalizationregistry": "^1.1.0",
- "is-generator-function": "^1.0.10",
- "is-regex": "^1.2.1",
- "is-weakref": "^1.0.2",
- "isarray": "^2.0.5",
- "which-boxed-primitive": "^1.1.0",
- "which-collection": "^1.0.2",
- "which-typed-array": "^1.1.16"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-builtin-type/node_modules/isarray": {
- "version": "2.0.5",
- "dev": true,
- "license": "MIT"
- },
- "node_modules/which-collection": {
- "version": "1.0.2",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "is-map": "^2.0.3",
- "is-set": "^2.0.3",
- "is-weakmap": "^2.0.2",
- "is-weakset": "^2.0.3"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/which-typed-array": {
- "version": "1.1.19",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "available-typed-arrays": "^1.0.7",
- "call-bind": "^1.0.8",
- "call-bound": "^1.0.4",
- "for-each": "^0.3.5",
- "get-proto": "^1.0.1",
- "gopd": "^1.2.0",
- "has-tostringtag": "^1.0.2"
- },
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/word-wrap": {
- "version": "1.2.5",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "license": "MIT",
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "license": "ISC"
- },
- "node_modules/wsl-utils": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.3.1.tgz",
- "integrity": "sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==",
- "license": "MIT",
- "dependencies": {
- "is-wsl": "^3.1.0",
- "powershell-utils": "^0.1.0"
- },
- "engines": {
- "node": ">=20"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/xml": {
- "version": "1.0.1",
- "license": "MIT"
- },
- "node_modules/xml-js": {
- "version": "1.6.11",
- "license": "MIT",
- "dependencies": {
- "sax": "^1.2.4"
- },
- "bin": {
- "xml-js": "bin/cli.js"
- }
- },
- "node_modules/xmldoc": {
- "version": "2.0.3",
- "license": "MIT",
- "dependencies": {
- "sax": "^1.4.3"
- },
- "engines": {
- "node": ">=12.0.0"
- }
- },
- "node_modules/xmldoc/node_modules/sax": {
- "version": "1.4.4",
- "license": "BlueOak-1.0.0",
- "engines": {
- "node": ">=11.0.0"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "license": "ISC",
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "license": "ISC"
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "license": "MIT",
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "license": "ISC",
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yocto-queue": {
- "version": "0.1.0",
- "license": "MIT",
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yocto-spinner": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/yocto-spinner/-/yocto-spinner-1.1.0.tgz",
- "integrity": "sha512-/BY0AUXnS7IKO354uLLA2eRcWiqDifEbd6unXCsOxkFDAkhgUL3PH9X2bFoaU0YchnDXsF+iKleeTLJGckbXfA==",
- "license": "MIT",
- "dependencies": {
- "yoctocolors": "^2.1.1"
- },
- "engines": {
- "node": ">=18.19"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/yoctocolors": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yoctocolors/-/yoctocolors-2.1.2.tgz",
- "integrity": "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug==",
- "license": "MIT",
- "engines": {
- "node": ">=18"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/zod": {
- "version": "4.3.6",
- "license": "MIT",
- "funding": {
- "url": "https://github.com/sponsors/colinhacks"
- }
- },
- "node_modules/zod-to-json-schema": {
- "version": "3.25.2",
- "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.25.2.tgz",
- "integrity": "sha512-O/PgfnpT1xKSDeQYSCfRI5Gy3hPf91mKVDuYLUHZJMiDFptvP41MSnWofm8dnCm0256ZNfZIM7DSzuSMAFnjHA==",
- "license": "ISC",
- "peerDependencies": {
- "zod": "^3.25.28 || ^4"
- }
- },
- "node_modules/zod-validation-error": {
- "version": "4.0.2",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": ">=18.0.0"
- },
- "peerDependencies": {
- "zod": "^3.25.0 || ^4.0.0"
- }
- }
- }
-}
diff --git a/package.json b/package.json
index 24f9f57..c376423 100644
--- a/package.json
+++ b/package.json
@@ -6,16 +6,17 @@
"dev": "next dev",
"build": "next build",
"start": "next start",
- "lint": "eslint .",
- "format": "prettier --write .",
- "format:check": "prettier --check .",
- "preview": "vite preview",
- "setup-firebase-cors": "node scripts/setup-firebase-cors.js"
+ "check": "biome check .",
+ "check:fix": "biome check --write .",
+ "lint": "biome lint .",
+ "lint:fix": "biome lint --write .",
+ "format": "biome format --write .",
+ "format:check": "biome format --check .",
+ "ci": "biome ci ."
},
"dependencies": {
- "@base-ui/react": "^1.2.0",
+ "@base-ui/react": "^1.4.1",
"@google-cloud/storage": "^7.19.0",
- "@microsoft/clarity": "^1.0.2",
"@radix-ui/react-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-label": "^2.1.8",
@@ -24,75 +25,72 @@
"@radix-ui/react-slot": "^1.2.4",
"@radix-ui/react-switch": "^1.2.6",
"@radix-ui/react-tabs": "^1.1.13",
- "@tabler/icons-react": "^3.36.1",
+ "@tabler/icons-react": "^3.41.1",
"@tailwindcss/typography": "^0.5.19",
- "assemblyai": "^4.23.0",
- "clarity-js": "^0.8.54",
+ "@vercel/analytics": "^2.0.1",
+ "assemblyai": "^4.30.0",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"cors": "^2.8.6",
"device-detector-js": "^3.0.3",
- "docx": "^9.5.2",
- "dotenv": "^17.3.1",
+ "docx": "^9.6.1",
+ "dotenv": "^17.4.2",
"express": "^5.2.1",
"file-saver": "^2.0.5",
- "firebase": "^12.9.0",
- "framer-motion": "^12.34.0",
- "jspdf": "^4.1.0",
- "jspdf-autotable": "^5.0.7",
+ "firebase": "^12.12.1",
+ "framer-motion": "^12.38.0",
"jszip": "^3.10.1",
- "lucide-react": "^0.562.0",
- "marked": "^17.0.2",
- "motion": "^12.34.0",
- "next": "^16.1.6",
+ "lucide-react": "^1.11.0",
+ "marked": "^18.0.2",
+ "motion": "^12.38.0",
+ "next": "^16.2.4",
"next-themes": "^0.4.6",
"node-fetch": "^3.3.2",
- "pdfmake": "^0.3.4",
"radix-ui": "^1.4.3",
- "react": "^19.2.4",
+ "react": "^19.2.5",
"react-confetti": "^6.4.0",
- "react-dom": "^19.2.4",
- "react-dropzone": "^14.4.1",
- "react-ga4": "^2.1.0",
- "react-pdf": "^10.3.0",
- "shadcn": "^3.8.4",
+ "react-dom": "^19.2.5",
+ "react-dropzone": "^15.0.0",
+ "react-pdf": "^10.4.1",
+ "shadcn": "^4.5.0",
"shadcn-ui": "^0.9.5",
"sonner": "^2.0.7",
- "tailwind-merge": "^3.4.0",
+ "tailwind-merge": "^3.5.0",
"tw-animate-css": "^1.4.0",
- "uuid": "^13.0.0"
+ "uuid": "^14.0.0",
+ "zustand": "^5.0.12"
},
"devDependencies": {
- "@eslint/js": "^9.39.2",
- "@netlify/plugin-nextjs": "^5.15.8",
- "@tailwindcss/postcss": "^4.1.18",
+ "@biomejs/biome": "^2.4.13",
+ "@netlify/plugin-nextjs": "^5.15.9",
+ "@tailwindcss/postcss": "^4.2.4",
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/file-saver": "^2.0.7",
"@types/marked": "^6.0.0",
- "@types/node": "^25.2.3",
- "@types/pdfmake": "^0.2.13",
+ "@types/node": "^25.6.0",
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/uuid": "^11.0.0",
- "autoprefixer": "^10.4.24",
- "eslint": "^9.39.2",
- "eslint-config-next": "^16.1.6",
- "eslint-plugin-react-hooks": "^7.0.1",
- "eslint-plugin-react-refresh": "^0.4.26",
- "globals": "^17.3.0",
- "postcss": "^8.5.6",
- "prettier": "^3.8.1",
- "prettier-plugin-tailwindcss": "^0.7.2",
- "tailwindcss": "^4.1.18",
+ "autoprefixer": "^10.5.0",
+ "globals": "^17.5.0",
+ "postcss": "^8.5.12",
+ "prettier": "^3.8.3",
+ "prettier-plugin-tailwindcss": "^0.8.0",
+ "tailwindcss": "^4.2.4",
"tailwindcss-animate": "^1.0.7",
"tsx": "^4.21.0",
- "typescript": "~5.9.3",
- "typescript-eslint": "^8.55.0"
+ "typescript": "~6.0.3"
},
"overrides": {
"qs": ">=6.14.2",
"tar": ">=7.5.7",
"js-yaml": ">=4.1.1"
- }
+ },
+ "trustedDependencies": [
+ "@firebase/util",
+ "core-js",
+ "protobufjs",
+ "unrs-resolver"
+ ]
}
diff --git a/postcss.config.js b/postcss.config.js
index f69c5d4..14502dc 100644
--- a/postcss.config.js
+++ b/postcss.config.js
@@ -3,4 +3,4 @@ export default {
"@tailwindcss/postcss": {},
autoprefixer: {},
},
-};
+}
diff --git a/scripts/setup-firebase-cors.js b/scripts/setup-firebase-cors.js
index e5bda94..39ea9ad 100644
--- a/scripts/setup-firebase-cors.js
+++ b/scripts/setup-firebase-cors.js
@@ -1,15 +1,15 @@
-import dotenv from "dotenv";
-import fs from "fs";
+import dotenv from "dotenv"
+import fs from "fs"
-dotenv.config();
+dotenv.config()
// Ensure the Firebase Storage bucket is defined
-const bucket = process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET;
+const bucket = process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET
if (!bucket) {
console.error(
"Error: NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET is not defined in your .env file",
- );
- process.exit(1);
+ )
+ process.exit(1)
}
// Create CORS configuration file
@@ -27,18 +27,18 @@ const corsConfig = {
maxAgeSeconds: 3600,
},
],
-};
+}
// Save the configuration to a file
-fs.writeFileSync("cors.json", JSON.stringify(corsConfig, null, 2));
+fs.writeFileSync("cors.json", JSON.stringify(corsConfig, null, 2))
-console.log("CORS configuration file created: cors.json");
+console.log("CORS configuration file created: cors.json")
console.log(
`\nTo apply this configuration to your Firebase Storage bucket, run:`,
-);
+)
console.log(
`\ngcloud storage buckets update gs://${bucket} --cors-file=cors.json\n`,
-);
-console.log(`Or if you're using Firebase CLI:`);
-console.log(`\nfirebase storage:cors set cors.json\n`);
-console.log("After applying CORS settings, you can delete the cors.json file.");
+)
+console.log(`Or if you're using Firebase CLI:`)
+console.log(`\nfirebase storage:cors set cors.json\n`)
+console.log("After applying CORS settings, you can delete the cors.json file.")
diff --git a/src/App.tsx b/src/App.tsx
deleted file mode 100644
index 1de2fc5..0000000
--- a/src/App.tsx
+++ /dev/null
@@ -1,19 +0,0 @@
-import { AnimatePresence } from "framer-motion";
-import { MainLayout } from "./components/layout/MainLayout";
-
-// Default: General Feedback
-window.feedbackType = "general";
-
-declare global {
- interface Window {
- feedbackType: "general" | "issue" | "feature" | "other";
- }
-}
-
-export default function App() {
- return (
-
-
-
- );
-}
diff --git a/src/app/about/page.tsx b/src/app/about/page.tsx
new file mode 100644
index 0000000..7a2ea08
--- /dev/null
+++ b/src/app/about/page.tsx
@@ -0,0 +1,167 @@
+import { Brain, Download, FileAudio, Languages, Users, Zap } from "lucide-react"
+import Link from "next/link"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+
+const features = [
+ {
+ icon: Brain,
+ title: "AI-Powered Analysis",
+ description:
+ "Auto chapters, summarization, sentiment analysis, entity detection, and key phrase extraction.",
+ },
+ {
+ icon: Languages,
+ title: "30+ Languages",
+ description:
+ "Support for English, Spanish, French, German, Arabic, Chinese, Japanese, and many more.",
+ },
+ {
+ icon: Download,
+ title: "Multiple Export Formats",
+ description:
+ "Export as TXT, DOCX, SRT, VTT, JSON, CSV, or Markdown with full timestamps.",
+ },
+ {
+ icon: Zap,
+ title: "Fast Processing",
+ description:
+ "Powered by AssemblyAI with state-of-the-art speech recognition models.",
+ },
+ {
+ icon: Users,
+ title: "Speaker Diarization",
+ description:
+ "Identify and label different speakers in conversations, interviews, and meetings.",
+ },
+ {
+ icon: FileAudio,
+ title: "Studio Workspace",
+ description:
+ "Full studio experience with audio playback, karaoke highlighting, and keyboard shortcuts.",
+ },
+]
+
+const steps = [
+ {
+ step: "1",
+ title: "Upload",
+ description: "Drop a file or paste an audio URL",
+ },
+ {
+ step: "2",
+ title: "Transcribe",
+ description: "AI processes your audio in minutes",
+ },
+ {
+ step: "3",
+ title: "Explore",
+ description: "View, search, export, and analyze",
+ },
+]
+
+export default function AboutPage() {
+ return (
+
+
+
+
+ {/* Hero */}
+
+
+
+ Audio to Text, Powered by AI
+
+
+ Transcriptr converts your audio files into accurate, searchable
+ text with AI-powered transcription, speaker identification, and
+ intelligent analysis.
+
+
+
+ Start Transcribing
+
+
+
+
+ {/* Features */}
+
+
+
+ Features
+
+
+ {features.map((feature) => (
+
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
+ ))}
+
+
+
+
+ {/* How it works */}
+
+
+
+ How It Works
+
+
+ {steps.map((s, i) => (
+
+
+ {s.step}
+
+
+
{s.title}
+
+ {s.description}
+
+
+ {i < steps.length - 1 && (
+
+ )}
+
+ ))}
+
+
+
+
+ {/* CTA */}
+
+
+
+ Ready to get started?
+
+
+ Free to use. No account required.
+
+
+ Start Transcribing
+
+
+
+
+
+
+
+ )
+}
diff --git a/src/app/api/firebase-proxy/route.ts b/src/app/api/firebase-proxy/route.ts
index fadbfe5..0546b1d 100644
--- a/src/app/api/firebase-proxy/route.ts
+++ b/src/app/api/firebase-proxy/route.ts
@@ -1,24 +1,35 @@
-import { NextResponse } from "next/server";
+import { NextResponse } from "next/server"
export async function POST(request: Request) {
try {
// Parse the URL from the request body
- const body = await request.json();
- const { url } = body;
+ const body = await request.json()
+ const { url } = body
- if (!url?.includes("firebasestorage.googleapis.com")) {
+ let parsedUrl: URL
+ try {
+ parsedUrl = new URL(url)
+ } catch {
return NextResponse.json(
{ error: "Invalid or missing Firebase Storage URL" },
{ status: 400 },
- );
+ )
}
- console.log(`Proxying request to Firebase Storage: ${url}`);
+ if (parsedUrl.hostname !== "firebasestorage.googleapis.com") {
+ return NextResponse.json(
+ { error: "Invalid or missing Firebase Storage URL" },
+ { status: 400 },
+ )
+ }
+
+ console.log("Proxying request to Firebase Storage")
- // Fetch the content from Firebase Storage
- const response = await fetch(url, {
+ // Fetch the content from Firebase Storage with a 10s timeout
+ const response = await fetch(parsedUrl.toString(), {
method: "GET",
- });
+ signal: AbortSignal.timeout(10000),
+ })
if (!response.ok) {
return NextResponse.json(
@@ -27,27 +38,25 @@ export async function POST(request: Request) {
message: await response.text(),
},
{ status: response.status },
- );
+ )
}
// Get the file content as buffer
- const buffer = await response.arrayBuffer();
- const contentType = response.headers.get("content-type");
+ const buffer = await response.arrayBuffer()
+ const contentType = response.headers.get("content-type")
- // Return the file content
+ // Return the file content — no wildcard CORS; this is a same-origin route
return new NextResponse(Buffer.from(buffer), {
status: 200,
headers: {
"Content-Type": contentType || "application/octet-stream",
- "Access-Control-Allow-Origin": "*",
- "Access-Control-Allow-Headers": "Content-Type",
- "Access-Control-Allow-Methods": "POST, OPTIONS",
},
- });
+ })
} catch (error: unknown) {
- console.error("Error proxying Firebase Storage request:", error);
- const errorMessage =
- error instanceof Error ? error.message : "Unknown error occurred";
- return NextResponse.json({ error: errorMessage }, { status: 500 });
+ console.error("Error proxying Firebase Storage request:", error)
+ return NextResponse.json(
+ { error: "Failed to proxy Firebase Storage request" },
+ { status: 500 },
+ )
}
}
diff --git a/src/app/api/prediction/[id]/route.ts b/src/app/api/prediction/[id]/route.ts
index ab5a421..f7e04a9 100644
--- a/src/app/api/prediction/[id]/route.ts
+++ b/src/app/api/prediction/[id]/route.ts
@@ -36,13 +36,19 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
const transcript = await assemblyai.transcripts.get(id)
const mappedStatus = mapStatus(transcript.status)
- console.log(`Transcription ${id} status: ${transcript.status} -> ${mappedStatus}`)
+ console.log(
+ `Transcription ${id} status: ${transcript.status} -> ${mappedStatus}`,
+ )
const result: Record = {
id,
status: mappedStatus,
}
+ if (transcript.audio_url) {
+ result.audioUrl = transcript.audio_url
+ }
+
if (mappedStatus === "failed") {
result.error = transcript.error || "Unknown transcription error"
}
@@ -64,11 +70,12 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
end: u.end / 1000,
text: u.text,
speaker: u.speaker,
- words: u.words?.map((w) => ({
- word: w.text,
- start: w.start / 1000,
- end: w.end / 1000,
- })) || [],
+ words:
+ u.words?.map((w) => ({
+ word: w.text,
+ start: w.start / 1000,
+ end: w.end / 1000,
+ })) || [],
}))
} else {
// No diarization — fetch sentences via SDK
@@ -78,19 +85,22 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
start: s.start / 1000,
end: s.end / 1000,
text: s.text,
- words: s.words?.map((w) => ({
- word: w.text,
- start: w.start / 1000,
- end: w.end / 1000,
- })) || [],
+ words:
+ s.words?.map((w) => ({
+ word: w.text,
+ start: w.start / 1000,
+ end: w.end / 1000,
+ })) || [],
}))
} catch (sentenceError) {
console.error("Error fetching sentences:", sentenceError)
- segments = [{
- start: 0,
- end: (transcript.audio_duration || 0),
- text: transcript.text || "",
- }]
+ segments = [
+ {
+ start: 0,
+ end: transcript.audio_duration || 0,
+ text: transcript.text || "",
+ },
+ ]
}
}
@@ -111,15 +121,19 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
intelligence.summary = transcript.summary
}
- if (transcript.sentiment_analysis_results && Array.isArray(transcript.sentiment_analysis_results)) {
- intelligence.sentimentAnalysis = transcript.sentiment_analysis_results.map((s) => ({
- text: s.text,
- start: s.start / 1000,
- end: s.end / 1000,
- sentiment: s.sentiment,
- confidence: s.confidence,
- speaker: s.speaker || null,
- }))
+ if (
+ transcript.sentiment_analysis_results &&
+ Array.isArray(transcript.sentiment_analysis_results)
+ ) {
+ intelligence.sentimentAnalysis =
+ transcript.sentiment_analysis_results.map((s) => ({
+ text: s.text,
+ start: s.start / 1000,
+ end: s.end / 1000,
+ sentiment: s.sentiment,
+ confidence: s.confidence,
+ speaker: s.speaker || null,
+ }))
}
if (transcript.entities && Array.isArray(transcript.entities)) {
@@ -131,16 +145,21 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
}))
}
- if (transcript.auto_highlights_result?.results && Array.isArray(transcript.auto_highlights_result.results)) {
- intelligence.keyPhrases = transcript.auto_highlights_result.results.map((h) => ({
- text: h.text,
- count: h.count,
- rank: h.rank,
- timestamps: (h.timestamps || []).map((t) => ({
- start: t.start / 1000,
- end: t.end / 1000,
- })),
- }))
+ if (
+ transcript.auto_highlights_result?.results &&
+ Array.isArray(transcript.auto_highlights_result.results)
+ ) {
+ intelligence.keyPhrases = transcript.auto_highlights_result.results.map(
+ (h) => ({
+ text: h.text,
+ count: h.count,
+ rank: h.rank,
+ timestamps: (h.timestamps || []).map((t) => ({
+ start: t.start / 1000,
+ end: t.end / 1000,
+ })),
+ }),
+ )
}
if (transcript.content_safety_labels) {
@@ -160,17 +179,16 @@ export async function GET(_request: NextRequest, { params }: RouteParams) {
result.output = {
segments,
detected_language: transcript.language_code || null,
- intelligence: Object.keys(intelligence).length > 0 ? intelligence : undefined,
+ intelligence:
+ Object.keys(intelligence).length > 0 ? intelligence : undefined,
}
}
return NextResponse.json(result, { status: 200 })
} catch (error: unknown) {
console.error("Error checking transcription:", error)
- const errorMessage =
- error instanceof Error ? error.message : "Unknown error"
return NextResponse.json(
- { error: errorMessage },
+ { error: "Internal server error" },
{ status: 500 },
)
}
diff --git a/src/app/api/printerz-proxy/route.ts b/src/app/api/printerz-proxy/route.ts
deleted file mode 100644
index a815263..0000000
--- a/src/app/api/printerz-proxy/route.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-import { NextResponse } from "next/server";
-
-export async function POST(request: Request) {
- try {
- // Parse the request body
- const requestBody = await request.json();
- const { templateId, printerzData } = requestBody;
-
- // Validate required fields
- if (!templateId || !printerzData) {
- return NextResponse.json(
- { error: "Missing required fields: templateId and printerzData" },
- { status: 400 },
- );
- }
-
- // Get API key from environment variables
- const apiKey = process.env.PRINTERZ_API_KEY;
- if (!apiKey) {
- return NextResponse.json(
- { error: "API key not configured" },
- { status: 500 },
- );
- }
-
- console.log(`Making request to Printerz API for template: ${templateId}`);
- console.log(
- `Data size being sent: ${JSON.stringify(printerzData).length} characters`,
- );
-
- // Make the request to Printerz API
- const response = await fetch(
- `https://api.printerz.dev/templates/${templateId}/render`,
- {
- method: "POST",
- headers: {
- "x-api-key": apiKey,
- "Content-Type": "application/json",
- },
- body: JSON.stringify(printerzData),
- },
- );
-
- console.log(`Printerz API response received, status: ${response.status}`);
- console.log(
- `Response headers: ${JSON.stringify(Object.fromEntries(response.headers.entries()))}`,
- );
-
- // If the API call failed, return the error
- if (!response.ok) {
- const errorText = await response.text();
- return new NextResponse(errorText, { status: response.status });
- }
-
- // Get the PDF data as an ArrayBuffer
- const pdfBuffer = await response.arrayBuffer();
-
- // Add logging for debugging
- console.log(
- `PDF buffer received from Printerz API. Buffer length: ${pdfBuffer.byteLength}`,
- );
-
- if (pdfBuffer.byteLength === 0) {
- console.error("Error: Received empty PDF from Printerz API");
- return NextResponse.json(
- {
- error: "Empty PDF received from Printerz API",
- responseStatus: response.status,
- responseHeaders: Object.fromEntries(response.headers.entries()),
- bufferSize: pdfBuffer.byteLength,
- },
- { status: 500 },
- );
- }
-
- // Return the PDF as binary data
- return new NextResponse(pdfBuffer, {
- status: 200,
- headers: {
- "Content-Type": "application/pdf",
- "Content-Disposition": 'attachment; filename="transcription.pdf"',
- },
- });
- } catch (error: unknown) {
- console.error("Error in printerz-proxy function:", error);
- const errorMessage =
- error instanceof Error ? error.message : "Internal Server Error";
- return NextResponse.json(
- { error: "Internal Server Error", message: errorMessage },
- { status: 500 },
- );
- }
-}
diff --git a/src/app/api/transcribe/route.ts b/src/app/api/transcribe/route.ts
index ec7eb90..cb8db01 100644
--- a/src/app/api/transcribe/route.ts
+++ b/src/app/api/transcribe/route.ts
@@ -1,7 +1,7 @@
+import type { TranscriptParams } from "assemblyai"
import { NextResponse } from "next/server"
-import { uploadBase64ToFirebase } from "@/lib/firebase-utils"
import { assemblyai } from "@/lib/assemblyai-client"
-import type { TranscriptParams } from "assemblyai"
+import { uploadBase64ToFirebase } from "@/lib/firebase-utils"
// Helper to prepare audio input for the transcription service
async function prepareAudioInput(
@@ -64,10 +64,8 @@ export async function POST(request: Request) {
}
try {
- const { audioFileUrl, firebaseFilePath, firebaseUrl } = await prepareAudioInput(
- audioData,
- audioUrl,
- )
+ const { audioFileUrl, firebaseFilePath, firebaseUrl } =
+ await prepareAudioInput(audioData, audioUrl)
if (!audioFileUrl) {
throw new Error("No audio URL available for transcription.")
diff --git a/src/app/changelog/page.tsx b/src/app/changelog/page.tsx
index 5185728..eec765f 100644
--- a/src/app/changelog/page.tsx
+++ b/src/app/changelog/page.tsx
@@ -1,7 +1,81 @@
-"use client";
+"use client"
-import { Changelog } from "../../components/Changelog";
+import { Clock3, GitCommitHorizontal } from "lucide-react"
+import { Changelog } from "@/components/Changelog"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { Card, CardContent } from "@/components/ui/card"
+import { changelogItems } from "@/data/changelog"
+
+const latestRelease = changelogItems[0]
+
+const totalTrackedChanges = changelogItems.reduce((count, item) => {
+ return (
+ count +
+ (item.changes.new?.length || 0) +
+ (item.changes.improved?.length || 0) +
+ (item.changes.fixed?.length || 0)
+ )
+}, 0)
export default function ChangelogPage() {
- return ;
+ return (
+
+
+
+
+
+
+
+
+
+ Changelog
+
+
+ Release notes
+
+
+ Shipped features, improvements, and fixes in chronological
+ order.
+
+
+
+
+
+
+
+
+ Latest
+
+
+ v{latestRelease?.version}
+
+
+
+ {latestRelease?.date}
+
+
+
+
+
+
+
+
+ {changelogItems.length} releases
+
+
+ {totalTrackedChanges} changes
+
+
+
+
+
+
+
+
+
+
+
+
+ )
}
diff --git a/src/app/documentation/page.tsx b/src/app/documentation/page.tsx
index 068b64a..1cfaa91 100644
--- a/src/app/documentation/page.tsx
+++ b/src/app/documentation/page.tsx
@@ -1,406 +1,444 @@
-"use client";
+"use client"
-import Link from "next/link";
-import { Button } from "../../components/ui/button";
+import {
+ BookOpen,
+ Brain,
+ ChevronRight,
+ CircleHelp,
+ Clock3,
+ Download,
+ FileAudio,
+ FileVideo,
+ Globe2,
+ History,
+ Languages,
+ MessageSquareMore,
+ Settings2,
+ ShieldCheck,
+ Wrench,
+} from "lucide-react"
+import Link from "next/link"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+
+const guideSections = [
+ {
+ href: "#quick-start",
+ title: "Quick start",
+ },
+ {
+ href: "#features",
+ title: "Features",
+ },
+ {
+ href: "#formats",
+ title: "Supported formats",
+ },
+ {
+ href: "#troubleshooting",
+ title: "Troubleshooting",
+ },
+ {
+ href: "#faq",
+ title: "FAQ",
+ },
+]
+
+const quickStartSteps = [
+ {
+ step: "01",
+ icon: FileAudio,
+ title: "Upload audio",
+ description:
+ "Drag in a file or paste a direct audio URL to start a new transcription.",
+ },
+ {
+ step: "02",
+ icon: Settings2,
+ title: "Choose options",
+ description:
+ "Set language, speaker labels, and optional AI analysis before submitting.",
+ },
+ {
+ step: "03",
+ icon: Clock3,
+ title: "Track progress",
+ description:
+ "Monitor the job while it queues and processes, then reopen it from History if needed.",
+ },
+ {
+ step: "04",
+ icon: Download,
+ title: "Review and export",
+ description:
+ "Use the Studio to play back audio, scan the transcript, and export the result.",
+ },
+]
+
+const features = [
+ {
+ icon: Languages,
+ title: "Multi-language transcription",
+ description:
+ "Work across a wide range of languages with either explicit selection or automatic detection.",
+ },
+ {
+ icon: Brain,
+ title: "AI analysis",
+ description:
+ "Generate summaries, chapters, sentiment, entities, key phrases, and topic labels when enabled.",
+ },
+ {
+ icon: History,
+ title: "History and recovery",
+ description:
+ "Completed and in-progress jobs can be reopened through the app without rebuilding your workflow from scratch.",
+ },
+ {
+ icon: Download,
+ title: "Multiple export formats",
+ description:
+ "Download transcripts in plain text and document-friendly formats after review.",
+ },
+ {
+ icon: Globe2,
+ title: "Audio and video input",
+ description:
+ "Use direct file uploads or supported media URLs depending on how your source material is hosted.",
+ },
+ {
+ icon: ShieldCheck,
+ title: "Temporary processing pipeline",
+ description:
+ "Uploaded media is handled for transcription and not intended to be kept as permanent storage.",
+ },
+]
+
+const formatGroups = [
+ {
+ icon: FileAudio,
+ title: "Audio formats",
+ description:
+ "Common voice notes, podcast masters, and archival audio formats work directly.",
+ items: [
+ "MP3, WAV, and FLAC",
+ "OGG, OPUS, and WebM audio",
+ "M4A, AAC, and AIFF",
+ "WMA, CAF, and other supported variants",
+ ],
+ },
+ {
+ icon: FileVideo,
+ title: "Video formats",
+ description:
+ "Transcriptr can extract audio from supported video containers before transcription.",
+ items: [
+ "MP4 and MOV",
+ "AVI and MKV",
+ "WMV, FLV, and M4V",
+ "Other standard containers supported by the transcription backend",
+ ],
+ },
+]
+
+const troubleshootingTopics = [
+ {
+ icon: FileAudio,
+ title: "Upload issues",
+ tips: [
+ "Confirm the file or URL points to a supported audio or video format.",
+ "Try refreshing the page if an upload stalls before submission.",
+ "Check that your connection is stable for larger uploads.",
+ "If a source URL fails, verify it is directly reachable and not gated behind auth.",
+ ],
+ },
+ {
+ icon: Brain,
+ title: "Transcription failures",
+ tips: [
+ "Clearer speech and cleaner source audio usually improve completion rates.",
+ "If advanced analysis is enabled, try a simpler run to isolate the failure.",
+ "Retry the job after a short pause if the provider reports a temporary issue.",
+ "Use the feedback form for persistent failures tied to one file or workflow.",
+ ],
+ },
+ {
+ icon: Globe2,
+ title: "Browser compatibility",
+ tips: [
+ "Use a current version of Chrome, Firefox, Safari, or Edge.",
+ "Keep JavaScript enabled for uploads, polling, and studio playback.",
+ "Clear cached site data if a stale UI state persists after a deployment.",
+ "Disable extensions that block uploads or media playback when debugging.",
+ ],
+ },
+ {
+ icon: Clock3,
+ title: "Performance tips",
+ tips: [
+ "Shorter recordings typically finish faster and are easier to review.",
+ "Split very long recordings if you need quicker turnaround.",
+ "Close heavy browser tabs when working with larger transcripts.",
+ "Use History to reopen finished work instead of rerunning the same job.",
+ ],
+ },
+]
+
+const faqItems = [
+ {
+ question: "What audio formats can I upload?",
+ answer:
+ "Most common audio and video formats are supported directly, including MP3, WAV, FLAC, OGG, M4A, AAC, MP4, MOV, and more.",
+ },
+ {
+ question: "Is my audio data secure?",
+ answer:
+ "Audio is processed for transcription and temporary storage, not treated as long-term media hosting.",
+ },
+ {
+ question: "What is the maximum file size?",
+ answer:
+ "File size limits depend on the current product constraints and hosting setup. If a file fails, split it or reduce its size before retrying.",
+ },
+ {
+ question: "How accurate are the transcriptions?",
+ answer:
+ "Accuracy depends heavily on audio quality, speaker overlap, language choice, and background noise. Clear recordings perform best.",
+ },
+ {
+ question: "Can I edit transcriptions after they are generated?",
+ answer:
+ "You can review, copy, and export transcripts today. Built-in editing is still more limited than a dedicated document editor.",
+ },
+]
export default function DocumentationPage() {
return (
-
-
-
-
- {/* Header */}
-
-
- Documentation
-
-
- Everything you need to know about using Transcriptr
+
+
+
+
+
+
+
+
+
+ Docs
+
+ {guideSections.map((section) => (
+
+ {section.title}
+
+ ))}
+
+
- {/* Getting Started */}
-
-
- 🚀 Getting Started
-
-
-
- Transform your audio files into accurate transcriptions in
- just a few simple steps.
-
-
-
-
-
- 1
-
-
-
- Upload Audio
-
-
- Upload your audio file or provide a URL
-
-
-
-
-
- 2
-
-
-
- Configure Options
-
-
- Select language and other settings
-
-
-
-
-
-
-
- 3
-
-
-
- Start Transcription
-
-
- Click "Transcribe" and monitor progress
-
-
+
+
+
+
+ Transcriptr documentation
+
+
+ Using Transcriptr
+
+
+ A practical reference for uploading media, choosing
+ transcription options, reviewing results in Studio, exporting
+ transcripts, and resolving common issues.
+
+
+
+
+
+
+
+ Quick start
+
+
+
+ {quickStartSteps.map((step) => (
+
+
+ {step.step}
-
-
- 4
-
-
-
- Download Results
-
-
- Review and export your transcription
-
+
+
+
+
+ {step.title}
+
+
+ {step.description}
+
-
-
-
+
+ ))}
+
- {/* Features */}
-
-
- ✨ Key Features
-
-
-
-
- 🌍
-
- Multi-language Support
-
-
-
- Transcribe audio in 100+ languages with high accuracy
-
-
-
-
-
- 💾
-
- Session Persistence
-
-
-
- Your progress is automatically saved and restored
-
-
-
-
-
- 📄
-
- Multiple Export Formats
-
-
-
- Download as PDF, DOCX, or plain text with timestamps
-
-
-
-
-
- 🕒
-
- Transcription History
-
-
-
- Access and manage all your past transcriptions
-
-
-
-
-
-
🎵
-
- Universal Format Support
-
+
+
+
+
+ Features
+
+
+
+ {features.map((feature) => (
+
+
+
+
+ {feature.title}
+
+
+ {feature.description}
+
+
-
- Supports 25+ audio and video formats natively — MP3, WAV,
- M4A, MP4, and more
-
-
+ ))}
- {/* Supported Formats */}
-
-
- 📁 Supported Formats
-
-
-
- Transcriptr supports 25+ audio and video formats natively — no
- conversion step needed.
-
-
-
-
-
- Audio Formats
-
-
-
- •
- MP3 - Most common audio format
-
-
- •
- WAV - Waveform Audio File
-
-
- •
- FLAC - Free Lossless Audio Codec
-
-
- •
- OGG - Open-source audio format
-
-
- •
- M4A - MPEG-4 Audio (iPhone recordings)
-
-
- •
- AAC, WMA, AIFF, OPUS, WebM, CAF - and
- more
-
-
-
-
-
- Video Formats
-
-
-
- •
- MP4 - MPEG-4 video
-
-
- •
- MOV - QuickTime
-
-
- •
- AVI, MKV, WMV, FLV, M4V - and more
-
+
+
+ ))}
- {/* Troubleshooting */}
-
-
- 🔧 Troubleshooting
-
-
-
-
- Upload Issues
-
-
-
- • Most audio formats are now supported (MP3, WAV, FLAC,
- OGG, M4A, AAC, etc.)
-
-
- • If your format isn't supported, try converting to MP3 or
- WAV first
-
-
- • Check that the file size doesn't exceed the upload limit
-
-
• Try refreshing the page if uploads are failing
-
• Verify your internet connection is stable
-
-
-
-
-
- Transcription Failures
-
-
-
• Check your internet connection and try again
-
• Ensure the audio quality is clear and audible
-
• Try reducing the batch size in advanced options
-
- • For persistent issues, use the feedback form to report
- bugs
-
-
-
-
-
-
- Browser Compatibility
-
-
-
- • Use modern browsers: Chrome, Firefox, Safari, or Edge
-
-
• Enable JavaScript for full functionality
-
• Clear browser cache if experiencing issues
-
• Disable ad blockers if uploads are blocked
-
-
-
-
-
- Performance Tips
-
-
-
• Shorter audio files (under 1 hour) process faster
-
- • Use lower batch sizes for large files to avoid memory
- issues
-
-
• Close other browser tabs to free up resources
-
- • Consider splitting very long recordings into segments
-
-
-
+
+
+
+
+ Troubleshooting
+
+
+
+ {troubleshootingTopics.map((topic) => (
+
+
+
+
+ {topic.title}
+
+
+
+ {topic.tips.map((tip) => (
+
+
+ {tip}
+
+ ))}
+
+
+ ))}
- {/* FAQ */}
-
-
- ❓ Frequently Asked Questions
-
-
-
-
- What audio formats can I upload?
-
-
- You can upload almost any audio or video format! We natively
- support MP3, WAV, FLAC, OGG, M4A, AAC, MP4, MOV, MKV, and
- many more — no conversion needed.
-
-
-
-
- Is my audio data secure?
-
-
- Yes, your audio files are processed securely and
- automatically deleted after transcription. We don't store
- your audio permanently.
-
-
-
-
- What's the maximum file size?
-
-
- File size limits depend on your plan. Free users can upload
- files up to 25MB, while premium users enjoy higher limits.
-
-
-
-
- How accurate are the transcriptions?
-
-
- Transcription accuracy typically ranges from 85-95%
- depending on audio quality, language, and speech clarity.
-
-
-
-
- Can I edit transcriptions after they're generated?
-
-
- Currently, you can copy and edit transcriptions in external
- applications. Built-in editing features are planned for
- future releases.
-
-
+
+
+
+
FAQ
+
+
+ {faqItems.map((item) => (
+
+
+ {item.question}
+
+
+
+ {item.answer}
+
+
+ ))}
-
- {/* Footer */}
-
-
-
- Need more help? Check out our{" "}
+
+
Need more help?
+
+ Check the{" "}
changelog
{" "}
- or submit{" "}
- window.openFeedbackModal?.("general")}
- className="text-blue-600 hover:text-blue-800 dark:text-blue-400"
- >
- feedback
-
- {"."}
+ for recent behavior changes, or send feedback from the app.
-
-
-
-
-
- Back to Transcriptr
-
-
+
+ globalThis.window?.openFeedbackModal?.("general")
+ }
+ className="border-border text-foreground hover:bg-background mt-4 inline-flex items-center gap-2 rounded-md border px-3 py-2 text-sm font-medium"
+ >
+
+ Send feedback
+
-
-
+
+
-
+
+
+
- );
+ )
}
diff --git a/src/app/error.tsx b/src/app/error.tsx
new file mode 100644
index 0000000..e70b6b3
--- /dev/null
+++ b/src/app/error.tsx
@@ -0,0 +1,76 @@
+"use client"
+
+import { BookOpen, Home, RefreshCw, TriangleAlert } from "lucide-react"
+import Link from "next/link"
+import { useEffect } from "react"
+import { ErrorState } from "@/components/errors/ErrorState"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { Button } from "@/components/ui/button"
+
+export default function RouteError({
+ error,
+ reset,
+}: Readonly<{
+ error: Error & { digest?: string }
+ reset: () => void
+}>) {
+ useEffect(() => {
+ if (process.env.NODE_ENV === "development") {
+ console.error("Route error boundary triggered:", error)
+ } else if (error.digest) {
+ console.error(`Route error (${error.digest})`)
+ }
+ }, [error])
+
+ return (
+
+
+
+
+
+
+ reset()}>
+
+ Try again
+
+
+
+
+ Go home
+
+
+
+
+
+ Open docs
+
+
+ >
+ }
+ />
+
+
+
+
+
+ )
+}
diff --git a/src/app/errors/[code]/page.tsx b/src/app/errors/[code]/page.tsx
new file mode 100644
index 0000000..5e015f2
--- /dev/null
+++ b/src/app/errors/[code]/page.tsx
@@ -0,0 +1,154 @@
+import type { LucideIcon } from "lucide-react"
+import {
+ Ban,
+ BookOpen,
+ Clock3,
+ Home,
+ ShieldAlert,
+ TriangleAlert,
+ WifiOff,
+} from "lucide-react"
+import Link from "next/link"
+import { notFound } from "next/navigation"
+import { ErrorState } from "@/components/errors/ErrorState"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { Button } from "@/components/ui/button"
+
+interface ErrorCodeConfig {
+ code: string
+ status: string
+ title: string
+ description: string
+ hints: string[]
+ tone: "warning" | "danger" | "info"
+ icon: LucideIcon
+}
+
+const errorCodePages: Record = {
+ "401": {
+ code: "401",
+ status: "Authentication required",
+ title: "You need to sign in before continuing",
+ description:
+ "This resource expects an authenticated session before it can be accessed.",
+ tone: "warning",
+ icon: ShieldAlert,
+ hints: [
+ "Verify that your session or credential flow has completed successfully.",
+ "Start again from a stable route if you were redirected here unexpectedly.",
+ "Check whether the upstream service expired your session silently.",
+ ],
+ },
+ "403": {
+ code: "403",
+ status: "Access forbidden",
+ title: "Your current access level can't open this",
+ description:
+ "The route exists, but the request was blocked by a permission check or policy rule.",
+ tone: "warning",
+ icon: Ban,
+ hints: [
+ "Confirm that the account or token being used has the expected permissions.",
+ "Go back to a route that doesn't require elevated access.",
+ "If this is unexpected, inspect the access policy or environment settings behind the request.",
+ ],
+ },
+ "429": {
+ code: "429",
+ status: "Too many requests",
+ title: "The workflow needs a minute",
+ description:
+ "The request rate is temporarily above the allowed limit, so the system is asking you to slow down.",
+ tone: "warning",
+ icon: Clock3,
+ hints: [
+ "Wait briefly before retrying the same action.",
+ "Avoid rapid repeated refreshes or repeated submissions.",
+ "If this happens often, reduce polling or request bursts from the client.",
+ ],
+ },
+ "500": {
+ code: "500",
+ status: "Internal server error",
+ title: "The server hit an unexpected fault",
+ description:
+ "The request reached the backend, but something failed before a successful response could be returned.",
+ tone: "danger",
+ icon: TriangleAlert,
+ hints: [
+ "Retry once in case the fault was transient.",
+ "Use the changelog and recent changes as the first place to narrow regressions.",
+ "Capture the failing action path so it can be reproduced and traced quickly.",
+ ],
+ },
+ "503": {
+ code: "503",
+ status: "Service unavailable",
+ title: "The transcription service is temporarily offline",
+ description:
+ "A required upstream system is unavailable or still warming back up, so this request cannot complete yet.",
+ tone: "danger",
+ icon: WifiOff,
+ hints: [
+ "Wait and retry after the service has had time to recover.",
+ "Return to a stable route if you only need browsing or review right now.",
+ "If the outage persists, treat it as an infrastructure issue rather than a client-side bug.",
+ ],
+ },
+}
+
+export function generateStaticParams() {
+ return Object.keys(errorCodePages).map((code) => ({ code }))
+}
+
+export default async function ErrorCodePage({
+ params,
+}: Readonly<{
+ params: Promise<{ code: string }>
+}>) {
+ const { code } = await params
+ const config = errorCodePages[code]
+
+ if (!config) {
+ notFound()
+ }
+
+ return (
+
+
+
+
+
+
+
+
+
+ Back to home
+
+
+
+
+
+ Open docs
+
+
+ >
+ }
+ />
+
+
+
+
+
+ )
+}
diff --git a/src/app/global-error.tsx b/src/app/global-error.tsx
new file mode 100644
index 0000000..0302db3
--- /dev/null
+++ b/src/app/global-error.tsx
@@ -0,0 +1,81 @@
+"use client"
+
+import { BookOpen, Home, RefreshCw, TriangleAlert } from "lucide-react"
+import Link from "next/link"
+import { useEffect } from "react"
+import { ErrorState } from "@/components/errors/ErrorState"
+import { Button } from "@/components/ui/button"
+
+export default function GlobalError({
+ error,
+ reset,
+}: Readonly<{
+ error: Error & { digest?: string }
+ reset: () => void
+}>) {
+ useEffect(() => {
+ if (process.env.NODE_ENV === "development") {
+ console.error("Global error boundary triggered:", error)
+ } else if (error.digest) {
+ console.error(`Global error (${error.digest})`)
+ }
+ }, [error])
+
+ return (
+
+
+
+
+
+
+ Transcriptr
+
+
+
+
+
+
+ Reset app
+
+
+
+
+ Go home
+
+
+
+
+
+ Open docs
+
+
+ >
+ }
+ />
+
+
+
+
+ )
+}
diff --git a/src/app/history/page.tsx b/src/app/history/page.tsx
new file mode 100644
index 0000000..61856d4
--- /dev/null
+++ b/src/app/history/page.tsx
@@ -0,0 +1,222 @@
+"use client"
+
+import {
+ AlertCircle,
+ Clock,
+ ExternalLink,
+ FileAudio,
+ Search,
+ Trash2,
+} from "lucide-react"
+import { useRouter } from "next/navigation"
+import { useEffect, useState } from "react"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { Input } from "@/components/ui/input"
+import { type HistoryEntry, useHistoryStore } from "@/stores/history-store"
+
+export default function HistoryPage() {
+ const router = useRouter()
+ const { entries, isLoaded, load, remove, clear } = useHistoryStore()
+ const [searchTerm, setSearchTerm] = useState("")
+
+ useEffect(() => {
+ load()
+ }, [load])
+
+ const filtered = entries.filter((entry) => {
+ if (!searchTerm) return true
+ const term = searchTerm.toLowerCase()
+ return (
+ (entry.audioSource.name?.toLowerCase().includes(term) ?? false) ||
+ entry.predictionId.toLowerCase().includes(term) ||
+ (entry.result?.toLowerCase().includes(term) ?? false)
+ )
+ })
+
+ const formatDate = (timestamp: number) => {
+ return new Date(timestamp).toLocaleDateString(undefined, {
+ month: "short",
+ day: "numeric",
+ year: "numeric",
+ hour: "2-digit",
+ minute: "2-digit",
+ })
+ }
+
+ const handleOpen = (entry: HistoryEntry) => {
+ if (entry.status === "succeeded") {
+ router.push(`/studio/${entry.predictionId}`)
+ } else {
+ router.push(`/transcribe/${entry.predictionId}`)
+ }
+ }
+
+ const getStatusIcon = (status: string) => {
+ if (status === "succeeded") {
+ return
+ }
+
+ if (status === "processing" || status === "starting") {
+ return
+ }
+
+ return
+ }
+
+ const getStatusClassName = (status: string) => {
+ if (status === "succeeded") {
+ return "bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400"
+ }
+
+ if (status === "processing" || status === "starting") {
+ return "bg-amber-100 text-amber-700 dark:bg-amber-900/30 dark:text-amber-400"
+ }
+
+ return "bg-red-100 text-red-700 dark:bg-red-900/30 dark:text-red-400"
+ }
+
+ if (!isLoaded) {
+ return (
+
+ )
+ }
+
+ return (
+
+
+
+
+
+
+
+
History
+
+ Your past transcriptions
+
+
+ {entries.length > 0 && (
+
{
+ if (confirm("Clear all history?")) clear()
+ }}
+ className="text-destructive"
+ >
+
+ Clear All
+
+ )}
+
+
+ {entries.length > 0 && (
+
+
+ setSearchTerm(e.target.value)}
+ className="pl-10"
+ />
+
+ )}
+
+ {filtered.length === 0 ? (
+
+
+
+
+
+
+ {entries.length === 0
+ ? "No transcriptions yet"
+ : "No results"}
+
+
+ {entries.length === 0
+ ? "Start your first transcription to see it here."
+ : "Try a different search term."}
+
+ {entries.length === 0 && (
+ router.push("/")}>
+
+ Start Transcribing
+
+ )}
+
+
+ ) : (
+
+ {filtered.map((entry) => {
+ const fallbackName = `Transcription ${entry.predictionId.slice(0, 8)}`
+ const ariaLabel = `Open transcription: ${entry.audioSource.name || fallbackName}`
+ return (
+
handleOpen(entry)}
+ onKeyDown={(e) => {
+ if (e.key === "Enter" || e.key === " ") {
+ e.preventDefault()
+ handleOpen(entry)
+ }
+ }}
+ >
+
+
+
+ {getStatusIcon(entry.status)}
+
+
+
+ {entry.audioSource.name ||
+ `Transcription ${entry.predictionId.slice(0, 8)}`}
+
+
+ {formatDate(entry.createdAt)}
+
+ {entry.status}
+
+
+
+
+
+ {
+ e.stopPropagation()
+ remove(entry.predictionId)
+ }}
+ className="text-muted-foreground hover:text-destructive h-8 w-8 p-0"
+ >
+
+
+
+
+
+
+ )
+ })}
+
+ )}
+
+
+
+
+
+ )
+}
diff --git a/src/app/layout.tsx b/src/app/layout.tsx
index 7d4af6c..c3a9ba7 100644
--- a/src/app/layout.tsx
+++ b/src/app/layout.tsx
@@ -1,6 +1,7 @@
-import type { Metadata, Viewport } from "next";
-import Script from "next/script";
-import "../index.css";
+import type { Metadata, Viewport } from "next"
+import { VercelAnalytics } from "@/components/analytics/VercelAnalytics"
+import { FeedbackModals } from "@/components/feedback/FeedbackModals"
+import "../index.css"
// eslint-disable-next-line react-refresh/only-export-components
export const metadata: Metadata = {
@@ -33,7 +34,7 @@ export const metadata: Metadata = {
"Convert audio to text with AI-powered transcription. Supports multiple formats and languages, providing fast and accurate results.",
images: ["https://transcriptr.aramb.dev/social_preview.png"],
},
-};
+}
// eslint-disable-next-line react-refresh/only-export-components
export const viewport: Viewport = {
@@ -43,70 +44,20 @@ export const viewport: Viewport = {
maximumScale: 5,
userScalable: true,
viewportFit: "cover", // Support for safe areas on mobile devices
-};
+}
export default function RootLayout({
children,
}: {
- readonly children: React.ReactNode;
+ readonly children: React.ReactNode
}) {
return (
- {children}
- {/* Hidden form for Netlify */}
-
-
-
-
-
+ {children}
+
+
- );
+ )
}
diff --git a/src/app/not-found.tsx b/src/app/not-found.tsx
new file mode 100644
index 0000000..93af9de
--- /dev/null
+++ b/src/app/not-found.tsx
@@ -0,0 +1,50 @@
+import { BookOpen, FileSearch, Home } from "lucide-react"
+import Link from "next/link"
+import { ErrorState } from "@/components/errors/ErrorState"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { Button } from "@/components/ui/button"
+
+export default function NotFound() {
+ return (
+
+
+
+
+
+
+
+
+
+ Back to home
+
+
+
+
+
+ Open docs
+
+
+ >
+ }
+ />
+
+
+
+
+
+ )
+}
diff --git a/src/app/page.tsx b/src/app/page.tsx
index d279290..e3e7de5 100644
--- a/src/app/page.tsx
+++ b/src/app/page.tsx
@@ -1,203 +1,169 @@
-"use client";
-
-import { Suspense, useState, useEffect, lazy } from "react";
-import { motion, AnimatePresence } from "framer-motion";
-import { Card, CardContent } from "../components/ui/card";
-import { Header } from "../components/layout/Header";
-import { Footer } from "../components/layout/Footer";
-import { TranscriptionForm } from "../components/transcription/TranscriptionForm";
-import { Toaster } from "sonner";
-import { FeedbackModals } from "../components/feedback/FeedbackModals";
-import { ChangelogModal } from "../components/ChangelogModal";
-import { V3AnnouncementModal } from "../components/V3AnnouncementModal";
-import TranscriptionHistory from "../components/transcription/TranscriptionHistory";
-import { fadeInUp, expandCenter } from "../lib/animations";
-import { TranscriptionSession } from "@/lib/persistence-service";
-
-const TranscriptionResult = lazy(
- () => import("../components/transcription/TranscriptionResult"),
-);
-const TranscriptionError = lazy(() =>
- import("../components/transcription/TranscriptionError").then((module) => ({
- default: module.TranscriptionError,
- })),
-);
-
-export default function Page() {
- const [showResult] = useState(false);
- const [showError, setShowError] = useState(false);
- const [showChangelogModal, setShowChangelogModal] = useState(false);
- const [showHistoryModal, setShowHistoryModal] = useState(false);
- const [showV3Modal, setShowV3Modal] = useState(false);
- const [formKey, setFormKey] = useState(Date.now()); // Key to force re-render TranscriptionForm when needed
-
- // For handling session selection from history
- const [selectedSession, setSelectedSession] =
- useState(null);
- const [transcriptionResult] = useState(null);
-
- // Auto-show V3.2 announcement for users who haven't seen it
- useEffect(() => {
- const hasSeen = localStorage.getItem("v3.2SAW")
- if (!hasSeen) {
- setShowV3Modal(true)
- }
- }, [])
-
- // Updated to use the new window method instead of direct DOM manipulation
- const openFeedbackModal = (type: "general" | "issue" | "feature") => {
- if (window.openFeedbackModal) {
- window.openFeedbackModal(type);
- }
- };
-
- const openChangelogModal = () => {
- setShowChangelogModal(true);
- };
-
- const closeChangelogModal = () => {
- setShowChangelogModal(false);
- };
-
- const openV3Modal = () => {
- setShowV3Modal(true);
- };
-
- const closeV3Modal = () => {
- setShowV3Modal(false);
- };
-
- const openHistoryModal = () => {
- setShowHistoryModal(true);
- };
-
- const closeHistoryModal = () => {
- setShowHistoryModal(false);
- };
-
- const handleDeleteSession = async (sessionId: string) => {
- try {
- // Import dynamically to prevent circular dependencies
- const { deleteSession } = await import("@/lib/persistence-service");
- await deleteSession(sessionId);
- } catch (error) {
- console.error("Failed to delete session:", error);
- }
- };
-
- const handleSelectSession = (session: TranscriptionSession) => {
- setSelectedSession(session);
- closeHistoryModal();
- // Force re-render the TranscriptionForm component to pick up the selected session
- setFormKey(Date.now());
- };
+"use client"
+
+import { useRouter } from "next/navigation"
+import { useCallback, useRef, useState } from "react"
+import { Toaster, toast } from "sonner"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
+import { UploadAudio } from "@/components/UploadAudio"
+import { getUserFriendlyErrorMessage } from "@/lib/error-utils"
+import { uploadLargeFile } from "@/lib/storage-service"
+import { getApiUrl } from "@/services/transcription"
+import { useHistoryStore } from "@/stores/history-store"
+import type { AIFeatures } from "@/types/transcription"
+
+export default function UploadPage() {
+ const router = useRouter()
+ const [isSubmitting, setIsSubmitting] = useState(false)
+ const isSubmittingRef = useRef(false)
+ const addToHistory = useHistoryStore((s) => s.add)
+
+ const handleUpload = useCallback(
+ async (
+ data: FormData | { audioUrl: string },
+ options: { language: string; diarize: boolean; aiFeatures: AIFeatures },
+ ) => {
+ if (isSubmittingRef.current) return
+ isSubmittingRef.current = true
+ setIsSubmitting(true)
+
+ try {
+ const requestBody: {
+ options: {
+ language?: string
+ diarize?: boolean
+ aiFeatures?: AIFeatures
+ } | null
+ audioUrl?: string
+ } = { options: null }
+
+ let audioSourceName: string
+ let audioSourceSize: number | undefined
+ let audioSourceType: "file" | "url"
+ let audioUrl: string | undefined
+
+ if (data instanceof FormData) {
+ const file = data.get("file") as File
+ if (!file) throw new Error("No file found")
+
+ audioSourceName = file.name
+ audioSourceSize = file.size
+ audioSourceType = "file"
+
+ toast.info("Uploading file...")
+ const uploadResult = await uploadLargeFile(file)
+ requestBody.audioUrl = uploadResult.url
+ audioUrl = uploadResult.url
+ // audioUrl held in memory; written to localStorage below once we have the prediction ID
+ } else {
+ requestBody.audioUrl = data.audioUrl
+ audioUrl = data.audioUrl
+ audioSourceName = data.audioUrl
+ audioSourceType = "url"
+ // audioUrl held in memory; written to localStorage below once we have the prediction ID
+ }
+
+ requestBody.options = {
+ language: options.language,
+ diarize: options.diarize || false,
+ aiFeatures: options.aiFeatures,
+ }
+
+ toast.info("Starting transcription...")
+
+ const response = await fetch(getApiUrl("transcribe"), {
+ method: "POST",
+ headers: { "Content-Type": "application/json" },
+ body: JSON.stringify(requestBody),
+ })
+
+ if (!response.ok) {
+ let errorBody = "Unknown server error"
+ try {
+ const errorJson = await response.json()
+ errorBody =
+ errorJson.error || errorJson.message || JSON.stringify(errorJson)
+ } catch {
+ errorBody = `Server error (${response.status})`
+ }
+ throw new Error(errorBody)
+ }
+
+ const resultData = await response.json()
+
+ if (!resultData?.id) {
+ throw new Error("Invalid API response: Missing prediction ID")
+ }
+
+ if (resultData.audioUrl) {
+ audioUrl = resultData.audioUrl
+ }
+ if (audioUrl) {
+ try {
+ localStorage.setItem(`audioUrl_${resultData.id}`, audioUrl)
+ } catch {
+ // Private browsing or storage quota exceeded
+ }
+ }
+
+ addToHistory({
+ predictionId: resultData.id,
+ audioSource: {
+ name: audioSourceName,
+ size: audioSourceSize,
+ type: audioSourceType,
+ url: audioUrl,
+ },
+ options,
+ status: "processing",
+ createdAt: Date.now(),
+ })
+
+ router.push(`/transcribe/${resultData.id}`)
+ } catch (err) {
+ console.error("Upload failed:", err)
+ const errorInfo = getUserFriendlyErrorMessage(err)
+ toast.error(errorInfo.userMessage)
+ isSubmittingRef.current = false
+ setIsSubmitting(false)
+ }
+ },
+ [router, addToHistory],
+ )
return (
-
-
-
-
-
-
-
-
- Loading form...
- }
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {showChangelogModal && }
-
-
-
- {showV3Modal && }
-
-
-
- {showHistoryModal && (
-
- )}
-
-
-
- {showResult && (
- Loading result... }>
-
-
-
-
- )}
-
-
-
- {showError && (
- Loading error details... }>
-
- setShowError(false)}
- apiResponses={[]}
- showApiDetails={false}
- setShowApiDetails={() => {}}
- formatTimestamp={() => ""}
- />
-
-
- )}
-
+
+
+
+
+
+
+
+ Transcriptr
+
+
+ Convert audio to text with AI-powered transcription
+
+
+
+
+ {isSubmitting ? (
+
+
+
+ Preparing your transcription...
+
+
+ ) : (
+
+ )}
+
+
+
+
+
- );
+ )
}
diff --git a/src/app/privacy/page.tsx b/src/app/privacy/page.tsx
index b092af0..5a6bc8d 100644
--- a/src/app/privacy/page.tsx
+++ b/src/app/privacy/page.tsx
@@ -1,232 +1,127 @@
-"use client";
+import Link from "next/link"
+import { AnalyticsOptOut } from "@/components/analytics/AnalyticsOptOut"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
-import Link from "next/link";
-import { AnalyticsOptOut } from "@/components/analytics/AnalyticsOptOut";
+const LAST_UPDATED = "April 27, 2026"
export default function PrivacyPage() {
return (
-
-
-
-
-
+
+
+
+
+
+
+ Back to Transcriptr
+
+
|
+
-
-
- Back to Transcriptr
-
-
+ Terms
+
+
-
-
-
- Privacy Policy
-
-
- Last updated: {new Date().toLocaleDateString()}
+
+ Privacy Policy
+ Last updated: {LAST_UPDATED}
+
+
+ This page explains what Transcriptr collects, how we use it, and
+ which third-party services are involved when you use the app.
-
-
- 1. Introduction
-
-
- This Privacy Policy explains how Transcriptr ("we", "our", or
- "us") collects, uses, and shares your information when you use
- our service. We respect your privacy and are committed to
- protecting your personal data.
-
-
-
-
-
- 2. Information We Collect
-
-
-
-
- 2.1 Audio Files
-
-
- When you upload audio files for transcription, we process this
- content to generate textual transcriptions. For files below
- our size threshold, processing occurs directly in your
- browser. For larger files, we temporarily upload them to
- Firebase Storage to facilitate processing.
-
-
-
-
-
- 2.2 Analytics and Usage Data
-
-
- With your consent, we collect usage data through Google
- Analytics and Microsoft Clarity to improve our service. This
- includes:
-
-
- Usage statistics (pages visited, features used)
-
- Technical information (browser type, operating system)
-
- Performance metrics and error data
-
-
-
-
-
- 2.3 Feedback Information
-
-
- When you submit feedback, report issues, or suggest features,
- we collect the information you provide, which may include:
-
-
- Your name (if provided)
- Your email address (optional)
-
- Browser and operating system information for issue reports
-
- The content of your feedback or issue report
-
-
-
-
-
-
- 3. How We Use Your Information
-
- We use the information we collect to:
-
-
- Process and generate transcriptions from your audio files
-
- Improve and optimize our service
- Respond to your feedback and fix reported issues
- Understand how users interact with our application
-
-
-
-
-
- 4. Data Retention
-
-
- We do not permanently store your audio files or transcriptions
- on our servers. Data is processed and then:
-
-
-
- For browser-based processing: Data remains in your browser
- only
-
-
- For cloud processing: Temporarily stored files are deleted
- after processing is complete (typically within minutes)
-
-
-
- While we are committed to the timely deletion of your data,
- unforeseen technical issues or operational anomalies may, on
- occasion, cause audio files stored in Firebase Storage to be
- retained for longer than the intended period. We take active
- measures to minimize such occurrences and ensure that any
- retained data is identified and purged as quickly as possible.
-
-
-
-
-
- 5. Third-Party Services
-
- We use the following third-party services:
-
- AssemblyAI: Processes audio files for transcription
- Firebase Storage: Temporarily stores larger audio files
-
- Google Analytics: Tracks usage patterns (with consent only)
-
-
- Microsoft Clarity: Monitors user experience (with consent
- only)
-
-
- Netlify: Hosts the application and processes form submissions
-
-
-
-
-
-
- 6. Your Rights
-
- You have the right to:
-
- Decline analytics cookies and tracking
- Request deletion of any data we hold about you
- Access information about what data we process
-
-
-
-
-
- 7. Analytics Opt-Out
-
-
- You can opt out of analytics tracking by declining cookies when
- prompted. You can also use browser extensions that block
- tracking or enable "Do Not Track" settings in your browser.
-
-
-
-
-
-
- 8. Changes to This Policy
-
-
- We may update this Privacy Policy from time to time. We will
- notify users of significant changes by posting a notice on our
- website.
-
-
-
-
-
- 9. Contact Us
-
-
- If you have questions or concerns about this Privacy Policy,
- please contact us at{" "}
-
- contact@aramb.dev
-
- {"."}
-
-
-
+
1. Information We Collect
+
+
Audio and media you submit
+
+ When you upload a file or provide a supported media source for
+ transcription, we process that content to generate transcript
+ output. Some requests may require temporary cloud handling to
+ complete the transcription workflow.
+
+
+
Feedback submissions
+
+ When you open the in-app feedback form, the embedded Tally form
+ can receive the information you enter along with extra context we
+ pass through the embed URL. That context currently includes:
+
+
+ The feedback type you selected
+ Your browser and operating system details
+ The current page path and full page URL
+ Any query parameters already present in the page URL
+
+
+
Usage analytics
+
+ We use Vercel Web Analytics to understand basic product usage and
+ performance. We strip query strings from tracked page URLs before
+ events are sent, and you can disable analytics for your browser on
+ this page.
+
+
+
2. How We Use Information
+
We use collected information to:
+
+ Process transcription requests
+ Operate and troubleshoot the app
+ Understand product usage and improve reliability
+ Review feedback, bug reports, and feature requests
+
+
+
3. Storage and Retention
+
+ We do not intend Transcriptr to be long-term storage for your
+ uploaded media. When a workflow requires Firebase Storage, files
+ are stored temporarily to complete processing and are intended to
+ be deleted afterward.
+
+
+ Deletion is not guaranteed to be instantaneous. Operational
+ issues, failed cleanup, or provider-side delays can occasionally
+ cause temporary files to remain longer than intended.
+
+
+
4. Third-Party Services
+
Transcriptr currently relies on these third-party services:
+
+ AssemblyAI for transcription processing
+ Firebase Storage for temporary file handling when needed
+ Vercel Web Analytics for anonymized usage analytics
+ Tally for embedded feedback form submissions
+
+
+
5. Your Choices
+
You can:
+
+ Choose not to submit feedback through the embedded form
+ Disable Vercel Web Analytics for this browser
+ Contact us with questions about data handling or deletion
+
+
+
+
+
6. Changes to This Policy
+
+ We may update this policy as the product changes. When we make
+ material updates, we will revise the date at the top of this page.
+
+
+
7. Contact
+
+ Questions about this policy can be sent to{" "}
+ contact@aramb.dev .
+
+
+
-
-
+
- );
+ )
}
diff --git a/src/app/studio/[id]/page.tsx b/src/app/studio/[id]/page.tsx
new file mode 100644
index 0000000..5bc0144
--- /dev/null
+++ b/src/app/studio/[id]/page.tsx
@@ -0,0 +1,209 @@
+"use client"
+
+import { AlertCircle, ArrowLeft, FileAudio } from "lucide-react"
+import Link from "next/link"
+import { useRouter } from "next/navigation"
+import { use, useEffect, useState } from "react"
+import { Toaster } from "sonner"
+import { TranscriptionStudio } from "@/components/transcription/TranscriptionStudio"
+import { Button } from "@/components/ui/button"
+import { getApiUrl } from "@/services/transcription"
+import type {
+ AudioSource,
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
+
+interface StudioData {
+ transcription: string
+ segments?: TranscriptionSegment[]
+ intelligence?: TranscriptionIntelligence
+ audioSource?: AudioSource
+}
+
+function StudioSkeleton() {
+ return (
+
+ )
+}
+
+export default function StudioPage({
+ params,
+}: Readonly<{
+ params: Promise<{ id: string }>
+}>) {
+ const { id } = use(params)
+ const router = useRouter()
+ const [data, setData] = useState
(null)
+ const [isLoading, setIsLoading] = useState(true)
+ const [error, setError] = useState(null)
+
+ useEffect(() => {
+ async function loadData() {
+ setIsLoading(true)
+ let didRedirect = false
+ try {
+ const response = await fetch(getApiUrl(`prediction/${id}`))
+ if (!response.ok) throw new Error(`Server error: ${response.status}`)
+
+ const result = await response.json()
+
+ if (result.status === "succeeded" && result.output) {
+ const output = result.output
+ let transcription = ""
+ let segments: TranscriptionSegment[] | undefined
+
+ if (output.segments && Array.isArray(output.segments)) {
+ segments = output.segments.map(
+ (
+ seg: {
+ start: number
+ end: number
+ text: string
+ speaker?: string
+ words?: unknown[]
+ },
+ idx: number,
+ ) => ({
+ id: idx,
+ start: seg.start,
+ end: seg.end,
+ text: seg.text,
+ speaker: seg.speaker,
+ words: seg.words,
+ }),
+ )
+ transcription = output.segments
+ .map((seg: { text: string }) => seg.text)
+ .join(" ")
+ .trim()
+ }
+
+ const audioUrl =
+ result.audioUrl ||
+ localStorage.getItem(`audioUrl_${id}`) ||
+ undefined
+
+ if (result.audioUrl) {
+ localStorage.setItem(`audioUrl_${id}`, result.audioUrl)
+ }
+
+ setData({
+ transcription,
+ segments,
+ intelligence: output.intelligence,
+ audioSource: audioUrl ? { type: "url", url: audioUrl } : undefined,
+ })
+ } else if (
+ result.status === "processing" ||
+ result.status === "starting"
+ ) {
+ didRedirect = true
+ router.replace(`/transcribe/${id}`)
+ return
+ } else if (result.status === "failed") {
+ setError(result.error || "Transcription failed")
+ } else {
+ setError("Transcription not found or not yet completed")
+ }
+ } catch (err) {
+ console.error("Failed to load studio data:", err)
+ setError("Failed to load transcription data")
+ } finally {
+ if (!didRedirect) setIsLoading(false)
+ }
+ }
+
+ loadData()
+ }, [id, router])
+
+ if (isLoading) return
+
+ if (error) {
+ return (
+
+
+
+
+ Error Loading Studio
+
+
{error}
+
router.push("/")}>
+
+ Back to Home
+
+
+
+ )
+ }
+
+ if (!data) {
+ return (
+
+
+
+
+
+
+ No Transcription Found
+
+
+ Start a new transcription to use the studio.
+
+
router.push("/")}>
+
+ New Transcription
+
+
+
+ )
+ }
+
+ return (
+
+ {/* Top bar */}
+
+
+
+
+ Back to Transcriptr
+
+
+
+
+
router.push("/")}
+ />
+
+
+
+ )
+}
diff --git a/src/app/studio/page.tsx b/src/app/studio/page.tsx
index a96986c..a6f644d 100644
--- a/src/app/studio/page.tsx
+++ b/src/app/studio/page.tsx
@@ -1,206 +1,46 @@
-"use client";
-
-import { useSearchParams, useRouter } from "next/navigation";
-import { Suspense, useEffect, useState } from "react";
-import { TranscriptionStudio } from "@/components/transcription/TranscriptionStudio";
-import { TranscriptionSession, getSession, getAllSessions } from "@/lib/persistence-service";
-import { Button } from "@/components/ui/button";
-import { ArrowLeft, FileAudio, Clock, AlertCircle } from "lucide-react";
-import Link from "next/link";
-import { Toaster } from "sonner";
-
-// Loading skeleton for the studio
-function StudioSkeleton() {
- return (
-
-
- {/* Header skeleton */}
-
-
- {/* Content skeleton */}
-
-
-
- );
-}
-
-// Empty state when no session is found
-function EmptyState() {
- const router = useRouter();
+"use client"
+
+import { FileAudio } from "lucide-react"
+import { useRouter, useSearchParams } from "next/navigation"
+import { Suspense } from "react"
+import { Button } from "@/components/ui/button"
+
+function StudioRedirectContent() {
+ const router = useRouter()
+ const searchParams = useSearchParams()
+
+ // Old studio page used ?session= query params; new route is /studio/[id].
+ // Redirect to home immediately — can't map old session IDs to prediction IDs.
+ if (searchParams.get("session")) {
+ router.replace("/")
+ return null
+ }
return (
-
+
-
-
+
+
-
- No Transcription Found
+
+ Open Studio from a Transcription
-
- Start a new transcription to use the studio, or select a session from your history.
+
+ Upload and transcribe audio first, then open the result in Studio.
-
- router.push("/")} className="flex items-center gap-2">
-
- New Transcription
-
- router.push("/?history=true")}>
-
- View History
-
-
-
-
- );
-}
-
-// Error state
-function ErrorState({ message }: { message: string }) {
- const router = useRouter();
-
- return (
-
-
-
-
- Error Loading Session
-
-
{message}
-
router.push("/")} className="flex items-center gap-2">
-
- Back to Home
+ router.push("/")}>
+
+ New Transcription
- );
-}
-
-// Main studio content component
-function StudioContent() {
- const searchParams = useSearchParams();
- const router = useRouter();
- const sessionId = searchParams.get("session");
-
- const [session, setSession] = useState
(null);
- const [isLoading, setIsLoading] = useState(true);
- const [error, setError] = useState(null);
-
- useEffect(() => {
- async function loadSession() {
- setIsLoading(true);
- setError(null);
-
- try {
- if (sessionId) {
- // Load specific session by ID
- const loadedSession = await getSession(sessionId);
- if (loadedSession) {
- setSession(loadedSession);
- } else {
- setError("Session not found. It may have expired or been deleted.");
- }
- } else {
- // Try to load the most recent completed session
- const allSessions = await getAllSessions();
- const completedSessions = allSessions
- .filter((s) => s.status === "succeeded" && s.result)
- .sort((a, b) => b.lastUpdatedAt - a.lastUpdatedAt);
-
- if (completedSessions.length > 0) {
- setSession(completedSessions[0]);
- // Update URL with session ID for deep linking
- const url = new URL(window.location.href);
- url.searchParams.set("session", completedSessions[0].id);
- window.history.replaceState({}, "", url.toString());
- }
- }
- } catch (err) {
- console.error("Failed to load session:", err);
- setError("Failed to load transcription session.");
- } finally {
- setIsLoading(false);
- }
- }
-
- loadSession();
- }, [sessionId]);
-
- const handleNewTranscription = () => {
- router.push("/");
- };
-
- if (isLoading) {
- return ;
- }
-
- if (error) {
- return ;
- }
-
- if (!session || !session.result) {
- return ;
- }
-
- return (
-
- {/* Back navigation */}
-
-
-
-
- Back to Transcriptr
-
- {session.audioSource?.name && (
-
|
- )}
- {session.audioSource?.name && (
-
- {session.audioSource.name}
-
- )}
-
-
-
- {/* Studio content */}
-
-
-
-
- );
+ )
}
-// Main page component with Suspense boundary
-export default function StudioPage() {
+export default function StudioRedirectPage() {
return (
- }>
-
+
+
- );
+ )
}
diff --git a/src/app/terms/page.tsx b/src/app/terms/page.tsx
index 5816478..928c36f 100644
--- a/src/app/terms/page.tsx
+++ b/src/app/terms/page.tsx
@@ -1,209 +1,104 @@
-"use client";
+import Link from "next/link"
+import { Footer } from "@/components/layout/Footer"
+import { Header } from "@/components/layout/Header"
-import Link from "next/link";
+const LAST_UPDATED = "April 27, 2026"
export default function TermsPage() {
return (
-
-
-
-
-
-
-
- Back to Transcriptr
-
-
-
-
-
-
- Terms of Service
-
-
- Last updated: {new Date().toLocaleDateString()}
-
+
+
-
-
- 1. Acceptance of Terms
-
-
- By accessing and using Transcriptr ("the Service"), you agree to
- comply with and be bound by these Terms of Service. If you do
- not agree to these terms, please do not use the Service.
-
-
+
+
+
+
+ Back to Transcriptr
+
+ |
+
+ Privacy
+
+
-
-
- 2. Description of Service
-
-
- Transcriptr is an AI-powered audio-to-text transcription tool
- that allows users to convert audio files to text format using
- machine learning technology.
-
-
+
+ Terms of Service
+ Last updated: {LAST_UPDATED}
-
-
- 3. User Responsibilities and Acceptable Use
-
-
- You are responsible for any content you upload to the Service.
- You agree not to upload content that violates any laws,
- infringes on the intellectual property rights of others,
- contains malicious code, or includes private or sensitive
- information without proper authorization.
-
-
- Acceptable Use Policy for Audio Content
-
-
- In addition, you agree not to submit any audio content that:
-
-
-
- Contains copyrighted music or other intellectual property for
- which you lack necessary rights or licenses for transcription.
-
-
- Is sexually explicit, pornographic, or depicts sexual acts.
-
-
- Constitutes hate speech, promotes discrimination, or incites
- violence.
-
-
- Contains excessive profanity, vulgar language, or is otherwise
- obscene.
-
- Depicts, promotes, or facilitates illegal activities.
- Involves harassment, threats, or bullying.
-
-
- Violation of these terms may result in consequences including,
- but not limited to, content removal, account suspension, or
- termination. We reserve the right to take any action we deem
- appropriate in response to a violation, including reporting to
- law enforcement.
-
-
+
+ By using Transcriptr, you agree to these terms. If you do not
+ agree, do not use the service.
+
-
-
- 4. Data Processing and Storage
-
-
- Audio files are processed using third-party services including
- AssemblyAI and Firebase. Large files may be temporarily stored in
- Firebase Storage to facilitate processing. For details on how
- your data is handled, please see our{" "}
-
- Privacy Policy
-
- .
-
-
+ 1. What the Service Does
+
+ Transcriptr is an audio transcription product that accepts file
+ uploads and supported media sources, then uses third-party
+ providers to produce transcript output and related workflow data.
+
-
-
- 5. Service Limitations
-
-
- The Service is provided "as is" and without warranty of any
- kind. Transcription accuracy depends on various factors
- including audio quality, accents, background noise, and other
- variables. We do not guarantee 100% accuracy in transcriptions.
-
-
+ 2. Your Responsibilities
+
+ You are responsible for the content you submit to the service.
+
+ You must not submit content that:
+
+ You do not have the right to upload, share, or process
+ Violates applicable law or another party's rights
+ Contains malicious code or attempts to abuse the service
+
+ Includes sensitive material you are not authorized to share
+
+
-
-
- 6. Usage Limits
-
-
- We reserve the right to implement usage limits to ensure service
- quality for all users. Excessive use that impacts service
- performance may be restricted.
-
-
+ 3. Acceptable Use
+
+ You may not use Transcriptr to interfere with the product, evade
+ limits, probe for vulnerabilities, or run abusive automated
+ traffic. We may block requests or restrict access if usage puts
+ the service or other users at risk.
+
-
-
- 7. Third-Party Services
-
-
- The Service uses third-party APIs and services including
- AssemblyAI for transcription processing and Firebase for
- temporary file storage. Your use of the Service is also subject
- to the terms and policies of these third parties.
-
-
+ 4. Third-Party Processing
+
+ Transcriptr depends on third-party services including AssemblyAI,
+ Firebase Storage, Tally, and Vercel. Your use of Transcriptr also
+ involves those providers where relevant to the workflow.
+
+
+ For details about data handling, please review our{" "}
+ Privacy Policy.
+
-
-
- 8. Modifications to the Service
-
-
- We reserve the right to modify or discontinue the Service at any
- time without notice. We shall not be liable to you or any third
- party for any modification, suspension, or discontinuance of the
- Service.
-
-
+ 5. Accuracy and Availability
+
+ The service is provided on an "as is" basis. Transcript
+ accuracy depends on the quality and characteristics of the source
+ audio, provider behavior, and other technical factors. We do not
+ guarantee that outputs will be complete, accurate, or available at
+ all times.
+
-
-
- 9. Changes to Terms
-
-
- We may update these Terms of Service from time to time. We will
- notify users of significant changes by posting a notice on our
- website or through other communication channels.
-
-
+ 6. Limits and Changes
+
+ We may introduce or adjust limits, features, or workflows at any
+ time. We may also suspend or discontinue parts of the service when
+ needed for product, operational, or security reasons.
+
-
-
- 10. Contact Information
-
-
- If you have questions or concerns about these Terms of Service,
- please contact us at{" "}
-
- contact@aramb.dev
-
- {"."}
-
-
-
+ 7. Contact
+
+ Questions about these terms can be sent to{" "}
+ contact@aramb.dev .
+
+
+
-
-
+
- );
+ )
}
diff --git a/src/app/transcribe/[id]/page.tsx b/src/app/transcribe/[id]/page.tsx
new file mode 100644
index 0000000..42646c0
--- /dev/null
+++ b/src/app/transcribe/[id]/page.tsx
@@ -0,0 +1,416 @@
+"use client"
+
+import {
+ AlertCircle,
+ ArrowLeft,
+ CheckCircle2,
+ Copy,
+ Download,
+ ExternalLink,
+ FileAudio,
+ Loader2,
+ RefreshCw,
+} from "lucide-react"
+import Link from "next/link"
+import { useRouter } from "next/navigation"
+import { use, useCallback, useEffect, useRef, useState } from "react"
+import { Toaster, toast } from "sonner"
+import { Button } from "@/components/ui/button"
+import { Card, CardContent } from "@/components/ui/card"
+import { getUserFriendlyErrorMessage } from "@/lib/error-utils"
+import { getApiUrl } from "@/services/transcription"
+import { useHistoryStore } from "@/stores/history-store"
+import type {
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
+
+type TranscribeStatus = "processing" | "completed" | "failed"
+
+interface TranscribeResult {
+ transcription: string
+ segments?: TranscriptionSegment[]
+ intelligence?: TranscriptionIntelligence
+ detectedLanguage?: string | null
+}
+
+function parseTranscriptionOutput(output: {
+ segments?: unknown[]
+ intelligence?: TranscriptionIntelligence
+ detected_language?: string | null
+}): Pick
{
+ if (!output?.segments || !Array.isArray(output.segments)) {
+ return { transcription: "", segments: undefined, intelligence: undefined }
+ }
+
+ type RawSegment = {
+ start: number
+ end: number
+ text: string
+ speaker?: string
+ words?: unknown[]
+ }
+
+ const segments = output.segments.map((seg, idx) => {
+ const s = seg as RawSegment
+ return {
+ id: idx,
+ start: s.start,
+ end: s.end,
+ text: s.text,
+ speaker: s.speaker,
+ words: s.words,
+ }
+ }) as TranscriptionSegment[]
+
+ const transcription = output.segments
+ .map((seg) => (seg as { text: string }).text)
+ .join(" ")
+ .trim()
+
+ return { transcription, segments, intelligence: output.intelligence }
+}
+
+function getStepClassName(isDone: boolean, isActive: boolean) {
+ if (isDone) return "bg-primary/10 text-primary"
+ if (isActive) return "bg-primary text-primary-foreground"
+
+ return "bg-muted text-muted-foreground"
+}
+
+export default function TranscribePage({
+ params,
+}: Readonly<{
+ params: Promise<{ id: string }>
+}>) {
+ const { id } = use(params)
+ const router = useRouter()
+ const [status, setStatus] = useState("processing")
+ const [progress, setProgress] = useState(30)
+ const [result, setResult] = useState(null)
+ const [error, setError] = useState(null)
+ const [copySuccess, setCopySuccess] = useState(false)
+ const pollRef = useRef(null)
+ const attemptsRef = useRef(0)
+ const patchHistory = useHistoryStore((s) => s.patch)
+
+ const stopPolling = useCallback(() => {
+ if (pollRef.current) {
+ clearInterval(pollRef.current)
+ pollRef.current = null
+ }
+ }, [])
+
+ const handleTranscriptionSuccess = useCallback(
+ (output: unknown, audioUrl?: string) => {
+ setProgress(100)
+ stopPolling()
+ const { transcription, segments, intelligence } =
+ parseTranscriptionOutput(
+ output as Parameters[0],
+ )
+ setResult({
+ transcription,
+ segments,
+ intelligence,
+ detectedLanguage: (output as { detected_language?: string | null })
+ ?.detected_language,
+ })
+ setStatus("completed")
+ patchHistory(id, {
+ ...(audioUrl ? { audioSource: { type: "file", url: audioUrl } } : {}),
+ status: "succeeded",
+ result: transcription.slice(0, 200),
+ })
+ },
+ [id, stopPolling, patchHistory],
+ )
+
+ const poll = useCallback(async () => {
+ attemptsRef.current++
+
+ try {
+ const response = await fetch(getApiUrl(`prediction/${id}`))
+ if (!response.ok) throw new Error(`Server error: ${response.status}`)
+
+ const data = await response.json()
+ const audioUrl =
+ data.audioUrl || localStorage.getItem(`audioUrl_${id}`) || undefined
+
+ if (data.audioUrl) {
+ localStorage.setItem(`audioUrl_${id}`, data.audioUrl)
+ }
+
+ if (data.status === "starting" || data.status === "processing") {
+ const progressEstimate = Math.min(
+ 95,
+ 30 + Math.floor((attemptsRef.current / 40) * 65),
+ )
+ setProgress(progressEstimate)
+ } else if (data.status === "succeeded") {
+ handleTranscriptionSuccess(data.output, audioUrl)
+ } else if (data.status === "failed") {
+ stopPolling()
+ setStatus("failed")
+ setError(data.error || "Transcription failed")
+ patchHistory(id, { status: "failed" })
+ }
+
+ if (attemptsRef.current >= 120) {
+ stopPolling()
+ setStatus("failed")
+ setError("Transcription timed out")
+ patchHistory(id, { status: "failed" })
+ }
+ } catch (err) {
+ if (attemptsRef.current >= 5) {
+ stopPolling()
+ const errorInfo = getUserFriendlyErrorMessage(err)
+ setStatus("failed")
+ setError(errorInfo.userMessage)
+ patchHistory(id, { status: "failed" })
+ }
+ }
+ }, [id, stopPolling, patchHistory, handleTranscriptionSuccess])
+
+ useEffect(() => {
+ poll()
+ pollRef.current = setInterval(poll, 5000)
+ return stopPolling
+ }, [poll, stopPolling])
+
+ const handleCopy = async () => {
+ if (!result?.transcription) return
+ try {
+ await navigator.clipboard.writeText(result.transcription)
+ setCopySuccess(true)
+ toast.success("Copied to clipboard!")
+ setTimeout(() => setCopySuccess(false), 2000)
+ } catch {
+ toast.error("Failed to copy")
+ }
+ }
+
+ const handleDownloadTxt = () => {
+ if (!result?.transcription) return
+ const blob = new Blob([result.transcription], { type: "text/plain" })
+ const url = URL.createObjectURL(blob)
+ const a = document.createElement("a")
+ a.href = url
+ a.download = `transcription_${id}.txt`
+ document.body.appendChild(a)
+ a.click()
+ a.remove()
+ setTimeout(() => URL.revokeObjectURL(url), 100)
+ toast.success("Downloaded!")
+ }
+
+ const handleRetry = () => {
+ if (pollRef.current) {
+ clearInterval(pollRef.current)
+ pollRef.current = null
+ }
+ setStatus("processing")
+ setError(null)
+ setProgress(30)
+ attemptsRef.current = 0
+ poll()
+ pollRef.current = setInterval(poll, 5000)
+ }
+
+ return (
+
+ {/* Top bar */}
+
+
+
+
+ Back
+
+
|
+
+ Transcription {id.slice(0, 8)}...
+
+
+
+
+
+
+ {/* Processing State */}
+ {status === "processing" && (
+
+
+
+
+ Transcribing your audio...
+
+
+ This usually takes 1-3 minutes depending on file length
+
+
+ {/* Progress bar */}
+
+
+ Processing
+ {Math.floor(progress)}%
+
+
+
+
+ {/* Step indicators */}
+
+ {["Uploading", "Queued", "Processing"].map((step, i) => {
+ const isActive =
+ (i === 0 && progress < 40) ||
+ (i === 1 && progress >= 40 && progress < 60) ||
+ (i === 2 && progress >= 60)
+ const isDone =
+ (i === 0 && progress >= 40) || (i === 1 && progress >= 60)
+ return (
+
+ {step}
+
+ )
+ })}
+
+
+
+ )}
+
+ {/* Completed State */}
+ {status === "completed" && result && (
+
+
+
+
+
+
+
+
+
+
+ Transcription Complete
+
+
+ {
+ result.transcription
+ .trim()
+ .split(/\s+/)
+ .filter(Boolean).length
+ }{" "}
+ words
+ {result.detectedLanguage &&
+ ` · ${result.detectedLanguage}`}
+
+
+
+
+
+ {/* Summary snippet */}
+ {result.intelligence?.summary && (
+
+
+ AI Summary
+
+
+ {result.intelligence.summary
+ .split("\n")
+ .filter(Boolean)
+ .slice(0, 3)
+ .map((line) => line.replace(/^[-*\u2022]\s*/, ""))
+ .join(" ")}
+
+
+ )}
+
+ {/* Transcript preview */}
+
+
+ {result.transcription.slice(0, 2000)}
+ {result.transcription.length > 2000 && "..."}
+
+
+
+
+
+ {/* Actions */}
+
+ router.push(`/studio/${id}`)}
+ >
+
+ Open in Studio
+
+
+
+ {copySuccess ? "Copied!" : "Copy"}
+
+
+
+ Download TXT
+
+
+
+
+
+
+ Start a new transcription
+
+
+
+ )}
+
+ {/* Failed State */}
+ {status === "failed" && (
+
+
+
+
+ Transcription Failed
+
+
+ {error || "Something went wrong during transcription."}
+
+
+
+
+ Retry
+
+
router.push("/")}>
+
+ Start Over
+
+
+
+
+ )}
+
+
+
+
+
+ )
+}
diff --git a/src/components/Changelog.tsx b/src/components/Changelog.tsx
index b2fa0ad..0b5c1f7 100644
--- a/src/components/Changelog.tsx
+++ b/src/components/Changelog.tsx
@@ -1,136 +1,149 @@
-import { useEffect, useState } from "react";
-import Link from "next/link";
-import { marked } from "marked";
-import { Button } from "./ui/button";
-import { X } from "lucide-react";
-import { MobileChangelog } from "./MobileChangelog";
-import { changelogItems } from "../data/changelog";
+"use client"
+
+import { AnimatePresence, motion } from "framer-motion"
+import { ChevronDown, X } from "lucide-react"
+import { marked } from "marked"
+import Link from "next/link"
+import { useState } from "react"
+import { changelogItems } from "../data/changelog"
+import { Button } from "./ui/button"
interface ChangelogProps {
- readonly isModal?: boolean;
- readonly onClose?: () => void;
+ readonly isModal?: boolean
+ readonly onClose?: () => void
}
export function Changelog({ isModal = false, onClose }: ChangelogProps) {
- // Mobile-first: Use MobileChangelog on small screens
- const [isMobile, setIsMobile] = useState(false);
-
- useEffect(() => {
- const checkMobile = () => {
- setIsMobile(window.innerWidth < 768);
- };
-
- checkMobile();
- window.addEventListener("resize", checkMobile);
-
- return () => window.removeEventListener("resize", checkMobile);
- }, []);
-
- // Use mobile version on small screens
- if (isMobile) {
- return ;
+ const [expandedVersions, setExpandedVersions] = useState(
+ // Auto-expand first version
+ changelogItems.length > 0 ? [changelogItems[0].version] : [],
+ )
+
+ const showHeader = !isModal || !!onClose
+
+ const toggleVersion = (version: string) => {
+ setExpandedVersions((prev) =>
+ prev.includes(version)
+ ? prev.filter((v) => v !== version)
+ : [...prev, version],
+ )
}
+ // Changelog content is from our own data file, not user input — safe for innerHTML
const parseMarkdown = (markdown: string) => {
- const rawMarkup = marked(markdown, { breaks: true, gfm: true });
- // Important: Ensure the type is compatible with dangerouslySetInnerHTML
- return { __html: rawMarkup as string };
- };
+ const rawMarkup = marked(markdown, { breaks: true, gfm: true })
+ return { __html: rawMarkup as string }
+ }
+
+ const renderChanges = (
+ changes: string[],
+ label: string,
+ colorClass: string,
+ ) => {
+ if (!changes || changes.length === 0) return null
+ return (
+
+
+ {label}
+
+
+ {changes.map((change) => (
+
+ ))}
+
+
+ )
+ }
const content = (
-
-
-
- Changelog
-
- {isModal && onClose && (
-
-
-
- )}
-
-
- {/* Timeline */}
-
- {changelogItems.map((item, index) => (
-
- {/* Date and Version */}
-
-
- {item.date}
-
-
- v{item.version}
-
-
-
- {/* Dot */}
-
-
- {/* Changes */}
-
- {item.changes.new && item.changes.new.length > 0 && (
-
-
- New
-
-
- {item.changes.new.map((change) => (
-
- ))}
-
-
- )}
-
- {item.changes.improved && item.changes.improved.length > 0 && (
-
-
- Improved
-
-
- {item.changes.improved.map((change) => (
-
- ))}
-
-
- )}
-
- {item.changes.fixed && item.changes.fixed.length > 0 && (
+
+ {showHeader && (
+
+
+ Changelog
+
+ {isModal && onClose && (
+
+
+
+ )}
+
+ )}
+
+
+ {changelogItems.map((item) => {
+ const isExpanded = expandedVersions.includes(item.version)
+
+ return (
+
+
toggleVersion(item.version)}
+ className="flex w-full items-center justify-between px-4 py-3 text-left transition-colors hover:bg-gray-50 dark:hover:bg-gray-700/50"
+ >
-
- Fixed
-
-
- {item.changes.fixed.map((change) => (
-
- ))}
-
+
+ v{item.version}
+
+
+ {item.date}
+
- )}
+
+
+
+
+
+
+ {isExpanded && (
+
+
+ {renderChanges(
+ item.changes.new ?? [],
+ "New",
+ "text-green-600 dark:text-green-400",
+ )}
+ {renderChanges(
+ item.changes.improved ?? [],
+ "Improved",
+ "text-blue-600 dark:text-blue-400",
+ )}
+ {renderChanges(
+ item.changes.fixed ?? [],
+ "Fixed",
+ "text-amber-600 dark:text-amber-400",
+ )}
+
+
+ )}
+
-
- {index < changelogItems.length - 1 && (
-
- )}
-
- ))}
+ )
+ })}
@@ -138,34 +151,21 @@ export function Changelog({ isModal = false, onClose }: ChangelogProps) {
-
-
-
Back to Transcriptr
)}
- );
+ )
if (isModal) {
- return content;
+ return content
}
return (
-
+
- );
+ )
}
diff --git a/src/components/ChangelogModal.tsx b/src/components/ChangelogModal.tsx
deleted file mode 100644
index de1326b..0000000
--- a/src/components/ChangelogModal.tsx
+++ /dev/null
@@ -1,26 +0,0 @@
-import { Changelog } from "./Changelog";
-import { motion } from "framer-motion";
-import { scaleDown } from "../lib/animations";
-import { AnimatedBackdrop } from "./ui/animated-backdrop";
-
-interface ChangelogModalProps {
- onClose: () => void;
-}
-
-export function ChangelogModal({ onClose }: ChangelogModalProps) {
- return (
-
- e.stopPropagation()} // Prevent clicks from closing the modal
- variants={scaleDown}
- initial="initial"
- animate="animate"
- exit="exit"
- transition={{ type: "spring", damping: 20, stiffness: 300 }}
- >
-
-
-
- );
-}
diff --git a/src/components/CookieConsent.tsx b/src/components/CookieConsent.tsx
deleted file mode 100644
index dd72a5d..0000000
--- a/src/components/CookieConsent.tsx
+++ /dev/null
@@ -1,238 +0,0 @@
-import { Button } from "./ui/button";
-import { AlertCircle, Cookie } from "lucide-react";
-import { toast } from "sonner";
-import Link from "next/link";
-import { motion } from "framer-motion";
-import { slideInRight, springTransition } from "../lib/animations";
-
-interface CookieConsentProps {
- onAccept: () => void;
- onDecline: () => void;
- onEssentialOnly?: () => void;
-}
-
-// Check for ad blocker and handle the acceptance
-const checkForAdBlocker = (
- onAccept: () => void,
- onDecline: () => void,
- onEssentialOnly: (() => void) | undefined,
- toastId: string,
-) => {
- // Simple ad blocker detection - create a bait element
- const testElement = document.createElement("div");
- testElement.className = "adsbox";
- testElement.innerHTML = " ";
- document.body.appendChild(testElement);
-
- // Give the browser a moment to hide the element if an ad blocker is active
- setTimeout(() => {
- const isBlocked =
- testElement.offsetHeight === 0 ||
- testElement.offsetWidth === 0 ||
- getComputedStyle(testElement).display === "none";
-
- document.body.removeChild(testElement);
-
- // If ad blocker is detected, update the toast content
- if (isBlocked) {
- // Dismiss the original toast
- toast.dismiss(toastId);
-
- // Show a new toast with ad blocker warning and choice options
- toast.custom(
- (t) => (
-
-
-
-
-
-
- Cookie consent
-
-
- We use cookies to analyze site traffic and improve your
- experience. By accepting, you consent to our use of
- analytics tools including Google Analytics and Microsoft
- Clarity as described in our{" "}
- {
- e.stopPropagation();
- }}
- className="underline transition-colors hover:text-blue-500"
- >
- Privacy Policy
-
- .
-
-
-
-
-
-
-
- Ad blocker detected. You can still use our service, but
- disabling it would help us improve.
-
-
-
-
- {
- onDecline();
- toast.dismiss(t);
- }}
- >
- Decline
-
- {
- if (onEssentialOnly) onEssentialOnly();
- toast.dismiss(t);
- }}
- >
- Essential Only
-
- {
- onAccept();
- toast.dismiss(t);
- }}
- >
- Accept All
-
-
-
-
- ),
- {
- duration: Infinity,
- position: "bottom-right",
- closeButton: false,
- id: "cookie-consent-adblock",
- },
- );
- } else {
- // No ad blocker detected, proceed with acceptance
- onAccept();
- toast.dismiss(toastId);
- }
- }, 100);
-};
-
-export function showCookieConsent({
- onAccept,
- onDecline,
- onEssentialOnly,
-}: CookieConsentProps) {
- // Generate a unique ID for the toast
- const toastId =
- "cookie-consent-" + Math.random().toString(36).substring(2, 9);
-
- // Show the initial cookie consent toast
- toast.custom(
- (t) => (
-
-
-
-
-
-
- Cookie consent
-
-
- We use cookies to analyze site traffic and improve your
- experience. By accepting, you consent to our use of analytics
- tools including Google Analytics and Microsoft Clarity as
- described in our{" "}
- {
- e.stopPropagation();
- toast.dismiss(t);
- }}
- className="underline transition-colors hover:text-blue-500"
- >
- Privacy Policy
-
- .
-
-
-
-
-
- {
- onDecline();
- toast.dismiss(t);
- }}
- >
- Decline
-
- {
- if (onEssentialOnly) onEssentialOnly();
- toast.dismiss(t);
- }}
- >
- Essential Only
-
- {
- // When accepting, check for ad blocker
- checkForAdBlocker(
- onAccept,
- onDecline,
- onEssentialOnly,
- toastId,
- );
- }}
- >
- Accept All
-
-
-
-
- ),
- {
- duration: Infinity,
- position: "bottom-right",
- closeButton: false,
- id: toastId,
- },
- );
-
- return toastId;
-}
diff --git a/src/components/Documentation.tsx b/src/components/Documentation.tsx
index 31afa3d..863ca1d 100644
--- a/src/components/Documentation.tsx
+++ b/src/components/Documentation.tsx
@@ -1,5 +1,5 @@
-import Link from "next/link";
-import { Button } from "./ui/button";
+import Link from "next/link"
+import { Button } from "./ui/button"
export function Documentation() {
return (
@@ -110,5 +110,5 @@ export function Documentation() {
- );
+ )
}
diff --git a/src/components/MobileChangelog.tsx b/src/components/MobileChangelog.tsx
deleted file mode 100644
index 2021682..0000000
--- a/src/components/MobileChangelog.tsx
+++ /dev/null
@@ -1,347 +0,0 @@
-import { useState } from "react";
-import Link from "next/link";
-import { marked } from "marked";
-import { Button } from "./ui/button";
-import { X, ChevronDown, ChevronRight } from "lucide-react";
-import { motion, AnimatePresence } from "framer-motion";
-import { changelogItems } from "../data/changelog";
-
-interface MobileChangelogProps {
- isModal?: boolean;
- onClose?: () => void;
-}
-
-export function MobileChangelog({
- isModal = false,
- onClose,
-}: MobileChangelogProps) {
- const [expandedVersions, setExpandedVersions] = useState
([]);
- const [expandedSections, setExpandedSections] = useState([]);
-
- const toggleVersion = (version: string) => {
- setExpandedVersions((prev) =>
- prev.includes(version)
- ? prev.filter((v) => v !== version)
- : [...prev, version],
- );
- };
-
- const toggleSection = (sectionId: string) => {
- setExpandedSections((prev) =>
- prev.includes(sectionId)
- ? prev.filter((s) => s !== sectionId)
- : [...prev, sectionId],
- );
- };
-
- const parseMarkdown = (markdown: string) => {
- const rawMarkup = marked(markdown, { breaks: true, gfm: true });
- return { __html: rawMarkup as string };
- };
-
- const content = (
-
- {/* Header */}
-
-
-
-
- What's New
-
-
- Latest updates and improvements
-
-
- {isModal && onClose && (
-
-
-
- )}
-
-
-
- {/* Content */}
-
- {changelogItems.map((item) => (
-
- {/* Version Header */}
-
toggleVersion(item.version)}
- className="mobile-changelog-section mobile-tap-target flex w-full items-center justify-between px-4 py-4 text-left transition-colors hover:bg-gray-100 dark:hover:bg-gray-700"
- >
-
-
- Version {item.version}
-
-
- {item.date}
-
-
-
-
-
-
-
- {/* Version Content */}
-
- {expandedVersions.includes(item.version) && (
-
-
- {/* New Section */}
- {item.changes.new && item.changes.new.length > 0 && (
-
-
toggleSection(`${item.version}-new`)}
- className="mobile-changelog-section mobile-tap-target flex w-full items-center justify-between px-4 py-3 text-left transition-opacity hover:opacity-80"
- >
-
- 🚀
- New
-
- {item.changes.new.length}
-
-
-
-
-
-
-
-
- {expandedSections.includes(`${item.version}-new`) && (
-
-
- {item.changes.new.map((change, changeIndex) => (
-
-
-
-
- ))}
-
-
- )}
-
-
- )}
-
- {/* Improved Section */}
- {item.changes.improved &&
- item.changes.improved.length > 0 && (
-
-
- toggleSection(`${item.version}-improved`)
- }
- className="mobile-changelog-section mobile-tap-target flex w-full items-center justify-between px-4 py-3 text-left transition-opacity hover:opacity-80"
- >
-
- ✨
- Improved
-
- {item.changes.improved.length}
-
-
-
-
-
-
-
-
- {expandedSections.includes(
- `${item.version}-improved`,
- ) && (
-
-
- {item.changes.improved.map(
- (change, changeIndex) => (
-
-
-
-
- ),
- )}
-
-
- )}
-
-
- )}
-
- {/* Fixed Section */}
- {item.changes.fixed && item.changes.fixed.length > 0 && (
-
-
toggleSection(`${item.version}-fixed`)}
- className="mobile-changelog-section mobile-tap-target flex w-full items-center justify-between px-4 py-3 text-left transition-opacity hover:opacity-80"
- >
-
- 🐛
- Fixed
-
- {item.changes.fixed.length}
-
-
-
-
-
-
-
-
- {expandedSections.includes(
- `${item.version}-fixed`,
- ) && (
-
-
- {item.changes.fixed.map(
- (change, changeIndex) => (
-
-
-
-
- ),
- )}
-
-
- )}
-
-
- )}
-
-
- )}
-
-
- ))}
-
-
- {/* Footer */}
- {!isModal && (
-
-
-
-
-
-
- Back to Transcriptr
-
-
-
- )}
-
- );
-
- return content;
-}
diff --git a/src/components/UploadAudio.tsx b/src/components/UploadAudio.tsx
index 43b50c0..04a42d4 100644
--- a/src/components/UploadAudio.tsx
+++ b/src/components/UploadAudio.tsx
@@ -1,19 +1,17 @@
-import { useState, useCallback } from "react"
-import { AnimatedButton } from "./ui/animated-button"
-import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"
+import { Link as LinkIcon, UploadCloud } from "lucide-react"
+import { useCallback, useState } from "react"
import { useFileInput } from "@/hooks/use-file-input"
-import { TranscriptionOptions } from "./transcription/TranscriptionOptions"
-import { UploadCloud, Link as LinkIcon } from "lucide-react"
-import { FileUploadInput } from "./transcription/FileUploadInput"
-import { UrlInput } from "./transcription/UrlInput"
import { getAllSupportedFormats } from "@/lib/file-format-utils"
+import { FileUploadInput } from "./transcription/FileUploadInput"
import type { AIFeatures } from "./transcription/TranscriptionOptions"
+import { TranscriptionOptions } from "./transcription/TranscriptionOptions"
+import { UrlInput } from "./transcription/UrlInput"
+import { AnimatedButton } from "./ui/animated-button"
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "./ui/tabs"
interface UploadAudioProps {
onUpload: (
- data:
- | FormData
- | { audioUrl: string },
+ data: FormData | { audioUrl: string },
options: { language: string; diarize: boolean; aiFeatures: AIFeatures },
) => void
disabled?: boolean
@@ -107,7 +105,11 @@ export function UploadAudio({ onUpload }: UploadAudioProps) {
}, [fileInputRef])
const handleOptionsChange = useCallback(
- (options: { language: string; diarize: boolean; aiFeatures: AIFeatures }) => {
+ (options: {
+ language: string
+ diarize: boolean
+ aiFeatures: AIFeatures
+ }) => {
setTranscriptionOptions(options)
},
[],
@@ -152,7 +154,7 @@ export function UploadAudio({ onUpload }: UploadAudioProps) {
}
}
},
- [validateFile, handleFileSelect, setActiveTab, setAudioUrl],
+ [validateFile, handleFileSelect],
)
const canSubmit =
diff --git a/src/components/V3AnnouncementModal.tsx b/src/components/V3AnnouncementModal.tsx
deleted file mode 100644
index 1be4c73..0000000
--- a/src/components/V3AnnouncementModal.tsx
+++ /dev/null
@@ -1,199 +0,0 @@
-import { useEffect, useState } from "react"
-import { motion } from "framer-motion"
-import { X, Brain, Languages, RefreshCw } from "lucide-react"
-import Confetti from "react-confetti"
-import { Button } from "./ui/button"
-import { AnimatedBackdrop } from "./ui/animated-backdrop"
-import { expandCenter } from "../lib/animations"
-
-const STORAGE_KEY = "v3.2SAW"
-
-interface V3AnnouncementModalProps {
- onClose: () => void
-}
-
-export function V3AnnouncementModal({ onClose }: V3AnnouncementModalProps) {
- const [showConfetti, setShowConfetti] = useState(false)
- const [windowDimensions, setWindowDimensions] = useState({
- width: 0,
- height: 0,
- })
-
- useEffect(() => {
- const updateWindowDimensions = () => {
- setWindowDimensions({
- width: window.innerWidth,
- height: window.innerHeight,
- })
- }
-
- updateWindowDimensions()
- window.addEventListener("resize", updateWindowDimensions)
-
- setShowConfetti(true)
-
- const confettiTimer = setTimeout(() => {
- setShowConfetti(false)
- }, 6800)
-
- return () => {
- window.removeEventListener("resize", updateWindowDimensions)
- clearTimeout(confettiTimer)
- }
- }, [])
-
- const handleClose = () => {
- localStorage.setItem(STORAGE_KEY, "true")
- onClose()
- }
-
- return (
- <>
-
- e.stopPropagation()}
- variants={expandCenter}
- initial="initial"
- animate="animate"
- exit="exit"
- transition={{ type: "spring", damping: 20, stiffness: 300 }}
- >
-
- {/* Header with close button */}
-
-
-
-
-
-
- V3.2 -- AI Intelligence
-
-
-
-
-
-
-
- {/* Main content */}
-
-
- Transcriptr now runs on a more robust and accurate transcription
- engine with opt-in AI analysis features. Get chapters, summaries,
- sentiment, entities, and more -- all from a single transcription.
-
-
- {/* Feature highlights */}
-
-
-
-
-
-
-
- AI Analysis Features
-
-
- Toggle Auto Chapters, Summarization, Sentiment Analysis,
- Entity Detection, Key Phrases, Content Moderation, and
- Topic Detection. Each feature appears as a new tab in the
- Studio.
-
-
-
-
-
-
-
-
-
-
- 30+ Language Support
-
-
- Auto-detect or manually select from 20+ languages.
- Audio and video formats are natively supported --
- no conversion step needed.
-
-
-
-
-
-
-
-
-
-
- Smart Error Recovery
-
-
- If a feature does not support the detected language, you
- get a clear explanation and a one-click retry that
- automatically disables the unsupported feature.
-
-
-
-
-
- {/* Call to action */}
-
-
- Enable AI features in the Transcription Options panel before
- uploading. Results appear as tabs in the Studio.
-
-
-
- {/* Action buttons */}
-
-
-
-
-
- {/* Confetti positioned above the modal */}
- {showConfetti && (
-
-
-
- )}
-
- >
- )
-}
diff --git a/src/components/analytics/AnalyticsOptOut.tsx b/src/components/analytics/AnalyticsOptOut.tsx
index 9a1e35c..fee3cc4 100644
--- a/src/components/analytics/AnalyticsOptOut.tsx
+++ b/src/components/analytics/AnalyticsOptOut.tsx
@@ -1,38 +1,31 @@
-"use client";
+"use client"
-import { useState, useEffect } from "react";
-import { Button } from "../ui/button";
-import { disableAnalytics, enableAnalytics } from "../../lib/analytics";
-import { toast } from "sonner";
+import { useEffect, useState } from "react"
+import { toast } from "sonner"
+import { Button } from "../ui/button"
export const AnalyticsOptOut = () => {
- const [isOptedOut, setIsOptedOut] = useState(null);
+ const [isOptedOut, setIsOptedOut] = useState(null)
useEffect(() => {
- // Ensure this runs only on the client
- const optOutStatus = localStorage.getItem("analytics_opt_out");
- setIsOptedOut(optOutStatus === "true");
- }, []);
+ const optOutStatus = localStorage.getItem("analytics_opt_out")
+ setIsOptedOut(optOutStatus === "true")
+ }, [])
const handleOptOut = () => {
- localStorage.setItem("analytics_opt_out", "true");
- setIsOptedOut(true);
- disableAnalytics();
- toast.success("You have successfully opted out of analytics tracking.");
- };
+ localStorage.setItem("analytics_opt_out", "true")
+ setIsOptedOut(true)
+ toast.success("Analytics tracking is now disabled for this browser.")
+ }
const handleOptIn = () => {
- localStorage.setItem("analytics_opt_out", "false");
- setIsOptedOut(false);
- if (localStorage.getItem("cookieConsent") === "true") {
- enableAnalytics();
- }
- toast.success("You have opted back in to analytics tracking.");
- };
+ localStorage.setItem("analytics_opt_out", "false")
+ setIsOptedOut(false)
+ toast.success("Analytics tracking is enabled again for this browser.")
+ }
if (isOptedOut === null) {
- // Render nothing or a loading skeleton until client-side state is determined
- return null;
+ return null
}
return (
@@ -40,9 +33,8 @@ export const AnalyticsOptOut = () => {
{isOptedOut ? (
- You are currently opted out of analytics tracking. We respect your
- privacy and will not collect any non-essential data during your
- visits.
+ Analytics are currently disabled for this browser. You can opt back
+ in at any time.
Opt-In to Analytics
@@ -51,9 +43,8 @@ export const AnalyticsOptOut = () => {
) : (
- You can withdraw your consent for analytics tracking at any time.
- This will stop the collection of non-essential data used to improve
- our service.
+ You can disable Vercel Web Analytics for this browser at any time.
+ We already strip query strings before events are sent.
Opt-Out of Analytics
@@ -61,5 +52,5 @@ export const AnalyticsOptOut = () => {
)}
- );
-};
+ )
+}
diff --git a/src/components/analytics/ConsentManager.tsx b/src/components/analytics/ConsentManager.tsx
deleted file mode 100644
index c0dde24..0000000
--- a/src/components/analytics/ConsentManager.tsx
+++ /dev/null
@@ -1,81 +0,0 @@
-import { useState, useEffect, useRef } from "react"; // <-- Add useRef
-import { showCookieConsent } from "../CookieConsent";
-import {
- initializeAnalytics,
- enableAnalytics,
- disableAnalytics,
- trackEvent,
-} from "../../lib/analytics";
-
-export function useConsentManager() {
- const [cookieConsent, setCookieConsent] = useState(
- null,
- );
- const consentCheckInitiated = useRef(false); // <-- Add a ref to track if check has started
-
- useEffect(() => {
- // Add ad blocker detection style (only once)
- const style = document.createElement("style");
- style.innerHTML = `
- .adsbox {
- height: 1px;
- width: 1px;
- position: absolute;
- left: -10000px;
- top: -10000px;
- }
- `;
- document.head.appendChild(style);
-
- // Only proceed if the consent check hasn't been initiated in this component instance
- if (!consentCheckInitiated.current) {
- consentCheckInitiated.current = true; // <-- Mark as initiated
-
- const savedConsent = localStorage.getItem("cookieConsent");
- if (savedConsent !== null) {
- console.log("ConsentManager: Found saved consent:", savedConsent); // Debug log
- setCookieConsent(savedConsent);
- initializeAnalytics(savedConsent);
- } else {
- console.log("ConsentManager: No saved consent found, showing banner."); // Debug log
- initializeAnalytics(false); // Initialize with consent denied
- showCookieConsent({
- onAccept: () => {
- console.log("ConsentManager: Consent Accepted"); // Debug log
- localStorage.setItem("cookieConsent", "true");
- setCookieConsent(true);
- enableAnalytics();
- trackEvent("Consent", "Accept", "Cookie Consent");
- },
- onDecline: () => {
- console.log("ConsentManager: Consent Declined"); // Debug log
- localStorage.setItem("cookieConsent", "false");
- setCookieConsent(false);
- disableAnalytics();
- trackEvent("Consent", "Decline", "Cookie Consent");
- },
- onEssentialOnly: () => {
- console.log("ConsentManager: Consent Essential Only"); // Debug log
- localStorage.setItem("cookieConsent", "essential");
- setCookieConsent("essential");
- // Don't enable tracking analytics but still allow essential cookies
- disableAnalytics(); // Ensure GA consent is denied/updated
- trackEvent("Consent", "Essential Only", "Cookie Consent");
- },
- });
- }
- } else {
- console.log("ConsentManager: Consent check already initiated, skipping."); // Debug log
- }
-
- // Cleanup function for the style element
- return () => {
- // Check if the style element exists before trying to remove it
- if (style.parentNode) {
- document.head.removeChild(style);
- }
- };
- }, []); // Empty dependency array ensures this effect runs once on mount (or twice in StrictMode dev)
-
- return cookieConsent;
-}
diff --git a/src/components/analytics/VercelAnalytics.tsx b/src/components/analytics/VercelAnalytics.tsx
new file mode 100644
index 0000000..c077c70
--- /dev/null
+++ b/src/components/analytics/VercelAnalytics.tsx
@@ -0,0 +1,24 @@
+"use client"
+
+import { Analytics, type BeforeSendEvent } from "@vercel/analytics/react"
+
+function beforeSend(event: BeforeSendEvent) {
+ if (
+ typeof globalThis.localStorage !== "undefined" &&
+ globalThis.localStorage.getItem("analytics_opt_out") === "true"
+ ) {
+ return null
+ }
+
+ const url = new URL(event.url)
+ url.search = ""
+
+ return {
+ ...event,
+ url: url.toString(),
+ }
+}
+
+export function VercelAnalytics() {
+ return
+}
diff --git a/src/components/errors/ErrorState.tsx b/src/components/errors/ErrorState.tsx
new file mode 100644
index 0000000..fc56898
--- /dev/null
+++ b/src/components/errors/ErrorState.tsx
@@ -0,0 +1,148 @@
+import type { LucideIcon } from "lucide-react"
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { cn } from "@/lib/utils"
+
+type ErrorTone = "info" | "warning" | "danger" | "neutral"
+
+const toneStyles: Record<
+ ErrorTone,
+ {
+ badge: string
+ code: string
+ glow: string
+ }
+> = {
+ info: {
+ badge: "border-sky-500/20 bg-sky-500/10 text-sky-700 dark:text-sky-300",
+ code: "border-sky-500/20 bg-sky-500/10 text-sky-700 dark:text-sky-300",
+ glow: "from-sky-500/12 via-transparent to-transparent",
+ },
+ warning: {
+ badge:
+ "border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300",
+ code: "border-amber-500/20 bg-amber-500/10 text-amber-700 dark:text-amber-300",
+ glow: "from-amber-500/12 via-transparent to-transparent",
+ },
+ danger: {
+ badge: "border-red-500/20 bg-red-500/10 text-red-700 dark:text-red-300",
+ code: "border-red-500/20 bg-red-500/10 text-red-700 dark:text-red-300",
+ glow: "from-red-500/12 via-transparent to-transparent",
+ },
+ neutral: {
+ badge: "border-border bg-muted/60 text-foreground",
+ code: "border-border bg-muted/60 text-foreground",
+ glow: "from-foreground/6 via-transparent to-transparent",
+ },
+}
+
+interface ErrorStateProps {
+ code: string
+ status: string
+ title: string
+ description: string
+ icon: LucideIcon
+ hints: string[]
+ actions: React.ReactNode
+ tone?: ErrorTone
+ note?: string
+}
+
+export function ErrorState({
+ code,
+ status,
+ title,
+ description,
+ icon: Icon,
+ hints,
+ actions,
+ tone = "neutral",
+ note,
+}: Readonly) {
+ const styles = toneStyles[tone]
+
+ return (
+
+
+
+
+
+
+
+
+
+
+ {status}
+
+
+
+
+ HTTP status
+
+
+ {title}
+
+
+
+
+
+
+ Code
+
+
+ {code}
+
+
+
+
+
+ {description}
+
+
+ {note && (
+ {note}
+ )}
+
+
+ {actions}
+
+
+
+
+
+
+
+ Next steps
+
+
+
+ {hints.map((hint, index) => (
+
+ ))}
+
+
+
+
+ )
+}
diff --git a/src/components/feedback/Feedback.tsx b/src/components/feedback/Feedback.tsx
index d474199..5eb8576 100644
--- a/src/components/feedback/Feedback.tsx
+++ b/src/components/feedback/Feedback.tsx
@@ -1,5 +1,5 @@
-import Link from "next/link";
-import { FeedbackForm } from "./FeedbackForm";
+import Link from "next/link"
+import { FeedbackForm } from "./FeedbackForm"
export function Feedback() {
return (
@@ -47,5 +47,5 @@ export function Feedback() {
- );
+ )
}
diff --git a/src/components/feedback/FeedbackForm.tsx b/src/components/feedback/FeedbackForm.tsx
index 7ee3f0b..cca26d3 100644
--- a/src/components/feedback/FeedbackForm.tsx
+++ b/src/components/feedback/FeedbackForm.tsx
@@ -1,444 +1,262 @@
-import { useState, useEffect } from "react";
-import { Button } from "../ui/button";
-import { Input } from "../ui/input";
-import { Textarea } from "../ui/textarea";
-import { Label } from "../ui/label";
-import { AlertCircle, CheckCircle2 } from "lucide-react";
-import DeviceDetector from "device-detector-js";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "../ui/select";
-import { staggerContainer, staggerItem } from "../../lib/animations";
-import { motion } from "framer-motion";
-
-type FeedbackType = "general" | "issue" | "feature" | "other";
+import DeviceDetector from "device-detector-js"
+import { AlertCircle, ExternalLink, Loader2 } from "lucide-react"
+import { useEffect, useMemo, useRef, useState } from "react"
+import { Button } from "../ui/button"
+
+type FeedbackType = "general" | "issue" | "feature" | "other"
interface FeedbackFormProps {
- initialType?: FeedbackType;
- onClose?: () => void;
+ initialType?: FeedbackType
+ onClose?: () => void
+}
+
+const TALLY_EMBED_SRC = "https://tally.so/embed/9q6x7Q"
+const TALLY_SCRIPT_SRC = "https://tally.so/widgets/embed.js"
+const DEFAULT_IFRAME_HEIGHT = 420
+
+declare global {
+ interface Window {
+ Tally?: {
+ loadEmbeds: () => void
+ }
+ }
}
export function FeedbackForm({
initialType = "general",
onClose,
}: FeedbackFormProps) {
- const [name, setName] = useState("");
- const [email, setEmail] = useState("");
- const [feedbackType, setFeedbackType] = useState
(initialType);
- const [feedback, setFeedback] = useState("");
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [submitStatus, setSubmitStatus] = useState<
- "idle" | "success" | "error"
- >("idle");
- const [errorMessage, setErrorMessage] = useState("");
-
- // For bug reports
- const [browser, setBrowser] = useState("");
- const [operatingSystem, setOperatingSystem] = useState("");
-
- // Detect browser and OS using device-detector-js
- useEffect(() => {
- const detectDeviceInfo = () => {
- try {
- const deviceDetector = new DeviceDetector();
- const userAgent = navigator.userAgent;
- const device = deviceDetector.parse(userAgent);
-
- // Set browser info with version if available
- if (device.client && device.client.name) {
- const browserWithVersion = device.client.version
- ? `${device.client.name} ${device.client.version}`
- : device.client.name;
- setBrowser(browserWithVersion);
- }
-
- // Set OS info with version if available
- if (device.os && device.os.name) {
- const osWithVersion = device.os.version
- ? `${device.os.name} ${device.os.version}`
- : device.os.name;
- setOperatingSystem(osWithVersion);
- }
- } catch (error) {
- console.error("Error detecting device info:", error);
- // Fallback to basic detection in case device-detector fails
- setBrowser(navigator.userAgent);
- setOperatingSystem(navigator.platform || "Unknown");
+ const iframeRef = useRef(null)
+ const [isReady, setIsReady] = useState(false)
+ const [loadError, setLoadError] = useState("")
+ const [iframeHeight, setIframeHeight] = useState(DEFAULT_IFRAME_HEIGHT)
+ const [embedScale, setEmbedScale] = useState(1)
+
+ const embedSrc = useMemo(() => {
+ try {
+ const deviceDetector = new DeviceDetector()
+ const device = deviceDetector.parse(navigator.userAgent)
+
+ let browser = navigator.userAgent
+ if (device.client?.name) {
+ browser = device.client.version
+ ? `${device.client.name} ${device.client.version}`
+ : device.client.name
}
- };
- // Only detect if the fields are empty (first load or reset)
- if (!browser || !operatingSystem) {
- detectDeviceInfo();
+ let operatingSystem = "Unknown"
+ if (device.os?.name) {
+ operatingSystem = device.os.version
+ ? `${device.os.name} ${device.os.version}`
+ : device.os.name
+ }
+
+ const params = new URLSearchParams()
+ params.set("alignLeft", "1")
+ params.set("hideTitle", "1")
+ params.set("transparentBackground", "1")
+ params.set("dynamicHeight", "1")
+ params.set("feedbackType", initialType)
+ params.set("browser", browser)
+ params.set("os", operatingSystem)
+ params.set("operatingSystem", operatingSystem)
+ params.set("originPage", globalThis.location.pathname)
+
+ return `${TALLY_EMBED_SRC}?${params.toString()}`
+ } catch (error) {
+ console.error("Error preparing Tally feedback embed:", error)
+ return ""
}
- }, [browser, operatingSystem]);
+ }, [initialType])
+
+ const displayError =
+ loadError ||
+ (embedSrc ? "" : "Unable to prepare the feedback form right now.")
- // Add a more immediate way to handle initialType changes
useEffect(() => {
- // Force immediate update when initialType changes
- setFeedbackType(initialType);
-
- // Reset form fields that are specific to certain feedback types
- if (
- initialType === "general" ||
- initialType === "feature" ||
- initialType === "other"
- ) {
- // Clear fields that are only relevant for issue reports
- setBrowser("");
- setOperatingSystem("");
- } else if (initialType === "issue") {
- // Re-detect device info when switching to issue reporting
- const detectDeviceInfo = () => {
- try {
- const deviceDetector = new DeviceDetector();
- const userAgent = navigator.userAgent;
- const device = deviceDetector.parse(userAgent);
-
- // Set browser info with version if available
- if (device.client && device.client.name) {
- const browserWithVersion = device.client.version
- ? `${device.client.name} ${device.client.version}`
- : device.client.name;
- setBrowser(browserWithVersion);
- }
-
- // Set OS info with version if available
- if (device.os && device.os.name) {
- const osWithVersion = device.os.version
- ? `${device.os.name} ${device.os.version}`
- : device.os.name;
- setOperatingSystem(osWithVersion);
- }
- } catch (error) {
- console.error("Error detecting device info:", error);
- setBrowser(navigator.userAgent);
- setOperatingSystem(navigator.platform || "Unknown");
- }
- };
-
- detectDeviceInfo();
+ if (!embedSrc) return
+
+ const loadEmbeds = () => {
+ if (globalThis.window.Tally) {
+ globalThis.window.Tally.loadEmbeds()
+ return
+ }
+
+ document
+ .querySelectorAll(
+ "iframe[data-tally-src]:not([src])",
+ )
+ .forEach((iframe) => {
+ iframe.src = iframe.dataset.tallySrc || ""
+ })
}
- }, [initialType]);
- const handleSubmit = async (e: React.FormEvent) => {
- e.preventDefault();
- setIsSubmitting(true);
- setSubmitStatus("idle");
- setErrorMessage("");
+ const existingScript = document.querySelector(
+ `script[src="${TALLY_SCRIPT_SRC}"]`,
+ )
- try {
- // Create a URLSearchParams object directly
- const params = new URLSearchParams();
- params.append("form-name", "feedback");
- params.append("name", name);
- params.append("email", email);
- params.append("feedbackType", feedbackType);
- params.append("feedback", feedback);
-
- // Add additional fields for issues
- if (feedbackType === "issue") {
- params.append("browser", browser);
- params.append("operatingSystem", operatingSystem);
- }
+ if (existingScript) {
+ loadEmbeds()
+ return
+ }
- // Log submission for debugging
- console.log(
- "Submitting form with data:",
- Object.fromEntries(params.entries()),
- );
-
- const response = await fetch("/__forms.html", {
- method: "POST",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded",
- },
- body: params.toString(),
- });
-
- if (response.ok) {
- console.log("Form submitted successfully");
- setSubmitStatus("success");
- // Reset form
- setName("");
- setEmail("");
- setFeedback("");
- setBrowser("");
- setOperatingSystem("");
- } else {
- console.error(
- "Form submission failed:",
- response.status,
- response.statusText,
- );
- throw new Error(
- `Form submission failed: ${response.status} ${response.statusText}`,
- );
- }
- } catch (error) {
- console.error("Error submitting form:", error);
- setSubmitStatus("error");
- setErrorMessage(
- error instanceof Error ? error.message : "Unknown error occurred",
- );
- } finally {
- setIsSubmitting(false);
+ const script = document.createElement("script")
+ script.src = TALLY_SCRIPT_SRC
+ script.async = true
+ script.onload = loadEmbeds
+ script.onerror = () => {
+ setLoadError(
+ "The embedded form failed to load. Try opening it in a new tab.",
+ )
+ loadEmbeds()
}
- };
-
- const getFormTitle = () => {
- switch (feedbackType) {
- case "issue":
- return "Report an Issue";
- case "feature":
- return "Suggest a Feature";
- case "other":
- return "Submit Feedback";
- default:
- return "Submit Feedback";
+
+ document.body.appendChild(script)
+ }, [embedSrc])
+
+ useEffect(() => {
+ const iframe = iframeRef.current
+
+ if (!iframe || typeof ResizeObserver === "undefined") {
+ return
}
- };
-
- const getPlaceholderText = () => {
- switch (feedbackType) {
- case "issue":
- return "Please describe the issue in detail. What were you trying to do? What happened instead?";
- case "feature":
- return "Please describe the feature you would like to see. How would it improve your experience?";
- case "other":
- return "Your thoughts, suggestions, or questions";
- default:
- return "Your thoughts, suggestions, or feedback";
+
+ const updateHeight = () => {
+ setIframeHeight(Math.max(iframe.offsetHeight, DEFAULT_IFRAME_HEIGHT))
}
- };
-
- const getSuccessMessage = () => {
- switch (feedbackType) {
- case "issue":
- return "Thank you for reporting this issue!";
- case "feature":
- return "Thank you for your feature suggestion!";
- default:
- return "Thank you for your feedback!";
+
+ updateHeight()
+
+ const observer = new ResizeObserver(() => {
+ updateHeight()
+ })
+
+ observer.observe(iframe)
+
+ return () => {
+ observer.disconnect()
}
- };
+ }, [])
- return (
-
-
- {getFormTitle()}
-
-
- {submitStatus === "success" ? (
-
-
-
-
- {getSuccessMessage()}
-
-
- Your input helps us improve Transcriptr.
-
-
-
- ) : (
-
- {/* These hidden fields are crucial for Netlify form handling */}
-
-
-
-
- Don't fill this out if you're human:
-
-
+ useEffect(() => {
+ if (globalThis.window === undefined) {
+ return
+ }
-
-
- Type of Feedback
-
- setFeedbackType(value as FeedbackType)}
- >
-
-
-
-
- General Feedback
- Report an Issue
- Feature Request
- Other
-
-
-
+ const updateScale = () => {
+ const reservedHeight = onClose ? 250 : 190
+ const availableHeight = Math.max(
+ globalThis.innerHeight - reservedHeight,
+ 320,
+ )
+ const nextScale =
+ iframeHeight > availableHeight ? availableHeight / iframeHeight : 1
-
-
-
- Name
-
- setName(e.target.value)}
- placeholder="Your name"
- required
- className="w-full"
- />
-
-
+ setEmbedScale(Number(nextScale.toFixed(3)))
+ }
-
+ updateScale()
+ globalThis.addEventListener("resize", updateScale)
+
+ return () => {
+ globalThis.removeEventListener("resize", updateScale)
+ }
+ }, [iframeHeight, onClose])
+
+ return (
+
+ {displayError ? (
+
+
+
-
- Email{" "}
-
- (optional)
-
-
-
setEmail(e.target.value)}
- placeholder="Your email address"
- className="w-full"
- />
-
- We only use your email if we need to contact you about your{" "}
- {feedbackType === "issue" ? "issue" : "feedback"}.
+
+ Failed to load form
+
+
+ {displayError}
-
-
- {feedbackType === "issue" && (
- <>
-
-
-
- >
+
+
+ {embedSrc && (
+
+
+
+ Open feedback form
+
+
+ )}
+
+ ) : (
+
+ {!isReady && (
+
+
+ Loading feedback form...
+
)}
-
-
-
- {feedbackType === "issue"
- ? "Issue Details"
- : feedbackType === "feature"
- ? "Feature Suggestion"
- : "Feedback"}
-
-
setFeedback(e.target.value)}
- placeholder={getPlaceholderText()}
- required
- className="min-h-[120px] w-full"
+ {embedSrc && (
+
+
-
-
- {submitStatus === "error" && (
-
-
-
-
- Failed to submit
-
-
- {errorMessage || "Please try again later"}
-
-
-
)}
-
+
{onClose && (
Cancel
)}
-
- {isSubmitting ? "Submitting..." : "Submit"}
-
+
+ {embedSrc && (
+
+
+
+ Open in new tab
+
+
+ )}
-
+
)}
- );
+ )
}
diff --git a/src/components/feedback/FeedbackModals.tsx b/src/components/feedback/FeedbackModals.tsx
index d03f4d2..3255472 100644
--- a/src/components/feedback/FeedbackModals.tsx
+++ b/src/components/feedback/FeedbackModals.tsx
@@ -1,40 +1,43 @@
-import React, { useState } from "react";
-import { FeedbackForm } from "./FeedbackForm";
-import { motion, AnimatePresence } from "framer-motion";
-import { X } from "lucide-react";
-import { AnimatedBackdrop } from "../ui/animated-backdrop";
+"use client"
-type FeedbackType = "general" | "issue" | "feature";
+import { AnimatePresence, motion } from "framer-motion"
+import { X } from "lucide-react"
+import React, { useState } from "react"
+import { AnimatedBackdrop } from "../ui/animated-backdrop"
+import { FeedbackForm } from "./FeedbackForm"
+
+type FeedbackType = "general" | "issue" | "feature"
export function FeedbackModals() {
- const [activeModal, setActiveModal] = useState(null);
+ const [activeModal, setActiveModal] = useState(null)
// Replace the global window.feedbackType with a proper state management approach
React.useEffect(() => {
// Create a global access point for other components to open the modal
- window.openFeedbackModal = (type: FeedbackType) => {
- setActiveModal(type);
- };
+ globalThis.window.openFeedbackModal = (type: FeedbackType) => {
+ setActiveModal(type)
+ }
return () => {
- window.openFeedbackModal = undefined;
- };
- }, []);
+ globalThis.window.openFeedbackModal = undefined
+ }
+ }, [])
// For modal titles
const modalTitles = {
general: "Provide Feedback",
issue: "Report an Issue",
feature: "Suggest a Feature",
- };
+ }
return (
{activeModal && (
setActiveModal(null)}>
e.stopPropagation()}
+ role="dialog"
+ aria-modal="true"
+ className="relative mx-auto max-h-[calc(100vh-1.5rem)] w-full max-w-[min(40rem,calc(100vw-1.5rem))] overflow-y-auto rounded-xl bg-white shadow-xl dark:bg-gray-800"
initial={{ opacity: 0, scale: 0.8, y: 20 }}
animate={{ opacity: 1, scale: 1, y: 0 }}
exit={{ opacity: 0, scale: 0.8, y: 20 }}
@@ -44,12 +47,13 @@ export function FeedbackModals() {
stiffness: 300,
}}
>
-
+
{modalTitles[activeModal]}
setActiveModal(null)}
className="text-gray-500 transition-colors hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-200"
title="Close feedback form"
@@ -67,13 +71,11 @@ export function FeedbackModals() {
)}
- );
+ )
}
-// Add a proper TypeScript interface for the window object
declare global {
interface Window {
- openFeedbackModal?: (type: "general" | "issue" | "feature") => void;
- feedbackType: "general" | "issue" | "feature" | "other";
+ openFeedbackModal?: (type: "general" | "issue" | "feature") => void
}
}
diff --git a/src/components/feedback/MobileFeedbackForm.tsx b/src/components/feedback/MobileFeedbackForm.tsx
deleted file mode 100644
index cdac7e3..0000000
--- a/src/components/feedback/MobileFeedbackForm.tsx
+++ /dev/null
@@ -1,430 +0,0 @@
-import { useEffect, useState, type FormEvent } from "react";
-import { Button } from "../ui/button";
-import { Input } from "../ui/input";
-import { Textarea } from "../ui/textarea";
-import { Label } from "../ui/label";
-import { AlertCircle, CheckCircle2, X } from "lucide-react";
-import DeviceDetector from "device-detector-js";
-import {
- Select,
- SelectContent,
- SelectItem,
- SelectTrigger,
- SelectValue,
-} from "../ui/select";
-import { motion, AnimatePresence } from "framer-motion";
-import { staggerContainer, staggerItem } from "../../lib/animations";
-
-type FeedbackType = "general" | "issue" | "feature" | "other";
-
-interface MobileFeedbackFormProps {
- initialType?: FeedbackType;
- onClose?: () => void;
- isModal?: boolean;
-}
-
-export function MobileFeedbackForm({
- initialType = "general",
- onClose,
- isModal = false,
-}: MobileFeedbackFormProps) {
- const [name, setName] = useState("");
- const [email, setEmail] = useState("");
- const [feedbackType, setFeedbackType] = useState(initialType);
- const [feedback, setFeedback] = useState("");
- const [isSubmitting, setIsSubmitting] = useState(false);
- const [submitStatus, setSubmitStatus] = useState<
- "idle" | "success" | "error"
- >("idle");
- const [errorMessage, setErrorMessage] = useState("");
-
- // For bug reports
- const [browser, setBrowser] = useState("");
- const [operatingSystem, setOperatingSystem] = useState("");
-
- // Detect browser and OS
- useEffect(() => {
- const detectDeviceInfo = () => {
- if (feedbackType === "issue") {
- try {
- const deviceDetector = new DeviceDetector();
- const userAgent = navigator.userAgent;
- const device = deviceDetector.parse(userAgent);
-
- const browserName = device.client?.name || "Unknown Browser";
- const browserVersion = device.client?.version || "";
- setBrowser(
- browserVersion ? `${browserName} ${browserVersion}` : browserName,
- );
-
- const osName = device.os?.name || "Unknown OS";
- const osVersion = device.os?.version || "";
- setOperatingSystem(osVersion ? `${osName} ${osVersion}` : osName);
- } catch (error) {
- console.error("Device detection failed:", error);
- setBrowser(
- navigator.userAgent.includes("Chrome")
- ? "Chrome"
- : navigator.userAgent.includes("Firefox")
- ? "Firefox"
- : navigator.userAgent.includes("Safari")
- ? "Safari"
- : "Unknown Browser",
- );
- setOperatingSystem(navigator.platform || "Unknown");
- }
- }
- };
-
- detectDeviceInfo();
- }, [feedbackType, initialType]);
-
- const handleSubmit = async (e: FormEvent) => {
- e.preventDefault();
- setIsSubmitting(true);
- setSubmitStatus("idle");
- setErrorMessage("");
-
- try {
- const params = new URLSearchParams();
- params.append("form-name", "feedback");
- params.append("name", name);
- params.append("email", email);
- params.append("feedbackType", feedbackType);
- params.append("feedback", feedback);
-
- if (feedbackType === "issue") {
- params.append("browser", browser);
- params.append("operatingSystem", operatingSystem);
- }
-
- const response = await fetch("/", {
- method: "POST",
- headers: { "Content-Type": "application/x-www-form-urlencoded" },
- body: params.toString(),
- });
-
- if (response.ok) {
- setSubmitStatus("success");
- setTimeout(() => {
- onClose?.();
- }, 2000);
- } else {
- throw new Error("Failed to submit feedback");
- }
- } catch (error) {
- setSubmitStatus("error");
- setErrorMessage(
- error instanceof Error ? error.message : "An unexpected error occurred",
- );
- } finally {
- setIsSubmitting(false);
- }
- };
-
- const getFormTitle = () => {
- switch (feedbackType) {
- case "issue":
- return "Report an Issue";
- case "feature":
- return "Suggest a Feature";
- case "other":
- return "Other Feedback";
- default:
- return "Provide Feedback";
- }
- };
-
- const getPlaceholderText = () => {
- switch (feedbackType) {
- case "issue":
- return "Please describe what happened and what you expected to happen. Steps to reproduce the issue are helpful too.";
- case "feature":
- return "Describe the feature you'd like to see and how it would improve your experience with Transcriptr.";
- case "other":
- return "Your thoughts, suggestions, or questions about Transcriptr.";
- default:
- return "Share your thoughts, suggestions, or feedback about Transcriptr.";
- }
- };
-
- const getSuccessMessage = () => {
- switch (feedbackType) {
- case "issue":
- return "Issue reported successfully!";
- case "feature":
- return "Feature suggestion submitted!";
- default:
- return "Feedback submitted successfully!";
- }
- };
-
- // Mobile fullscreen layout
- const content = (
-
- {/* Header - Fixed at top */}
-
-
-
- {getFormTitle()}
-
- {onClose && (
-
-
-
- )}
-
-
-
- {/* Content - Scrollable */}
-
-
- {submitStatus === "success" ? (
-
-
-
- {getSuccessMessage()}
-
-
- Thank you for helping us improve Transcriptr. Your input is
- valuable to us.
-
-
- ) : (
-
-
-
-
-
- Don't fill this out if you're human:{" "}
-
-
-
-
- {/* Feedback Type */}
-
-
- What type of feedback is this?
-
-
- setFeedbackType(value as FeedbackType)
- }
- >
-
-
-
-
- General Feedback
- Report an Issue
- Feature Request
- Other
-
-
-
-
- {/* Name */}
-
-
- Your Name
-
- setName(e.target.value)}
- placeholder="Enter your name"
- required
- className="h-12 w-full text-base"
- />
-
-
- {/* Email */}
-
-
- Email{" "}
-
- (optional)
-
-
- setEmail(e.target.value)}
- placeholder="your.email@example.com"
- className="h-12 w-full text-base"
- />
-
- We'll only contact you if we need more information about your{" "}
- {feedbackType === "issue" ? "issue" : "feedback"}.
-
-
-
- {/* Auto-detected info for issues */}
- {feedbackType === "issue" && (
-
-
- System Information{" "}
-
- (auto-detected)
-
-
-
-
-
- Browser:
-
-
- {browser || "Detecting..."}
-
-
-
-
- Operating System:
-
-
- {operatingSystem || "Detecting..."}
-
-
-
-
- This information helps us reproduce and fix issues faster.
-
-
- {/* Hidden inputs for form submission */}
-
-
-
- )}
-
- {/* Main feedback text */}
-
-
- {feedbackType === "issue"
- ? "Describe the Issue"
- : feedbackType === "feature"
- ? "Describe Your Feature Idea"
- : "Your Feedback"}
-
- setFeedback(e.target.value)}
- placeholder={getPlaceholderText()}
- required
- className="min-h-[120px] w-full resize-none text-base"
- rows={6}
- />
-
-
- {/* Error message */}
-
- {submitStatus === "error" && (
-
-
-
-
- Failed to submit feedback
-
-
- {errorMessage ||
- "Please check your connection and try again."}
-
-
-
- )}
-
-
- )}
-
-
-
- {/* Footer - Fixed at bottom */}
- {submitStatus !== "success" && (
-
- {/* Primary Submit Button */}
-
- {isSubmitting ? (
-
- ) : (
- `Submit ${feedbackType === "issue" ? "Issue Report" : feedbackType === "feature" ? "Feature Request" : "Feedback"}`
- )}
-
-
- {/* Secondary Cancel Button */}
- {onClose && (
-
- Cancel
-
- )}
-
- )}
-
- );
-
- return content;
-}
diff --git a/src/components/feedback/MobileFeedbackModals.tsx b/src/components/feedback/MobileFeedbackModals.tsx
deleted file mode 100644
index 0ca6f2f..0000000
--- a/src/components/feedback/MobileFeedbackModals.tsx
+++ /dev/null
@@ -1,106 +0,0 @@
-import React, { useState } from "react";
-import { motion, AnimatePresence } from "framer-motion";
-import { MobileFeedbackForm } from "./MobileFeedbackForm";
-import { FeedbackForm } from "./FeedbackForm";
-
-type FeedbackType = "general" | "issue" | "feature";
-
-export function MobileFeedbackModals() {
- const [activeModal, setActiveModal] = useState(null);
- const [isMobile, setIsMobile] = React.useState(false);
-
- // Mobile detection
- React.useEffect(() => {
- const checkMobile = () => {
- setIsMobile(window.innerWidth < 768);
- };
-
- checkMobile();
- window.addEventListener("resize", checkMobile);
-
- return () => window.removeEventListener("resize", checkMobile);
- }, []);
-
- // Global modal access
- React.useEffect(() => {
- window.openFeedbackModal = (type: FeedbackType) => {
- setActiveModal(type);
- };
-
- return () => {
- window.openFeedbackModal = undefined;
- };
- }, []);
-
- const closeModal = () => setActiveModal(null);
-
- return (
-
- {activeModal && (
- <>
- {isMobile ? (
- // Mobile: Full-screen modal
-
-
-
- ) : (
- // Desktop: Centered modal with backdrop
-
- {/* Backdrop */}
-
-
- {/* Modal content */}
- e.stopPropagation()}
- >
-
-
-
- )}
- >
- )}
-
- );
-}
-
-// TypeScript declarations
-declare global {
- interface Window {
- openFeedbackModal?: (type: "general" | "issue" | "feature") => void;
- feedbackType: "general" | "issue" | "feature" | "other";
- }
-}
diff --git a/src/components/layout/Footer.tsx b/src/components/layout/Footer.tsx
index 76cd301..8d29829 100644
--- a/src/components/layout/Footer.tsx
+++ b/src/components/layout/Footer.tsx
@@ -1,128 +1,54 @@
-import Link from "next/link";
-import { MobileFooter } from "./MobileFooter";
+"use client"
-interface FooterProps {
- onOpenFeedbackModal: (type: "general" | "issue" | "feature") => void;
- onOpenChangelog: () => void;
-}
+import Link from "next/link"
-export function Footer({ onOpenFeedbackModal, onOpenChangelog }: FooterProps) {
+export function Footer() {
return (
- <>
- {/* Mobile Footer */}
-
-
- {/* Desktop Footer */}
-
-
-
{
- e.preventDefault();
- onOpenFeedbackModal("general");
- }}
- className="text-blue-600 hover:underline dark:text-blue-400"
- >
- Provide Feedback
-
-
•
-
{
- e.preventDefault();
- onOpenFeedbackModal("issue");
- }}
- className="text-blue-600 hover:underline dark:text-blue-400"
- >
- Report an Issue
-
-
•
-
{
- e.preventDefault();
- onOpenFeedbackModal("feature");
- }}
- className="text-blue-600 hover:underline dark:text-blue-400"
- >
- Suggest a Feature
-
-
•
-
{
- e.preventDefault();
- onOpenChangelog();
+
+ )
}
diff --git a/src/components/layout/Header.tsx b/src/components/layout/Header.tsx
index 3adbc8e..9e0c52d 100644
--- a/src/components/layout/Header.tsx
+++ b/src/components/layout/Header.tsx
@@ -1,115 +1,192 @@
-import { MobileHeader } from "./MobileHeader";
+"use client"
-interface HeaderProps {
- onOpenChangelog: () => void;
- onShowHistory?: () => void;
- onOpenFeedbackModal?: (type: "general" | "issue" | "feature") => void;
- onShowV3?: () => void;
+import {
+ BookOpen,
+ Clock,
+ ExternalLink,
+ Heart,
+ Home,
+ MessageCircle,
+ MoreHorizontal,
+ ScrollText,
+} from "lucide-react"
+import Link from "next/link"
+import { usePathname } from "next/navigation"
+import { useState } from "react"
+import {
+ DropdownMenu,
+ DropdownMenuContent,
+ DropdownMenuItem,
+ DropdownMenuSeparator,
+ DropdownMenuTrigger,
+} from "@/components/ui/dropdown-menu"
+import { cn } from "@/lib/utils"
+
+const NAV_ITEMS = [
+ { href: "/history", label: "History" },
+ { href: "/about", label: "About" },
+ { href: "/documentation", label: "Docs" },
+ { href: "/changelog", label: "Changelog" },
+]
+
+const MOBILE_TABS = [
+ { href: "/", label: "Transcribe", icon: Home },
+ { href: "/history", label: "History", icon: Clock },
+ { href: "/documentation", label: "Docs", icon: BookOpen },
+]
+
+const MOBILE_MENU_ITEMS = [
+ { href: "/about", label: "About", icon: ScrollText },
+ { href: "/changelog", label: "Changelog", icon: ScrollText },
+ { href: "/terms", label: "Terms", icon: ScrollText },
+ { href: "/privacy", label: "Privacy", icon: ScrollText },
+]
+
+function isRouteActive(pathname: string, href: string) {
+ if (href === "/") return pathname === "/"
+
+ return pathname === href || pathname.startsWith(`${href}/`)
}
-export function Header({
- onOpenChangelog,
- onShowHistory,
- onOpenFeedbackModal,
- onShowV3,
-}: HeaderProps) {
- return (
- <>
- {/* Mobile Header */}
- {onOpenFeedbackModal && (
-
- )}
-
- {/* Desktop Header */}
-
-
-
- {onShowHistory && (
-
-
-
-
- History
-
- )}
-
-
-
-
- Transcriptr
-
-
- Convert audio to text with AI-powered transcription
-
-
-
-
- {onShowV3 && (
-
-
-
-
-
- V3.2
-
+export function Header() {
+ const pathname = usePathname()
+ const [mobileMenuOpen, setMobileMenuOpen] = useState(false)
+ const isMoreActive = MOBILE_MENU_ITEMS.some((item) =>
+ isRouteActive(pathname, item.href),
+ )
+
+ const openFeedback = () => {
+ if (globalThis.window?.openFeedbackModal) {
+ globalThis.window.openFeedbackModal("general")
+ }
+ }
+
+ const mobileMenuContent = (
+
+ {MOBILE_MENU_ITEMS.map((item) => {
+ const Icon = item.icon
+ const isActive = isRouteActive(pathname, item.href)
+
+ return (
+ {
- e.preventDefault();
- onOpenChangelog();
- }}
- className="text-sm text-blue-600 hover:underline dark:text-blue-400"
- >
- Changelog
-
-
-
-
-
- Developed by{" "}
-
- Abdur-Rahman Bilal (aramb-dev)
- {" "}
- and AI |{" "}
-
- View on Github
-
-
-
- >
- );
+ setMobileMenuOpen(false)}>
+
+ {item.label}
+
+
+ )
+ })}
+
+ {
+ openFeedback()
+ setMobileMenuOpen(false)
+ }}
+ >
+
+ Feedback
+
+
+ setMobileMenuOpen(false)}
+ >
+
+ GitHub
+
+
+
+ setMobileMenuOpen(false)}
+ >
+
+ Donate
+
+
+
+ )
+
+ return (
+
+ )
}
diff --git a/src/components/layout/MainLayout.tsx b/src/components/layout/MainLayout.tsx
deleted file mode 100644
index ba3a6c9..0000000
--- a/src/components/layout/MainLayout.tsx
+++ /dev/null
@@ -1,176 +0,0 @@
-import { Suspense, useState, lazy } from "react";
-import { motion, AnimatePresence } from "framer-motion";
-import { Card, CardContent } from "../ui/card";
-import { Header } from "./Header";
-import { Footer } from "./Footer";
-import { TranscriptionForm } from "../transcription/TranscriptionForm";
-import { Toaster } from "sonner";
-import { FeedbackModals } from "../feedback/FeedbackModals";
-import { ChangelogModal } from "../ChangelogModal";
-import TranscriptionHistory from "../transcription/TranscriptionHistory";
-import { fadeInUp, expandCenter } from "../../lib/animations";
-import { TranscriptionSession } from "@/lib/persistence-service";
-
-const TranscriptionResult = lazy(
- () => import("../transcription/TranscriptionResult"),
-);
-const TranscriptionError = lazy(() =>
- import("../transcription/TranscriptionError").then((module) => ({
- default: module.TranscriptionError,
- })),
-);
-
-export function MainLayout() {
- const [showResult] = useState(false);
- const [showError] = useState(false);
- const [showChangelogModal, setShowChangelogModal] = useState(false);
- const [showHistoryModal, setShowHistoryModal] = useState(false);
- const [formKey, setFormKey] = useState(Date.now()); // Key to force re-render TranscriptionForm when needed
-
- // For handling session selection from history
- const [selectedSession, setSelectedSession] =
- useState(null);
-
- // Updated to use the new window method instead of direct DOM manipulation
- const openFeedbackModal = (type: "general" | "issue" | "feature") => {
- if (window.openFeedbackModal) {
- window.openFeedbackModal(type);
- }
- };
-
- const openChangelogModal = () => {
- setShowChangelogModal(true);
- };
-
- const closeChangelogModal = () => {
- setShowChangelogModal(false);
- };
-
- const openHistoryModal = () => {
- setShowHistoryModal(true);
- };
-
- const closeHistoryModal = () => {
- setShowHistoryModal(false);
- };
-
- const handleDeleteSession = async (sessionId: string) => {
- try {
- // Import dynamically to prevent circular dependencies
- const { deleteSession } = await import("@/lib/persistence-service");
- await deleteSession(sessionId);
- } catch (error) {
- console.error("Failed to delete session:", error);
- }
- };
-
- const handleSelectSession = (session: TranscriptionSession) => {
- setSelectedSession(session);
- closeHistoryModal();
- // Force re-render the TranscriptionForm component to pick up the selected session
- setFormKey(Date.now());
- };
-
- return (
-
-
-
-
-
-
-
-
- Loading form...
- }
- >
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- {showChangelogModal && }
-
-
-
- {showHistoryModal && (
-
- )}
-
-
-
- {showResult && (
- Loading result... }>
-
-
-
-
- )}
-
-
-
- {showError && (
- Loading error details... }>
-
- {}}
- apiResponses={[]}
- showApiDetails={false}
- setShowApiDetails={() => {}}
- formatTimestamp={(date: Date) => date.toLocaleString()}
- />
-
-
- )}
-
-
-
-
- );
-}
diff --git a/src/components/layout/MobileFooter.tsx b/src/components/layout/MobileFooter.tsx
deleted file mode 100644
index 787b88a..0000000
--- a/src/components/layout/MobileFooter.tsx
+++ /dev/null
@@ -1,118 +0,0 @@
-"use client";
-
-import Link from "next/link";
-
-interface MobileFooterProps {
- onOpenFeedbackModal: (type: "general" | "issue" | "feature") => void;
- onOpenChangelog: () => void;
-}
-
-export function MobileFooter({
- onOpenFeedbackModal,
- onOpenChangelog,
-}: MobileFooterProps) {
- return (
-
- {/* Mobile Footer - Stacked Layout */}
-
- {/* Quick Actions */}
-
- onOpenFeedbackModal("general")}
- className="rounded-lg bg-blue-50 px-4 py-3 text-sm font-medium text-blue-600 transition-colors hover:bg-blue-100 active:bg-blue-200 dark:bg-blue-900/20 dark:text-blue-400 dark:hover:bg-blue-900/30"
- >
- 💬 Feedback
-
- onOpenFeedbackModal("issue")}
- className="rounded-lg bg-red-50 px-4 py-3 text-sm font-medium text-red-600 transition-colors hover:bg-red-100 active:bg-red-200 dark:bg-red-900/20 dark:text-red-400 dark:hover:bg-red-900/30"
- >
- 🐛 Report Bug
-
-
-
- {/* Additional Links */}
-
- onOpenFeedbackModal("feature")}
- className="text-blue-600 hover:underline dark:text-blue-400"
- >
- 💡 Suggest Feature
-
-
- 📝 Changelog
-
-
-
- {/* External Links */}
-
-
- {/* Legal Links */}
-
-
- Terms
-
-
- Privacy
-
-
-
- {/* Peerlist Project Embed */}
-
-
- {/* Copyright */}
-
-
- © {new Date().getFullYear()} Transcriptr. All rights reserved.
-
-
-
-
- );
-}
diff --git a/src/components/layout/MobileHeader.tsx b/src/components/layout/MobileHeader.tsx
deleted file mode 100644
index f489869..0000000
--- a/src/components/layout/MobileHeader.tsx
+++ /dev/null
@@ -1,90 +0,0 @@
-"use client";
-
-import { MobileNavigation } from "../ui/mobile-navigation";
-
-interface MobileHeaderProps {
- onOpenChangelog: () => void;
- onShowHistory?: () => void;
- onOpenFeedbackModal: (type: "general" | "issue" | "feature") => void;
- onShowV3?: () => void;
-}
-
-export function MobileHeader({
- onOpenChangelog,
- onShowHistory,
- onOpenFeedbackModal,
- onShowV3,
-}: MobileHeaderProps) {
- return (
-
- {/* Mobile Header Content */}
-
- {/* Left side - History button */}
-
- {onShowHistory && (
-
-
-
-
- History
-
- )}
-
-
- {/* Center - App Title */}
-
-
- Transcriptr
-
-
-
- {/* Right side - Mobile Navigation Menu */}
-
-
-
-
-
- {/* Mobile Subtitle */}
-
-
- Convert audio to text with AI-powered transcription
-
-
-
- {/* Mobile Attribution - Simplified */}
-
-
- );
-}
diff --git a/src/components/studio/AudioPlayer.tsx b/src/components/studio/AudioPlayer.tsx
new file mode 100644
index 0000000..906be3c
--- /dev/null
+++ b/src/components/studio/AudioPlayer.tsx
@@ -0,0 +1,504 @@
+"use client"
+
+import {
+ ChevronLeft,
+ ChevronRight,
+ FileAudio,
+ Pause,
+ Play,
+ Repeat,
+ SkipBack,
+ SkipForward,
+ Volume2,
+ VolumeX,
+} from "lucide-react"
+import React, { useEffect, useRef, useState } from "react"
+import { toast } from "sonner"
+import { formatDuration } from "@/lib/format-utils"
+import { cn } from "@/lib/utils"
+import type { TranscriptionSegment } from "@/types/transcription"
+import { Button } from "../ui/button"
+import { Card, CardContent, CardHeader } from "../ui/card"
+
+const PLAYBACK_SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2]
+
+export interface AudioPlayerProps {
+ audioUrl?: string
+ audioRef?: React.RefObject
+ onTimeUpdate?: (time: number) => void
+ segments?: TranscriptionSegment[]
+ onSegmentChange?: (segmentIndex: number) => void
+}
+
+function NoAudioContent() {
+ return (
+
+
+
No audio file available for playback
+
+ )
+}
+
+function SpeedMenu({
+ playbackSpeed,
+ onSpeedChange,
+}: Readonly<{
+ playbackSpeed: number
+ onSpeedChange: (speed: number) => void
+}>) {
+ return (
+
+ {PLAYBACK_SPEEDS.map((speed) => (
+ onSpeedChange(speed)}
+ className={cn(
+ "block w-full rounded px-3 py-1 text-left text-sm hover:bg-gray-100 dark:hover:bg-gray-700",
+ playbackSpeed === speed && "bg-primary/10 dark:bg-primary/20",
+ )}
+ >
+ {speed}x
+
+ ))}
+
+ )
+}
+
+function SegmentNavigation({
+ currentSegmentIndex,
+ segmentsLength,
+ onPrevious,
+ onNext,
+}: Readonly<{
+ currentSegmentIndex: number
+ segmentsLength: number
+ onPrevious: () => void
+ onNext: () => void
+}>) {
+ return (
+
+
+
+ Prev
+
+
+ Segment {currentSegmentIndex + 1} of {segmentsLength}
+
+ = segmentsLength - 1}
+ className="flex items-center gap-1"
+ >
+ Next
+
+
+
+ )
+}
+
+function LoopPoints({
+ loopStart,
+ loopEnd,
+ onSetLoopPoint,
+ onClearLoop,
+}: Readonly<{
+ loopStart: number | null
+ loopEnd: number | null
+ onSetLoopPoint: (type: "start" | "end") => void
+ onClearLoop: () => void
+}>) {
+ return (
+
+
+ onSetLoopPoint("start")}
+ className="h-6 px-2 text-xs"
+ >
+ A: {loopStart === null ? "--:--" : formatDuration(loopStart)}
+
+ onSetLoopPoint("end")}
+ className="h-6 px-2 text-xs"
+ >
+ B: {loopEnd === null ? "--:--" : formatDuration(loopEnd)}
+
+
+
+ Clear
+
+
+ )
+}
+
+export const AudioPlayer: React.FC = ({
+ audioUrl,
+ audioRef: externalAudioRef,
+ onTimeUpdate,
+ segments,
+ onSegmentChange,
+}) => {
+ const [isPlaying, setIsPlaying] = useState(false)
+ const [currentTime, setCurrentTime] = useState(0)
+ const [duration, setDuration] = useState(0)
+ const [volume, setVolume] = useState(1)
+ const [isMuted, setIsMuted] = useState(false)
+ const [playbackSpeed, setPlaybackSpeed] = useState(1)
+ const [isLooping, setIsLooping] = useState(false)
+ const [loopStart, setLoopStart] = useState(null)
+ const [loopEnd, setLoopEnd] = useState(null)
+ const [showSpeedMenu, setShowSpeedMenu] = useState(false)
+ const internalAudioRef = useRef(null)
+ const audioRef = externalAudioRef ?? internalAudioRef
+
+ const currentSegmentIndex =
+ segments?.findIndex(
+ (seg) => currentTime >= seg.start && currentTime < seg.end,
+ ) ?? -1
+
+ const handleSpeedChange = (speed: number) => {
+ setPlaybackSpeed(speed)
+ if (audioRef.current) {
+ audioRef.current.playbackRate = speed
+ }
+ setShowSpeedMenu(false)
+ toast.success(`Playback speed: ${speed}x`)
+ }
+
+ const goToPrevSegment = () => {
+ if (segments === undefined || segments.length === 0) return
+ const prevIndex = Math.max(0, currentSegmentIndex - 1)
+ if (audioRef.current && segments[prevIndex]) {
+ audioRef.current.currentTime = segments[prevIndex].start
+ onSegmentChange?.(prevIndex)
+ }
+ }
+
+ const goToNextSegment = () => {
+ if (segments === undefined || segments.length === 0) return
+ const nextIndex = Math.min(segments.length - 1, currentSegmentIndex + 1)
+ if (audioRef.current && segments[nextIndex]) {
+ audioRef.current.currentTime = segments[nextIndex].start
+ onSegmentChange?.(nextIndex)
+ }
+ }
+
+ const toggleMute = () => {
+ if (audioRef.current) {
+ const nextMuted = isMuted === false
+ audioRef.current.muted = nextMuted
+ setIsMuted(nextMuted)
+ }
+ }
+
+ const setLoopPoint = (type: "start" | "end") => {
+ if (type === "start") {
+ setLoopStart(currentTime)
+ if (loopEnd !== null && currentTime >= loopEnd) {
+ setLoopEnd(null)
+ toast.warning("Loop end cleared — start must be before end")
+ } else {
+ toast.success(`Loop start: ${formatDuration(currentTime)}`)
+ }
+ } else {
+ if (loopStart !== null && currentTime <= loopStart) {
+ toast.error("Loop end must be after loop start")
+ return
+ }
+ setLoopEnd(currentTime)
+ toast.success(`Loop end: ${formatDuration(currentTime)}`)
+ }
+ }
+
+ const clearLoop = () => {
+ setLoopStart(null)
+ setLoopEnd(null)
+ setIsLooping(false)
+ toast.success("Loop cleared")
+ }
+
+ useEffect(() => {
+ if (
+ isLooping &&
+ loopStart !== null &&
+ loopEnd !== null &&
+ audioRef.current &&
+ currentTime >= loopEnd
+ ) {
+ audioRef.current.currentTime = loopStart
+ }
+ }, [currentTime, isLooping, loopStart, loopEnd, audioRef])
+
+ const togglePlay = () => {
+ if (!audioRef.current) return
+ if (isPlaying) {
+ audioRef.current.pause()
+ setIsPlaying(false)
+ } else {
+ audioRef.current
+ .play()
+ .then(() => setIsPlaying(true))
+ .catch((error) => {
+ console.error("Audio playback failed:", error)
+ toast.error("Failed to play audio")
+ })
+ }
+ }
+
+ const skip = (seconds: number) => {
+ if (audioRef.current) {
+ audioRef.current.currentTime = Math.max(
+ 0,
+ Math.min(duration, audioRef.current.currentTime + seconds),
+ )
+ }
+ }
+
+ const handleTimeUpdate = () => {
+ if (audioRef.current) {
+ const time = audioRef.current.currentTime
+ setCurrentTime(time)
+ onTimeUpdate?.(time)
+ }
+ }
+
+ const handleDurationChange = () => {
+ const audioDuration = audioRef.current?.duration
+ if (audioDuration) {
+ setDuration(audioDuration)
+ }
+ }
+
+ const handleProgressBarClick = (e: React.MouseEvent) => {
+ const progressBar = e.currentTarget
+ const clickX = e.clientX - progressBar.getBoundingClientRect().left
+ const percentage = clickX / progressBar.clientWidth
+ const newTime = percentage * duration
+
+ if (audioRef.current) {
+ audioRef.current.currentTime = Math.max(0, Math.min(duration, newTime))
+ }
+ }
+
+ const handleProgressKeyDown = (e: React.KeyboardEvent) => {
+ if (!audioRef.current) return
+
+ if (e.key === "ArrowLeft") {
+ e.preventDefault()
+ skip(-5)
+ }
+
+ if (e.key === "ArrowRight") {
+ e.preventDefault()
+ skip(5)
+ }
+ }
+
+ const handleVolumeChange = (e: React.ChangeEvent) => {
+ const newVolume = Number.parseFloat(e.target.value)
+ setVolume(newVolume)
+ if (audioRef.current) {
+ audioRef.current.volume = newVolume
+ }
+ }
+
+ return (
+
+
+
+
+
Audio Player
+
+
+
+ {audioUrl ? (
+ <>
+ setIsPlaying(false)}
+ preload="metadata"
+ crossOrigin="anonymous"
+ className="hidden"
+ >
+
+
+
+
+ {/* Controls */}
+
+
skip(-10)}
+ className="h-8 w-8 p-0"
+ title="Skip back 10 seconds"
+ >
+
+
+
+
+ {isPlaying ? (
+
+ ) : (
+
+ )}
+
+
+
skip(10)}
+ className="h-8 w-8 p-0"
+ title="Skip forward 10 seconds"
+ >
+
+
+
+
+ {/* Progress Bar */}
+
+
+ {formatDuration(currentTime)}
+ {formatDuration(duration)}
+
+
+
0
+ ? `${(currentTime / duration) * 100}%`
+ : "0%",
+ }}
+ />
+
+
+
+ {/* Volume & Speed Controls */}
+
+
+
+ {isMuted ? (
+
+ ) : (
+
+ )}
+
+
+
+
+ {/* Playback Speed */}
+
+
+ setShowSpeedMenu((current) => current === false)
+ }
+ className="h-8 px-2 text-xs"
+ >
+ {playbackSpeed}x
+
+ {showSpeedMenu && (
+
+ )}
+
+
+ {/* Loop Controls */}
+
+ {
+ if (loopStart !== null && loopEnd !== null) {
+ setIsLooping((current) => current === false)
+ } else {
+ toast.error("Set loop start and end points first")
+ }
+ }}
+ className="h-8 w-8 p-0"
+ title="Toggle loop"
+ >
+
+
+
+
+
+ {/* Segment Navigation */}
+ {!!segments?.length && (
+
+ )}
+
+ {/* Loop Points Display */}
+
+
+ >
+ ) : (
+
+ )}
+
+
+ )
+}
diff --git a/src/components/studio/ChaptersPanel.tsx b/src/components/studio/ChaptersPanel.tsx
index 0e51352..7f80b33 100644
--- a/src/components/studio/ChaptersPanel.tsx
+++ b/src/components/studio/ChaptersPanel.tsx
@@ -1,8 +1,8 @@
"use client"
import React from "react"
-import type { Chapter } from "@/types/transcription"
import { cn } from "@/lib/utils"
+import type { Chapter } from "@/types/transcription"
interface ChaptersPanelProps {
chapters: Chapter[]
@@ -58,9 +58,7 @@ export const ChaptersPanel: React.FC
= ({
{formatDuration(chapter.start)} - {formatDuration(chapter.end)}
-
- {chapter.gist}
-
+ {chapter.gist}
)
diff --git a/src/components/studio/EnhancedTranscript.tsx b/src/components/studio/EnhancedTranscript.tsx
new file mode 100644
index 0000000..d9fad24
--- /dev/null
+++ b/src/components/studio/EnhancedTranscript.tsx
@@ -0,0 +1,307 @@
+"use client"
+
+import React, { useEffect, useRef, useState } from "react"
+
+const escapeRegExp = (s: string) =>
+ s.replace(/[.*+?^${}()|[\]\\]/g, String.raw`\$&`)
+
+import { Copy, Search } from "lucide-react"
+import { toast } from "sonner"
+import { formatDuration } from "@/lib/format-utils"
+import { getSpeakerColor } from "@/lib/speaker-colors"
+import { cn } from "@/lib/utils"
+import type {
+ TranscriptionSegment,
+ TranscriptionWord,
+} from "@/types/transcription"
+import { Button } from "../ui/button"
+import { Input } from "../ui/input"
+
+// Binary search to find active word index
+const findActiveWordIndex = (
+ words: TranscriptionWord[],
+ currentTime: number,
+): number => {
+ let low = 0
+ let high = words.length - 1
+
+ while (low <= high) {
+ const mid = Math.floor((low + high) / 2)
+ if (currentTime >= words[mid].start && currentTime < words[mid].end) {
+ return mid
+ } else if (currentTime < words[mid].start) {
+ high = mid - 1
+ } else {
+ low = mid + 1
+ }
+ }
+ return -1
+}
+
+export interface EnhancedTranscriptProps {
+ transcription: string
+ segments?: TranscriptionSegment[]
+ onSegmentClick?: (startTime: number) => void
+ searchInputRef?: React.RefObject
+ currentTime?: number
+}
+
+export const EnhancedTranscript: React.FC = ({
+ transcription,
+ segments,
+ onSegmentClick,
+ currentTime = 0,
+ searchInputRef,
+}) => {
+ const [searchTerm, setSearchTerm] = useState("")
+ const [searchResults, setSearchResults] = useState([])
+ const [copySuccess, setCopySuccess] = useState(false)
+ const activeSegmentRef = useRef(null)
+ const prevSegmentIndexRef = useRef(null)
+
+ const handleCopyTranscript = async () => {
+ try {
+ await navigator.clipboard.writeText(transcription)
+ setCopySuccess(true)
+ toast.success("Transcript copied to clipboard!")
+ setTimeout(() => setCopySuccess(false), 2000)
+ } catch {
+ toast.error("Failed to copy transcript")
+ }
+ }
+
+ const handleSearch = (term: string) => {
+ setSearchTerm(term)
+ if (term.trim() && segments) {
+ const results: number[] = []
+ segments.forEach((segment, index) => {
+ if (segment.text.toLowerCase().includes(term.toLowerCase())) {
+ results.push(index)
+ }
+ })
+ setSearchResults(results)
+ } else if (term.trim() && !segments && transcription) {
+ const matches = transcription.match(new RegExp(escapeRegExp(term), "gi"))
+ setSearchResults(
+ matches ? Array.from({ length: matches.length }, (_, i) => i) : [],
+ )
+ } else {
+ setSearchResults([])
+ }
+ }
+
+ const currentSegmentIndex = segments
+ ? segments.findIndex(
+ (seg) => currentTime >= seg.start && currentTime < seg.end,
+ )
+ : -1
+
+ // Auto-scroll to active segment when it changes
+ useEffect(() => {
+ if (
+ currentSegmentIndex >= 0 &&
+ currentSegmentIndex !== prevSegmentIndexRef.current
+ ) {
+ prevSegmentIndexRef.current = currentSegmentIndex
+ activeSegmentRef.current?.scrollIntoView({
+ behavior: "smooth",
+ block: "center",
+ })
+ }
+ }, [currentSegmentIndex])
+
+ const renderKaraokeWords = (words: TranscriptionWord[]) => {
+ const activeWordIdx = findActiveWordIndex(words, currentTime)
+
+ return words.map((word, idx) => {
+ const isActive = idx === activeWordIdx
+ const isPast = currentTime >= word.end
+ const isInactivePast = isPast && isActive === false
+
+ return (
+
+ {word.word}{" "}
+
+ )
+ })
+ }
+
+ const renderSegmentText = (
+ segment: TranscriptionSegment,
+ isCurrentSegment: boolean,
+ isHighlighted: boolean,
+ ) => {
+ if (isCurrentSegment && segment.words && segment.words.length > 0) {
+ return renderKaraokeWords(segment.words)
+ }
+
+ if (searchTerm && isHighlighted) {
+ return segment.text
+ .split(new RegExp(`(${escapeRegExp(searchTerm)})`, "gi"))
+ .map((part, partIndex) =>
+ part.toLowerCase() === searchTerm.toLowerCase() ? (
+
+ {part}
+
+ ) : (
+ part
+ ),
+ )
+ }
+
+ return segment.text
+ }
+
+ const getSegmentClassName = (
+ isCurrentSegment: boolean,
+ isHighlighted: boolean,
+ ) => {
+ if (isCurrentSegment) {
+ return "border-blue-400 bg-blue-50 shadow-md dark:border-blue-600 dark:bg-blue-900/20"
+ }
+
+ if (isHighlighted) {
+ return "border-yellow-200 bg-yellow-50 dark:border-yellow-600 dark:bg-yellow-900/20"
+ }
+
+ return "border-gray-200 bg-gray-50 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-750"
+ }
+
+ return (
+
+ {/* Search Bar + Copy */}
+
+
+
+ handleSearch(e.target.value)}
+ className="pl-10"
+ />
+
+
+ {copySuccess ? (
+ <>
+
+ Copied!
+ >
+ ) : (
+ <>
+
+ Copy All
+ >
+ )}
+
+
+
+ {searchResults.length > 0 && (
+
+ Found {searchResults.length} result
+ {searchResults.length === 1 ? "" : "s"}
+
+ )}
+
+ {/* Segments View */}
+ {segments && segments.length > 0 ? (
+
+
+ {segments.map((segment, index) => {
+ const isHighlighted = searchResults.includes(index)
+ const isCurrentSegment = currentSegmentIndex === index
+ const speakerColor = segment.speaker
+ ? getSpeakerColor(segment.speaker)
+ : null
+
+ return (
+
onSegmentClick?.(segment.start)}
+ className={cn(
+ "w-full cursor-pointer rounded-lg border p-3 text-left transition-all duration-200 hover:shadow-md",
+ speakerColor && `border-l-4 ${speakerColor.border}`,
+ getSegmentClassName(isCurrentSegment, isHighlighted),
+ )}
+ title="Click to play audio from this segment"
+ >
+ {/* Timestamp + Speaker Badge */}
+
+
+ {formatDuration(segment.start)} -{" "}
+ {formatDuration(segment.end)}
+
+ {segment.speaker && speakerColor && (
+
+ Speaker {segment.speaker}
+
+ )}
+ {isCurrentSegment && (
+
+ Now Playing
+
+ )}
+
+
+ {/* Transcript Text — karaoke for active segment */}
+
+ {renderSegmentText(
+ segment,
+ isCurrentSegment,
+ isHighlighted,
+ )}
+
+
+ )
+ })}
+
+
+ ) : (
+ // Fallback: full transcript with optional search highlight
+
+
+
+ {searchTerm && transcription
+ ? transcription
+ .split(new RegExp(`(${escapeRegExp(searchTerm)})`, "gi"))
+ .map((part, i) =>
+ part.toLowerCase() === searchTerm.toLowerCase() ? (
+
+ {part}
+
+ ) : (
+ part
+ ),
+ )
+ : transcription || "No transcript available"}
+
+
+
+ )}
+
+ )
+}
diff --git a/src/components/studio/EntitiesPanel.tsx b/src/components/studio/EntitiesPanel.tsx
index 7d416b8..b9b8427 100644
--- a/src/components/studio/EntitiesPanel.tsx
+++ b/src/components/studio/EntitiesPanel.tsx
@@ -11,22 +11,25 @@ interface EntitiesPanelProps {
const ENTITY_TYPE_COLORS: Record = {
person_name: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200",
location: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",
- organization: "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200",
+ organization:
+ "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200",
date: "bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200",
event: "bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-200",
nationality: "bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-200",
- occupation: "bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200",
- money_amount: "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",
+ occupation:
+ "bg-indigo-100 text-indigo-800 dark:bg-indigo-900 dark:text-indigo-200",
+ money_amount:
+ "bg-yellow-100 text-yellow-800 dark:bg-yellow-900 dark:text-yellow-200",
phone_number: "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200",
- email_address: "bg-cyan-100 text-cyan-800 dark:bg-cyan-900 dark:text-cyan-200",
+ email_address:
+ "bg-cyan-100 text-cyan-800 dark:bg-cyan-900 dark:text-cyan-200",
}
-const DEFAULT_COLOR = "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200"
+const DEFAULT_COLOR =
+ "bg-gray-100 text-gray-800 dark:bg-gray-700 dark:text-gray-200"
const formatEntityType = (type: string): string => {
- return type
- .replace(/_/g, " ")
- .replace(/\b\w/g, (c) => c.toUpperCase())
+ return type.replace(/_/g, " ").replace(/\b\w/g, (c) => c.toUpperCase())
}
export const EntitiesPanel: React.FC = ({
@@ -35,7 +38,7 @@ export const EntitiesPanel: React.FC = ({
}) => {
// Group entities by type, deduplicating text values
const grouped = useMemo(() => {
- const groups: Record = {}
+ const groups: Record = {}
const seen: Record> = {}
entities.forEach((entity) => {
@@ -45,7 +48,10 @@ export const EntitiesPanel: React.FC = ({
}
if (!seen[entity.entityType].has(entity.text)) {
seen[entity.entityType].add(entity.text)
- groups[entity.entityType].push({ text: entity.text, start: entity.start })
+ groups[entity.entityType].push({
+ text: entity.text,
+ start: entity.start,
+ })
}
})
diff --git a/src/components/studio/ExportControls.tsx b/src/components/studio/ExportControls.tsx
new file mode 100644
index 0000000..e92bf0d
--- /dev/null
+++ b/src/components/studio/ExportControls.tsx
@@ -0,0 +1,324 @@
+"use client"
+
+import { Document, HeadingLevel, Packer, Paragraph, TextRun } from "docx"
+import { Copy, Download } from "lucide-react"
+import React, { useState } from "react"
+import { toast } from "sonner"
+import {
+ generateCSV,
+ generateJSON,
+ generateMarkdown,
+ generateSRT,
+ generateVTT,
+} from "@/lib/export-formats"
+import type {
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
+import { Button } from "../ui/button"
+import { Card, CardContent, CardHeader } from "../ui/card"
+
+export interface ExportControlsProps {
+ transcription: string
+ segments?: TranscriptionSegment[]
+ intelligence?: TranscriptionIntelligence
+}
+
+export const ExportControls: React.FC = ({
+ transcription,
+ segments,
+ intelligence,
+}) => {
+ const [selectedFormat, setSelectedFormat] = useState<
+ "txt" | "docx" | "srt" | "vtt" | "json" | "csv" | "md"
+ >("txt")
+ const [isDownloading, setIsDownloading] = useState(false)
+ const [copySuccess, setCopySuccess] = useState(false)
+ const [isDownloadingAll, setIsDownloadingAll] = useState(false)
+
+ const buildDocxChildren = () => {
+ const docChildren: Paragraph[] = [
+ new Paragraph({
+ text: "Transcription",
+ heading: HeadingLevel.TITLE,
+ }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ]
+
+ if (intelligence?.summary) {
+ docChildren.push(
+ new Paragraph({
+ text: "Summary",
+ heading: HeadingLevel.HEADING_1,
+ }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ...intelligence.summary
+ .split("\n")
+ .filter(Boolean)
+ .map(
+ (line: string) =>
+ new Paragraph({
+ children: [new TextRun(line.replace(/^[-*\u2022]\s*/, ""))],
+ }),
+ ),
+ new Paragraph({ children: [new TextRun("")] }),
+ )
+ }
+
+ docChildren.push(
+ new Paragraph({
+ text: "Transcript",
+ heading: HeadingLevel.HEADING_1,
+ }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ...transcription.split("\n").map(
+ (line: string) =>
+ new Paragraph({
+ children: [new TextRun(line)],
+ }),
+ ),
+ )
+
+ return docChildren
+ }
+
+ const handleDownload = async () => {
+ setIsDownloading(true)
+ try {
+ const timestamp = new Date().toISOString().split("T")[0]
+ const filename = `transcription_${timestamp}.${selectedFormat}`
+ let blob: Blob
+
+ if (selectedFormat === "srt") {
+ blob = new Blob([generateSRT(transcription, segments)], {
+ type: "text/plain",
+ })
+ } else if (selectedFormat === "vtt") {
+ blob = new Blob([generateVTT(transcription, segments)], {
+ type: "text/vtt",
+ })
+ } else if (selectedFormat === "docx") {
+ const doc = new Document({
+ sections: [{ children: buildDocxChildren() }],
+ })
+ const buffer = await Packer.toBuffer(doc)
+ blob = new Blob([new Uint8Array(buffer)], {
+ type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ })
+ } else if (selectedFormat === "json") {
+ blob = new Blob([generateJSON(transcription, segments, intelligence)], {
+ type: "application/json",
+ })
+ } else if (selectedFormat === "csv") {
+ blob = new Blob([generateCSV(transcription, segments)], {
+ type: "text/csv",
+ })
+ } else if (selectedFormat === "md") {
+ blob = new Blob(
+ [generateMarkdown(transcription, segments, intelligence)],
+ { type: "text/markdown" },
+ )
+ } else {
+ blob = new Blob([transcription], { type: "text/plain" })
+ }
+
+ downloadBlob(blob, filename)
+ toast.success(`${selectedFormat.toUpperCase()} file downloaded!`)
+ } catch (error) {
+ console.error("Download failed:", error)
+ toast.error("Download failed")
+ } finally {
+ setIsDownloading(false)
+ }
+ }
+
+ const handleCopy = async () => {
+ try {
+ await navigator.clipboard.writeText(transcription)
+ setCopySuccess(true)
+ toast.success("Copied to clipboard!")
+ setTimeout(() => setCopySuccess(false), 2000)
+ } catch {
+ toast.error("Failed to copy")
+ }
+ }
+
+ const handleDownloadAll = async () => {
+ setIsDownloadingAll(true)
+ toast.info("Preparing all formats...")
+
+ try {
+ const timestamp = new Date().toISOString().split("T")[0]
+ const baseDownloads: Array<{ content: Blob; filename: string }> = [
+ {
+ content: new Blob([transcription], { type: "text/plain" }),
+ filename: `transcription_${timestamp}.txt`,
+ },
+ {
+ content: new Blob([generateSRT(transcription, segments)], {
+ type: "text/plain",
+ }),
+ filename: `transcription_${timestamp}.srt`,
+ },
+ {
+ content: new Blob([generateVTT(transcription, segments)], {
+ type: "text/vtt",
+ }),
+ filename: `transcription_${timestamp}.vtt`,
+ },
+ {
+ content: new Blob(
+ [generateJSON(transcription, segments, intelligence)],
+ { type: "application/json" },
+ ),
+ filename: `transcription_${timestamp}.json`,
+ },
+ {
+ content: new Blob([generateCSV(transcription, segments)], {
+ type: "text/csv",
+ }),
+ filename: `transcription_${timestamp}.csv`,
+ },
+ {
+ content: new Blob(
+ [generateMarkdown(transcription, segments, intelligence)],
+ { type: "text/markdown" },
+ ),
+ filename: `transcription_${timestamp}.md`,
+ },
+ ]
+
+ const doc = new Document({
+ sections: [{ children: buildDocxChildren() }],
+ })
+ const buffer = await Packer.toBuffer(doc)
+ const downloads = [
+ ...baseDownloads,
+ {
+ content: new Blob([new Uint8Array(buffer)], {
+ type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ }),
+ filename: `transcription_${timestamp}.docx`,
+ },
+ ]
+
+ for (let i = 0; i < downloads.length; i++) {
+ downloadBlob(downloads[i].content, downloads[i].filename)
+ if (i < downloads.length - 1) {
+ await new Promise((resolve) => setTimeout(resolve, 300))
+ }
+ }
+
+ toast.success(`Downloaded ${downloads.length} files!`)
+ } catch (error) {
+ console.error("Download all failed:", error)
+ toast.error("Failed to download all formats")
+ } finally {
+ setIsDownloadingAll(false)
+ }
+ }
+
+ return (
+ <>
+
+
+
+
+
Export Options
+
+
+
+
+
+ Format
+
+
+ {(
+ ["txt", "docx", "srt", "vtt", "json", "csv", "md"] as const
+ ).map((format) => (
+ setSelectedFormat(format)}
+ className="px-2 text-xs"
+ >
+ {format.toUpperCase()}
+
+ ))}
+
+
+
+
+ {selectedFormat === "srt" &&
+ "SRT - Subtitle format with timestamps"}
+ {selectedFormat === "vtt" && "WebVTT - Web subtitle format"}
+ {selectedFormat === "txt" && "Plain text transcription"}
+ {selectedFormat === "docx" && "Microsoft Word document"}
+ {selectedFormat === "json" && "JSON with full metadata & segments"}
+ {selectedFormat === "csv" && "CSV spreadsheet with timestamps"}
+ {selectedFormat === "md" && "Markdown with formatted timestamps"}
+
+
+
+ {isDownloading
+ ? "Downloading..."
+ : `Download ${selectedFormat.toUpperCase()}`}
+
+
+
+
+
+
+ {copySuccess ? (
+ <>
+
+ Copied!
+ >
+ ) : (
+ <>
+
+ Copy to Clipboard
+ >
+ )}
+
+
+
+
+ {isDownloadingAll ? "Downloading..." : "Download All Formats"}
+
+
+ >
+ )
+}
+
+function downloadBlob(blob: Blob, filename: string) {
+ const url = URL.createObjectURL(blob)
+ const a = document.createElement("a")
+ a.href = url
+ a.download = filename
+ document.body.appendChild(a)
+ a.click()
+ a.remove()
+ setTimeout(() => URL.revokeObjectURL(url), 100)
+}
diff --git a/src/components/studio/FileDetails.tsx b/src/components/studio/FileDetails.tsx
new file mode 100644
index 0000000..b74da64
--- /dev/null
+++ b/src/components/studio/FileDetails.tsx
@@ -0,0 +1,59 @@
+"use client"
+
+import { Clock, FileText } from "lucide-react"
+import React from "react"
+import { formatDuration, formatFileSize } from "@/lib/format-utils"
+import type { AudioSource } from "@/types/transcription"
+import { Badge } from "../ui/badge"
+import { Card, CardContent, CardHeader } from "../ui/card"
+
+export interface FileDetailsProps {
+ audioSource?: AudioSource
+}
+
+export const FileDetails: React.FC = ({ audioSource }) => {
+ let typeLabel = "Unknown"
+ if (audioSource?.type === "file") typeLabel = "Upload"
+ else if (audioSource?.type === "url") typeLabel = "URL"
+
+ return (
+
+
+
+
+
File Details
+
+
+
+
+ Filename
+
+ {audioSource?.name || "Unknown"}
+
+
+
+
+
Duration
+
+
+
+ {formatDuration(audioSource?.duration)}
+
+
+
+
+
+ Size
+ {formatFileSize(audioSource?.size)}
+
+
+
+ Type
+
+ {typeLabel}
+
+
+
+
+ )
+}
diff --git a/src/components/studio/KeyPhrasesPanel.tsx b/src/components/studio/KeyPhrasesPanel.tsx
index 3fce71a..7517d32 100644
--- a/src/components/studio/KeyPhrasesPanel.tsx
+++ b/src/components/studio/KeyPhrasesPanel.tsx
@@ -35,9 +35,7 @@ export const KeyPhrasesPanel: React.FC = ({
{phrase.text}
-
- {phrase.count}x
-
+ {phrase.count}x
{/* Relevance bar */}
diff --git a/src/components/studio/KeyboardShortcutsModal.tsx b/src/components/studio/KeyboardShortcutsModal.tsx
new file mode 100644
index 0000000..c3a9193
--- /dev/null
+++ b/src/components/studio/KeyboardShortcutsModal.tsx
@@ -0,0 +1,90 @@
+"use client"
+
+import { Keyboard, X } from "lucide-react"
+import React, { useEffect } from "react"
+import { Button } from "../ui/button"
+
+export interface KeyboardShortcutsModalProps {
+ isOpen: boolean
+ onClose: () => void
+}
+
+const SHORTCUTS = [
+ { key: "Space", action: "Play / Pause" },
+ { key: "\u2190", action: "Skip back 5s" },
+ { key: "\u2192", action: "Skip forward 5s" },
+ { key: "Shift + \u2190", action: "Skip back 30s" },
+ { key: "Shift + \u2192", action: "Skip forward 30s" },
+ { key: "\u2191 / \u2193", action: "Volume up / down" },
+ { key: "M", action: "Mute / Unmute" },
+ { key: "0-9", action: "Jump to 0%-90%" },
+ { key: "Ctrl/\u2318 + F", action: "Focus search" },
+ { key: "Ctrl/\u2318 + C", action: "Copy transcript" },
+ { key: "Esc", action: "Clear search" },
+ { key: "?", action: "Show shortcuts" },
+]
+
+export const KeyboardShortcutsModal: React.FC
= ({
+ isOpen,
+ onClose,
+}) => {
+ useEffect(() => {
+ if (!isOpen) return
+ const handleKeyDown = (e: KeyboardEvent) => {
+ if (e.key === "Escape") onClose()
+ }
+ globalThis.addEventListener("keydown", handleKeyDown)
+ return () => globalThis.removeEventListener("keydown", handleKeyDown)
+ }, [isOpen, onClose])
+
+ if (!isOpen) return null
+
+ return (
+
+
+
+
+
+
+ Keyboard Shortcuts
+
+
+
+
+
+
+ {SHORTCUTS.map(({ key, action }) => (
+
+ {action}
+
+ {key}
+
+
+ ))}
+
+
+
+ )
+}
diff --git a/src/components/studio/SentimentPanel.tsx b/src/components/studio/SentimentPanel.tsx
index d53a646..4c83aa0 100644
--- a/src/components/studio/SentimentPanel.tsx
+++ b/src/components/studio/SentimentPanel.tsx
@@ -1,8 +1,8 @@
"use client"
import React, { useMemo } from "react"
-import type { SentimentResult } from "@/types/transcription"
import { cn } from "@/lib/utils"
+import type { SentimentResult } from "@/types/transcription"
interface SentimentPanelProps {
sentimentResults: SentimentResult[]
@@ -86,17 +86,23 @@ export const SentimentPanel: React.FC = ({
)}
- Positive {distribution.POSITIVE}%
+
+ Positive {distribution.POSITIVE}%
+
Neutral {distribution.NEUTRAL}%
- Negative {distribution.NEGATIVE}%
+
+ Negative {distribution.NEGATIVE}%
+
{/* Timeline */}
{sentimentResults.map((result, index) => {
- const colors = SENTIMENT_COLORS[result.sentiment] || SENTIMENT_COLORS.NEUTRAL
- const isActive = currentTime >= result.start && currentTime < result.end
+ const colors =
+ SENTIMENT_COLORS[result.sentiment] || SENTIMENT_COLORS.NEUTRAL
+ const isActive =
+ currentTime >= result.start && currentTime < result.end
return (
= ({
{formatDuration(result.start)}
-
+
{result.sentiment}
diff --git a/src/components/studio/SummaryPanel.tsx b/src/components/studio/SummaryPanel.tsx
index c1ef79e..f3b1c09 100644
--- a/src/components/studio/SummaryPanel.tsx
+++ b/src/components/studio/SummaryPanel.tsx
@@ -19,7 +19,7 @@ export const SummaryPanel: React.FC
= ({ summary }) => {
{lines.map((line, index) => {
// Strip leading bullet characters (-, *, etc.)
- const cleaned = line.replace(/^[\s\-\*\u2022]+/, "").trim()
+ const cleaned = line.replace(/^[\s\-*\u2022]+/, "").trim()
if (!cleaned) return null
return (
diff --git a/src/components/studio/TranscriptStatistics.tsx b/src/components/studio/TranscriptStatistics.tsx
new file mode 100644
index 0000000..8e41f2d
--- /dev/null
+++ b/src/components/studio/TranscriptStatistics.tsx
@@ -0,0 +1,115 @@
+"use client"
+
+import { BarChart3 } from "lucide-react"
+import React from "react"
+import type { TranscriptionSegment } from "@/types/transcription"
+import { Card, CardContent, CardHeader } from "../ui/card"
+
+export interface TranscriptStatisticsProps {
+ transcription: string
+ segments?: TranscriptionSegment[]
+}
+
+export const TranscriptStatistics: React.FC = ({
+ transcription,
+ segments,
+}) => {
+ const stats = React.useMemo(() => {
+ const words = transcription
+ .trim()
+ .split(/\s+/)
+ .filter((w) => w.length > 0)
+ const characters = transcription.length
+ const sentences = transcription
+ .split(/[.!?]+/)
+ .filter((s) => s.trim().length > 0).length
+ const avgWordLength =
+ words.length > 0
+ ? (words.reduce((sum, w) => sum + w.length, 0) / words.length).toFixed(
+ 1,
+ )
+ : "0"
+ const totalDuration =
+ segments && segments.length > 0
+ ? segments[segments.length - 1].end - segments[0].start
+ : 0
+ const wordsPerMinute =
+ totalDuration > 0 ? Math.round(words.length / (totalDuration / 60)) : 0
+
+ // Find most common words (excluding short words)
+ const wordFreq: Record = {}
+ words.forEach((w) => {
+ const word = w.toLocaleLowerCase().replace(/[^\p{L}]/gu, "")
+ if (word.length > 3) {
+ wordFreq[word] = (wordFreq[word] || 0) + 1
+ }
+ })
+ const topWords = Object.entries(wordFreq)
+ .sort((a, b) => b[1] - a[1])
+ .slice(0, 5)
+
+ return {
+ words: words.length,
+ characters,
+ sentences,
+ avgWordLength,
+ totalDuration,
+ wordsPerMinute,
+ topWords,
+ }
+ }, [transcription, segments])
+
+ return (
+
+
+
+
+
Statistics
+
+
+
+
+
+
+ {stats.words.toLocaleString()}
+
+
Words
+
+
+
+ {stats.characters.toLocaleString()}
+
+
Characters
+
+
+
+ {stats.sentences}
+
+
Sentences
+
+
+
+ {stats.wordsPerMinute}
+
+
Words/min
+
+
+ {stats.topWords.length > 0 && (
+
+
Top Words
+
+ {stats.topWords.map(([word, count]) => (
+
+ {word} ({count})
+
+ ))}
+
+
+ )}
+
+
+ )
+}
diff --git a/src/components/transcription/FileUploadInput.tsx b/src/components/transcription/FileUploadInput.tsx
index 21dfbb7..76adc15 100644
--- a/src/components/transcription/FileUploadInput.tsx
+++ b/src/components/transcription/FileUploadInput.tsx
@@ -1,26 +1,26 @@
-import React, { useState, useCallback, useEffect } from "react";
-import { Button } from "@/components/ui/button";
-import { UploadCloud, FileCheck2, XCircle } from "lucide-react";
-import { motion, AnimatePresence, LayoutGroup } from "framer-motion";
-import { expandCenter, springTransition } from "../../lib/animations";
-import { getAcceptedMimeTypes } from "@/lib/file-format-utils";
+import { AnimatePresence, LayoutGroup, motion } from "framer-motion"
+import { FileCheck2, UploadCloud, XCircle } from "lucide-react"
+import React, { useCallback, useEffect, useState } from "react"
+import { Button } from "@/components/ui/button"
+import { getAcceptedMimeTypes } from "@/lib/file-format-utils"
+import { expandCenter, springTransition } from "../../lib/animations"
interface FileUploadInputProps {
- fileName: string | null;
- fileSize: number;
- fileError: string | null;
- fileInputRef: React.RefObject;
- onFileChange: (e: React.ChangeEvent) => void;
- onButtonClick: () => void;
- onReset: () => void;
- validateAndSetFile: (file: File) => void; // Function to handle dragged files
+ fileName: string | null
+ fileSize: number
+ fileError: string | null
+ fileInputRef: React.RefObject
+ onFileChange: (e: React.ChangeEvent) => void
+ onButtonClick: () => void
+ onReset: () => void
+ validateAndSetFile: (file: File) => void // Function to handle dragged files
}
const formatFileSize = (size: number) => {
- if (size < 1024) return `${size} B`;
- if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`;
- return `${(size / (1024 * 1024)).toFixed(1)} MB`;
-};
+ if (size < 1024) return `${size} B`
+ if (size < 1024 * 1024) return `${(size / 1024).toFixed(1)} KB`
+ return `${(size / (1024 * 1024)).toFixed(1)} MB`
+}
export function FileUploadInput({
fileName,
@@ -33,78 +33,76 @@ export function FileUploadInput({
validateAndSetFile,
}: FileUploadInputProps) {
// State for drag and drop
- const [isDragging, setIsDragging] = useState(false);
+ const [isDragging, setIsDragging] = useState(false)
// Counter to track multiple drag events (browsers fire multiple events)
- const dragCounter = React.useRef(0);
+ const dragCounter = React.useRef(0)
// Drag event handlers with improved counter logic
const handleDragEnter = useCallback((e: React.DragEvent) => {
- e.preventDefault();
- e.stopPropagation();
- dragCounter.current++;
- setIsDragging(true);
- }, []);
+ e.preventDefault()
+ e.stopPropagation()
+ dragCounter.current++
+ setIsDragging(true)
+ }, [])
const handleDragLeave = useCallback((e: React.DragEvent) => {
- e.preventDefault();
- e.stopPropagation();
- dragCounter.current--;
+ e.preventDefault()
+ e.stopPropagation()
+ dragCounter.current--
if (dragCounter.current === 0) {
- setIsDragging(false);
+ setIsDragging(false)
}
- }, []);
+ }, [])
const handleDragOver = useCallback(
(e: React.DragEvent) => {
- e.preventDefault();
- e.stopPropagation();
+ e.preventDefault()
+ e.stopPropagation()
// Ensure dragging state is true when dragging over
if (!isDragging) {
- setIsDragging(true);
+ setIsDragging(true)
}
},
[isDragging],
- );
+ )
const handleDrop = useCallback(
(e: React.DragEvent) => {
- e.preventDefault();
- e.stopPropagation();
- setIsDragging(false);
- dragCounter.current = 0;
-
- const files = e.dataTransfer.files;
+ e.preventDefault()
+ e.stopPropagation()
+ setIsDragging(false)
+ dragCounter.current = 0
- console.log("File dropped:", files?.[0]?.name);
+ const files = e.dataTransfer.files
if (files && files.length > 0) {
- validateAndSetFile(files[0]);
+ validateAndSetFile(files[0])
}
},
[validateAndSetFile],
- );
+ )
// Reset the drag counter when component unmounts
useEffect(() => {
return () => {
- dragCounter.current = 0;
- };
- }, []);
+ dragCounter.current = 0
+ }
+ }, [])
// Handle when the component loses focus to reset dragging state
// This helps with edge cases where dragLeave might not fire
useEffect(() => {
const handleWindowDragEnd = () => {
- dragCounter.current = 0;
- setIsDragging(false);
- };
+ dragCounter.current = 0
+ setIsDragging(false)
+ }
- window.addEventListener("dragend", handleWindowDragEnd);
+ window.addEventListener("dragend", handleWindowDragEnd)
return () => {
- window.removeEventListener("dragend", handleWindowDragEnd);
- };
- }, []);
+ window.removeEventListener("dragend", handleWindowDragEnd)
+ }
+ }, [])
return (
@@ -196,8 +194,8 @@ export function FileUploadInput({
size="sm"
className="mt-2 text-red-500 hover:text-red-700 dark:text-red-400 dark:hover:text-red-300"
onClick={(e) => {
- e.stopPropagation(); // Prevent triggering the click on the parent div
- onReset();
+ e.stopPropagation() // Prevent triggering the click on the parent div
+ onReset()
}}
>
Remove file
@@ -229,8 +227,8 @@ export function FileUploadInput({
size="sm"
className="mt-2 text-blue-500 hover:text-blue-700 dark:text-blue-400 dark:hover:text-blue-300"
onClick={(e) => {
- e.stopPropagation(); // Prevent triggering the click on the parent div
- onReset();
+ e.stopPropagation() // Prevent triggering the click on the parent div
+ onReset()
}}
>
Try again
@@ -262,5 +260,5 @@ export function FileUploadInput({
- );
+ )
}
diff --git a/src/components/transcription/MobileTranscriptionResult.tsx b/src/components/transcription/MobileTranscriptionResult.tsx
deleted file mode 100644
index a2db602..0000000
--- a/src/components/transcription/MobileTranscriptionResult.tsx
+++ /dev/null
@@ -1,265 +0,0 @@
-"use client";
-
-import { useState } from "react";
-import { Button } from "../ui/button";
-import { MobileButton } from "../ui/mobile-button";
-import { Copy, Download, RotateCcw, FileText, Share2 } from "lucide-react";
-import { toast } from "sonner";
-import { motion } from "framer-motion";
-
-interface MobileTranscriptionResultProps {
- transcription: string;
- onNewTranscription: () => void;
-}
-
-export function MobileTranscriptionResult({
- transcription,
- onNewTranscription,
-}: MobileTranscriptionResultProps) {
- const [isCopying, setIsCopying] = useState(false);
- const [copySuccess, setCopySuccess] = useState(false);
- const [showExportOptions, setShowExportOptions] = useState(false);
- const [isDownloading, setIsDownloading] = useState(false);
-
- // Copy to clipboard function
- const handleCopyToClipboard = async () => {
- setIsCopying(true);
- try {
- await navigator.clipboard.writeText(transcription);
- setCopySuccess(true);
- toast.success("Transcription copied to clipboard!");
-
- // Reset success state after 2 seconds
- setTimeout(() => {
- setCopySuccess(false);
- }, 2000);
- } catch (error) {
- console.error("Failed to copy text:", error);
- toast.error("Failed to copy text to clipboard");
- } finally {
- setIsCopying(false);
- }
- };
-
- // Download as text file
- const handleDownloadText = async () => {
- setIsDownloading(true);
- try {
- const timestamp = new Date().toISOString().split("T")[0];
- const filename = `transcription_${timestamp}.txt`;
-
- const blob = new Blob([transcription], { type: "text/plain" });
- const url = URL.createObjectURL(blob);
-
- const a = document.createElement("a");
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
-
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success("Transcription downloaded!");
- } catch (error) {
- console.error("Download failed:", error);
- toast.error("Failed to download transcription");
- } finally {
- setIsDownloading(false);
- }
- };
-
- // Share function (if supported by browser)
- const handleShare = async () => {
- if (navigator.share) {
- try {
- await navigator.share({
- title: "Transcription Result",
- text: transcription,
- });
- } catch (error) {
- console.error("Share failed:", error);
- // Fallback to copy
- handleCopyToClipboard();
- }
- } else {
- // Fallback to copy on browsers that don't support sharing
- handleCopyToClipboard();
- }
- };
-
- // Show a preview of the transcription (first few lines)
- const getPreview = () => {
- const lines = transcription.split("\n").filter((line) => line.trim());
- const previewLines = lines.slice(0, 3);
- const hasMore = lines.length > 3;
-
- return {
- preview: previewLines.join("\n"),
- hasMore,
- totalLines: lines.length,
- };
- };
-
- const { preview, hasMore, totalLines } = getPreview();
-
- return (
-
- {/* Mobile Header */}
-
-
- Your Transcription
-
-
-
- New
-
-
-
- {/* Transcription Preview */}
-
-
- {/* Preview Text */}
-
-
- {preview}
- {hasMore && (
-
- ... and {totalLines - 3} more lines
-
- )}
-
-
-
- {/* Quick Stats */}
-
- {transcription.length} characters
- {totalLines} lines
-
- {Math.ceil(transcription.split(" ").length / 200)} min read
-
-
-
-
-
- {/* Primary Actions */}
-
- {/* Copy Button - Most Important Action */}
-
- {copySuccess ? (
- <>
-
- Copied!
- >
- ) : (
- <>
-
- {isCopying ? "Copying..." : "Copy to Clipboard"}
- >
- )}
-
-
- {/* Share/Download Row */}
-
- {/* Share Button (or copy fallback) */}
-
-
- Share
-
-
- {/* Quick Download */}
-
-
- {isDownloading ? "Saving..." : "Download"}
-
-
-
-
- {/* Full Text View - Expandable */}
-
-
-
setShowExportOptions(!showExportOptions)}
- className="mobile:p-4 flex w-full items-center justify-between p-4 text-left"
- >
-
-
-
- View Full Text & Export Options
-
-
- {showExportOptions ? "−" : "+"}
-
-
- {showExportOptions && (
-
- {/* Full Text */}
-
- {transcription.split("\n").map((line, index) => (
-
- {line || "\u00A0"}{" "}
- {/* Non-breaking space for empty lines */}
-
- ))}
-
-
- {/* Export Options */}
-
-
- More Export Options:
-
-
- For PDF, Word, and other formats, use the desktop version or
- the "New Transcription" button above to access full export
- options.
-
-
-
- )}
-
-
-
- {/* Bottom Action - New Transcription */}
-
-
-
- Start New Transcription
-
-
-
- );
-}
diff --git a/src/components/transcription/SessionRecoveryPrompt.tsx b/src/components/transcription/SessionRecoveryPrompt.tsx
deleted file mode 100644
index 9cb363e..0000000
--- a/src/components/transcription/SessionRecoveryPrompt.tsx
+++ /dev/null
@@ -1,122 +0,0 @@
-import { TranscriptionSession } from "@/lib/persistence-service";
-import { Button } from "@/components/ui/button";
-import { Card } from "@/components/ui/card";
-import { motion } from "framer-motion";
-import { fadeInUp, springTransition } from "@/lib/animations";
-
-interface SessionRecoveryPromptProps {
- session: TranscriptionSession;
- onRecover: () => void;
- onDiscard: () => void;
-}
-
-export function SessionRecoveryPrompt({
- session,
- onRecover,
- onDiscard,
-}: SessionRecoveryPromptProps) {
- const formatTime = (timestamp: number) => {
- const date = new Date(timestamp);
- return date.toLocaleString(undefined, {
- month: "short",
- day: "numeric",
- hour: "2-digit",
- minute: "2-digit",
- });
- };
-
- const getProgressLabel = (progress: number) => {
- if (progress < 20) return "Starting";
- if (progress < 50) return "Uploading";
- if (progress < 80) return "Processing";
- return "Nearly complete";
- };
-
- return (
-
-
-
-
-
-
-
-
-
-
- Unfinished Transcription Found
-
-
-
-
- We found an unfinished transcription from{" "}
- {formatTime(session.createdAt)}.
-
-
-
-
-
- Source:
- {" "}
-
- {session.audioSource.type === "file"
- ? session.audioSource.name || "Uploaded file"
- : "URL audio"}
-
-
-
-
-
- Status:
- {" "}
-
- {getProgressLabel(session.progress)} ({session.progress}%)
-
-
-
-
-
-
-
-
- Discard
-
-
- Resume Transcription
-
-
-
-
-
- );
-}
-
-export default SessionRecoveryPrompt;
diff --git a/src/components/transcription/TranscriptionError.tsx b/src/components/transcription/TranscriptionError.tsx
deleted file mode 100644
index 5be35e4..0000000
--- a/src/components/transcription/TranscriptionError.tsx
+++ /dev/null
@@ -1,212 +0,0 @@
-import { Button } from "../ui/button"
-import type { AIFeatures } from "./TranscriptionOptions"
-
-// Map AssemblyAI API param names → our AIFeatures keys
-const API_PARAM_TO_FEATURE: Record = {
- iab_categories: "topicDetection",
- auto_chapters: "autoChapters",
- summarization: "summarization",
- sentiment_analysis: "sentimentAnalysis",
- entity_detection: "entityDetection",
- auto_highlights: "keyPhrases",
- content_safety: "contentModeration",
-}
-
-const FEATURE_DISPLAY_NAMES: Record = {
- topicDetection: "Topic Detection",
- autoChapters: "Auto Chapters",
- summarization: "Summarization",
- sentimentAnalysis: "Sentiment Analysis",
- entityDetection: "Entity Detection",
- keyPhrases: "Key Phrases",
- contentModeration: "Content Moderation",
-}
-
-interface FeatureLanguageError {
- featureKey: keyof AIFeatures
- featureLabel: string
- languageCode: string
- supportedLanguages: string[]
-}
-
-function parseFeatureLanguageError(error: string): FeatureLanguageError | null {
- // Match: "iab_categories is not supported for language code 'ar'. iab_categories only supports the following languages: de, en, es, fr"
- const match = error.match(
- /(\w+) is not supported for language code '(\w+)'\.\s*\w+ only supports the following languages:\s*(.+)/i,
- )
- if (!match) return null
-
- const [, apiParam, langCode, langList] = match
- const featureKey = API_PARAM_TO_FEATURE[apiParam]
- if (!featureKey) return null
-
- return {
- featureKey,
- featureLabel: FEATURE_DISPLAY_NAMES[featureKey],
- languageCode: langCode,
- supportedLanguages: langList.split(",").map((l) => l.trim()),
- }
-}
-
-interface TranscriptionErrorProps {
- status: "failed" | "canceled"
- error: string | null
- onReset: () => void
- onRetryWithoutFeature?: (featureKey: keyof AIFeatures) => void
- apiResponses: Array<{ timestamp: Date; data: Record }>
- showApiDetails: boolean
- setShowApiDetails: (show: boolean) => void
- formatTimestamp: (date: Date) => string
-}
-
-export function TranscriptionError({
- status,
- error,
- onReset,
- onRetryWithoutFeature,
- apiResponses,
- showApiDetails,
- setShowApiDetails,
- formatTimestamp,
-}: TranscriptionErrorProps) {
- const statusMessages = {
- failed: "The transcription encountered an error during processing.",
- canceled: "This transcription was cancelled, please try again.",
- }
-
- const featureLangError = error ? parseFeatureLanguageError(error) : null
-
- return (
-
-
-
-
-
- {status === "failed" ? (
- <>
-
-
-
- >
- ) : (
- <>
-
-
-
- >
- )}
-
-
-
-
- {featureLangError ? (
- <>
-
- Language not supported by {featureLangError.featureLabel}
-
-
- The detected language ({featureLangError.languageCode.toUpperCase()}) is not supported by the{" "}
- {featureLangError.featureLabel} feature.
-
-
- Supported languages: {featureLangError.supportedLanguages.map((l) => l.toUpperCase()).join(", ")}
-
-
- {onRetryWithoutFeature && (
- onRetryWithoutFeature(featureLangError.featureKey)}
- className="bg-primary text-primary-foreground hover:bg-primary/90"
- >
- Retry without {featureLangError.featureLabel}
-
- )}
-
- Start Over
-
-
- >
- ) : (
- <>
-
- {statusMessages[status]}
-
- {error && (
-
- Error: {error}
-
- )}
-
- Try Again
-
- >
- )}
-
-
- {apiResponses.length > 0 && (
-
-
setShowApiDetails(!showApiDetails)}
- className="mb-4 bg-white text-gray-700 dark:bg-gray-800 dark:text-gray-300"
- >
- {showApiDetails ? "Hide Error Details" : "View Error Details"}
-
-
- {showApiDetails && (
-
- {apiResponses.map((response, index) => (
-
-
- [{formatTimestamp(response.timestamp)}]
-
-
- {JSON.stringify(response.data, null, 2)}
-
-
- ))}
-
- )}
-
- )}
-
- )
-}
diff --git a/src/components/transcription/TranscriptionForm.tsx b/src/components/transcription/TranscriptionForm.tsx
deleted file mode 100644
index c5e1057..0000000
--- a/src/components/transcription/TranscriptionForm.tsx
+++ /dev/null
@@ -1,698 +0,0 @@
-import { useState, useEffect } from "react";
-import { useTranscriptionPolling } from "@/hooks/useTranscriptionPolling";
-import { useSessionPersistence } from "@/hooks/useSessionPersistence";
-import { UploadAudio } from "../UploadAudio";
-import { TranscriptionProcessing } from "./TranscriptionProcessing";
-import type { AIFeatures } from "./TranscriptionOptions";
-import { TranscriptionError } from "./TranscriptionError";
-import { MobileTranscriptionResult } from "./MobileTranscriptionResult";
-import TranscriptionResult from "./TranscriptionResult";
-import SessionRecoveryPrompt from "./SessionRecoveryPrompt";
-import {
- TranscriptionStatus,
- statusMessages,
- getApiUrl,
- formatTimestamp,
-} from "../../services/transcription";
-import { trackEvent } from "../../lib/analytics";
-import { uploadLargeFile } from "../../lib/storage-service";
-import { getUserFriendlyErrorMessage } from "../../lib/error-utils";
-
-import { motion } from "framer-motion";
-import { fadeInUp, springTransition } from "../../lib/animations";
-import { TranscriptionSession } from "@/lib/persistence-service";
-
-interface TranscriptionFormProps {
- initialSession?: TranscriptionSession | null;
-}
-
-export function TranscriptionForm({ initialSession }: TranscriptionFormProps) {
- const [transcription, setTranscription] = useState(null);
- const [transStatus, setTransStatus] = useState("idle");
- const [error, setError] = useState(null);
- const [apiResponses, setApiResponses] = useState<
- Array<{ timestamp: Date; data: Record }>
- >([]);
- const [showApiDetails, setShowApiDetails] = useState(false);
- const [progress, setProgress] = useState(0);
- const [currentPredictionId, setCurrentPredictionId] = useState(
- null,
- );
- // Preserve last options + audio URL for retry-without-feature
- const [lastAudioUrl, setLastAudioUrl] = useState(null);
- const [lastOptions, setLastOptions] = useState<{
- language: string;
- diarize: boolean;
- aiFeatures: AIFeatures;
- } | null>(null);
- // Mobile detection hook
- const [isMobile, setIsMobile] = useState(false);
-
- useEffect(() => {
- const checkIsMobile = () => {
- return (
- window.innerWidth <= 767 ||
- window.matchMedia("(pointer: coarse)").matches
- );
- };
-
- setIsMobile(checkIsMobile());
-
- const handleResize = () => {
- setIsMobile(checkIsMobile());
- };
-
- window.addEventListener("resize", handleResize);
- return () => window.removeEventListener("resize", handleResize);
- }, []);
-
- // Add session persistence hook
- const {
- activeSession,
- hasRecoverableSession,
- isLoading: isLoadingSession,
- createNewSession,
- updateSessionData,
- recoverSession,
- discardSession,
- } = useSessionPersistence({
- onSessionRecovered: (session) => {
- console.log("Recovering session:", session);
- // Restore state from recovered session
- setTransStatus(session.status);
- setProgress(session.progress);
- setCurrentPredictionId(session.predictionId);
-
- if (session.apiResponses) {
- setApiResponses(session.apiResponses);
- }
-
- // If the session has a result already
- if (session.result) {
- setTranscription(session.result);
- }
- },
- });
-
- // Handle initialSession from props (from history)
- useEffect(() => {
- if (initialSession) {
- console.log("Loading session from history:", initialSession);
-
- // Set the correct state based on the session
- setTransStatus(initialSession.status);
- setProgress(initialSession.progress);
- setCurrentPredictionId(initialSession.predictionId);
-
- if (initialSession.apiResponses) {
- setApiResponses(initialSession.apiResponses);
- }
-
- // If the session has a completed result
- if (initialSession.result) {
- setTranscription(initialSession.result);
- }
-
- // If the transcription is still in progress, resume polling
- if (
- initialSession.status === "processing" &&
- initialSession.predictionId
- ) {
- // The polling hook will automatically start since we set currentPredictionId
- }
- }
- }, [initialSession]);
-
- // Use the polling hook with callbacks
- const { stopPolling } = useTranscriptionPolling({
- predictionId: currentPredictionId,
- onSuccess: (output) => {
- // Handle successful transcription
- setTransStatus("succeeded");
- setProgress(100);
-
- // Parse the output to extract the transcription text and segments
- // WhisperX returns: { segments: [{ start, end, text, words? }], detected_language: string }
- let finalTranscription = "Error: Could not parse transcription.";
- let segments = undefined;
- let intelligence = undefined;
-
- if (typeof output === "string") {
- finalTranscription = output;
- } else if (output && typeof output === "object") {
- // AssemblyAI returns { segments, detected_language, intelligence? }
- if ("segments" in output && Array.isArray(output.segments)) {
- segments = output.segments.map((seg: { start: number; end: number; text: string; speaker?: string; words?: unknown[] }, idx: number) => ({
- id: idx,
- start: seg.start,
- end: seg.end,
- text: seg.text,
- speaker: seg.speaker,
- words: seg.words,
- }));
- // Combine all segment text into full transcription
- finalTranscription = output.segments
- .map((seg: { text: string }) => seg.text)
- .join(" ")
- .trim();
-
- // Extract intelligence data if available
- if ("intelligence" in output && output.intelligence) {
- intelligence = output.intelligence;
- }
-
- console.log("AssemblyAI output parsed:", {
- segmentCount: segments ? segments.length : 0,
- detectedLanguage: (output as { detected_language?: string }).detected_language,
- hasIntelligence: !!intelligence,
- });
- }
- // Fallback for OpenAI Whisper model format
- else if ("transcription" in output && typeof output.transcription === "string") {
- finalTranscription = output.transcription;
- if ("segments" in output && Array.isArray(output.segments)) {
- segments = output.segments;
- }
- } else if ("text" in output && typeof output.text === "string") {
- finalTranscription = output.text;
- } else if (
- Array.isArray(output) &&
- output.length > 0 &&
- typeof output[0] === "string"
- ) {
- finalTranscription = output.join("\n");
- } else {
- console.error("Unexpected output format:", output);
- finalTranscription = JSON.stringify(output, null, 2);
- }
- }
- setTranscription(finalTranscription);
-
- // Update session with completed result, segments, and intelligence
- if (activeSession) {
- updateSessionData({
- status: "succeeded",
- progress: 100,
- result: finalTranscription,
- segments: segments,
- intelligence: intelligence,
- });
- }
- },
- onError: (errorMsg) => {
- setError(errorMsg);
-
- // Update session with error state
- if (activeSession) {
- updateSessionData({
- status: "failed",
- });
- }
- },
- onProgress: (value) => {
- setProgress(value);
-
- // Update session progress
- if (activeSession) {
- updateSessionData({ progress: value });
- }
- },
- onStatusChange: (status) => {
- setTransStatus(status);
-
- // Update session status
- if (activeSession) {
- updateSessionData({ status });
- }
- },
- onApiResponse: (response) => {
- setApiResponses((prev) => [...prev, response]);
-
- // Update session API responses
- if (activeSession) {
- const updatedResponses = [
- ...(activeSession.apiResponses || []),
- response,
- ];
- updateSessionData({ apiResponses: updatedResponses });
- }
- },
- });
-
- const getProgressColor = () => {
- switch (transStatus) {
- case "starting":
- return "bg-blue-500";
- case "processing":
- return "bg-indigo-500";
- case "succeeded":
- return "bg-green-500";
- case "failed":
- return "bg-red-500";
- case "canceled":
- return "bg-orange-500";
- default:
- return "bg-gray-500";
- }
- };
-
- const isLoading =
- transStatus === "starting" ||
- transStatus === "processing";
-
- const handleUpload = async (
- data:
- | FormData
- | { audioUrl: string },
- options: {
- language: string;
- diarize: boolean;
- aiFeatures: AIFeatures;
- },
- ) => {
- // --- Reset State ---
- setError(null);
- setApiResponses([]);
- setTranscription(null); // Ensure previous result is cleared
- stopPolling(); // Stop any existing polling
- setCurrentPredictionId(null); // Clear previous prediction ID
- setTransStatus("starting"); // <--- SET STATUS TO STARTING HERE
- setProgress(5);
-
- // Preserve options for retry-without-feature (audio URL stored after upload)
- setLastOptions(options);
-
- // Create new session
- let audioSource: {
- type: "file" | "url";
- name?: string;
- size?: number;
- url?: string;
- } = {
- type: "url",
- url: "",
- };
-
- // Determine audio source type
- if (data instanceof FormData) {
- const file = data.get("file") as File;
- if (file) {
- audioSource = {
- type: "file",
- name: file.name,
- size: file.size,
- };
- }
- } else if ("audioUrl" in data) {
- audioSource = {
- type: "url",
- url: data.audioUrl,
- };
- }
-
- // Create new session and store in state
- createNewSession(options, audioSource);
-
- const requestBody: {
- options: {
- language?: string;
- diarize?: boolean;
- aiFeatures?: AIFeatures;
- } | null;
- audioUrl?: string;
- } = { options: null };
-
- trackEvent("Transcription", "Start", options.language);
-
- try {
- let file: File | null = null;
- let sourceDescription = "";
-
- // Check if data is FormData (file upload) or object (URL input)
- if (data instanceof FormData) {
- file = data.get("file") as File;
- if (!file) {
- throw new Error("No file found in FormData");
- }
- sourceDescription = `file: ${file.name}, Size: ${(file.size / 1024 / 1024).toFixed(2)} MB, Type: ${file.type}`;
-
- // Always upload to Firebase (no more base64)
- setProgress(10);
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: {
- message: `Uploading to temporary storage...`,
- },
- },
- ]);
-
- try {
- const uploadResult = await uploadLargeFile(file);
- requestBody.audioUrl = uploadResult.url; // Use Firebase URL
- setLastAudioUrl(uploadResult.url); // Preserve for retry
-
- // Save URL to localStorage for Studio access
- localStorage.setItem("studioAudioUrl", uploadResult.url);
- console.log("Saved audio URL to localStorage:", uploadResult.url);
-
- // Update session with audio URL for Studio playback
- updateSessionData({
- audioSource: {
- type: "file",
- name: file.name,
- size: file.size,
- url: uploadResult.url,
- },
- });
- console.log("Updated session with upload URL:", uploadResult.url);
-
- setProgress(20);
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: {
- message: "File uploaded to temporary storage.",
- url: uploadResult.url,
- },
- },
- ]);
- } catch (uploadError) {
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: {
- error: `Firebase upload error: ${uploadError instanceof Error ? uploadError.message : String(uploadError)}`,
- },
- },
- ]);
- throw new Error(
- `Failed to upload file: ${uploadError instanceof Error ? uploadError.message : String(uploadError)}`,
- );
- }
- // --- End File processing logic ---
- } else {
- requestBody.audioUrl = data.audioUrl;
- setLastAudioUrl(data.audioUrl); // Preserve for retry
- sourceDescription = `URL: ${data.audioUrl}`;
- setProgress(15);
-
- localStorage.setItem("studioAudioUrl", data.audioUrl);
- }
-
- console.log(`Processing ${sourceDescription}`);
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: { message: `Processing ${sourceDescription}` },
- },
- ]);
-
- // Set common API options
- const apiOptions = {
- language: options.language,
- diarize: options.diarize || false,
- aiFeatures: options.aiFeatures,
- };
- requestBody.options = apiOptions;
-
- console.log(
- "Sending request to server with options:",
- requestBody.options,
- );
- console.log("Using Firebase URL for audio:", requestBody.audioUrl);
- setProgress(25);
-
- // --- API Call Logic with network error handling ---
- let response: Response;
- try {
- response = await fetch(getApiUrl("transcribe"), {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify(requestBody),
- });
- } catch {
- // Network error during fetch
- throw new Error(
- "Lost internet connection. Please check your network and try again.",
- );
- }
-
- setProgress(40);
-
- if (!response.ok) {
- let errorBody = "Unknown server error";
- try {
- const errorJson = await response.json();
- errorBody =
- errorJson.error || errorJson.message || JSON.stringify(errorJson);
- } catch {
- try {
- errorBody = await response.text();
- } catch {
- errorBody = `Server error (${response.status})`;
- }
- }
-
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: { error: `Server error: ${response.status} - ${errorBody}` },
- },
- ]);
-
- // Create a more specific error for server errors
- const error = new Error(errorBody) as Error & { status?: number };
- error.status = response.status;
- throw error;
- }
-
- const resultData = await response.json();
- console.log("API response data:", resultData);
-
- setApiResponses((prev) => [
- ...prev,
- { timestamp: new Date(), data: resultData },
- ]);
-
- // Save audio URL to session if provided (for Studio playback)
- if (resultData.audioUrl && activeSession) {
- updateSessionData({
- audioSource: {
- ...activeSession.audioSource,
- url: resultData.audioUrl,
- },
- });
- }
-
- // --- Check for Prediction ID and Start Polling ---
- if (resultData && resultData.id) {
- setCurrentPredictionId(resultData.id); // This will trigger the polling hook
- setProgress(50); // Indicate request sent, waiting for prediction
- } else {
- // Handle cases where the API might return the result directly (if applicable)
- // Or if the ID is missing for some reason
- if (resultData && resultData.output) {
- // If result is immediate (unlikely for long audio but handle just in case)
- // Handle successful transcription - same logic as in onSuccess callback
- setTransStatus("succeeded");
- setProgress(100);
-
- // Parse the output to extract the transcription text
- let finalTranscription = "Error: Could not parse transcription.";
- const output = resultData.output;
- if (typeof output === "string") {
- finalTranscription = output;
- } else if (output && typeof output === "object") {
- if ("text" in output && typeof output.text === "string") {
- finalTranscription = output.text;
- } else if (
- Array.isArray(output) &&
- output.length > 0 &&
- typeof output[0] === "string"
- ) {
- finalTranscription = output.join("\n");
- } else {
- console.error("Unexpected output format:", output);
- finalTranscription = JSON.stringify(output, null, 2);
- }
- }
- setTranscription(finalTranscription);
-
- // Update session with completed result
- if (activeSession) {
- updateSessionData({
- status: "succeeded",
- progress: 100,
- result: finalTranscription,
- });
- }
- } else {
- throw new Error(
- "Invalid API response: Missing prediction ID or result.",
- );
- }
- }
- // --- End Initial API Call & Polling Start ---
- } catch (err) {
- console.error("Transcription process failed:", err);
-
- // Get user-friendly error message
- const errorInfo = getUserFriendlyErrorMessage(err);
- const userMessage = errorInfo.userMessage;
-
- setError(userMessage); // Set user-friendly error message
- setTransStatus("failed"); // Set status to failed
- setApiResponses((prev) => [
- ...prev,
- {
- timestamp: new Date(),
- data: {
- error: `Transcription failed: ${userMessage}`,
- isNetworkError: errorInfo.isNetworkError,
- },
- },
- ]);
- setProgress(0);
- trackEvent("Transcription", "Error", userMessage);
- }
- };
-
- const handleReset = () => {
- stopPolling();
- setCurrentPredictionId(null); // Clear prediction ID on reset
- setTranscription(null);
- setTransStatus("idle");
- setError(null);
- setProgress(0);
- setApiResponses([]);
- setShowApiDetails(false);
-
- // Clear any active session
- if (activeSession) {
- discardSession();
- }
- };
-
- const handleRetryWithoutFeature = (featureKey: keyof AIFeatures) => {
- if (!lastOptions || !lastAudioUrl) {
- console.warn("Cannot retry: missing options or audio URL");
- handleReset();
- return;
- }
-
- const updatedFeatures = { ...lastOptions.aiFeatures, [featureKey]: false };
- const updatedOptions = { ...lastOptions, aiFeatures: updatedFeatures };
-
- console.log(`Retrying without ${featureKey}, using URL: ${lastAudioUrl}`);
- handleUpload({ audioUrl: lastAudioUrl }, updatedOptions);
- };
-
- // Run cleanup of expired sessions once on component mount
- useEffect(() => {
- const cleanupExpired = async () => {
- try {
- // Import dynamically to prevent circular dependencies
- const { cleanupExpiredSessions } = await import(
- "@/lib/persistence-service"
- );
- const count = await cleanupExpiredSessions();
- if (count > 0) {
- console.log(`Cleaned up ${count} expired sessions`);
- }
- } catch (error) {
- console.error("Failed to clean up expired sessions:", error);
- }
- };
-
- cleanupExpired();
- }, []);
-
- return (
-
-
- {isLoadingSession ? (
-
-
- Checking for saved progress...
-
-
- ) : hasRecoverableSession && activeSession ? (
-
- ) : isLoading ? (
-
- ) : transStatus === "failed" || transStatus === "canceled" ? (
-
- ) : transcription !== null && transStatus === "succeeded" ? ( // Check for transcription text and succeeded status
- isMobile ? (
- // Mobile-optimized result view
-
- ) : (
- // Desktop result view - links to standalone studio page
-
{
- // Navigate to standalone studio page with session ID
- const sessionId = activeSession?.id;
- if (sessionId) {
- window.location.href = `/studio?session=${sessionId}`;
- } else {
- window.location.href = "/studio";
- }
- }}
- />
- )
- ) : (
- // Default: show upload form when idle or if something unexpected happened
-
-
-
- )}
-
-
- );
-}
diff --git a/src/components/transcription/TranscriptionHistory.tsx b/src/components/transcription/TranscriptionHistory.tsx
deleted file mode 100644
index f242259..0000000
--- a/src/components/transcription/TranscriptionHistory.tsx
+++ /dev/null
@@ -1,305 +0,0 @@
-import React, { useState, useEffect } from "react";
-import {
- Dialog,
- DialogContent,
- DialogHeader,
- DialogTitle,
- DialogDescription,
- DialogFooter,
-} from "@/components/ui/dialog";
-import { Button } from "@/components/ui/button";
-import { TranscriptionSession } from "@/lib/persistence-service";
-import { fadeInUp, springTransition } from "@/lib/animations";
-import { motion } from "framer-motion";
-
-interface TranscriptionHistoryProps {
- open: boolean;
- onOpenChange: (open: boolean) => void;
- onSelectSession: (session: TranscriptionSession) => void;
- onDeleteSession: (sessionId: string) => void;
-}
-
-export function TranscriptionHistory({
- open,
- onOpenChange,
- onSelectSession,
- onDeleteSession,
-}: TranscriptionHistoryProps) {
- const [sessions, setSessions] = useState([]);
- const [isLoading, setIsLoading] = useState(true);
-
- // Load sessions when modal opens
- useEffect(() => {
- if (open) {
- loadSessions();
- }
- }, [open]);
-
- const loadSessions = async () => {
- try {
- setIsLoading(true);
-
- // Import here to avoid circular dependencies
- const { getAllSessions } = await import("@/lib/persistence-service");
- const allSessions = await getAllSessions();
-
- // Sort by created date (newest first)
- allSessions.sort((a, b) => b.createdAt - a.createdAt);
-
- setSessions(allSessions);
- } catch (error) {
- console.error("Failed to load transcription history:", error);
- } finally {
- setIsLoading(false);
- }
- };
-
- const handleDelete = async (e: React.MouseEvent, sessionId: string) => {
- e.stopPropagation(); // Prevent row click
- onDeleteSession(sessionId);
-
- // Remove from local state
- setSessions((prev) => prev.filter((s) => s.id !== sessionId));
- };
-
- const formatDate = (timestamp: number) => {
- return new Date(timestamp).toLocaleString(undefined, {
- month: "short",
- day: "numeric",
- year: "numeric",
- hour: "2-digit",
- minute: "2-digit",
- });
- };
-
- const formatDuration = (session: TranscriptionSession) => {
- const durationMs = session.lastUpdatedAt - session.createdAt;
- const minutes = Math.floor(durationMs / 60000);
- const seconds = Math.floor((durationMs % 60000) / 1000);
-
- if (minutes > 0) {
- return `${minutes}m ${seconds}s`;
- }
- return `${seconds}s`;
- };
-
- const getStatusLabel = (status: string) => {
- switch (status) {
- case "succeeded":
- return "Completed";
- case "failed":
- return "Failed";
- case "processing":
- return "In Progress";
- case "starting":
- return "Starting";
- case "canceled":
- return "Canceled";
- default:
- return status;
- }
- };
-
- const getStatusColor = (status: string) => {
- switch (status) {
- case "succeeded":
- return "bg-green-100 text-green-800 dark:bg-green-900/30 dark:text-green-400";
- case "failed":
- return "bg-red-100 text-red-800 dark:bg-red-900/30 dark:text-red-400";
- case "processing":
- return "bg-blue-100 text-blue-800 dark:bg-blue-900/30 dark:text-blue-400";
- case "starting":
- return "bg-yellow-100 text-yellow-800 dark:bg-yellow-900/30 dark:text-yellow-400";
- case "canceled":
- return "bg-orange-100 text-orange-800 dark:bg-orange-900/30 dark:text-orange-400";
- default:
- return "bg-gray-100 text-gray-800 dark:bg-gray-800 dark:text-gray-400";
- }
- };
-
- return (
-
-
-
- Transcription History
-
- View and manage your recent transcriptions
-
-
-
- {isLoading ? (
-
-
- Loading history...
-
-
- ) : sessions.length === 0 ? (
-
-
-
-
-
No transcription history found
-
- Your recent transcriptions will appear here
-
-
- ) : (
-
-
- {sessions.map((session, index) => (
-
onSelectSession(session)}
- className={`flex cursor-pointer flex-col p-4 hover:bg-gray-50 dark:hover:bg-gray-900 ${
- index !== sessions.length - 1
- ? "border-b border-gray-200 dark:border-gray-800"
- : ""
- }`}
- >
-
-
-
- {session.audioSource.name ||
- (session.audioSource.type === "url"
- ? "URL Audio"
- : "Audio File")}
-
-
- {formatDate(session.createdAt)}
-
-
-
-
-
- {getStatusLabel(session.status)}
-
-
-
handleDelete(e, session.id)}
- className="h-8 w-8 text-gray-500 hover:text-red-500 dark:text-gray-400 dark:hover:text-red-400"
- >
-
-
-
-
-
- Delete
-
-
-
-
-
-
-
-
-
-
-
- {formatDuration(session)}
-
-
-
-
-
-
-
-
- {session.audioSource.type === "file"
- ? `${((session.audioSource.size || 0) / (1024 * 1024)).toFixed(1)} MB`
- : "URL Audio"}
-
-
-
-
-
-
-
-
- {session.options.language === "auto"
- ? "Auto"
- : session.options.language}
-
-
-
- {session.result && (
-
- {session.result.substring(0, 150)}...
-
- )}
-
- ))}
-
-
- )}
-
-
- onOpenChange(false)}>
- Close
-
-
-
-
- );
-}
-
-export default TranscriptionHistory;
diff --git a/src/components/transcription/TranscriptionOptions.tsx b/src/components/transcription/TranscriptionOptions.tsx
index 1211a4e..af632b7 100644
--- a/src/components/transcription/TranscriptionOptions.tsx
+++ b/src/components/transcription/TranscriptionOptions.tsx
@@ -1,14 +1,13 @@
-import { useState, useRef } from "react"
+import { useRef, useState } from "react"
+import { Button } from "../ui/button"
import {
Dialog,
DialogContent,
- DialogHeader,
- DialogTitle,
DialogDescription,
DialogFooter,
+ DialogHeader,
+ DialogTitle,
} from "../ui/dialog"
-import { Button } from "../ui/button"
-import { Switch } from "../ui/switch"
import { Label } from "../ui/label"
import {
Select,
@@ -17,6 +16,7 @@ import {
SelectTrigger,
SelectValue,
} from "../ui/select"
+import { Switch } from "../ui/switch"
const LANGUAGES = [
{ value: "auto", label: "Auto Detect" },
@@ -70,17 +70,51 @@ const AI_FEATURE_LIST: {
label: string
description: string
}[] = [
- { key: "autoChapters", label: "Auto Chapters", description: "Break transcript into time-stamped chapters with summaries (excludes Summarization)" },
- { key: "summarization", label: "Summarization", description: "Generate a bullet-point summary of the audio (excludes Auto Chapters)" },
- { key: "sentimentAnalysis", label: "Sentiment Analysis", description: "Detect positive/negative/neutral sentiment per sentence" },
- { key: "entityDetection", label: "Entity Detection", description: "Identify people, locations, organizations mentioned" },
- { key: "keyPhrases", label: "Key Phrases", description: "Extract important phrases and keywords" },
- { key: "contentModeration", label: "Content Moderation", description: "Flag potentially unsafe content" },
- { key: "topicDetection", label: "Topic Detection", description: "Classify content by IAB taxonomy topics" },
+ {
+ key: "autoChapters",
+ label: "Auto Chapters",
+ description:
+ "Break transcript into time-stamped chapters with summaries (excludes Summarization)",
+ },
+ {
+ key: "summarization",
+ label: "Summarization",
+ description:
+ "Generate a bullet-point summary of the audio (excludes Auto Chapters)",
+ },
+ {
+ key: "sentimentAnalysis",
+ label: "Sentiment Analysis",
+ description: "Detect positive/negative/neutral sentiment per sentence",
+ },
+ {
+ key: "entityDetection",
+ label: "Entity Detection",
+ description: "Identify people, locations, organizations mentioned",
+ },
+ {
+ key: "keyPhrases",
+ label: "Key Phrases",
+ description: "Extract important phrases and keywords",
+ },
+ {
+ key: "contentModeration",
+ label: "Content Moderation",
+ description: "Flag potentially unsafe content",
+ },
+ {
+ key: "topicDetection",
+ label: "Topic Detection",
+ description: "Classify content by IAB taxonomy topics",
+ },
]
export interface TranscriptionOptionsProps {
- onChange: (options: { language: string; diarize: boolean; aiFeatures: AIFeatures }) => void
+ onChange: (options: {
+ language: string
+ diarize: boolean
+ aiFeatures: AIFeatures
+ }) => void
}
export function TranscriptionOptions({ onChange }: TranscriptionOptionsProps) {
@@ -91,9 +125,9 @@ export function TranscriptionOptions({ onChange }: TranscriptionOptionsProps) {
const hasShownModal = useRef(false)
// summarization is excluded from "all" since it's mutually exclusive with autoChapters
- const allEnabled = AI_FEATURE_LIST
- .filter((f) => f.key !== "summarization")
- .every((f) => aiFeatures[f.key])
+ const allEnabled = AI_FEATURE_LIST.filter(
+ (f) => f.key !== "summarization",
+ ).every((f) => aiFeatures[f.key])
const anyEnabled = diarize || AI_FEATURE_LIST.some((f) => aiFeatures[f.key])
const maybeShowModal = () => {
@@ -285,10 +319,7 @@ export function TranscriptionOptions({ onChange }: TranscriptionOptionsProps) {
- setShowDonateModal(false)}
- >
+ setShowDonateModal(false)}>
Got it
string
- statusMessages: Record
- showApiDetails: boolean
- setShowApiDetails: (show: boolean) => void
- apiResponses: Array<{ timestamp: Date; data: Record }>
- formatTimestamp: (date: Date) => string
- onCancel: () => void
-}
-
-export function TranscriptionProcessing({
- progress,
- transStatus,
- getProgressColor,
- statusMessages,
- showApiDetails,
- setShowApiDetails,
- apiResponses,
- formatTimestamp,
- onCancel,
-}: TranscriptionProcessingProps) {
- return (
-
-
-
-
- {transStatus.charAt(0).toUpperCase() + transStatus.slice(1)}
-
-
- {Math.floor(progress)}%
-
-
-
-
-
-
- {statusMessages[transStatus]}
-
-
-
-
- setShowApiDetails(!showApiDetails)}
- >
- {showApiDetails ? "Hide Details" : "View Details"}
-
-
-
- {showApiDetails && (
-
- {apiResponses.map((response, index) => (
-
-
- [{formatTimestamp(response.timestamp)}]
-
-
- {JSON.stringify(response.data, null, 2)}
-
-
- ))}
- {apiResponses.length === 0 && (
-
- Waiting for API responses...
-
- )}
-
- )}
-
-
-
- Cancel Transcription
-
-
-
-
- )
-}
diff --git a/src/components/transcription/TranscriptionResult-new.tsx b/src/components/transcription/TranscriptionResult-new.tsx
deleted file mode 100644
index d9b48af..0000000
--- a/src/components/transcription/TranscriptionResult-new.tsx
+++ /dev/null
@@ -1,223 +0,0 @@
-import React, { useState } from "react";
-import { Button } from "../ui/button";
-import { Copy } from "lucide-react";
-import { toast } from "sonner";
-import { ScrollRevealSection } from "../ui/scroll-reveal-section";
-
-interface TranscriptionResultProps {
- transcription: string;
- onNewTranscription?: () => void;
- onOpenStudio?: () => void;
-}
-
-export default function TranscriptionResult({
- transcription,
- onNewTranscription,
- onOpenStudio,
-}: TranscriptionResultProps) {
- // State for copy functionality
- const [copySuccess, setCopySuccess] = useState(false);
- const [isDownloading, setIsDownloading] = useState(false);
-
- // Extract the transcript text
- const transcriptText = React.useMemo(() => {
- try {
- const parsed =
- typeof transcription === "string"
- ? JSON.parse(transcription)
- : transcription;
- return parsed?.text || transcription;
- } catch {
- return transcription;
- }
- }, [transcription]);
-
- // Copy function
- const handleCopyAll = async () => {
- try {
- await navigator.clipboard.writeText(transcriptText);
- setCopySuccess(true);
- toast.success("Copied to clipboard!");
- setTimeout(() => setCopySuccess(false), 2000);
- } catch {
- toast.error("Failed to copy");
- }
- };
-
- // Simple download function
- const handleDownloadAll = async () => {
- setIsDownloading(true);
- try {
- // Create a simple text file download
- const blob = new Blob([transcriptText], { type: "text/plain" });
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = "transcription.txt";
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success("Downloaded successfully!");
- } catch {
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- return (
-
- {/* Unified Transcription Card */}
-
-
- {/* Header */}
-
-
-
-
-
-
- Transcription Complete
-
-
-
- Your audio has been successfully transcribed
-
-
-
-
- {onOpenStudio && (
-
-
-
-
-
-
- Open in Studio
-
- )}
-
- {onNewTranscription && (
-
-
-
-
-
-
- New Transcription
-
- )}
-
-
-
-
- {/* Content */}
-
- {/* Content Actions */}
-
-
- Transcript
-
-
-
- {copySuccess ? (
- <>
-
- Copied!
- >
- ) : (
- <>
-
- Copy All
- >
- )}
-
-
-
- {isDownloading ? (
- <>
-
-
-
- Downloading...
- >
- ) : (
- <>
-
-
-
-
-
- Download (.txt)
- >
- )}
-
-
-
-
- {/* Transcript Content */}
-
-
-
- {transcriptText || "No transcript available"}
-
-
-
-
-
-
-
- );
-}
diff --git a/src/components/transcription/TranscriptionResult.tsx b/src/components/transcription/TranscriptionResult.tsx
deleted file mode 100644
index c4ee0b8..0000000
--- a/src/components/transcription/TranscriptionResult.tsx
+++ /dev/null
@@ -1,524 +0,0 @@
-import React, { useState } from "react";
-import { Button } from "../ui/button";
-import { Copy, ChevronDown } from "lucide-react";
-import { toast } from "sonner";
-import { ScrollRevealSection } from "../ui/scroll-reveal-section";
-import type { AIFeatures } from "./TranscriptionOptions";
-import {
- DropdownMenu,
- DropdownMenuContent,
- DropdownMenuItem,
- DropdownMenuTrigger,
-} from "../ui/dropdown-menu";
-import { Document, Packer, Paragraph, TextRun, HeadingLevel } from "docx";
-import jsPDF from "jspdf";
-
-interface TranscriptionOptions {
- language: string
- diarize: boolean
- aiFeatures: AIFeatures
-}
-
-interface TranscriptionResultProps {
- transcription: string;
- summary?: string;
- options?: TranscriptionOptions | null;
- onNewTranscription?: () => void;
- onOpenStudio?: () => void;
-}
-
-const AI_FEATURE_LABELS: Record = {
- autoChapters: "Auto Chapters",
- summarization: "Summarization",
- sentimentAnalysis: "Sentiment Analysis",
- entityDetection: "Entity Detection",
- keyPhrases: "Key Phrases",
- contentModeration: "Content Moderation",
- topicDetection: "Topic Detection",
-}
-
-export default function TranscriptionResult({
- transcription,
- summary,
- options,
- onNewTranscription,
- onOpenStudio,
-}: TranscriptionResultProps) {
- // State for copy functionality
- const [copySuccess, setCopySuccess] = useState(false);
- const [isDownloading, setIsDownloading] = useState(false);
-
- // Extract the transcript text
- const transcriptText = React.useMemo(() => {
- try {
- const parsed =
- typeof transcription === "string"
- ? JSON.parse(transcription)
- : transcription;
- return parsed?.text || transcription;
- } catch {
- return transcription;
- }
- }, [transcription]);
-
- // Detect if the transcription is in Arabic
- const isArabic = React.useMemo(() => {
- const arabicRegex =
- /[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]/;
- return arabicRegex.test(transcriptText);
- }, [transcriptText]);
-
- // Copy function
- const handleCopyAll = async () => {
- try {
- await navigator.clipboard.writeText(transcriptText);
- setCopySuccess(true);
- toast.success("Copied to clipboard!");
- setTimeout(() => setCopySuccess(false), 2000);
- } catch {
- toast.error("Failed to copy");
- }
- };
-
- // Download function for TXT
- const handleDownloadTxt = async () => {
- setIsDownloading(true);
- try {
- const blob = new Blob([transcriptText], { type: "text/plain" });
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = "transcription.txt";
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success("Downloaded as TXT!");
- } catch {
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- // Download function for Markdown
- const handleDownloadMarkdown = async () => {
- setIsDownloading(true);
- try {
- // Format the text content as markdown with proper formatting
- const markdownContent = `# Transcription\n\n${transcriptText}`;
- const blob = new Blob([markdownContent], { type: "text/markdown" });
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = "transcription.md";
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success("Downloaded as Markdown!");
- } catch {
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- // Download function for DOCX
- const handleDownloadDocx = async () => {
- setIsDownloading(true);
- try {
- // Create a proper DOCX document using the docx library
- const doc = new Document({
- sections: [
- {
- children: [
- new Paragraph({
- text: "Transcription",
- heading: HeadingLevel.TITLE,
- }),
- new Paragraph({
- children: [new TextRun("")],
- }),
- ...transcriptText.split("\n").map(
- (line: string) =>
- new Paragraph({
- children: [new TextRun(line)],
- }),
- ),
- ],
- },
- ],
- });
-
- // Generate the document buffer
- const buffer = await Packer.toBuffer(doc);
-
- // Create blob and download (convert Buffer to Uint8Array for browser compatibility)
- const blob = new Blob([new Uint8Array(buffer)], {
- type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- });
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = "transcription.docx";
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success("Downloaded as DOCX!");
- } catch {
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- // Download function for PDF
- const handleDownloadPdf = async () => {
- setIsDownloading(true);
- try {
- const pdf = new jsPDF();
-
- // Add title
- pdf.setFontSize(20);
- pdf.text("Transcription", 20, 30);
-
- // Add content with text wrapping
- pdf.setFontSize(12);
- const pageWidth = pdf.internal.pageSize.getWidth();
- const margin = 20;
- const maxWidth = pageWidth - margin * 2;
-
- // Split text into lines that fit the page width
- const lines = pdf.splitTextToSize(transcriptText, maxWidth);
- pdf.text(lines, margin, 50);
-
- // Save the PDF
- pdf.save("transcription.pdf");
- toast.success("Downloaded as PDF!");
- } catch {
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- return (
-
- {/* Unified Transcription Card */}
-
-
- {/* Header */}
-
-
-
-
-
-
- Transcription Complete
-
-
-
- Your audio has been successfully transcribed
-
-
-
-
- {onOpenStudio && (
-
-
-
-
-
-
- Open in Studio
-
- )}
-
- {onNewTranscription && (
-
-
-
-
-
-
- New Transcription
-
- )}
-
-
-
-
- {/* Content */}
-
- {/* Content Actions */}
-
-
- Transcript
-
-
-
- {copySuccess ? (
- <>
-
- Copied!
- >
- ) : (
- <>
-
- Copy All
- >
- )}
-
-
-
-
-
- {isDownloading ? (
- <>
-
-
-
- Downloading...
- >
- ) : (
- <>
-
-
-
-
-
- Download
-
- >
- )}
-
-
-
-
-
-
-
-
-
-
-
- Download as TXT
-
-
-
-
-
-
-
- Download as Markdown
-
-
-
-
-
-
-
-
- Download as DOCX
- {isArabic && (
-
- BETA
-
- )}
-
-
-
-
-
-
-
- Download as PDF
- {isArabic && (
-
- BETA
-
- )}
-
-
-
-
-
-
- {/* Options Used */}
- {options && (
-
- Options:
- {options.language && options.language !== "auto" && (
-
- {options.language.toUpperCase()}
-
- )}
- {options.language === "auto" && (
-
- Auto Detect
-
- )}
- {options.diarize && (
-
- Speaker Diarization
-
- )}
- {(Object.keys(options.aiFeatures || {}) as (keyof AIFeatures)[])
- .filter((key) => options.aiFeatures?.[key])
- .map((key) => (
-
- {AI_FEATURE_LABELS[key] || key}
-
- ))}
-
- )}
-
- {/* Summary Snippet */}
- {summary && (
-
-
- AI Summary
-
-
- {summary.split("\n").filter(Boolean).slice(0, 3).map((line) =>
- line.replace(/^[\-\*\u2022]\s*/, "")
- ).join(" ")}
- {summary.split("\n").filter(Boolean).length > 3 && "..."}
-
-
- )}
-
- {/* Transcript Content */}
-
-
-
- {transcriptText || "No transcript available"}
-
-
-
-
- {/* Arabic Format Warning */}
- {isArabic && (
-
-
-
-
-
-
-
- Arabic Text Format Notice
-
-
- DOCX files may have editing issues, and PDF files might
- not display Arabic text correctly. For best results with
- Arabic content, we recommend using TXT or Markdown
- formats.
-
-
-
-
- )}
-
-
-
-
- );
-}
diff --git a/src/components/transcription/TranscriptionStudio.tsx b/src/components/transcription/TranscriptionStudio.tsx
index a3e7905..f9526e7 100644
--- a/src/components/transcription/TranscriptionStudio.tsx
+++ b/src/components/transcription/TranscriptionStudio.tsx
@@ -1,1308 +1,36 @@
-"use client";
-
-import React, { useState, useRef, useEffect, useCallback } from "react";
-import { Button } from "../ui/button";
-import { Input } from "../ui/input";
-import { Badge } from "../ui/badge";
-import { Card, CardHeader, CardContent } from "../ui/card";
-import { Tabs, TabsList, TabsTrigger, TabsContent } from "../ui/tabs";
-import {
- Play,
- Pause,
- Volume2,
- VolumeX,
- SkipBack,
- SkipForward,
- Search,
- Copy,
- Download,
- FileAudio,
- Clock,
- FileText,
- Keyboard,
- X,
- Repeat,
- ChevronLeft,
- ChevronRight,
- BarChart3,
-} from "lucide-react";
-import { toast } from "sonner";
-import { cn } from "@/lib/utils";
-import { Document, Packer, Paragraph, TextRun, HeadingLevel } from "docx";
-import type { TranscriptionSegment, TranscriptionWord, TranscriptionIntelligence } from "@/types/transcription";
-import { ChaptersPanel } from "../studio/ChaptersPanel";
-import { SummaryPanel } from "../studio/SummaryPanel";
-import { SentimentPanel } from "../studio/SentimentPanel";
-import { EntitiesPanel } from "../studio/EntitiesPanel";
-import { KeyPhrasesPanel } from "../studio/KeyPhrasesPanel";
-
-// Types
-interface AudioSource {
- name?: string;
- url?: string;
- duration?: number;
- size?: number;
- type: "file" | "url";
-}
-
-// Speaker color schemes
-const SPEAKER_COLORS = [
- { border: "border-l-blue-500", badge: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200" },
- { border: "border-l-green-500", badge: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200" },
- { border: "border-l-purple-500", badge: "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200" },
- { border: "border-l-orange-500", badge: "bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200" },
- { border: "border-l-pink-500", badge: "bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-200" },
- { border: "border-l-teal-500", badge: "bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-200" },
-];
-
-const getSpeakerColor = (speaker: string) => {
- // Speaker labels from AssemblyAI are "A", "B", "C" etc.
- const index = speaker.charCodeAt(0) - "A".charCodeAt(0);
- return SPEAKER_COLORS[index % SPEAKER_COLORS.length];
-};
-
-// Binary search to find active word index
-const findActiveWordIndex = (words: TranscriptionWord[], currentTime: number): number => {
- let low = 0;
- let high = words.length - 1;
-
- while (low <= high) {
- const mid = Math.floor((low + high) / 2);
- if (currentTime >= words[mid].start && currentTime < words[mid].end) {
- return mid;
- } else if (currentTime < words[mid].start) {
- high = mid - 1;
- } else {
- low = mid + 1;
- }
- }
- return -1;
-};
+"use client"
+
+import { FileAudio, Keyboard } from "lucide-react"
+import React, { useCallback, useRef, useState } from "react"
+import { useAudioPlayer } from "@/hooks/useAudioPlayer"
+import type {
+ AudioSource,
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
+import { AudioPlayer } from "../studio/AudioPlayer"
+import { ChaptersPanel } from "../studio/ChaptersPanel"
+import { EnhancedTranscript } from "../studio/EnhancedTranscript"
+import { EntitiesPanel } from "../studio/EntitiesPanel"
+import { ExportControls } from "../studio/ExportControls"
+import { FileDetails } from "../studio/FileDetails"
+import { KeyboardShortcutsModal } from "../studio/KeyboardShortcutsModal"
+import { KeyPhrasesPanel } from "../studio/KeyPhrasesPanel"
+import { SentimentPanel } from "../studio/SentimentPanel"
+import { SummaryPanel } from "../studio/SummaryPanel"
+import { TranscriptStatistics } from "../studio/TranscriptStatistics"
+import { Button } from "../ui/button"
+import { Card, CardContent } from "../ui/card"
+import { Tabs, TabsContent, TabsList, TabsTrigger } from "../ui/tabs"
interface TranscriptionStudioProps {
- transcription: string;
- audioSource?: AudioSource;
- segments?: TranscriptionSegment[];
- intelligence?: TranscriptionIntelligence;
- onNewTranscription: () => void;
-}
-
-// Format duration from seconds to MM:SS
-const formatDuration = (seconds?: number): string => {
- if (!seconds) return "--:--";
- const mins = Math.floor(seconds / 60);
- const secs = Math.floor(seconds % 60);
- return `${mins}:${secs.toString().padStart(2, "0")}`;
-};
-
-// Format file size
-const formatFileSize = (bytes?: number): string => {
- if (!bytes) return "--";
- const mb = bytes / (1024 * 1024);
- return `${mb.toFixed(1)} MB`;
-};
-
-// Audio Player Component
-interface AudioPlayerProps {
- audioUrl?: string;
- audioRef?: React.RefObject;
- onTimeUpdate?: (time: number) => void;
- segments?: TranscriptionSegment[];
- onSegmentChange?: (segmentIndex: number) => void;
-}
-
-// Playback speed options
-const PLAYBACK_SPEEDS = [0.5, 0.75, 1, 1.25, 1.5, 2];
-
-const AudioPlayer: React.FC = ({
- audioUrl,
- audioRef: externalAudioRef,
- onTimeUpdate,
- segments,
- onSegmentChange,
-}) => {
- const [isPlaying, setIsPlaying] = useState(false);
- const [currentTime, setCurrentTime] = useState(0);
- const [duration, setDuration] = useState(0);
- const [volume, setVolume] = useState(1);
- const [isMuted, setIsMuted] = useState(false);
- const [playbackSpeed, setPlaybackSpeed] = useState(1);
- const [isLooping, setIsLooping] = useState(false);
- const [loopStart, setLoopStart] = useState(null);
- const [loopEnd, setLoopEnd] = useState(null);
- const [showSpeedMenu, setShowSpeedMenu] = useState(false);
- const internalAudioRef = useRef(null);
- const audioRef = externalAudioRef || internalAudioRef;
-
- // Get current segment index
- const currentSegmentIndex = segments?.findIndex(
- (seg) => currentTime >= seg.start && currentTime < seg.end
- ) ?? -1;
-
- // Handle playback speed change
- const handleSpeedChange = (speed: number) => {
- setPlaybackSpeed(speed);
- if (audioRef.current) {
- audioRef.current.playbackRate = speed;
- }
- setShowSpeedMenu(false);
- toast.success(`Playback speed: ${speed}x`);
- };
-
- // Navigate to previous segment
- const goToPrevSegment = () => {
- if (!segments || segments.length === 0) return;
- const prevIndex = Math.max(0, currentSegmentIndex - 1);
- if (audioRef.current && segments[prevIndex]) {
- audioRef.current.currentTime = segments[prevIndex].start;
- onSegmentChange?.(prevIndex);
- }
- };
-
- // Navigate to next segment
- const goToNextSegment = () => {
- if (!segments || segments.length === 0) return;
- const nextIndex = Math.min(segments.length - 1, currentSegmentIndex + 1);
- if (audioRef.current && segments[nextIndex]) {
- audioRef.current.currentTime = segments[nextIndex].start;
- onSegmentChange?.(nextIndex);
- }
- };
-
- // Toggle mute
- const toggleMute = () => {
- if (audioRef.current) {
- audioRef.current.muted = !isMuted;
- setIsMuted(!isMuted);
- }
- };
-
- // Set loop points
- const setLoopPoint = (type: 'start' | 'end') => {
- if (type === 'start') {
- setLoopStart(currentTime);
- toast.success(`Loop start: ${formatDuration(currentTime)}`);
- } else {
- setLoopEnd(currentTime);
- toast.success(`Loop end: ${formatDuration(currentTime)}`);
- }
- };
-
- // Clear loop
- const clearLoop = () => {
- setLoopStart(null);
- setLoopEnd(null);
- setIsLooping(false);
- toast.success('Loop cleared');
- };
-
- // Handle loop playback
- useEffect(() => {
- if (isLooping && loopStart !== null && loopEnd !== null && audioRef.current) {
- if (currentTime >= loopEnd) {
- audioRef.current.currentTime = loopStart;
- }
- }
- }, [currentTime, isLooping, loopStart, loopEnd, audioRef]);
-
- const togglePlay = () => {
- if (audioRef.current) {
- if (isPlaying) {
- audioRef.current.pause();
- } else {
- audioRef.current.play().catch((error) => {
- console.error("Audio playback failed:", error);
- toast.error("Failed to play audio");
- });
- }
- setIsPlaying(!isPlaying);
- }
- };
-
- const skip = (seconds: number) => {
- if (audioRef.current) {
- audioRef.current.currentTime = Math.max(
- 0,
- Math.min(duration, audioRef.current.currentTime + seconds),
- );
- }
- };
-
- const handleTimeUpdate = () => {
- if (audioRef.current) {
- const time = audioRef.current.currentTime;
- setCurrentTime(time);
- onTimeUpdate?.(time);
- }
- };
-
- const handleDurationChange = () => {
- if (audioRef.current && audioRef.current.duration) {
- setDuration(audioRef.current.duration);
- }
- };
-
- const handleProgressBarClick = (
- e: React.MouseEvent,
- ) => {
- const progressBar = e.currentTarget;
- const clickX = e.clientX - progressBar.getBoundingClientRect().left;
- const percentage = clickX / progressBar.clientWidth;
- const newTime = percentage * duration;
-
- if (audioRef.current) {
- audioRef.current.currentTime = Math.max(0, Math.min(duration, newTime));
- }
- };
-
- const handleVolumeChange = (e: React.ChangeEvent) => {
- const newVolume = parseFloat(e.target.value);
- setVolume(newVolume);
- if (audioRef.current) {
- audioRef.current.volume = newVolume;
- }
- };
-
- return (
-
-
-
-
-
Audio Player
-
-
-
- {audioUrl ? (
- <>
- setIsPlaying(false)}
- preload="metadata"
- crossOrigin="anonymous"
- className="hidden"
- />
-
-
- {/* Controls */}
-
-
skip(-10)}
- className="h-8 w-8 p-0"
- title="Skip back 10 seconds"
- >
-
-
-
-
- {isPlaying ? (
-
- ) : (
-
- )}
-
-
-
skip(10)}
- className="h-8 w-8 p-0"
- title="Skip forward 10 seconds"
- >
-
-
-
-
- {/* Progress Bar */}
-
-
- {formatDuration(currentTime)}
- {formatDuration(duration)}
-
-
-
0
- ? `${(currentTime / duration) * 100}%`
- : "0%",
- }}
- />
-
-
-
- {/* Volume & Speed Controls */}
-
-
-
- {isMuted ? : }
-
-
-
-
- {/* Playback Speed */}
-
-
setShowSpeedMenu(!showSpeedMenu)}
- className="h-8 px-2 text-xs"
- >
- {playbackSpeed}x
-
- {showSpeedMenu && (
-
- {PLAYBACK_SPEEDS.map((speed) => (
- handleSpeedChange(speed)}
- className={cn(
- "block w-full rounded px-3 py-1 text-left text-sm hover:bg-gray-100 dark:hover:bg-gray-700",
- playbackSpeed === speed && "bg-blue-100 dark:bg-blue-900"
- )}
- >
- {speed}x
-
- ))}
-
- )}
-
-
- {/* Loop Controls */}
-
- {
- if (loopStart !== null && loopEnd !== null) {
- setIsLooping(!isLooping);
- } else {
- toast.error("Set loop start and end points first");
- }
- }}
- className="h-8 w-8 p-0"
- title="Toggle loop"
- >
-
-
-
-
-
- {/* Segment Navigation */}
- {segments && segments.length > 0 && (
-
-
-
- Prev
-
-
- Segment {currentSegmentIndex + 1} of {segments.length}
-
- = segments.length - 1}
- className="flex items-center gap-1"
- >
- Next
-
-
-
- )}
-
- {/* Loop Points Display */}
- {(loopStart !== null || loopEnd !== null) && (
-
-
- setLoopPoint('start')} className="h-6 px-2 text-xs">
- A: {loopStart !== null ? formatDuration(loopStart) : '--:--'}
-
- setLoopPoint('end')} className="h-6 px-2 text-xs">
- B: {loopEnd !== null ? formatDuration(loopEnd) : '--:--'}
-
-
-
- Clear
-
-
- )}
-
- >
- ) : (
-
-
-
No audio file available for playback
-
- )}
-
-
- );
-};
-
-// File Details Component
-const FileDetails: React.FC<{ audioSource?: AudioSource }> = ({
- audioSource,
-}) => {
- return (
-
-
-
-
-
File Details
-
-
-
-
- Filename
-
- {audioSource?.name || "Unknown"}
-
-
-
-
-
Duration
-
-
-
- {formatDuration(audioSource?.duration)}
-
-
-
-
-
- Size
- {formatFileSize(audioSource?.size)}
-
-
-
- Type
-
- {audioSource?.type === "file" ? "Upload" : "URL"}
-
-
-
-
- );
-};
-
-// Export Controls Component
-interface ExportControlsProps {
- transcription: string;
- segments?: TranscriptionSegment[];
- intelligence?: TranscriptionIntelligence;
-}
-
-// Statistics Component (Phase 4)
-const TranscriptStatistics: React.FC<{ transcription: string; segments?: TranscriptionSegment[] }> = ({
- transcription,
- segments,
-}) => {
- const stats = React.useMemo(() => {
- const words = transcription.trim().split(/\s+/).filter(w => w.length > 0);
- const characters = transcription.length;
- const sentences = transcription.split(/[.!?]+/).filter(s => s.trim().length > 0).length;
- const paragraphs = transcription.split(/\n\n+/).filter(p => p.trim().length > 0).length;
- const avgWordLength = words.length > 0 ? (words.reduce((sum, w) => sum + w.length, 0) / words.length).toFixed(1) : '0';
- const totalDuration = segments && segments.length > 0
- ? segments[segments.length - 1].end - segments[0].start
- : 0;
- const wordsPerMinute = totalDuration > 0 ? Math.round(words.length / (totalDuration / 60)) : 0;
-
- // Find most common words (excluding short words)
- const wordFreq: Record
= {};
- words.forEach(w => {
- const word = w.toLowerCase().replace(/[^a-z]/g, '');
- if (word.length > 3) {
- wordFreq[word] = (wordFreq[word] || 0) + 1;
- }
- });
- const topWords = Object.entries(wordFreq)
- .sort((a, b) => b[1] - a[1])
- .slice(0, 5);
-
- return { words: words.length, characters, sentences, paragraphs, avgWordLength, totalDuration, wordsPerMinute, topWords };
- }, [transcription, segments]);
-
- return (
-
-
-
-
-
Statistics
-
-
-
-
-
-
{stats.words.toLocaleString()}
-
Words
-
-
-
{stats.characters.toLocaleString()}
-
Characters
-
-
-
{stats.sentences}
-
Sentences
-
-
-
{stats.wordsPerMinute}
-
Words/min
-
-
- {stats.topWords.length > 0 && (
-
-
Top Words
-
- {stats.topWords.map(([word, count]) => (
-
- {word} ({count})
-
- ))}
-
-
- )}
-
-
- );
-};
-
-const ExportControls: React.FC = ({
- transcription,
- segments,
- intelligence,
-}) => {
- const [selectedFormat, setSelectedFormat] = useState<"txt" | "docx" | "srt" | "vtt" | "json" | "csv" | "md">(
- "txt",
- );
- const [isDownloading, setIsDownloading] = useState(false);
-
- // Helper to format time for SRT (HH:MM:SS,mmm)
- const formatTimeForSRT = (seconds: number): string => {
- const hours = Math.floor(seconds / 3600);
- const minutes = Math.floor((seconds % 3600) / 60);
- const secs = Math.floor(seconds % 60);
- const milliseconds = Math.round((seconds % 1) * 1000);
- return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")},${milliseconds.toString().padStart(3, "0")}`;
- };
-
- // Helper to format time for VTT (HH:MM:SS.mmm)
- const formatTimeForVTT = (seconds: number): string => {
- const hours = Math.floor(seconds / 3600);
- const minutes = Math.floor((seconds % 3600) / 60);
- const secs = Math.floor(seconds % 60);
- const milliseconds = Math.round((seconds % 1) * 1000);
- return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}.${milliseconds.toString().padStart(3, "0")}`;
- };
-
- // Generate SRT content from segments
- const generateSRT = (): string => {
- if (!segments || segments.length === 0) {
- return "1\n00:00:00,000 --> 00:00:00,100\n" + transcription;
- }
-
- return segments
- .map((segment, _index) => {
- const startTime = formatTimeForSRT(segment.start);
- const endTime = formatTimeForSRT(segment.end);
- const speakerPrefix = segment.speaker ? `[Speaker ${segment.speaker}] ` : "";
- return `${segment.id + 1}\n${startTime} --> ${endTime}\n${speakerPrefix}${segment.text.trim()}\n`;
- })
- .join("\n");
- };
-
- // Generate VTT content from segments
- const generateVTT = (): string => {
- if (!segments || segments.length === 0) {
- return "WEBVTT\n\n00:00:00.000 --> 00:00:00.100\n" + transcription;
- }
-
- let vtt = "WEBVTT\n\n";
- vtt += segments
- .map((segment) => {
- const startTime = formatTimeForVTT(segment.start);
- const endTime = formatTimeForVTT(segment.end);
- const speakerPrefix = segment.speaker ? `[Speaker ${segment.speaker}] ` : "";
- return `${startTime} --> ${endTime}\n${speakerPrefix}${segment.text.trim()}\n`;
- })
- .join("\n");
- return vtt;
- };
-
- // Generate JSON export
- const generateJSON = (): string => {
- return JSON.stringify({
- exportedAt: new Date().toISOString(),
- transcription,
- segments: segments || [],
- intelligence: intelligence || undefined,
- metadata: {
- wordCount: transcription.split(/\s+/).length,
- characterCount: transcription.length,
- segmentCount: segments?.length || 0,
- }
- }, null, 2);
- };
-
- // Generate CSV export (Phase 5)
- const generateCSV = (): string => {
- if (!segments || segments.length === 0) {
- return "id,start,end,text\n1,0,0,\"" + transcription.replace(/"/g, '""') + "\"";
- }
- const header = "id,start,end,duration,text";
- const rows = segments.map(seg =>
- `${seg.id},${seg.start.toFixed(3)},${seg.end.toFixed(3)},${(seg.end - seg.start).toFixed(3)},"${seg.text.replace(/"/g, '""')}"`
- );
- return [header, ...rows].join("\n");
- };
-
- // Generate Markdown export with timestamps
- const generateMarkdown = (): string => {
- let md = "# Transcription\n\n";
- md += `*Exported: ${new Date().toLocaleString()}*\n\n`;
- md += "---\n\n";
-
- // Include summary if available
- if (intelligence?.summary) {
- md += "## Summary\n\n";
- md += `${intelligence.summary}\n\n`;
- md += "---\n\n";
- }
-
- // Include chapters if available
- if (intelligence?.chapters && intelligence.chapters.length > 0) {
- md += "## Chapters\n\n";
- intelligence.chapters.forEach(ch => {
- md += `### ${ch.headline}\n\n`;
- md += `*${formatDuration(ch.start)} - ${formatDuration(ch.end)}*\n\n`;
- md += `${ch.summary}\n\n`;
- });
- md += "---\n\n";
- }
-
- if (segments && segments.length > 0) {
- md += "## Transcript\n\n";
- segments.forEach(seg => {
- const speakerPrefix = seg.speaker ? `**Speaker ${seg.speaker}:** ` : "";
- md += `**[${formatDuration(seg.start)} - ${formatDuration(seg.end)}]** ${speakerPrefix}\n\n`;
- md += `${seg.text.trim()}\n\n`;
- });
- } else {
- md += "## Full Transcript\n\n";
- md += transcription;
- }
-
- md += "\n---\n\n";
- md += `*Word count: ${transcription.split(/\s+/).length}*\n`;
- return md;
- };
-
- const handleDownload = async () => {
- setIsDownloading(true);
- try {
- const timestamp = new Date().toISOString().split("T")[0];
- const filename = `transcription_${timestamp}.${selectedFormat}`;
- let blob: Blob;
-
- if (selectedFormat === "srt") {
- const content = generateSRT();
- blob = new Blob([content], { type: "text/plain" });
- } else if (selectedFormat === "vtt") {
- const content = generateVTT();
- blob = new Blob([content], { type: "text/vtt" });
- } else if (selectedFormat === "docx") {
- // Create proper DOCX document
- const docChildren: Paragraph[] = [
- new Paragraph({
- text: "Transcription",
- heading: HeadingLevel.TITLE,
- }),
- new Paragraph({ children: [new TextRun("")] }),
- ];
-
- // Add summary if available
- if (intelligence?.summary) {
- docChildren.push(
- new Paragraph({ text: "Summary", heading: HeadingLevel.HEADING_1 }),
- new Paragraph({ children: [new TextRun("")] }),
- ...intelligence.summary.split("\n").filter(Boolean).map(
- (line: string) => new Paragraph({ children: [new TextRun(line.replace(/^[\-\*\u2022]\s*/, ""))] }),
- ),
- new Paragraph({ children: [new TextRun("")] }),
- );
- }
-
- docChildren.push(
- new Paragraph({ text: "Transcript", heading: HeadingLevel.HEADING_1 }),
- new Paragraph({ children: [new TextRun("")] }),
- ...transcription.split("\n").map(
- (line: string) =>
- new Paragraph({
- children: [new TextRun(line)],
- }),
- ),
- );
-
- const doc = new Document({
- sections: [{ children: docChildren }],
- });
- const buffer = await Packer.toBuffer(doc);
- blob = new Blob([new Uint8Array(buffer)], {
- type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- });
- } else if (selectedFormat === "json") {
- blob = new Blob([generateJSON()], { type: "application/json" });
- } else if (selectedFormat === "csv") {
- blob = new Blob([generateCSV()], { type: "text/csv" });
- } else if (selectedFormat === "md") {
- blob = new Blob([generateMarkdown()], { type: "text/markdown" });
- } else {
- blob = new Blob([transcription], { type: "text/plain" });
- }
-
- const url = URL.createObjectURL(blob);
- const a = document.createElement("a");
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
-
- setTimeout(() => URL.revokeObjectURL(url), 100);
- toast.success(`${selectedFormat.toUpperCase()} file downloaded!`);
- } catch (error) {
- console.error("Download failed:", error);
- toast.error("Download failed");
- } finally {
- setIsDownloading(false);
- }
- };
-
- return (
-
-
-
-
-
Export Options
-
-
-
- {/* Format Selection */}
-
-
Format
-
- {(["txt", "docx", "srt", "vtt", "json", "csv", "md"] as const).map((format) => (
- setSelectedFormat(format)}
- className="px-2 text-xs"
- >
- {format.toUpperCase()}
-
- ))}
-
-
-
- {/* Format Info */}
-
- {selectedFormat === "srt" && "SRT - Subtitle format with timestamps"}
- {selectedFormat === "vtt" && "WebVTT - Web subtitle format"}
- {selectedFormat === "txt" && "Plain text transcription"}
- {selectedFormat === "docx" && "Microsoft Word document"}
- {selectedFormat === "json" && "JSON with full metadata & segments"}
- {selectedFormat === "csv" && "CSV spreadsheet with timestamps"}
- {selectedFormat === "md" && "Markdown with formatted timestamps"}
-
-
- {/* Download Button */}
-
- {isDownloading
- ? "Downloading..."
- : `Download ${selectedFormat.toUpperCase()}`}
-
-
-
- );
-};
-
-// Copy/Download Actions Component
-interface ActionButtonsProps {
- transcription: string;
- segments?: TranscriptionSegment[];
+ transcription: string
+ audioSource?: AudioSource
+ segments?: TranscriptionSegment[]
+ intelligence?: TranscriptionIntelligence
+ onNewTranscription: () => void
}
-const ActionButtons: React.FC = ({
- transcription,
- segments,
-}) => {
- const [copySuccess, setCopySuccess] = useState(false);
- const [isDownloadingAll, setIsDownloadingAll] = useState(false);
-
- const handleCopy = async () => {
- try {
- await navigator.clipboard.writeText(transcription);
- setCopySuccess(true);
- toast.success("Copied to clipboard!");
- setTimeout(() => setCopySuccess(false), 2000);
- } catch {
- toast.error("Failed to copy");
- }
- };
-
- // Helper functions for subtitle formats
- const formatTimeForSRT = (seconds: number): string => {
- const hours = Math.floor(seconds / 3600);
- const minutes = Math.floor((seconds % 3600) / 60);
- const secs = Math.floor(seconds % 60);
- const milliseconds = Math.round((seconds % 1) * 1000);
- return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")},${milliseconds.toString().padStart(3, "0")}`;
- };
-
- const formatTimeForVTT = (seconds: number): string => {
- const hours = Math.floor(seconds / 3600);
- const minutes = Math.floor((seconds % 3600) / 60);
- const secs = Math.floor(seconds % 60);
- const milliseconds = Math.round((seconds % 1) * 1000);
- return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}.${milliseconds.toString().padStart(3, "0")}`;
- };
-
- const generateSRT = (): string => {
- if (!segments || segments.length === 0) {
- return "1\n00:00:00,000 --> 00:00:00,100\n" + transcription;
- }
- return segments
- .map((segment) => {
- const startTime = formatTimeForSRT(segment.start);
- const endTime = formatTimeForSRT(segment.end);
- return `${segment.id + 1}\n${startTime} --> ${endTime}\n${segment.text.trim()}\n`;
- })
- .join("\n");
- };
-
- const generateVTT = (): string => {
- if (!segments || segments.length === 0) {
- return "WEBVTT\n\n00:00:00.000 --> 00:00:00.100\n" + transcription;
- }
- let vtt = "WEBVTT\n\n";
- vtt += segments
- .map((segment) => {
- const startTime = formatTimeForVTT(segment.start);
- const endTime = formatTimeForVTT(segment.end);
- return `${startTime} --> ${endTime}\n${segment.text.trim()}\n`;
- })
- .join("\n");
- return vtt;
- };
-
- const handleDownloadAll = async () => {
- setIsDownloadingAll(true);
- toast.info("Preparing all formats...");
-
- try {
- const timestamp = new Date().toISOString().split("T")[0];
- const downloads: Array<{ content: Blob; filename: string }> = [];
-
- // TXT
- downloads.push({
- content: new Blob([transcription], { type: "text/plain" }),
- filename: `transcription_${timestamp}.txt`,
- });
-
- // SRT
- downloads.push({
- content: new Blob([generateSRT()], { type: "text/plain" }),
- filename: `transcription_${timestamp}.srt`,
- });
-
- // VTT
- downloads.push({
- content: new Blob([generateVTT()], { type: "text/vtt" }),
- filename: `transcription_${timestamp}.vtt`,
- });
-
- // DOCX
- const doc = new Document({
- sections: [
- {
- children: [
- new Paragraph({
- text: "Transcription",
- heading: HeadingLevel.TITLE,
- }),
- new Paragraph({ children: [new TextRun("")] }),
- ...transcription.split("\n").map(
- (line: string) =>
- new Paragraph({
- children: [new TextRun(line)],
- }),
- ),
- ],
- },
- ],
- });
- const buffer = await Packer.toBuffer(doc);
- downloads.push({
- content: new Blob([new Uint8Array(buffer)], {
- type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
- }),
- filename: `transcription_${timestamp}.docx`,
- });
-
- // Download all files with a small delay between each
- for (let i = 0; i < downloads.length; i++) {
- const { content, filename } = downloads[i];
- const url = URL.createObjectURL(content);
- const a = document.createElement("a");
- a.href = url;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
- document.body.removeChild(a);
- setTimeout(() => URL.revokeObjectURL(url), 100);
-
- // Small delay between downloads to prevent browser blocking
- if (i < downloads.length - 1) {
- await new Promise((resolve) => setTimeout(resolve, 300));
- }
- }
-
- toast.success(`Downloaded ${downloads.length} files!`);
- } catch (error) {
- console.error("Download all failed:", error);
- toast.error("Failed to download all formats");
- } finally {
- setIsDownloadingAll(false);
- }
- };
-
- return (
-
-
- {copySuccess ? (
- <>
-
- Copied!
- >
- ) : (
- <>
-
- Copy to Clipboard
- >
- )}
-
-
-
-
- {isDownloadingAll ? "Downloading..." : "Download All Formats"}
-
-
- );
-};
-
-// Enhanced Transcript Display Component
-interface EnhancedTranscriptProps {
- transcription: string;
- segments?: TranscriptionSegment[];
- onSegmentClick?: (startTime: number) => void;
- searchInputRef?: React.RefObject;
- currentTime?: number;
-}
-
-const EnhancedTranscript: React.FC = ({
- transcription,
- segments,
- onSegmentClick,
- currentTime = 0,
- searchInputRef,
-}) => {
- const [searchTerm, setSearchTerm] = useState("");
- const [searchResults, setSearchResults] = useState([]);
- const [copySuccess, setCopySuccess] = useState(false);
- const activeSegmentRef = useRef(null);
- const prevSegmentIndexRef = useRef(null);
-
- // Copy transcript to clipboard
- const handleCopyTranscript = async () => {
- try {
- await navigator.clipboard.writeText(transcription);
- setCopySuccess(true);
- toast.success("Transcript copied to clipboard!");
- setTimeout(() => setCopySuccess(false), 2000);
- } catch {
- toast.error("Failed to copy transcript");
- }
- };
-
- // Handle search in segments or transcription
- const handleSearch = (term: string) => {
- setSearchTerm(term);
- if (term.trim() && segments) {
- const results: number[] = [];
- segments.forEach((segment, index) => {
- if (segment.text.toLowerCase().includes(term.toLowerCase())) {
- results.push(index);
- }
- });
- setSearchResults(results);
- } else {
- setSearchResults([]);
- }
- };
-
- // Determine if a segment is currently playing
- const currentSegmentIndex = segments
- ? segments.findIndex((seg) => currentTime >= seg.start && currentTime < seg.end)
- : -1;
-
- // Auto-scroll to active segment when it changes
- useEffect(() => {
- if (currentSegmentIndex >= 0 && currentSegmentIndex !== prevSegmentIndexRef.current) {
- prevSegmentIndexRef.current = currentSegmentIndex;
- activeSegmentRef.current?.scrollIntoView({ behavior: "smooth", block: "center" });
- }
- }, [currentSegmentIndex]);
-
- // Render word-level karaoke for active segment
- const renderKaraokeWords = (words: TranscriptionWord[]) => {
- const activeWordIdx = findActiveWordIndex(words, currentTime);
-
- return words.map((word, idx) => {
- const isActive = idx === activeWordIdx;
- const isPast = currentTime >= word.end;
-
- return (
-
- {word.word}{" "}
-
- );
- });
- };
-
- return (
-
- {/* Search Bar + Copy */}
-
-
-
- handleSearch(e.target.value)}
- className="pl-10"
- />
-
-
- {copySuccess ? (
- <>Copied! >
- ) : (
- <>Copy All >
- )}
-
-
-
- {searchResults.length > 0 && (
-
- Found {searchResults.length} result{searchResults.length !== 1 ? "s" : ""}
-
- )}
-
- {/* Segments View */}
- {segments && segments.length > 0 ? (
-
-
- {segments.map((segment, index) => {
- const isHighlighted = searchResults.includes(index);
- const isCurrentSegment = currentSegmentIndex === index;
- const speakerColor = segment.speaker ? getSpeakerColor(segment.speaker) : null;
-
- return (
-
onSegmentClick?.(segment.start)}
- className={cn(
- "cursor-pointer rounded-lg border p-3 transition-all duration-200 hover:shadow-md",
- speakerColor && `border-l-4 ${speakerColor.border}`,
- isCurrentSegment
- ? "border-blue-400 bg-blue-50 shadow-md dark:border-blue-600 dark:bg-blue-900/20"
- : isHighlighted
- ? "border-yellow-200 bg-yellow-50 dark:border-yellow-600 dark:bg-yellow-900/20"
- : "border-gray-200 bg-gray-50 hover:bg-gray-100 dark:border-gray-700 dark:bg-gray-800 dark:hover:bg-gray-750",
- )}
- title="Click to play audio from this segment"
- >
- {/* Timestamp + Speaker Badge */}
-
-
- {formatDuration(segment.start)} - {formatDuration(segment.end)}
-
- {segment.speaker && speakerColor && (
-
- Speaker {segment.speaker}
-
- )}
- {isCurrentSegment && (
-
- Now Playing
-
- )}
-
-
- {/* Transcript Text — karaoke for active segment */}
-
- {isCurrentSegment && segment.words && segment.words.length > 0
- ? renderKaraokeWords(segment.words as TranscriptionWord[])
- : searchTerm && isHighlighted
- ? segment.text
- .split(new RegExp(`(${searchTerm})`, "gi"))
- .map((part, partIndex) =>
- part.toLowerCase() === searchTerm.toLowerCase() ? (
- {part}
- ) : (
- part
- ),
- )
- : segment.text}
-
-
- );
- })}
-
-
- ) : (
- // Fallback: full transcript
-
-
-
- {transcription || "No transcript available"}
-
-
-
- )}
-
- );
-};
-
-// Main TranscriptionStudio Component
-// Keyboard Shortcuts Modal
-const KeyboardShortcutsModal: React.FC<{ isOpen: boolean; onClose: () => void }> = ({ isOpen, onClose }) => {
- if (!isOpen) return null;
-
- const shortcuts = [
- { key: "Space", action: "Play / Pause" },
- { key: "←", action: "Skip back 5s" },
- { key: "→", action: "Skip forward 5s" },
- { key: "Shift + ←", action: "Skip back 30s" },
- { key: "Shift + →", action: "Skip forward 30s" },
- { key: "↑ / ↓", action: "Volume up / down" },
- { key: "M", action: "Mute / Unmute" },
- { key: "0-9", action: "Jump to 0%-90%" },
- { key: "Ctrl/⌘ + F", action: "Focus search" },
- { key: "Ctrl/⌘ + C", action: "Copy transcript" },
- { key: "Esc", action: "Clear search" },
- { key: "?", action: "Show shortcuts" },
- ];
-
- return (
-
-
e.stopPropagation()}
- >
-
-
-
- Keyboard Shortcuts
-
-
-
-
-
-
- {shortcuts.map(({ key, action }) => (
-
- {action}
- {key}
-
- ))}
-
-
-
- );
-};
-
export const TranscriptionStudio: React.FC = ({
transcription,
audioSource,
@@ -1310,158 +38,49 @@ export const TranscriptionStudio: React.FC = ({
intelligence,
onNewTranscription,
}) => {
- const [currentTime, setCurrentTime] = useState(0);
- const [, setIsMuted] = useState(false);
- const [, setVolume] = useState(1);
- const [showShortcuts, setShowShortcuts] = useState(false);
- const audioRef = useRef(null);
- const searchInputRef = useRef(null);
+ const [currentTime, setCurrentTime] = useState(0)
+ const [showShortcuts, setShowShortcuts] = useState(false)
+ const audioRef = useRef(null)
+ const searchInputRef = useRef(null)
- // Get audio URL from localStorage or prop
- const audioUrl =
- typeof window !== "undefined"
- ? localStorage.getItem("studioAudioUrl") || audioSource?.url
- : audioSource?.url;
+ const audioUrl = audioSource?.url
- // Handle seeking to a specific time
- const handleSeek = useCallback((startTime: number) => {
- if (audioRef.current) {
- audioRef.current.currentTime = startTime;
- audioRef.current.play().catch((error) => {
- console.error("Audio playback failed:", error);
- toast.error("Failed to play audio");
- });
- }
- }, []);
+ const { handleSeek } = useAudioPlayer({
+ audioRef,
+ searchInputRef,
+ transcription,
+ onShowShortcuts: () => setShowShortcuts(true),
+ })
- // Update current time for segment highlighting (throttled via requestAnimationFrame)
const handleTimeUpdate = useCallback((time: number) => {
- setCurrentTime(time);
- }, []);
+ setCurrentTime(time)
+ }, [])
// Build available intelligence tabs
const intelligenceTabs = React.useMemo(() => {
- if (!intelligence) return [];
- const tabs: { value: string; label: string }[] = [];
- if (intelligence.chapters && intelligence.chapters.length > 0) tabs.push({ value: "chapters", label: "Chapters" });
- if (intelligence.summary) tabs.push({ value: "summary", label: "Summary" });
- if (intelligence.sentimentAnalysis && intelligence.sentimentAnalysis.length > 0) tabs.push({ value: "sentiment", label: "Sentiment" });
- if (intelligence.entities && intelligence.entities.length > 0) tabs.push({ value: "entities", label: "Entities" });
- if (intelligence.keyPhrases && intelligence.keyPhrases.length > 0) tabs.push({ value: "phrases", label: "Key Phrases" });
- return tabs;
- }, [intelligence]);
-
- // Keyboard shortcuts
- useEffect(() => {
- const handleKeyDown = (e: KeyboardEvent) => {
- const target = e.target as HTMLElement;
- const isInputField = target.tagName === "INPUT" || target.tagName === "TEXTAREA" || target.isContentEditable;
-
- if (e.key === "Escape") {
- if (searchInputRef.current) {
- searchInputRef.current.blur();
- searchInputRef.current.value = "";
- }
- return;
- }
-
- if ((e.ctrlKey || e.metaKey) && e.key === "f") {
- e.preventDefault();
- searchInputRef.current?.focus();
- return;
- }
-
- if ((e.ctrlKey || e.metaKey) && e.key === "c" && !isInputField) {
- e.preventDefault();
- navigator.clipboard.writeText(transcription).then(() => {
- toast.success("Transcript copied to clipboard!");
- }).catch(() => {
- toast.error("Failed to copy transcript");
- });
- return;
- }
-
- if (isInputField) return;
-
- const audio = audioRef.current;
- if (!audio) return;
-
- switch (e.key) {
- case " ":
- e.preventDefault();
- if (audio.paused) {
- audio.play().catch(console.error);
- } else {
- audio.pause();
- }
- break;
-
- case "ArrowLeft":
- e.preventDefault();
- audio.currentTime = Math.max(0, audio.currentTime - (e.shiftKey ? 30 : 5));
- break;
-
- case "ArrowRight":
- e.preventDefault();
- audio.currentTime = Math.min(audio.duration || 0, audio.currentTime + (e.shiftKey ? 30 : 5));
- break;
-
- case "ArrowUp": {
- e.preventDefault();
- const newVolUp = Math.min(1, audio.volume + 0.1);
- audio.volume = newVolUp;
- setVolume(newVolUp);
- toast.success(`Volume: ${Math.round(newVolUp * 100)}%`);
- break;
- }
-
- case "ArrowDown": {
- e.preventDefault();
- const newVolDown = Math.max(0, audio.volume - 0.1);
- audio.volume = newVolDown;
- setVolume(newVolDown);
- toast.success(`Volume: ${Math.round(newVolDown * 100)}%`);
- break;
- }
-
- case "m":
- case "M":
- e.preventDefault();
- audio.muted = !audio.muted;
- setIsMuted(audio.muted);
- toast.success(audio.muted ? "Muted" : "Unmuted");
- break;
-
- case "1": case "2": case "3": case "4": case "5":
- case "6": case "7": case "8": case "9": {
- e.preventDefault();
- const percentage = parseInt(e.key) * 10;
- if (audio.duration) {
- audio.currentTime = (audio.duration * percentage) / 100;
- toast.success(`Jumped to ${percentage}%`);
- }
- break;
- }
-
- case "0":
- e.preventDefault();
- audio.currentTime = 0;
- break;
-
- case "?":
- e.preventDefault();
- setShowShortcuts(true);
- break;
- }
- };
-
- window.addEventListener("keydown", handleKeyDown);
- return () => window.removeEventListener("keydown", handleKeyDown);
- }, [transcription]);
+ if (!intelligence) return []
+ const tabs: { value: string; label: string }[] = []
+ if (intelligence.chapters && intelligence.chapters.length > 0)
+ tabs.push({ value: "chapters", label: "Chapters" })
+ if (intelligence.summary) tabs.push({ value: "summary", label: "Summary" })
+ if (
+ intelligence.sentimentAnalysis &&
+ intelligence.sentimentAnalysis.length > 0
+ )
+ tabs.push({ value: "sentiment", label: "Sentiment" })
+ if (intelligence.entities && intelligence.entities.length > 0)
+ tabs.push({ value: "entities", label: "Entities" })
+ if (intelligence.keyPhrases && intelligence.keyPhrases.length > 0)
+ tabs.push({ value: "phrases", label: "Key Phrases" })
+ return tabs
+ }, [intelligence])
return (
<>
- setShowShortcuts(false)} />
+ setShowShortcuts(false)}
+ />
@@ -1477,7 +96,11 @@ export const TranscriptionStudio: React.FC = ({
onClick={() => setShowShortcuts(true)}
className="ml-2 hidden text-xs text-gray-400 hover:text-gray-600 lg:inline dark:hover:text-gray-300"
>
- • Press ? for shortcuts
+ • Press{" "}
+
+ ?
+ {" "}
+ for shortcuts
@@ -1507,115 +130,144 @@ export const TranscriptionStudio: React.FC
= ({
{/* Mobile-first Layout: stacked on mobile, side-by-side on desktop */}
+ {/* Sidebar: Audio Player + Stats + Export */}
+
+
+
+
+
+
+
+
+
- {/* Audio Player - Shows first on mobile */}
-
-
- {/* Transcript + Intelligence Panel */}
-
-
-
- {intelligenceTabs.length > 0 ? (
-
-
- Transcript
- {intelligenceTabs.map((tab) => (
-
- {tab.label}
-
- ))}
-
-
-
-
-
-
- {intelligence?.chapters && intelligence.chapters.length > 0 && (
-
-
-
- )}
-
- {intelligence?.summary && (
-
-
-
- )}
- {intelligence?.sentimentAnalysis && intelligence.sentimentAnalysis.length > 0 && (
-
-
+
+
+ {intelligenceTabs.length > 0 ? (
+
+
+ Transcript
+ {intelligenceTabs.map((tab) => (
+
+ {tab.label}
+
+ ))}
+
+
+
+
-
- )}
-
- {intelligence?.entities && intelligence.entities.length > 0 && (
-
-
- )}
- {intelligence?.keyPhrases && intelligence.keyPhrases.length > 0 && (
-
-
-
- )}
-
- ) : (
-
- )}
-
-
+ {intelligence?.chapters &&
+ intelligence.chapters.length > 0 && (
+
+
+
+ )}
+
+ {intelligence?.summary && (
+
+
+
+ )}
+
+ {intelligence?.sentimentAnalysis &&
+ intelligence.sentimentAnalysis.length > 0 && (
+
+
+
+ )}
+
+ {intelligence?.entities &&
+ intelligence.entities.length > 0 && (
+
+
+
+ )}
+
+ {intelligence?.keyPhrases &&
+ intelligence.keyPhrases.length > 0 && (
+
+
+
+ )}
+
+ ) : (
+
+ )}
+
+
+
-
>
- );
-};
+ )
+}
-export default TranscriptionStudio;
+export default TranscriptionStudio
diff --git a/src/components/transcription/UrlInput.tsx b/src/components/transcription/UrlInput.tsx
index 85208de..b77eb8a 100644
--- a/src/components/transcription/UrlInput.tsx
+++ b/src/components/transcription/UrlInput.tsx
@@ -1,11 +1,11 @@
-import React from "react";
-import { Input } from "@/components/ui/input";
-import { AlertTriangle } from "lucide-react";
+import { AlertTriangle } from "lucide-react"
+import React from "react"
+import { Input } from "@/components/ui/input"
interface UrlInputProps {
- audioUrl: string;
- urlError: string | null;
- onUrlChange: (e: React.ChangeEvent) => void;
+ audioUrl: string
+ urlError: string | null
+ onUrlChange: (e: React.ChangeEvent) => void
}
export function UrlInput({ audioUrl, urlError, onUrlChange }: UrlInputProps) {
@@ -44,5 +44,5 @@ export function UrlInput({ audioUrl, urlError, onUrlChange }: UrlInputProps) {
- );
+ )
}
diff --git a/src/components/ui/LoadingFallback.tsx b/src/components/ui/LoadingFallback.tsx
index 4fe30ce..c1f5373 100644
--- a/src/components/ui/LoadingFallback.tsx
+++ b/src/components/ui/LoadingFallback.tsx
@@ -6,4 +6,4 @@ export const LoadingFallback = () => (
-);
+)
diff --git a/src/components/ui/alert-dialog.tsx b/src/components/ui/alert-dialog.tsx
index ebf9f00..94cc46c 100644
--- a/src/components/ui/alert-dialog.tsx
+++ b/src/components/ui/alert-dialog.tsx
@@ -1,10 +1,9 @@
"use client"
-import * as React from "react"
import { AlertDialog as AlertDialogPrimitive } from "radix-ui"
-
-import { cn } from "@/lib/utils"
+import * as React from "react"
import { Button } from "@/components/ui/button"
+import { cn } from "@/lib/utils"
function AlertDialog({
...props
@@ -35,7 +34,10 @@ function AlertDialogOverlay({
return (
)
@@ -56,7 +58,7 @@ function AlertDialogContent({
data-size={size}
className={cn(
"data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-6 rounded-xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 outline-none",
- className
+ className,
)}
{...props}
/>
@@ -71,7 +73,10 @@ function AlertDialogHeader({
return (
)
@@ -86,7 +91,7 @@ function AlertDialogFooter({
data-slot="alert-dialog-footer"
className={cn(
"flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end",
- className
+ className,
)}
{...props}
/>
@@ -100,7 +105,10 @@ function AlertDialogMedia({
return (
)
@@ -113,7 +121,10 @@ function AlertDialogTitle({
return (
)
@@ -126,7 +137,10 @@ function AlertDialogDescription({
return (
)
diff --git a/src/components/ui/animated-backdrop.tsx b/src/components/ui/animated-backdrop.tsx
index 1084b1e..305b7a0 100644
--- a/src/components/ui/animated-backdrop.tsx
+++ b/src/components/ui/animated-backdrop.tsx
@@ -1,10 +1,10 @@
-import * as React from "react";
-import { motion } from "framer-motion";
+import { motion } from "framer-motion"
+import * as React from "react"
interface AnimatedBackdropProps {
- children: React.ReactNode;
- onClick?: () => void;
- className?: string;
+ children: React.ReactNode
+ onClick?: () => void
+ className?: string
}
export function AnimatedBackdrop({
@@ -14,13 +14,20 @@ export function AnimatedBackdrop({
}: AnimatedBackdropProps) {
return (
- {children}
+ {onClick && (
+
+ )}
+ {children}
- );
+ )
}
diff --git a/src/components/ui/animated-button.tsx b/src/components/ui/animated-button.tsx
index ee5fc3a..46b98f4 100644
--- a/src/components/ui/animated-button.tsx
+++ b/src/components/ui/animated-button.tsx
@@ -1,17 +1,17 @@
-import * as React from "react";
-import { motion } from "framer-motion";
-import { Button, buttonVariants } from "./button";
-import { VariantProps } from "class-variance-authority";
+import { VariantProps } from "class-variance-authority"
+import { motion } from "framer-motion"
+import * as React from "react"
+import { Button, buttonVariants } from "./button"
type ButtonProps = React.ComponentProps<"button"> &
VariantProps
& {
- asChild?: boolean;
- };
+ asChild?: boolean
+ }
export function AnimatedButton({ children, ...props }: ButtonProps) {
return (
{children}
- );
+ )
}
diff --git a/src/components/ui/animated-card.tsx b/src/components/ui/animated-card.tsx
index c01e583..b8650ee 100644
--- a/src/components/ui/animated-card.tsx
+++ b/src/components/ui/animated-card.tsx
@@ -1,7 +1,11 @@
-import { motion } from "framer-motion";
-import { Card } from "./card";
+import { motion } from "framer-motion"
+import { Card } from "./card"
-export function AnimatedCard({ children, className, ...props }: React.ComponentProps) {
+export function AnimatedCard({
+ children,
+ className,
+ ...props
+}: React.ComponentProps) {
return (
{children}
- );
+ )
}
diff --git a/src/components/ui/animated-list.tsx b/src/components/ui/animated-list.tsx
index 2a6fc66..2d20c12 100644
--- a/src/components/ui/animated-list.tsx
+++ b/src/components/ui/animated-list.tsx
@@ -1,11 +1,11 @@
-import * as React from "react";
-import { motion, AnimatePresence } from "framer-motion";
+import { AnimatePresence, motion } from "framer-motion"
+import * as React from "react"
interface AnimatedListProps {
- items: React.ReactNode[];
- keyExtractor: (item: React.ReactNode, index: number) => string | number;
- className?: string;
- itemClassName?: string;
+ items: React.ReactNode[]
+ keyExtractor: (item: React.ReactNode, index: number) => string | number
+ className?: string
+ itemClassName?: string
}
export function AnimatedList({
@@ -29,13 +29,13 @@ export function AnimatedList({
staggerDirection: -1,
},
},
- };
+ }
const item = {
hidden: { opacity: 0, y: 20 },
show: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -10 },
- };
+ }
return (
- );
+ )
}
diff --git a/src/components/ui/badge.tsx b/src/components/ui/badge.tsx
index 086ee43..7fcf68d 100644
--- a/src/components/ui/badge.tsx
+++ b/src/components/ui/badge.tsx
@@ -1,6 +1,6 @@
-import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { Slot } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -10,17 +10,21 @@ const badgeVariants = cva(
variants: {
variant: {
default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
- secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
- destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
- outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
- ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
+ secondary:
+ "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
+ destructive:
+ "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
+ outline:
+ "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
+ ghost:
+ "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
link: "text-primary underline-offset-4 hover:underline",
},
},
defaultVariants: {
variant: "default",
},
- }
+ },
)
function Badge({
diff --git a/src/components/ui/button.tsx b/src/components/ui/button.tsx
index 51cfdfa..5defad1 100644
--- a/src/components/ui/button.tsx
+++ b/src/components/ui/button.tsx
@@ -1,6 +1,6 @@
-import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { Slot } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -10,20 +10,27 @@ const buttonVariants = cva(
variants: {
variant: {
default: "bg-primary text-primary-foreground hover:bg-primary/80",
- outline: "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs",
- secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
- ghost: "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
- destructive: "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
+ outline:
+ "border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs",
+ secondary:
+ "bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground",
+ ghost:
+ "hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground",
+ destructive:
+ "bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30",
link: "text-primary underline-offset-4 hover:underline",
},
size: {
- default: "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
+ default:
+ "h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2",
xs: "h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3",
sm: "h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5",
lg: "h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3",
icon: "size-9",
- "icon-xs": "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
- "icon-sm": "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
+ "icon-xs":
+ "size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3",
+ "icon-sm":
+ "size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md",
"icon-lg": "size-10",
},
},
@@ -31,7 +38,7 @@ const buttonVariants = cva(
variant: "default",
size: "default",
},
- }
+ },
)
function Button({
diff --git a/src/components/ui/card.tsx b/src/components/ui/card.tsx
index 0cf104f..89961fc 100644
--- a/src/components/ui/card.tsx
+++ b/src/components/ui/card.tsx
@@ -11,7 +11,10 @@ function Card({
img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col", className)}
+ className={cn(
+ "ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl group/card flex flex-col",
+ className,
+ )}
{...props}
/>
)
@@ -23,7 +26,7 @@ function CardHeader({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-header"
className={cn(
"gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4 group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]",
- className
+ className,
)}
{...props}
/>
@@ -34,7 +37,10 @@ function CardTitle({ className, ...props }: React.ComponentProps<"div">) {
return (
)
@@ -56,7 +62,7 @@ function CardAction({ className, ...props }: React.ComponentProps<"div">) {
data-slot="card-action"
className={cn(
"col-start-2 row-span-2 row-start-1 self-start justify-self-end",
- className
+ className,
)}
{...props}
/>
@@ -77,7 +83,10 @@ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
return (
)
@@ -85,10 +94,10 @@ function CardFooter({ className, ...props }: React.ComponentProps<"div">) {
export {
Card,
- CardHeader,
- CardFooter,
- CardTitle,
CardAction,
- CardDescription,
CardContent,
+ CardDescription,
+ CardFooter,
+ CardHeader,
+ CardTitle,
}
diff --git a/src/components/ui/dialog.tsx b/src/components/ui/dialog.tsx
index 7ad495c..c64da29 100644
--- a/src/components/ui/dialog.tsx
+++ b/src/components/ui/dialog.tsx
@@ -1,11 +1,10 @@
"use client"
-import * as React from "react"
+import { IconX } from "@tabler/icons-react"
import { Dialog as DialogPrimitive } from "radix-ui"
-
-import { cn } from "@/lib/utils"
+import * as React from "react"
import { Button } from "@/components/ui/button"
-import { IconX } from "@tabler/icons-react"
+import { cn } from "@/lib/utils"
function Dialog({
...props
@@ -38,7 +37,10 @@ function DialogOverlay({
return (
)
@@ -59,16 +61,19 @@ function DialogContent({
data-slot="dialog-content"
className={cn(
"bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-6 rounded-xl p-6 text-sm ring-1 duration-100 sm:max-w-md fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none",
- className
+ className,
)}
{...props}
>
{children}
{showCloseButton && (
-
-
+
+
Close
@@ -101,7 +106,7 @@ function DialogFooter({
data-slot="dialog-footer"
className={cn(
"flex flex-col-reverse gap-2 sm:flex-row sm:justify-end",
- className
+ className,
)}
{...props}
>
@@ -135,7 +140,10 @@ function DialogDescription({
return (
)
diff --git a/src/components/ui/dropdown-menu.tsx b/src/components/ui/dropdown-menu.tsx
index c640669..0a34b76 100644
--- a/src/components/ui/dropdown-menu.tsx
+++ b/src/components/ui/dropdown-menu.tsx
@@ -1,10 +1,9 @@
"use client"
-import * as React from "react"
+import { IconCheck, IconChevronRight } from "@tabler/icons-react"
import { DropdownMenu as DropdownMenuPrimitive } from "radix-ui"
-
+import * as React from "react"
import { cn } from "@/lib/utils"
-import { IconCheck, IconChevronRight } from "@tabler/icons-react"
function DropdownMenu({
...props
@@ -44,9 +43,9 @@ function DropdownMenuContent({
sideOffset={sideOffset}
align={align}
className={cn(
- "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100 dark z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden",
- className
- )}
+ "data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100 dark z-50 max-h-(--radix-dropdown-menu-content-available-height) w-(--radix-dropdown-menu-trigger-width) origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto data-[state=closed]:overflow-hidden",
+ className,
+ )}
{...props}
/>
@@ -77,7 +76,7 @@ function DropdownMenuItem({
data-variant={variant}
className={cn(
"focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4 group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
{...props}
/>
@@ -99,7 +98,7 @@ function DropdownMenuCheckboxItem({
data-inset={inset}
className={cn(
"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
checked={checked}
{...props}
@@ -109,8 +108,7 @@ function DropdownMenuCheckboxItem({
data-slot="dropdown-menu-checkbox-item-indicator"
>
-
+
{children}
@@ -143,7 +141,7 @@ function DropdownMenuRadioItem({
data-inset={inset}
className={cn(
"focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4 relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
{...props}
>
@@ -152,8 +150,7 @@ function DropdownMenuRadioItem({
data-slot="dropdown-menu-radio-item-indicator"
>
-
+
{children}
@@ -172,7 +169,10 @@ function DropdownMenuLabel({
)
@@ -198,7 +198,10 @@ function DropdownMenuShortcut({
return (
)
@@ -224,7 +227,7 @@ function DropdownMenuSubTrigger({
data-inset={inset}
className={cn(
"focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4 flex cursor-default items-center outline-hidden select-none [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
{...props}
>
@@ -242,9 +245,9 @@ function DropdownMenuSubContent({
)
@@ -252,18 +255,18 @@ function DropdownMenuSubContent({
export {
DropdownMenu,
- DropdownMenuPortal,
- DropdownMenuTrigger,
+ DropdownMenuCheckboxItem,
DropdownMenuContent,
DropdownMenuGroup,
- DropdownMenuLabel,
DropdownMenuItem,
- DropdownMenuCheckboxItem,
+ DropdownMenuLabel,
+ DropdownMenuPortal,
DropdownMenuRadioGroup,
DropdownMenuRadioItem,
DropdownMenuSeparator,
DropdownMenuShortcut,
DropdownMenuSub,
- DropdownMenuSubTrigger,
DropdownMenuSubContent,
+ DropdownMenuSubTrigger,
+ DropdownMenuTrigger,
}
diff --git a/src/components/ui/input.tsx b/src/components/ui/input.tsx
index 0d37249..e5d1642 100644
--- a/src/components/ui/input.tsx
+++ b/src/components/ui/input.tsx
@@ -9,7 +9,7 @@ function Input({ className, type, ...props }: React.ComponentProps<"input">) {
data-slot="input"
className={cn(
"dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-md border bg-transparent px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
- className
+ className,
)}
{...props}
/>
diff --git a/src/components/ui/label.tsx b/src/components/ui/label.tsx
index fc65794..7d396fa 100644
--- a/src/components/ui/label.tsx
+++ b/src/components/ui/label.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { Label as LabelPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -14,7 +14,7 @@ function Label({
data-slot="label"
className={cn(
"gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",
- className
+ className,
)}
{...props}
/>
diff --git a/src/components/ui/mobile-button-variants.ts b/src/components/ui/mobile-button-variants.ts
index 8927eb3..4fdb197 100644
--- a/src/components/ui/mobile-button-variants.ts
+++ b/src/components/ui/mobile-button-variants.ts
@@ -1,4 +1,4 @@
-import { cva } from "class-variance-authority";
+import { cva } from "class-variance-authority"
export const mobileButtonVariants = cva(
"inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 active:scale-95 touch:min-h-touch touch:min-w-touch",
@@ -36,4 +36,4 @@ export const mobileButtonVariants = cva(
size: "default",
},
},
-);
+)
diff --git a/src/components/ui/mobile-button.tsx b/src/components/ui/mobile-button.tsx
index ae4350a..3e83678 100644
--- a/src/components/ui/mobile-button.tsx
+++ b/src/components/ui/mobile-button.tsx
@@ -1,27 +1,27 @@
-import * as React from "react";
-import { Slot } from "@radix-ui/react-slot";
-import { type VariantProps } from "class-variance-authority";
-import { cn } from "@/lib/utils";
-import { mobileButtonVariants } from "./mobile-button-variants";
+import { Slot } from "@radix-ui/react-slot"
+import { type VariantProps } from "class-variance-authority"
+import * as React from "react"
+import { cn } from "@/lib/utils"
+import { mobileButtonVariants } from "./mobile-button-variants"
export interface MobileButtonProps
extends React.ButtonHTMLAttributes
,
VariantProps {
- asChild?: boolean;
+ asChild?: boolean
}
const MobileButton = React.forwardRef(
({ className, variant, size, asChild = false, ...props }, ref) => {
- const Comp = asChild ? Slot : "button";
+ const Comp = asChild ? Slot : "button"
return (
- );
+ )
},
-);
-MobileButton.displayName = "MobileButton";
+)
+MobileButton.displayName = "MobileButton"
-export { MobileButton };
+export { MobileButton }
diff --git a/src/components/ui/mobile-dialog.tsx b/src/components/ui/mobile-dialog.tsx
index a5c808b..6a5430b 100644
--- a/src/components/ui/mobile-dialog.tsx
+++ b/src/components/ui/mobile-dialog.tsx
@@ -1,19 +1,19 @@
-"use client";
+"use client"
-import * as React from "react";
-import * as DialogPrimitive from "@radix-ui/react-dialog";
-import { X } from "lucide-react";
-import { cn } from "@/lib/utils";
-import { Button } from "./button";
+import * as DialogPrimitive from "@radix-ui/react-dialog"
+import { X } from "lucide-react"
+import * as React from "react"
+import { cn } from "@/lib/utils"
+import { Button } from "./button"
-const MobileDialog = DialogPrimitive.Root;
+const MobileDialog = DialogPrimitive.Root
-const MobileDialogTrigger = DialogPrimitive.Trigger;
+const MobileDialogTrigger = DialogPrimitive.Trigger
const MobileDialogPortal = (props: DialogPrimitive.DialogPortalProps) => (
-);
-MobileDialogPortal.displayName = DialogPrimitive.Portal.displayName;
+)
+MobileDialogPortal.displayName = DialogPrimitive.Portal.displayName
const MobileDialogOverlay = React.forwardRef<
React.ElementRef,
@@ -27,8 +27,8 @@ const MobileDialogOverlay = React.forwardRef<
)}
{...props}
/>
-));
-MobileDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;
+))
+MobileDialogOverlay.displayName = DialogPrimitive.Overlay.displayName
const MobileDialogContent = React.forwardRef<
React.ElementRef,
@@ -67,8 +67,8 @@ const MobileDialogContent = React.forwardRef<
-));
-MobileDialogContent.displayName = DialogPrimitive.Content.displayName;
+))
+MobileDialogContent.displayName = DialogPrimitive.Content.displayName
const MobileDialogHeader = ({
className,
@@ -83,8 +83,8 @@ const MobileDialogHeader = ({
)}
{...props}
/>
-);
-MobileDialogHeader.displayName = "MobileDialogHeader";
+)
+MobileDialogHeader.displayName = "MobileDialogHeader"
const MobileDialogFooter = ({
className,
@@ -99,8 +99,8 @@ const MobileDialogFooter = ({
)}
{...props}
/>
-);
-MobileDialogFooter.displayName = "MobileDialogFooter";
+)
+MobileDialogFooter.displayName = "MobileDialogFooter"
const MobileDialogTitle = React.forwardRef<
React.ElementRef,
@@ -116,8 +116,8 @@ const MobileDialogTitle = React.forwardRef<
)}
{...props}
/>
-));
-MobileDialogTitle.displayName = DialogPrimitive.Title.displayName;
+))
+MobileDialogTitle.displayName = DialogPrimitive.Title.displayName
const MobileDialogDescription = React.forwardRef<
React.ElementRef,
@@ -133,15 +133,15 @@ const MobileDialogDescription = React.forwardRef<
)}
{...props}
/>
-));
-MobileDialogDescription.displayName = DialogPrimitive.Description.displayName;
+))
+MobileDialogDescription.displayName = DialogPrimitive.Description.displayName
export {
MobileDialog,
- MobileDialogTrigger,
MobileDialogContent,
- MobileDialogHeader,
+ MobileDialogDescription,
MobileDialogFooter,
+ MobileDialogHeader,
MobileDialogTitle,
- MobileDialogDescription,
-};
+ MobileDialogTrigger,
+}
diff --git a/src/components/ui/mobile-input.tsx b/src/components/ui/mobile-input.tsx
index 2184049..f749fb2 100644
--- a/src/components/ui/mobile-input.tsx
+++ b/src/components/ui/mobile-input.tsx
@@ -1,9 +1,9 @@
-import * as React from "react";
-import { cn } from "@/lib/utils";
+import * as React from "react"
+import { cn } from "@/lib/utils"
export interface MobileInputProps
extends React.InputHTMLAttributes {
- touchOptimized?: boolean;
+ touchOptimized?: boolean
}
const MobileInput = React.forwardRef(
@@ -24,9 +24,9 @@ const MobileInput = React.forwardRef(
ref={ref}
{...props}
/>
- );
+ )
},
-);
-MobileInput.displayName = "MobileInput";
+)
+MobileInput.displayName = "MobileInput"
-export { MobileInput };
+export { MobileInput }
diff --git a/src/components/ui/mobile-navigation.tsx b/src/components/ui/mobile-navigation.tsx
index 9ecd976..6eedb8a 100644
--- a/src/components/ui/mobile-navigation.tsx
+++ b/src/components/ui/mobile-navigation.tsx
@@ -1,26 +1,26 @@
-"use client";
+"use client"
-import { useState } from "react";
-import { motion, AnimatePresence } from "framer-motion";
+import { AnimatePresence, motion } from "framer-motion"
import {
- Menu,
- X,
+ BookOpen,
+ Bug,
Clock,
+ ExternalLink,
FileText,
- MessageCircle,
- Bug,
Lightbulb,
- Github,
- BookOpen,
-} from "lucide-react";
-import Link from "next/link";
-import { Button } from "./button";
+ Menu,
+ MessageCircle,
+ X,
+} from "lucide-react"
+import Link from "next/link"
+import { useState } from "react"
+import { Button } from "./button"
interface MobileNavigationProps {
- onOpenChangelog: () => void;
- onShowHistory?: () => void;
- onOpenFeedbackModal: (type: "general" | "issue" | "feature") => void;
- onShowV3?: () => void;
+ onOpenChangelog: () => void
+ onShowHistory?: () => void
+ onOpenFeedbackModal: (type: "general" | "issue" | "feature") => void
+ onShowV3?: () => void
}
export function MobileNavigation({
@@ -29,10 +29,10 @@ export function MobileNavigation({
onOpenFeedbackModal,
onShowV3,
}: MobileNavigationProps) {
- const [isOpen, setIsOpen] = useState(false);
+ const [isOpen, setIsOpen] = useState(false)
- const toggleMenu = () => setIsOpen(!isOpen);
- const closeMenu = () => setIsOpen(false);
+ const toggleMenu = () => setIsOpen(!isOpen)
+ const closeMenu = () => setIsOpen(false)
const menuVariants = {
closed: {
@@ -43,7 +43,7 @@ export function MobileNavigation({
opacity: 1,
x: 0,
},
- };
+ }
const overlayVariants = {
closed: {
@@ -52,7 +52,7 @@ export function MobileNavigation({
open: {
opacity: 1,
},
- };
+ }
const itemVariants = {
closed: { opacity: 0, x: 20 },
@@ -60,32 +60,32 @@ export function MobileNavigation({
opacity: 1,
x: 0,
},
- };
+ }
const containerVariants = {
closed: {},
open: {},
- };
+ }
const handleHistoryClick = () => {
- onShowHistory?.();
- closeMenu();
- };
+ onShowHistory?.()
+ closeMenu()
+ }
const handleV3Click = () => {
- onShowV3?.();
- closeMenu();
- };
+ onShowV3?.()
+ closeMenu()
+ }
const handleChangelogClick = () => {
- onOpenChangelog();
- closeMenu();
- };
+ onOpenChangelog()
+ closeMenu()
+ }
const handleFeedbackClick = (type: "general" | "issue" | "feature") => {
- onOpenFeedbackModal(type);
- closeMenu();
- };
+ onOpenFeedbackModal(type)
+ closeMenu()
+ }
return (
@@ -266,7 +266,7 @@ export function MobileNavigation({
onClick={closeMenu}
className="mb-3 flex w-full items-center justify-start rounded-md p-4 text-left text-gray-700 hover:bg-gray-100 dark:text-gray-300 dark:hover:bg-gray-800"
>
-
+
Star on GitHub
@@ -296,5 +296,5 @@ export function MobileNavigation({
)}
- );
+ )
}
diff --git a/src/components/ui/progress.tsx b/src/components/ui/progress.tsx
index 1fb37fa..6e7f5a2 100644
--- a/src/components/ui/progress.tsx
+++ b/src/components/ui/progress.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { Progress as ProgressPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -15,7 +15,7 @@ function Progress({
data-slot="progress"
className={cn(
"bg-muted h-1.5 rounded-full relative flex w-full items-center overflow-x-hidden",
- className
+ className,
)}
{...props}
>
diff --git a/src/components/ui/scroll-area.tsx b/src/components/ui/scroll-area.tsx
index 358697b..7ab49b3 100644
--- a/src/components/ui/scroll-area.tsx
+++ b/src/components/ui/scroll-area.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { ScrollArea as ScrollAreaPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -40,7 +40,7 @@ function ScrollBar({
orientation={orientation}
className={cn(
"data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent flex touch-none p-px transition-colors select-none",
- className
+ className,
)}
{...props}
>
diff --git a/src/components/ui/scroll-reveal-section.tsx b/src/components/ui/scroll-reveal-section.tsx
index 33b9642..ddf0d27 100644
--- a/src/components/ui/scroll-reveal-section.tsx
+++ b/src/components/ui/scroll-reveal-section.tsx
@@ -1,13 +1,13 @@
-import React from "react";
-import { motion, Variants } from "framer-motion";
-import { useScrollAnimation } from "@/hooks/useScrollAnimation";
+import { motion, Variants } from "framer-motion"
+import React from "react"
+import { useScrollAnimation } from "@/hooks/useScrollAnimation"
interface ScrollRevealSectionProps {
- children: React.ReactNode;
- className?: string;
- delay?: number;
- threshold?: number;
- variants?: Variants;
+ children: React.ReactNode
+ className?: string
+ delay?: number
+ threshold?: number
+ variants?: Variants
}
export function ScrollRevealSection({
@@ -17,7 +17,7 @@ export function ScrollRevealSection({
threshold = 0.1,
variants,
}: ScrollRevealSectionProps) {
- const { ref, isInView } = useScrollAnimation(threshold);
+ const { ref, isInView } = useScrollAnimation(threshold)
const defaultVariants = {
hidden: { opacity: 0, y: 50 },
@@ -29,7 +29,7 @@ export function ScrollRevealSection({
delay,
},
},
- };
+ }
return (
{children}
- );
+ )
}
diff --git a/src/components/ui/select.tsx b/src/components/ui/select.tsx
index 9559b6f..a853c21 100644
--- a/src/components/ui/select.tsx
+++ b/src/components/ui/select.tsx
@@ -1,10 +1,14 @@
"use client"
-import * as React from "react"
+import {
+ IconCheck,
+ IconChevronDown,
+ IconChevronUp,
+ IconSelector,
+} from "@tabler/icons-react"
import { Select as SelectPrimitive } from "radix-ui"
-
+import * as React from "react"
import { cn } from "@/lib/utils"
-import { IconSelector, IconCheck, IconChevronUp, IconChevronDown } from "@tabler/icons-react"
function Select({
...props
@@ -45,7 +49,7 @@ function SelectTrigger({
data-size={size}
className={cn(
"border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-md border bg-transparent py-2 pr-2 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4 flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
{...props}
>
@@ -70,11 +74,11 @@ function SelectContent({
data-slot="select-content"
data-align-trigger={position === "item-aligned"}
className={cn(
- "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-md shadow-md ring-1 duration-100 dark relative z-50 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none",
- position === "popper" &&
- "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
- className
- )}
+ "bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-md shadow-md ring-1 duration-100 dark relative z-50 max-h-(--radix-select-content-available-height) origin-(--radix-select-content-transform-origin) overflow-x-hidden overflow-y-auto data-[align-trigger=true]:animate-none",
+ position === "popper" &&
+ "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
+ className,
+ )}
position={position}
align={align}
{...props}
@@ -84,7 +88,7 @@ function SelectContent({
data-position={position}
className={cn(
"data-[position=popper]:h-(--radix-select-trigger-height) data-[position=popper]:w-full data-[position=popper]:min-w-(--radix-select-trigger-width)",
- position === "popper" && ""
+ position === "popper" && "",
)}
>
{children}
@@ -118,7 +122,7 @@ function SelectItem({
data-slot="select-item"
className={cn(
"focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2 relative flex w-full cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0",
- className
+ className,
)}
{...props}
>
@@ -152,11 +156,13 @@ function SelectScrollUpButton({
return (
-
+
)
}
@@ -168,11 +174,13 @@ function SelectScrollDownButton({
return (
-
+
)
}
diff --git a/src/components/ui/separator.tsx b/src/components/ui/separator.tsx
index b83c5eb..7189627 100644
--- a/src/components/ui/separator.tsx
+++ b/src/components/ui/separator.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { Separator as SeparatorPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -18,7 +18,7 @@ function Separator({
orientation={orientation}
className={cn(
"bg-border shrink-0 data-horizontal:h-px data-horizontal:w-full data-vertical:w-px data-vertical:self-stretch",
- className
+ className,
)}
{...props}
/>
diff --git a/src/components/ui/sequential-reveal-list.tsx b/src/components/ui/sequential-reveal-list.tsx
deleted file mode 100644
index 444d376..0000000
--- a/src/components/ui/sequential-reveal-list.tsx
+++ /dev/null
@@ -1,42 +0,0 @@
-import React from "react";
-import { motion, Variants } from "framer-motion";
-import { useScrollAnimation } from "@/hooks/useScrollAnimation";
-import { sequentialFadeIn, sequentialItem } from "@/lib/animations";
-
-interface SequentialRevealListProps {
- items: React.ReactNode[];
- className?: string;
- itemClassName?: string;
- containerVariants?: Variants;
- itemVariants?: Variants;
-}
-
-export function SequentialRevealList({
- items,
- className = "",
- itemClassName = "",
- containerVariants = sequentialFadeIn,
- itemVariants = sequentialItem,
-}: SequentialRevealListProps) {
- const { ref, isInView } = useScrollAnimation(0.1);
-
- return (
-
- {items.map((item, index) => (
-
- {item}
-
- ))}
-
- );
-}
diff --git a/src/components/ui/sonner.tsx b/src/components/ui/sonner.tsx
index 59f9447..cd62aff 100644
--- a/src/components/ui/sonner.tsx
+++ b/src/components/ui/sonner.tsx
@@ -1,8 +1,8 @@
-import { useTheme } from "next-themes";
-import { Toaster as Sonner, ToasterProps } from "sonner";
+import { useTheme } from "next-themes"
+import { Toaster as Sonner, ToasterProps } from "sonner"
const Toaster = ({ ...props }: ToasterProps) => {
- const { theme = "system" } = useTheme();
+ const { theme = "system" } = useTheme()
return (
{
}
{...props}
/>
- );
-};
+ )
+}
-export { Toaster };
+export { Toaster }
diff --git a/src/components/ui/switch.tsx b/src/components/ui/switch.tsx
index b0d7f12..14c3499 100644
--- a/src/components/ui/switch.tsx
+++ b/src/components/ui/switch.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { Switch as SwitchPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -18,7 +18,7 @@ function Switch({
data-size={size}
className={cn(
"data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent shadow-xs focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px] peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50",
- className
+ className,
)}
{...props}
>
diff --git a/src/components/ui/tabs.tsx b/src/components/ui/tabs.tsx
index 3b35bf5..750aba6 100644
--- a/src/components/ui/tabs.tsx
+++ b/src/components/ui/tabs.tsx
@@ -1,8 +1,8 @@
"use client"
-import * as React from "react"
import { cva, type VariantProps } from "class-variance-authority"
import { Tabs as TabsPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -17,7 +17,7 @@ function Tabs({
data-orientation={orientation}
className={cn(
"gap-2 group/tabs flex data-horizontal:flex-col",
- className
+ className,
)}
{...props}
/>
@@ -36,7 +36,7 @@ const tabsListVariants = cva(
defaultVariants: {
variant: "default",
},
- }
+ },
)
function TabsList({
@@ -67,7 +67,7 @@ function TabsTrigger({
"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent",
"data-active:bg-background dark:data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 data-active:text-foreground",
"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-horizontal/tabs:after:inset-x-0 group-data-horizontal/tabs:after:bottom-[-5px] group-data-horizontal/tabs:after:h-0.5 group-data-vertical/tabs:after:inset-y-0 group-data-vertical/tabs:after:-right-1 group-data-vertical/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100",
- className
+ className,
)}
{...props}
/>
@@ -87,4 +87,4 @@ function TabsContent({
)
}
-export { Tabs, TabsList, TabsTrigger, TabsContent, tabsListVariants }
+export { Tabs, TabsContent, TabsList, TabsTrigger, tabsListVariants }
diff --git a/src/components/ui/textarea.tsx b/src/components/ui/textarea.tsx
index 7a6aa19..1f1cb1c 100644
--- a/src/components/ui/textarea.tsx
+++ b/src/components/ui/textarea.tsx
@@ -8,7 +8,7 @@ function Textarea({ className, ...props }: React.ComponentProps<"textarea">) {
data-slot="textarea"
className={cn(
"border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border bg-transparent px-2.5 py-2 text-base shadow-xs transition-[color,box-shadow] focus-visible:ring-3 aria-invalid:ring-3 md:text-sm placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50",
- className
+ className,
)}
{...props}
/>
diff --git a/src/components/ui/tooltip.tsx b/src/components/ui/tooltip.tsx
index 0b46ee5..e148a2a 100644
--- a/src/components/ui/tooltip.tsx
+++ b/src/components/ui/tooltip.tsx
@@ -1,7 +1,7 @@
"use client"
-import * as React from "react"
import { Tooltip as TooltipPrimitive } from "radix-ui"
+import * as React from "react"
import { cn } from "@/lib/utils"
@@ -43,7 +43,7 @@ function TooltipContent({
sideOffset={sideOffset}
className={cn(
"data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 rounded-md px-3 py-1.5 text-xs bg-foreground text-background z-50 w-fit max-w-xs origin-(--radix-tooltip-content-transform-origin)",
- className
+ className,
)}
{...props}
>
diff --git a/src/data/changelog.ts b/src/data/changelog.ts
index bcc3c5d..9d9d8d5 100644
--- a/src/data/changelog.ts
+++ b/src/data/changelog.ts
@@ -1,14 +1,43 @@
export interface ChangeItem {
- date: string;
- version: string;
+ date: string
+ version: string
changes: {
- new?: string[];
- improved?: string[];
- fixed?: string[];
- };
+ new?: string[]
+ improved?: string[]
+ fixed?: string[]
+ }
}
export const changelogItems: ChangeItem[] = [
+ {
+ date: "Mon, 27 Apr 2026",
+ version: "3.4.0",
+ changes: {
+ new: [
+ "**Route-Based App Flow**: Added dedicated routes for upload, history, transcription progress, studio review, about, documentation, legal pages, and error states",
+ "**Top Mobile Navigation**: Replaced the mobile drawer-first pattern with top tabs for Transcribe, History, Docs, and More",
+ "**More Menu**: Mobile secondary links now live in a More menu with active parent highlighting for About, Changelog, Terms, and Privacy",
+ "**Support and Error Pages**: Added polished not-found, app error, global error, and status-code error pages with clearer recovery actions",
+ "**Feedback Telemetry**: Feedback submissions now include useful page, device, browser, and workflow context for easier debugging",
+ ],
+ improved: [
+ "**Documentation Layout**: Reworked the documentation page from a landing-page style layout into a quieter reference guide with a table of contents, structured sections, troubleshooting, and expandable FAQ",
+ "**Legal Page Readability**: Updated Privacy and Terms pages with Markdown-like document styling, clearer headers, highlighted update dates, and easier-to-scan lists",
+ "**Studio Architecture**: Extracted audio playback, transcript review, export controls, file details, statistics, and keyboard shortcuts into focused Studio components",
+ "**State Management**: Introduced dedicated Zustand stores for transcription history and option persistence",
+ "**Shared Utilities**: Consolidated export formatting, file formatting, speaker colors, Firebase helpers, transcription types, and debounce logic into focused modules",
+ "**Design Tokens**: Refreshed Tailwind and CSS variables for a cleaner theme foundation and more consistent component styling",
+ "**Codebase Cleanup**: Removed legacy mobile-only duplicate components, old announcement code, unused layout wrappers, and stale transcription result flows",
+ "**Dependencies**: Refreshed package versions and simplified app dependencies around the current Next.js workflow",
+ ],
+ fixed: [
+ "**Studio Audio Source**: Studio and transcription review now use the AssemblyAI audio URL as the source of truth when available",
+ "**Feedback Modal Fit**: The embedded feedback form now scales correctly inside the viewport on smaller screens",
+ "**Mobile Footer Duplication**: Footer support/legal links are no longer repeated on mobile now that they live in the More menu",
+ "**Active Navigation States**: Nested routes now correctly keep their parent navigation item highlighted",
+ ],
+ },
+ },
{
date: "Fri, 14 Feb 2026",
version: "3.2.0",
@@ -439,4 +468,4 @@ export const changelogItems: ChangeItem[] = [
fixed: [],
},
},
-];
+]
diff --git a/src/hooks/use-file-input.tsx b/src/hooks/use-file-input.tsx
index 25692fb..b839840 100644
--- a/src/hooks/use-file-input.tsx
+++ b/src/hooks/use-file-input.tsx
@@ -1,13 +1,11 @@
-import { useState, useRef, useCallback } from "react"
+import { useCallback, useRef, useState } from "react"
import { validateFileFormat } from "@/lib/file-format-utils"
interface UseFileInputOptions {
maxSize?: number // in MB
}
-export function useFileInput({
- maxSize = 100,
-}: UseFileInputOptions = {}) {
+export function useFileInput({ maxSize = 100 }: UseFileInputOptions = {}) {
const [fileName, setFileName] = useState(null)
const [fileSize, setFileSize] = useState(0)
const [error, setError] = useState(null)
diff --git a/src/hooks/useAudioPlayer.ts b/src/hooks/useAudioPlayer.ts
new file mode 100644
index 0000000..44049f9
--- /dev/null
+++ b/src/hooks/useAudioPlayer.ts
@@ -0,0 +1,210 @@
+import { useCallback, useEffect } from "react"
+import { toast } from "sonner"
+
+interface UseAudioPlayerOptions {
+ audioRef: React.RefObject
+ searchInputRef: React.RefObject
+ transcription: string
+ onShowShortcuts: () => void
+ onVolumeChange?: (volume: number) => void
+ onMuteChange?: (muted: boolean) => void
+}
+
+function isEditableTarget(target: EventTarget | null) {
+ if (!(target instanceof HTMLElement)) return false
+
+ const tag = target.tagName
+ return (
+ tag === "INPUT" ||
+ tag === "TEXTAREA" ||
+ tag === "BUTTON" ||
+ tag === "SELECT" ||
+ (tag === "A" && target.hasAttribute("href")) ||
+ target.isContentEditable ||
+ target.getAttribute("role") === "button" ||
+ target.getAttribute("role") === "link" ||
+ target.getAttribute("role") === "slider" ||
+ target.getAttribute("role") === "combobox" ||
+ target.getAttribute("role") === "option"
+ )
+}
+
+function clearSearchInput(input: HTMLInputElement | null) {
+ if (!input) return
+
+ input.blur()
+ input.value = ""
+}
+
+function copyTranscript(transcription: string) {
+ navigator.clipboard
+ .writeText(transcription)
+ .then(() => {
+ toast.success("Transcript copied to clipboard!")
+ })
+ .catch(() => {
+ toast.error("Failed to copy transcript")
+ })
+}
+
+function togglePlayback(audio: HTMLVideoElement) {
+ if (audio.paused) {
+ audio.play().catch(console.error)
+ return
+ }
+
+ audio.pause()
+}
+
+function adjustVolume(
+ audio: HTMLVideoElement,
+ amount: number,
+ onVolumeChange?: (volume: number) => void,
+) {
+ const nextVolume = Math.max(0, Math.min(1, audio.volume + amount))
+ audio.volume = nextVolume
+ onVolumeChange?.(nextVolume)
+ toast.success(`Volume: ${Math.round(nextVolume * 100)}%`)
+}
+
+function jumpToPercentage(audio: HTMLVideoElement, key: string) {
+ const percentage = Number.parseInt(key, 10) * 10
+ if (!audio.duration) return
+
+ audio.currentTime = (audio.duration * percentage) / 100
+ toast.success(`Jumped to ${percentage}%`)
+}
+
+function handleAudioShortcut(
+ e: KeyboardEvent,
+ audio: HTMLVideoElement,
+ onVolumeChange?: (volume: number) => void,
+ onMuteChange?: (muted: boolean) => void,
+) {
+ switch (e.key) {
+ case " ":
+ e.preventDefault()
+ togglePlayback(audio)
+ break
+
+ case "ArrowLeft":
+ e.preventDefault()
+ audio.currentTime = Math.max(0, audio.currentTime - (e.shiftKey ? 30 : 5))
+ break
+
+ case "ArrowRight":
+ e.preventDefault()
+ audio.currentTime = Math.min(
+ audio.duration || 0,
+ audio.currentTime + (e.shiftKey ? 30 : 5),
+ )
+ break
+
+ case "ArrowUp":
+ e.preventDefault()
+ adjustVolume(audio, 0.1, onVolumeChange)
+ break
+
+ case "ArrowDown":
+ e.preventDefault()
+ adjustVolume(audio, -0.1, onVolumeChange)
+ break
+
+ case "m":
+ case "M":
+ e.preventDefault()
+ audio.muted = !audio.muted
+ onMuteChange?.(audio.muted)
+ toast.success(audio.muted ? "Muted" : "Unmuted")
+ break
+
+ case "1":
+ case "2":
+ case "3":
+ case "4":
+ case "5":
+ case "6":
+ case "7":
+ case "8":
+ case "9":
+ e.preventDefault()
+ jumpToPercentage(audio, e.key)
+ break
+
+ case "0":
+ e.preventDefault()
+ audio.currentTime = 0
+ break
+ }
+}
+
+export function useAudioPlayer({
+ audioRef,
+ searchInputRef,
+ transcription,
+ onShowShortcuts,
+ onVolumeChange,
+ onMuteChange,
+}: UseAudioPlayerOptions) {
+ const handleSeek = useCallback(
+ (startTime: number) => {
+ if (audioRef.current) {
+ audioRef.current.currentTime = startTime
+ audioRef.current.play().catch((error) => {
+ console.error("Audio playback failed:", error)
+ toast.error("Failed to play audio")
+ })
+ }
+ },
+ [audioRef],
+ )
+
+ useEffect(() => {
+ const handleKeyDown = (e: KeyboardEvent) => {
+ const isInputField = isEditableTarget(e.target)
+
+ if (e.key === "Escape") {
+ clearSearchInput(searchInputRef.current)
+ return
+ }
+
+ if ((e.ctrlKey || e.metaKey) && e.key === "f") {
+ e.preventDefault()
+ searchInputRef.current?.focus()
+ return
+ }
+
+ if ((e.ctrlKey || e.metaKey) && e.key === "c" && !isInputField) {
+ if (globalThis.window?.getSelection()?.toString()) return
+ e.preventDefault()
+ copyTranscript(transcription)
+ return
+ }
+
+ if (e.key === "?" || (e.code === "Slash" && e.shiftKey)) {
+ e.preventDefault()
+ onShowShortcuts()
+ return
+ }
+
+ if (isInputField) return
+
+ const audio = audioRef.current
+ if (!audio) return
+
+ handleAudioShortcut(e, audio, onVolumeChange, onMuteChange)
+ }
+
+ globalThis.addEventListener("keydown", handleKeyDown)
+ return () => globalThis.removeEventListener("keydown", handleKeyDown)
+ }, [
+ audioRef,
+ searchInputRef,
+ transcription,
+ onShowShortcuts,
+ onVolumeChange,
+ onMuteChange,
+ ])
+
+ return { handleSeek }
+}
diff --git a/src/hooks/useDebounce.ts b/src/hooks/useDebounce.ts
new file mode 100644
index 0000000..b2aad18
--- /dev/null
+++ b/src/hooks/useDebounce.ts
@@ -0,0 +1,17 @@
+import { useEffect, useState } from "react"
+
+export function useDebounce(value: T, delay: number): T {
+ const [debouncedValue, setDebouncedValue] = useState(value)
+
+ useEffect(() => {
+ const timer = setTimeout(() => {
+ setDebouncedValue(value)
+ }, delay)
+
+ return () => {
+ clearTimeout(timer)
+ }
+ }, [value, delay])
+
+ return debouncedValue
+}
diff --git a/src/hooks/useScrollAnimation.tsx b/src/hooks/useScrollAnimation.tsx
index d7f3d58..541b55e 100644
--- a/src/hooks/useScrollAnimation.tsx
+++ b/src/hooks/useScrollAnimation.tsx
@@ -1,9 +1,9 @@
-import { useRef } from "react";
-import { useInView } from "framer-motion";
+import { useInView } from "framer-motion"
+import { useRef } from "react"
export function useScrollAnimation(threshold = 0.1, once = true) {
- const ref = useRef(null);
- const isInView = useInView(ref, { once, amount: threshold });
+ const ref = useRef(null)
+ const isInView = useInView(ref, { once, amount: threshold })
- return { ref, isInView };
+ return { ref, isInView }
}
diff --git a/src/hooks/useSessionPersistence.ts b/src/hooks/useSessionPersistence.ts
deleted file mode 100644
index 475d88d..0000000
--- a/src/hooks/useSessionPersistence.ts
+++ /dev/null
@@ -1,167 +0,0 @@
-import { useState, useEffect, useCallback } from "react";
-import {
- getActiveSession,
- createSession,
- updateSession,
- deleteSession,
- TranscriptionSession,
-} from "@/lib/persistence-service";
-
-export interface UseSessionPersistenceProps {
- onSessionRecovered?: (session: TranscriptionSession) => void;
-}
-
-export interface UseSessionPersistenceResult {
- activeSession: TranscriptionSession | null;
- hasRecoverableSession: boolean;
- isLoading: boolean;
- createNewSession: (
- options: { language: string; diarize: boolean },
- audioSource: {
- type: "file" | "url";
- name?: string;
- size?: number;
- url?: string;
- },
- ) => Promise;
- updateSessionData: (updates: Partial) => Promise;
- recoverSession: () => Promise;
- discardSession: () => Promise;
-}
-
-/**
- * Hook for managing transcription session persistence
- */
-export const useSessionPersistence = ({
- onSessionRecovered,
-}: UseSessionPersistenceProps = {}): UseSessionPersistenceResult => {
- const [activeSession, setActiveSession] =
- useState(null);
- const [hasRecoverableSession, setHasRecoverableSession] =
- useState(false);
- const [isLoading, setIsLoading] = useState(true);
-
- // Check for active session on mount
- useEffect(() => {
- const checkForActiveSession = async () => {
- try {
- setIsLoading(true);
- const session = await getActiveSession();
-
- if (session) {
- console.log("Found active session:", session.id);
-
- // Only consider it recoverable if it's in certain states
- const isRecoverable = ["starting", "processing"].includes(
- session.status,
- );
- setHasRecoverableSession(isRecoverable);
-
- // Store the session but don't auto-activate it
- setActiveSession(session);
- } else {
- setHasRecoverableSession(false);
- }
- } catch (error) {
- console.error("Error checking for active session:", error);
- } finally {
- setIsLoading(false);
- }
- };
-
- checkForActiveSession();
- }, []);
-
- // Create a new session
- const createNewSession = useCallback(
- async (
- options: { language: string; diarize: boolean },
- audioSource: {
- type: "file" | "url";
- name?: string;
- size?: number;
- url?: string;
- },
- ): Promise => {
- const newSession = await createSession(options, audioSource);
- setActiveSession(newSession);
- return newSession;
- },
- [],
- );
-
- // Update session data
- const updateSessionData = useCallback(
- async (updates: Partial) => {
- if (!activeSession) {
- console.warn("No active session to update");
- return;
- }
-
- try {
- const updatedSession = await updateSession(activeSession.id, updates);
- if (updatedSession) {
- setActiveSession(updatedSession);
- }
- } catch (error) {
- console.error("Error updating session:", error);
- }
- },
- [activeSession],
- );
-
- // Recover an active session
- const recoverSession = useCallback(async () => {
- if (!activeSession) {
- console.warn("No active session to recover");
- return;
- }
-
- try {
- // Call the onSessionRecovered callback with the session data
- if (onSessionRecovered) {
- onSessionRecovered(activeSession);
- }
-
- // Update the session status if needed
- if (activeSession.status === "starting") {
- // If it was just starting, keep the status
- await updateSessionData({ lastUpdatedAt: Date.now() });
- } else if (activeSession.status === "processing") {
- // If it was processing, resume processing
- await updateSessionData({ lastUpdatedAt: Date.now() });
- }
-
- setHasRecoverableSession(false);
- } catch (error) {
- console.error("Error recovering session:", error);
- }
- }, [activeSession, onSessionRecovered, updateSessionData]);
-
- // Discard an active session
- const discardSession = useCallback(async () => {
- if (!activeSession) {
- return;
- }
-
- try {
- await deleteSession(activeSession.id);
- setActiveSession(null);
- setHasRecoverableSession(false);
- } catch (error) {
- console.error("Error discarding session:", error);
- }
- }, [activeSession]);
-
- return {
- activeSession,
- hasRecoverableSession,
- isLoading,
- createNewSession,
- updateSessionData,
- recoverSession,
- discardSession,
- };
-};
-
-export default useSessionPersistence;
diff --git a/src/hooks/useTranscriptionPolling.ts b/src/hooks/useTranscriptionPolling.ts
index 1a48ee4..82b311b 100644
--- a/src/hooks/useTranscriptionPolling.ts
+++ b/src/hooks/useTranscriptionPolling.ts
@@ -1,6 +1,6 @@
-import { useRef, useEffect } from "react"
-import { TranscriptionStatus, getApiUrl } from "../services/transcription"
+import { useCallback, useEffect, useRef } from "react"
import { getUserFriendlyErrorMessage } from "../lib/error-utils"
+import { getApiUrl, TranscriptionStatus } from "../services/transcription"
interface UseTranscriptionPollingProps {
predictionId: string | null
@@ -23,6 +23,7 @@ export function useTranscriptionPolling({
onApiResponse,
}: UseTranscriptionPollingProps) {
const pollIntervalRef = useRef(null)
+ const firstPollTimeoutRef = useRef(null)
// Clean up interval on unmount
useEffect(() => {
@@ -30,172 +31,181 @@ export function useTranscriptionPolling({
if (pollIntervalRef.current) {
clearInterval(pollIntervalRef.current)
}
+ if (firstPollTimeoutRef.current) {
+ clearTimeout(firstPollTimeoutRef.current)
+ }
}
}, [])
- // Start polling when predictionId changes
- useEffect(() => {
- if (predictionId) {
- startPolling(predictionId)
+ const stopPolling = useCallback(() => {
+ if (pollIntervalRef.current) {
+ clearInterval(pollIntervalRef.current)
+ pollIntervalRef.current = null
}
- return () => {
+ if (firstPollTimeoutRef.current) {
+ clearTimeout(firstPollTimeoutRef.current)
+ firstPollTimeoutRef.current = null
+ }
+ }, [])
+
+ const startPolling = useCallback(
+ (id: string) => {
if (pollIntervalRef.current) {
clearInterval(pollIntervalRef.current)
- pollIntervalRef.current = null
}
- }
- // eslint-disable-next-line react-hooks/exhaustive-deps
- }, [predictionId])
- const startPolling = (id: string) => {
- // Clear any existing polling interval
- if (pollIntervalRef.current) {
- console.log("Polling: Clearing previous interval.")
- clearInterval(pollIntervalRef.current)
- }
+ let attempts = 0
+ let consecutiveErrors = 0
+ let isPollInFlight = false
+ const maxAttempts = 120 // 10 minutes at 5s interval
+ const maxConsecutiveErrors = 5
+ const pollIntervalMs = 5000
+
+ // Create poll function that uses the closure over id
+ const poll = async () => {
+ if (isPollInFlight) return
+ isPollInFlight = true
+ attempts++
+
+ try {
+ const response = await fetch(getApiUrl(`prediction/${id}`))
+
+ if (!response.ok) {
+ let errorBody = `${response.status} ${response.statusText}`
+ try {
+ const errorJson = await response.json()
+ errorBody = errorJson.error || JSON.stringify(errorJson)
+ } catch {
+ // response body not readable
+ }
+ throw new Error(`Failed to check prediction status: ${errorBody}`)
+ }
- let attempts = 0
- let consecutiveErrors = 0
- const maxAttempts = 120 // 10 minutes at 5s interval
- const maxConsecutiveErrors = 5
- const pollIntervalMs = 5000
-
- console.log(`Polling: Starting for prediction ID: ${id}`)
-
- // Create poll function that uses the closure over id
- const poll = async () => {
- attempts++
- console.log(`Polling: Attempt #${attempts} for ${id}`)
-
- try {
- const response = await fetch(getApiUrl(`prediction/${id}`))
-
- if (!response.ok) {
- let errorBody = `${response.status} ${response.statusText}`
- try {
- const errorJson = await response.json()
- errorBody = errorJson.error || JSON.stringify(errorJson)
- } catch {
- // response body not readable
+ const data = await response.json()
+ consecutiveErrors = 0
+ onApiResponse({ timestamp: new Date(), data })
+
+ // Update progress based on status
+ let newProgress = 50 // Default starting point for polling
+
+ if (data.status === "starting") {
+ // 25%-50% range for starting status
+ onStatusChange("starting")
+ const startingProgressMax = 25
+ const startingProgress =
+ (Math.min(attempts, 20) / 20) * startingProgressMax
+ newProgress = 25 + Math.floor(startingProgress)
+ onProgress(newProgress)
+ } else if (data.status === "processing") {
+ // 50%-98% range for processing status (estimate-based)
+ onStatusChange("processing")
+ const processingProgressMax = 48
+ const processingProgress =
+ (Math.min(attempts, 30) / 30) * processingProgressMax
+ newProgress = 50 + Math.floor(processingProgress)
+ onProgress(newProgress)
+ } else if (data.status === "succeeded") {
+ onProgress(100)
+ stopPolling()
+ onSuccess(data.output)
+ } else if (data.status === "failed") {
+ console.error("Transcription failed:", data.error)
+ stopPolling()
+ onStatusChange("failed")
+ onProgress(0)
+ const transcriptionError =
+ data.error || "Unknown transcription error"
+ onError(`Transcription failed: ${transcriptionError}`)
+ onApiResponse({
+ timestamp: new Date(),
+ data: { error: `Transcription Error: ${transcriptionError}` },
+ })
+ } else if (data.status === "canceled") {
+ console.warn("Transcription canceled")
+ stopPolling()
+ onStatusChange("canceled")
+ onProgress(0)
+ onError("Transcription was canceled")
+ onApiResponse({
+ timestamp: new Date(),
+ data: { message: "Transcription canceled" },
+ })
}
- throw new Error(`Failed to check prediction status: ${errorBody}`)
- }
- const data = await response.json()
- consecutiveErrors = 0 // reset on success
- console.log(`Prediction status (attempt ${attempts}):`, data)
- onApiResponse({ timestamp: new Date(), data })
-
- // Update progress based on status
- let newProgress = 50 // Default starting point for polling
-
- if (data.status === "starting") {
- // 25%-50% range for starting status
- onStatusChange("starting")
- const startingProgressMax = 25
- const startingProgress =
- (Math.min(attempts, 20) / 20) * startingProgressMax
- newProgress = 25 + Math.floor(startingProgress)
- onProgress(newProgress)
- } else if (data.status === "processing") {
- // 50%-98% range for processing status (estimate-based)
- onStatusChange("processing")
- const processingProgressMax = 48
- const processingProgress =
- (Math.min(attempts, 30) / 30) * processingProgressMax
- newProgress = 50 + Math.floor(processingProgress)
- onProgress(newProgress)
- } else if (data.status === "succeeded") {
- onProgress(100)
- console.log(
- "Transcription succeeded, handling output:",
- data.output,
+ // Timeout check
+ if (
+ attempts >= maxAttempts &&
+ (data.status === "starting" || data.status === "processing")
+ ) {
+ stopPolling()
+ onError("Transcription timed out after several minutes.")
+ onStatusChange("failed")
+ onProgress(0)
+ onApiResponse({
+ timestamp: new Date(),
+ data: { error: "Polling timed out" },
+ })
+ }
+ } catch (error) {
+ consecutiveErrors++
+ console.error(
+ `Polling error (${consecutiveErrors}/${maxConsecutiveErrors}):`,
+ error,
)
- stopPolling()
- onSuccess(data.output)
- } else if (data.status === "failed") {
- console.error("Transcription failed:", data.error)
- stopPolling()
- onStatusChange("failed")
- onProgress(0)
- const transcriptionError = data.error || "Unknown transcription error"
- onError(`Transcription failed: ${transcriptionError}`)
- onApiResponse({
- timestamp: new Date(),
- data: { error: `Transcription Error: ${transcriptionError}` },
- })
- } else if (data.status === "canceled") {
- console.warn("Transcription canceled")
- stopPolling()
- onStatusChange("canceled")
- onProgress(0)
- onError("Transcription was canceled")
- onApiResponse({
- timestamp: new Date(),
- data: { message: "Transcription canceled" },
- })
- }
- // Timeout check
- if (
- attempts >= maxAttempts &&
- (data.status === "starting" || data.status === "processing")
- ) {
- console.error(`Polling timeout after ${attempts} attempts`)
- stopPolling()
- onError("Transcription timed out after several minutes.")
- onStatusChange("failed")
- onProgress(0)
- onApiResponse({
- timestamp: new Date(),
- data: { error: "Polling timed out" },
- })
- }
- } catch (error) {
- consecutiveErrors++
- console.error(`Polling error (${consecutiveErrors}/${maxConsecutiveErrors}):`, error)
-
- if (consecutiveErrors >= maxConsecutiveErrors) {
- const errorInfo = getUserFriendlyErrorMessage(error)
- stopPolling()
- onError(errorInfo.userMessage)
- onStatusChange("failed")
- onProgress(0)
- onApiResponse({
- timestamp: new Date(),
- data: {
- error: `Polling Error: ${errorInfo.userMessage}`,
- isNetworkError: errorInfo.isNetworkError,
- },
- })
- } else {
- console.log(`Polling: Retrying... (${consecutiveErrors}/${maxConsecutiveErrors})`)
- onApiResponse({
- timestamp: new Date(),
- data: {
- error: `Polling retry ${consecutiveErrors}/${maxConsecutiveErrors}: ${error instanceof Error ? error.message : "Unknown error"}`,
- },
- })
+ if (consecutiveErrors >= maxConsecutiveErrors) {
+ const errorInfo = getUserFriendlyErrorMessage(error)
+ stopPolling()
+ onError(errorInfo.userMessage)
+ onStatusChange("failed")
+ onProgress(0)
+ onApiResponse({
+ timestamp: new Date(),
+ data: {
+ error: `Polling Error: ${errorInfo.userMessage}`,
+ isNetworkError: errorInfo.isNetworkError,
+ },
+ })
+ } else {
+ onApiResponse({
+ timestamp: new Date(),
+ data: {
+ error: `Polling retry ${consecutiveErrors}/${maxConsecutiveErrors}: ${error instanceof Error ? error.message : "Unknown error"}`,
+ },
+ })
+ }
+ } finally {
+ isPollInFlight = false
}
}
- }
- // Set up the interval
- pollIntervalRef.current = setInterval(poll, pollIntervalMs)
+ // Set up the interval
+ pollIntervalRef.current = setInterval(poll, pollIntervalMs)
+
+ firstPollTimeoutRef.current = setTimeout(() => poll(), 500)
+ },
+ [
+ stopPolling,
+ onApiResponse,
+ onError,
+ onProgress,
+ onStatusChange,
+ onSuccess,
+ ],
+ )
- // First poll after a short delay to let React settle
- setTimeout(() => {
- console.log(`Executing first poll for ${id}`)
- poll()
- }, 500)
- }
-
- const stopPolling = () => {
- if (pollIntervalRef.current) {
- clearInterval(pollIntervalRef.current)
- pollIntervalRef.current = null
+ // Start polling when predictionId changes
+ useEffect(() => {
+ if (predictionId) {
+ startPolling(predictionId)
+ }
+ return () => {
+ if (pollIntervalRef.current) {
+ clearInterval(pollIntervalRef.current)
+ pollIntervalRef.current = null
+ }
}
- }
+ }, [predictionId, startPolling])
return { stopPolling }
}
diff --git a/src/hooks/useV2Announcement.ts b/src/hooks/useV2Announcement.ts
deleted file mode 100644
index 949230e..0000000
--- a/src/hooks/useV2Announcement.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { useEffect, useState } from "react";
-import { initializeV2Debug } from "../lib/v2-debug";
-
-// Hook to check if V2 announcement should be shown
-export function useV2Announcement() {
- const [shouldShow, setShouldShow] = useState(false);
-
- useEffect(() => {
- // Check if user has seen V2 announcement
- const hasSeenV2 = localStorage.getItem("seenV2");
- if (!hasSeenV2) {
- setShouldShow(true);
- }
-
- // Initialize debug function
- initializeV2Debug();
- }, []);
-
- const hideAnnouncement = () => {
- setShouldShow(false);
- };
-
- return { shouldShow, hideAnnouncement };
-}
diff --git a/src/index.css b/src/index.css
index 295041d..25b64de 100644
--- a/src/index.css
+++ b/src/index.css
@@ -6,72 +6,76 @@
@custom-variant dark (&:is(.dark *));
:root {
- --background: #ffffff;
- --foreground: #111827;
+ --background: #fafbfc;
+ --foreground: #0f172a;
--card: #ffffff;
- --card-foreground: #111827;
+ --card-foreground: #0f172a;
--popover: #ffffff;
- --popover-foreground: #111827;
- --primary: #3b82f6;
+ --popover-foreground: #0f172a;
+ --primary: #2563eb;
--primary-foreground: #ffffff;
- --secondary: #f3f4f6;
- --secondary-foreground: #111827;
- --muted: #f9fafb;
- --muted-foreground: #6b7280;
- --accent: #f3f4f6;
- --accent-foreground: #111827;
- --destructive: #ef4444;
- --border: #e5e7eb;
- --input: #e5e7eb;
- --ring: #3b82f6;
+ --secondary: #f1f5f9;
+ --secondary-foreground: #0f172a;
+ --muted: #f1f5f9;
+ --muted-foreground: #64748b;
+ --accent: #eff6ff;
+ --accent-foreground: #1e40af;
+ --destructive: #dc2626;
+ --success: #16a34a;
+ --warning: #d97706;
+ --border: #e2e8f0;
+ --input: #e2e8f0;
+ --ring: #2563eb;
--radius: 0.625rem;
--chart-1: oklch(0.87 0.12 207);
- --chart-2: oklch(0.80 0.13 212);
+ --chart-2: oklch(0.8 0.13 212);
--chart-3: oklch(0.71 0.13 215);
--chart-4: oklch(0.61 0.11 222);
--chart-5: oklch(0.52 0.09 223);
- --sidebar: #fafafa;
- --sidebar-foreground: #111827;
- --sidebar-primary: #3b82f6;
+ --sidebar: #fafbfc;
+ --sidebar-foreground: #0f172a;
+ --sidebar-primary: #2563eb;
--sidebar-primary-foreground: #ffffff;
- --sidebar-accent: #f3f4f6;
- --sidebar-accent-foreground: #111827;
- --sidebar-border: #e5e7eb;
- --sidebar-ring: #3b82f6;
+ --sidebar-accent: #eff6ff;
+ --sidebar-accent-foreground: #1e40af;
+ --sidebar-border: #e2e8f0;
+ --sidebar-ring: #2563eb;
font-family: "Space Grotesk", sans-serif;
}
.dark {
- --background: #111827;
- --foreground: #f9fafb;
- --card: #1f2937;
- --card-foreground: #f9fafb;
- --popover: #1f2937;
- --popover-foreground: #f9fafb;
+ --background: #0b0f1a;
+ --foreground: #e2e8f0;
+ --card: #131926;
+ --card-foreground: #e2e8f0;
+ --popover: #131926;
+ --popover-foreground: #e2e8f0;
--primary: #3b82f6;
--primary-foreground: #ffffff;
- --secondary: #1f2937;
- --secondary-foreground: #f9fafb;
- --muted: #1f2937;
- --muted-foreground: #9ca3af;
- --accent: #1f2937;
- --accent-foreground: #f9fafb;
+ --secondary: #1e293b;
+ --secondary-foreground: #e2e8f0;
+ --muted: #1e293b;
+ --muted-foreground: #94a3b8;
+ --accent: #172554;
+ --accent-foreground: #93c5fd;
--destructive: #ef4444;
- --border: #374151;
- --input: #374151;
+ --success: #22c55e;
+ --warning: #f59e0b;
+ --border: #1e293b;
+ --input: #1e293b;
--ring: #3b82f6;
--chart-1: oklch(0.87 0.12 207);
- --chart-2: oklch(0.80 0.13 212);
+ --chart-2: oklch(0.8 0.13 212);
--chart-3: oklch(0.71 0.13 215);
--chart-4: oklch(0.61 0.11 222);
--chart-5: oklch(0.52 0.09 223);
- --sidebar: #1f2937;
- --sidebar-foreground: #f9fafb;
+ --sidebar: #131926;
+ --sidebar-foreground: #e2e8f0;
--sidebar-primary: #3b82f6;
--sidebar-primary-foreground: #ffffff;
- --sidebar-accent: #1f2937;
- --sidebar-accent-foreground: #f9fafb;
- --sidebar-border: #374151;
+ --sidebar-accent: #172554;
+ --sidebar-accent-foreground: #93c5fd;
+ --sidebar-border: #1e293b;
--sidebar-ring: #3b82f6;
}
@@ -86,21 +90,12 @@
.dark input[type="tel"],
.dark input[type="url"],
.dark textarea {
- color: #f3f4f6;
+ color: #e2e8f0;
}
.dark select option {
- background-color: #374151;
- color: #f3f4f6;
-}
-
-/* Ad blocker detection element */
-.adsbox {
- height: 1px;
- width: 1px;
- position: absolute;
- left: -10000px;
- top: -10000px;
+ background-color: #1e293b;
+ color: #e2e8f0;
}
@theme inline {
@@ -122,6 +117,8 @@
--color-input: var(--input);
--color-border: var(--border);
--color-destructive: var(--destructive);
+ --color-success: var(--success);
+ --color-warning: var(--warning);
--color-accent-foreground: var(--accent-foreground);
--color-accent: var(--accent);
--color-muted-foreground: var(--muted-foreground);
@@ -153,3 +150,41 @@
@apply bg-background text-foreground;
}
}
+
+@layer components {
+ .legal-doc {
+ @apply text-foreground space-y-5 leading-7;
+ }
+
+ .legal-doc h1 {
+ @apply text-foreground text-3xl font-bold tracking-normal sm:text-4xl;
+ }
+
+ .legal-doc h2 {
+ @apply border-border text-foreground mt-10 border-b pb-2 text-xl font-semibold tracking-normal;
+ }
+
+ .legal-doc h3 {
+ @apply text-primary mt-6 text-base font-semibold tracking-normal;
+ }
+
+ .legal-doc p {
+ @apply text-muted-foreground;
+ }
+
+ .legal-doc a {
+ @apply text-primary font-medium underline-offset-4 hover:underline;
+ }
+
+ .legal-doc ul {
+ @apply border-border bg-card/70 text-muted-foreground space-y-2 rounded-md border p-4 pl-8;
+ }
+
+ .legal-doc li {
+ @apply list-disc pl-1;
+ }
+
+ .legal-doc .legal-updated {
+ @apply border-border bg-muted text-muted-foreground inline-flex rounded-md border px-2.5 py-1 text-sm leading-none;
+ }
+}
diff --git a/src/lib/analytics.ts b/src/lib/analytics.ts
deleted file mode 100644
index a64482a..0000000
--- a/src/lib/analytics.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-let analyticsLoaded = false;
-
-export const loadAnalytics = async () => {
- if (analyticsLoaded) return;
-
- // Load analytics libraries only when needed
- // We're already importing ReactGA directly, so no need to dynamically import it again
-
- // Initialize when loaded
- analyticsLoaded = true;
-};
-
-import Clarity from "@microsoft/clarity";
-import ReactGA from "react-ga4";
-
-// Initialize analytics services
-export const initializeAnalytics = (consent: boolean | string = false) => {
- const optOut = localStorage.getItem("analytics_opt_out");
- const googleAnalyticsId = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID;
-
- if (optOut === "true") {
- // If opted out, initialize GA with consent denied and stop further execution.
- if (googleAnalyticsId) {
- ReactGA.initialize(googleAnalyticsId, {
- gtagOptions: {
- consent_mode: {
- analytics_storage: "denied",
- functionality_storage: "denied",
- ad_storage: "denied",
- },
- },
- });
- }
- return; // Exit early
- }
-
- const clarityId = process.env.NEXT_PUBLIC_MICROSOFT_CLARITY_ID;
-
- // Handle different consent levels
- const fullConsent = consent === true || consent === "true";
- const essentialOnly = consent === "essential";
-
- // Initialize Google Analytics in a basic configuration regardless of consent
- // but with different consent modes
- if (googleAnalyticsId) {
- ReactGA.initialize(googleAnalyticsId, {
- gtagOptions: {
- // Configure consent parameters
- consent_mode: {
- analytics_storage: fullConsent ? "granted" : "denied",
- functionality_storage:
- fullConsent || essentialOnly ? "granted" : "denied",
- ad_storage: "denied", // Always deny ad storage as we don't use ads
- },
- },
- });
-
- // Send initial pageview only with full consent
- if (fullConsent) {
- ReactGA.send({ hitType: "pageview", page: window.location.pathname });
- }
- }
-
- // Only initialize Clarity with full consent
- if (clarityId && fullConsent) {
- // Pass only the project ID string to Clarity.init
- Clarity.init(clarityId);
- }
-};
-
-// Enable analytics tracking when consent is granted
-export const enableAnalytics = () => {
- const optOut = localStorage.getItem("analytics_opt_out");
- if (optOut === "true") {
- return; // Do not enable analytics if user has opted out
- }
-
- const clarityId = process.env.NEXT_PUBLIC_MICROSOFT_CLARITY_ID;
- const googleAnalyticsId = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID;
-
- if (clarityId) {
- // For Clarity, we need to reinitialize with consent
- // Pass only the project ID string to Clarity.init
- Clarity.init(clarityId);
- }
-
- if (googleAnalyticsId && ReactGA.isInitialized) {
- // Update consent status
- ReactGA.gtag("consent", "update", {
- analytics_storage: "granted",
- functionality_storage: "granted",
- });
-
- // Send pageview after consent is granted
- ReactGA.send({ hitType: "pageview", page: window.location.pathname });
- }
-};
-
-// Disable analytics tracking when consent is withdrawn
-export const disableAnalytics = () => {
- const googleAnalyticsId = process.env.NEXT_PUBLIC_GOOGLE_ANALYTICS_ID;
-
- if (googleAnalyticsId && ReactGA.isInitialized) {
- // Update consent status
- ReactGA.gtag("consent", "update", {
- analytics_storage: "denied",
- functionality_storage: "denied",
- });
- }
-
- // For Clarity, we would need to reload the page to stop tracking completely
-};
-
-// Track events (only if consent was given)
-export const trackEvent = (
- category: string,
- action: string,
- label?: string,
-) => {
- const optOut = localStorage.getItem("analytics_opt_out");
- if (optOut === "true") {
- return; // Do not track event if user has opted out
- }
- const consent = localStorage.getItem("cookieConsent");
- if (consent === "true") {
- ReactGA.event({
- category,
- action,
- label,
- });
- }
-};
diff --git a/src/lib/animations.ts b/src/lib/animations.ts
index 09f5e95..149f65f 100644
--- a/src/lib/animations.ts
+++ b/src/lib/animations.ts
@@ -1,25 +1,25 @@
-import type { Variants } from "framer-motion";
+import type { Variants } from "framer-motion"
// Fade in from below
export const fadeInUp: Variants = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
exit: { opacity: 0, y: -20 },
-};
+}
// Slide in from right
export const slideInRight: Variants = {
initial: { opacity: 0, x: 20 },
animate: { opacity: 1, x: 0 },
exit: { opacity: 0, x: 20 },
-};
+}
// Expand from center
export const expandCenter: Variants = {
initial: { opacity: 0, scale: 0.9 },
animate: { opacity: 1, scale: 1 },
exit: { opacity: 0, scale: 1.1 },
-};
+}
// Staggered children animation container
export const staggerContainer: Variants = {
@@ -31,64 +31,64 @@ export const staggerContainer: Variants = {
delayChildren: 0.3,
},
},
-};
+}
// Staggered item
export const staggerItem: Variants = {
initial: { opacity: 0, y: 20 },
animate: { opacity: 1, y: 0 },
-};
+}
// Spring transition presets
export const springTransition = {
type: "spring" as const,
stiffness: 300,
damping: 25,
-};
+}
// Ease transition presets
export const easeTransition = {
type: "tween",
ease: "easeInOut",
duration: 0.4,
-};
+}
// Fade out downward (good for dismissing elements)
export const fadeOutDown: Variants = {
initial: { opacity: 1, y: 0 },
exit: { opacity: 0, y: 20, transition: { duration: 0.2 } },
-};
+}
// Slide out to left (good for page transitions)
export const slideOutLeft: Variants = {
initial: { opacity: 1, x: 0 },
exit: { opacity: 0, x: -100, transition: { duration: 0.3 } },
-};
+}
// Scale down and fade (good for modals/dialogs)
export const scaleDown: Variants = {
initial: { opacity: 1, scale: 1 },
exit: { opacity: 0, scale: 0.95, transition: { duration: 0.2 } },
-};
+}
// Flip out (good for cards)
export const flipOut: Variants = {
initial: { rotateY: 0, opacity: 1 },
exit: { rotateY: 90, opacity: 0, transition: { duration: 0.4 } },
-};
+}
// Add more specific exit transitions
export const exitTransition = {
type: "tween",
ease: "easeInOut",
duration: 0.3,
-};
+}
export const quickExitTransition = {
type: "tween",
ease: "easeOut",
duration: 0.2,
-};
+}
// Scroll animations
export const fadeInOnScroll: Variants = {
@@ -100,7 +100,7 @@ export const fadeInOnScroll: Variants = {
duration: 0.6,
},
},
-};
+}
export const scaleInOnScroll: Variants = {
hidden: { opacity: 0, scale: 0.8 },
@@ -111,7 +111,7 @@ export const scaleInOnScroll: Variants = {
duration: 0.5,
},
},
-};
+}
// Sequential stagger for list items
export const sequentialFadeIn: Variants = {
@@ -123,7 +123,7 @@ export const sequentialFadeIn: Variants = {
delayChildren: 0.2,
},
},
-};
+}
// Item for sequential animations
export const sequentialItem: Variants = {
@@ -135,32 +135,32 @@ export const sequentialItem: Variants = {
duration: 0.5,
},
},
-};
+}
// Gesture animations
export const tapBounce = {
scale: 0.97,
transition: { type: "spring", stiffness: 400, damping: 17 },
-};
+}
export const hoverScale = {
scale: 1.02,
transition: { type: "spring", stiffness: 400, damping: 17 },
-};
+}
export const dragConstraintBounce = {
type: "spring",
damping: 25,
stiffness: 300,
restDelta: 0.001,
-};
+}
// Layout animation helpers
export const smoothLayoutTransition = {
type: "spring",
stiffness: 300,
damping: 30,
-};
+}
// Animation presets
export const presets = {
@@ -168,24 +168,24 @@ export const presets = {
gentleSpring: { type: "spring", stiffness: 100, damping: 20 },
quickEase: { type: "tween", ease: "easeOut", duration: 0.2 },
longEase: { type: "tween", ease: "easeInOut", duration: 0.7 },
-};
+}
// Modal animations
export const modalBackdrop: Variants = {
hidden: { opacity: 0 },
visible: { opacity: 1 },
exit: { opacity: 0 },
-};
+}
export const modalContent: Variants = {
hidden: { opacity: 0, scale: 0.8, y: 20 },
visible: { opacity: 1, scale: 1, y: 0 },
exit: { opacity: 0, scale: 0.8, y: 20 },
-};
+}
// Spring transition for modals
export const modalTransition = {
type: "spring" as const,
damping: 25,
stiffness: 300,
-};
+}
diff --git a/src/lib/error-utils.ts b/src/lib/error-utils.ts
index 1a8ada7..0cf8d40 100644
--- a/src/lib/error-utils.ts
+++ b/src/lib/error-utils.ts
@@ -3,9 +3,9 @@
*/
export interface NetworkError {
- isNetworkError: boolean;
- userMessage: string;
- originalError: unknown;
+ isNetworkError: boolean
+ userMessage: string
+ originalError: unknown
}
/**
@@ -18,11 +18,11 @@ export function isNetworkError(error: unknown): boolean {
error.message.includes("fetch") ||
error.message.includes("network") ||
error.message.includes("Failed to fetch")
- );
+ )
}
if (error instanceof Error) {
- const message = error.message.toLowerCase();
+ const message = error.message.toLowerCase()
return (
message.includes("network") ||
message.includes("connection") ||
@@ -30,10 +30,10 @@ export function isNetworkError(error: unknown): boolean {
message.includes("timeout") ||
message.includes("enotfound") ||
message.includes("econnrefused")
- );
+ )
}
- return false;
+ return false
}
/**
@@ -47,7 +47,7 @@ export function getUserFriendlyErrorMessage(error: unknown): NetworkError {
userMessage:
"Lost internet connection. Please check your network and try again.",
originalError: error,
- };
+ }
}
// Check for specific HTTP error codes
@@ -58,55 +58,55 @@ export function getUserFriendlyErrorMessage(error: unknown): NetworkError {
userMessage:
"Our servers are having trouble. Please try again in a moment.",
originalError: error,
- };
+ }
}
if (error.status === 429) {
return {
isNetworkError: false,
- userMessage:
- "Too many requests. Please wait a moment and try again.",
+ userMessage: "Too many requests. Please wait a moment and try again.",
originalError: error,
- };
+ }
}
if (error.status === 413) {
return {
isNetworkError: false,
- userMessage:
- "The audio file is too large. Please try a smaller file.",
+ userMessage: "The audio file is too large. Please try a smaller file.",
originalError: error,
- };
+ }
}
}
// Check error message for specific patterns
if (error instanceof Error) {
- const message = error.message;
+ const message = error.message
if (message.includes("413") || message.includes("too large")) {
return {
isNetworkError: false,
- userMessage:
- "The audio file is too large. Please try a smaller file.",
+ userMessage: "The audio file is too large. Please try a smaller file.",
originalError: error,
- };
+ }
}
if (message.includes("429") || message.includes("rate limit")) {
return {
isNetworkError: false,
- userMessage:
- "Too many requests. Please wait a moment and try again.",
+ userMessage: "Too many requests. Please wait a moment and try again.",
originalError: error,
- };
+ }
}
- if (message.includes("500") || message.includes("502") || message.includes("503")) {
+ if (
+ message.includes("500") ||
+ message.includes("502") ||
+ message.includes("503")
+ ) {
return {
isNetworkError: false,
userMessage:
"Our servers are having trouble. Please try again in a moment.",
originalError: error,
- };
+ }
}
// Return the error message as-is if it's already user-friendly
@@ -115,7 +115,7 @@ export function getUserFriendlyErrorMessage(error: unknown): NetworkError {
isNetworkError: false,
userMessage: message,
originalError: error,
- };
+ }
}
}
@@ -125,7 +125,7 @@ export function getUserFriendlyErrorMessage(error: unknown): NetworkError {
userMessage:
"Something went wrong. Please try again or contact support if the issue persists.",
originalError: error,
- };
+ }
}
/**
@@ -136,15 +136,15 @@ export async function fetchWithNetworkErrorHandling(
options?: RequestInit,
): Promise {
try {
- const response = await fetch(url, options);
- return response;
+ const response = await fetch(url, options)
+ return response
} catch (error) {
// Re-throw with additional context
if (isNetworkError(error)) {
throw new Error(
"Lost internet connection. Please check your network and try again.",
- );
+ )
}
- throw error;
+ throw error
}
}
diff --git a/src/lib/export-formats.ts b/src/lib/export-formats.ts
new file mode 100644
index 0000000..e5607dd
--- /dev/null
+++ b/src/lib/export-formats.ts
@@ -0,0 +1,208 @@
+import { Document, HeadingLevel, Packer, Paragraph, TextRun } from "docx"
+import type {
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
+import { formatDuration } from "./format-utils"
+
+const splitTimestamp = (seconds: number) => {
+ const totalMs = Math.round(seconds * 1000)
+ const ms = totalMs % 1000
+ const totalSecs = Math.floor(totalMs / 1000)
+ return {
+ hours: Math.floor(totalSecs / 3600),
+ minutes: Math.floor((totalSecs % 3600) / 60),
+ secs: totalSecs % 60,
+ ms,
+ }
+}
+
+export const formatTimeForSRT = (seconds: number): string => {
+ const { hours, minutes, secs, ms } = splitTimestamp(seconds)
+ return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")},${ms.toString().padStart(3, "0")}`
+}
+
+export const formatTimeForVTT = (seconds: number): string => {
+ const { hours, minutes, secs, ms } = splitTimestamp(seconds)
+ return `${hours.toString().padStart(2, "0")}:${minutes.toString().padStart(2, "0")}:${secs.toString().padStart(2, "0")}.${ms.toString().padStart(3, "0")}`
+}
+
+export const generateSRT = (
+ transcription: string,
+ segments?: TranscriptionSegment[],
+): string => {
+ if (!segments || segments.length === 0) {
+ return "1\n00:00:00,000 --> 00:00:00,100\n" + transcription
+ }
+
+ return segments
+ .map((segment, index) => {
+ const startTime = formatTimeForSRT(segment.start)
+ const endTime = formatTimeForSRT(segment.end)
+ const speakerPrefix = segment.speaker
+ ? `[Speaker ${segment.speaker}] `
+ : ""
+ return `${index + 1}\n${startTime} --> ${endTime}\n${speakerPrefix}${segment.text.trim()}\n`
+ })
+ .join("\n")
+}
+
+export const generateVTT = (
+ transcription: string,
+ segments?: TranscriptionSegment[],
+): string => {
+ if (!segments || segments.length === 0) {
+ return "WEBVTT\n\n00:00:00.000 --> 00:00:00.100\n" + transcription
+ }
+
+ let vtt = "WEBVTT\n\n"
+ vtt += segments
+ .map((segment) => {
+ const startTime = formatTimeForVTT(segment.start)
+ const endTime = formatTimeForVTT(segment.end)
+ const speakerPrefix = segment.speaker
+ ? `[Speaker ${segment.speaker}] `
+ : ""
+ return `${startTime} --> ${endTime}\n${speakerPrefix}${segment.text.trim()}\n`
+ })
+ .join("\n")
+ return vtt
+}
+
+export const generateJSON = (
+ transcription: string,
+ segments?: TranscriptionSegment[],
+ intelligence?: TranscriptionIntelligence,
+): string => {
+ return JSON.stringify(
+ {
+ exportedAt: new Date().toISOString(),
+ transcription,
+ segments: segments || [],
+ intelligence: intelligence || undefined,
+ metadata: {
+ wordCount: transcription.trim().split(/\s+/).filter(Boolean).length,
+ characterCount: transcription.length,
+ segmentCount: segments?.length || 0,
+ },
+ },
+ null,
+ 2,
+ )
+}
+
+// Sanitize a CSV cell value: quote the value and escape embedded quotes.
+// Also guard against spreadsheet formula injection by prefixing dangerous
+// leading characters with a tab so they are treated as plain text.
+const sanitizeCsvCell = (value: string): string => {
+ const escaped = value.replace(/"/g, '""')
+ const safe = /^[=+\-@\t\r]/.test(escaped) ? `\t${escaped}` : escaped
+ return `"${safe}"`
+}
+
+export const generateCSV = (
+ transcription: string,
+ segments?: TranscriptionSegment[],
+): string => {
+ const header = "id,start,end,duration,text"
+ if (!segments || segments.length === 0) {
+ return `${header}\n1,0,0,0,${sanitizeCsvCell(transcription)}`
+ }
+ const rows = segments.map(
+ (seg, index) =>
+ `${index + 1},${seg.start.toFixed(3)},${seg.end.toFixed(3)},${(seg.end - seg.start).toFixed(3)},${sanitizeCsvCell(seg.text)}`,
+ )
+ return [header, ...rows].join("\n")
+}
+
+export const generateMarkdown = (
+ transcription: string,
+ segments?: TranscriptionSegment[],
+ intelligence?: TranscriptionIntelligence,
+): string => {
+ let md = "# Transcription\n\n"
+ md += `*Exported: ${new Date().toLocaleString()}*\n\n`
+ md += "---\n\n"
+
+ if (intelligence?.summary) {
+ md += "## Summary\n\n"
+ md += `${intelligence.summary}\n\n`
+ md += "---\n\n"
+ }
+
+ if (intelligence?.chapters && intelligence.chapters.length > 0) {
+ md += "## Chapters\n\n"
+ intelligence.chapters.forEach((ch) => {
+ md += `### ${ch.headline}\n\n`
+ md += `*${formatDuration(ch.start)} - ${formatDuration(ch.end)}*\n\n`
+ md += `${ch.summary}\n\n`
+ })
+ md += "---\n\n"
+ }
+
+ if (segments && segments.length > 0) {
+ md += "## Transcript\n\n"
+ segments.forEach((seg) => {
+ const speakerPrefix = seg.speaker ? `**Speaker ${seg.speaker}:** ` : ""
+ md += `**[${formatDuration(seg.start)} - ${formatDuration(seg.end)}]** ${speakerPrefix}\n\n`
+ md += `${seg.text.trim()}\n\n`
+ })
+ } else {
+ md += "## Full Transcript\n\n"
+ md += transcription
+ }
+
+ md += "\n---\n\n"
+ md += `*Word count: ${transcription.trim().split(/\s+/).filter(Boolean).length}*\n`
+ return md
+}
+
+export const generateDOCX = async (
+ transcription: string,
+ _segments?: TranscriptionSegment[],
+ intelligence?: TranscriptionIntelligence,
+): Promise => {
+ const docChildren: Paragraph[] = [
+ new Paragraph({
+ text: "Transcription",
+ heading: HeadingLevel.TITLE,
+ }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ]
+
+ if (intelligence?.summary) {
+ docChildren.push(
+ new Paragraph({ text: "Summary", heading: HeadingLevel.HEADING_1 }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ...intelligence.summary
+ .split("\n")
+ .filter(Boolean)
+ .map(
+ (line: string) =>
+ new Paragraph({
+ children: [new TextRun(line.replace(/^[-*\u2022]\s*/, ""))],
+ }),
+ ),
+ new Paragraph({ children: [new TextRun("")] }),
+ )
+ }
+
+ docChildren.push(
+ new Paragraph({ text: "Transcript", heading: HeadingLevel.HEADING_1 }),
+ new Paragraph({ children: [new TextRun("")] }),
+ ...transcription.split("\n").map(
+ (line: string) =>
+ new Paragraph({
+ children: [new TextRun(line)],
+ }),
+ ),
+ )
+
+ const doc = new Document({
+ sections: [{ children: docChildren }],
+ })
+ const buffer = await Packer.toBuffer(doc)
+ return new Blob([new Uint8Array(buffer)], {
+ type: "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
+ })
+}
diff --git a/src/lib/file-format-utils.ts b/src/lib/file-format-utils.ts
index 97d5d5e..618a455 100644
--- a/src/lib/file-format-utils.ts
+++ b/src/lib/file-format-utils.ts
@@ -5,10 +5,33 @@
export const SUPPORTED_FORMATS = [
// Audio
- "mp3", "wav", "flac", "ogg", "m4a", "aac", "wma", "aiff",
- "opus", "amr", "webm", "caf", "3gp", "ape", "au", "gsm", "ra", "voc",
+ "mp3",
+ "wav",
+ "flac",
+ "ogg",
+ "m4a",
+ "aac",
+ "wma",
+ "aiff",
+ "opus",
+ "amr",
+ "webm",
+ "caf",
+ "3gp",
+ "ape",
+ "au",
+ "gsm",
+ "ra",
+ "voc",
// Video (AssemblyAI extracts audio automatically)
- "mp4", "mov", "avi", "mkv", "wmv", "flv", "ts", "m4v",
+ "mp4",
+ "mov",
+ "avi",
+ "mkv",
+ "wmv",
+ "flv",
+ "ts",
+ "m4v",
] as const
export type SupportedFormat = (typeof SUPPORTED_FORMATS)[number]
@@ -36,7 +59,8 @@ export function validateFileFormat(file: File | string): {
if (!extension) {
return {
valid: false,
- error: "File has no extension. Please ensure your file has a valid audio format extension.",
+ error:
+ "File has no extension. Please ensure your file has a valid audio format extension.",
}
}
diff --git a/src/lib/firebase-proxy.ts b/src/lib/firebase-proxy.ts
index 3499a36..3f72129 100644
--- a/src/lib/firebase-proxy.ts
+++ b/src/lib/firebase-proxy.ts
@@ -1,5 +1,3 @@
-import { toast } from "sonner";
-
/**
* Utility functions for Firebase Storage and PDF generation
*/
@@ -10,7 +8,7 @@ import { toast } from "sonner";
export async function proxyFirebaseDownload(url: string): Promise {
try {
// Determine server URL based on environment
- const serverUrl = determineServerUrl();
+ const serverUrl = determineServerUrl()
const response = await fetch(`${serverUrl}/api/firebase-proxy`, {
method: "POST",
@@ -18,54 +16,16 @@ export async function proxyFirebaseDownload(url: string): Promise {
"Content-Type": "application/json",
},
body: JSON.stringify({ url }),
- });
-
- if (!response.ok) {
- throw new Error(`Proxy failed with status: ${response.status}`);
- }
-
- return await response.blob();
- } catch (error) {
- console.error("Error proxying Firebase download:", error);
- throw error;
- }
-}
-
-/**
- * Generate PDF using Printerz service
- */
-export async function generatePdf(
- templateId: string,
- data: Record,
-): Promise {
- try {
- // Determine server URL based on environment
- const serverUrl = determineServerUrl();
-
- console.log(
- `Generating PDF with template ${templateId} via ${serverUrl}/api/printerz/render`,
- );
-
- const response = await fetch(`${serverUrl}/api/printerz/render`, {
- method: "POST",
- headers: {
- "Content-Type": "application/json",
- },
- body: JSON.stringify({
- templateId,
- printerzData: data,
- }),
- });
+ })
if (!response.ok) {
- toast.error("Failed to generate PDF");
- throw new Error(`PDF generation failed with status: ${response.status}`);
+ throw new Error(`Proxy failed with status: ${response.status}`)
}
- return await response.blob();
+ return await response.blob()
} catch (error) {
- console.error("Error generating PDF:", error);
- throw error;
+ console.error("Error proxying Firebase download:", error)
+ throw error
}
}
@@ -76,14 +36,14 @@ export function determineServerUrl(): string {
// Check if we're running in development or production
const isLocalDev =
window.location.hostname === "localhost" ||
- window.location.hostname === "127.0.0.1";
+ window.location.hostname === "127.0.0.1"
if (isLocalDev) {
// In development, the server is likely running on port 3001
- return "http://localhost:3001";
+ return "http://localhost:3001"
} else {
// In production, the API endpoints are on the same domain
- return "";
+ return ""
}
}
@@ -95,19 +55,19 @@ export async function createDownloadableDataUrl(
filename: string,
): Promise {
return new Promise((resolve) => {
- const reader = new FileReader();
+ const reader = new FileReader()
reader.onloadend = function () {
- const a = document.createElement("a");
- a.href = reader.result as string;
- a.download = filename;
- document.body.appendChild(a);
- a.click();
+ const a = document.createElement("a")
+ a.href = reader.result as string
+ a.download = filename
+ document.body.appendChild(a)
+ a.click()
setTimeout(() => {
- document.body.removeChild(a);
- resolve();
- }, 100);
- };
- reader.readAsDataURL(blob);
- });
+ document.body.removeChild(a)
+ resolve()
+ }, 100)
+ }
+ reader.readAsDataURL(blob)
+ })
}
diff --git a/src/lib/firebase-utils.ts b/src/lib/firebase-utils.ts
index 94a03dc..f5e0938 100644
--- a/src/lib/firebase-utils.ts
+++ b/src/lib/firebase-utils.ts
@@ -1,30 +1,16 @@
-import { initializeApp, FirebaseApp } from "firebase/app";
-import {
- getStorage,
- ref,
- uploadBytes,
- getDownloadURL,
- FirebaseStorage,
-} from "firebase/storage";
-import { getFirebaseConfig } from "@/lib/firebase";
-
-let storage: FirebaseStorage; // Cache storage instance
-
-const initializeFirebase = (): FirebaseStorage => {
- if (!storage) {
- const firebaseApp: FirebaseApp = initializeApp(getFirebaseConfig());
- storage = getStorage(firebaseApp);
- console.log("Firebase initialized for utils.");
- }
- return storage;
-};
+import { getDownloadURL, ref, uploadBytes } from "firebase/storage"
+import { getStorage } from "@/lib/firebase"
const generateUniqueFilename = (originalName: string): string => {
- const timestamp = Date.now();
- const randomString = Math.random().toString(36).substring(2, 8);
- const fileExtension = originalName?.split(".").pop() || "audio";
- return `audio_${timestamp}_${randomString}.${fileExtension}`;
-};
+ const timestamp = Date.now()
+ const randomBytes = new Uint8Array(4)
+ crypto.getRandomValues(randomBytes)
+ const randomString = Array.from(randomBytes)
+ .map((b) => b.toString(16).padStart(2, "0"))
+ .join("")
+ const fileExtension = originalName?.split(".").pop() || "audio"
+ return `audio_${timestamp}_${randomString}.${fileExtension}`
+}
/**
* Uploads base64 encoded data to Firebase Storage.
@@ -36,42 +22,42 @@ export async function uploadBase64ToFirebase(
base64Data: string,
mimeType: string = "audio/mpeg",
): Promise<{ url: string; path: string }> {
- const storageInstance = initializeFirebase();
try {
- const base64WithoutPrefix = base64Data.replace(/^data:.*;base64,/, "");
+ const storageInstance = getStorage()
+ const base64WithoutPrefix = base64Data.replace(/^data:.*;base64,/, "")
// Decode base64 string to Uint8Array
- const byteCharacters = atob(base64WithoutPrefix);
- const byteNumbers = new Array(byteCharacters.length);
+ const byteCharacters = atob(base64WithoutPrefix)
+ const byteNumbers = new Array(byteCharacters.length)
for (let i = 0; i < byteCharacters.length; i++) {
- byteNumbers[i] = byteCharacters.charCodeAt(i);
+ byteNumbers[i] = byteCharacters.codePointAt(i) ?? 0
}
- const byteArray = new Uint8Array(byteNumbers);
+ const byteArray = new Uint8Array(byteNumbers)
- const blob = new Blob([byteArray], { type: mimeType });
+ const blob = new Blob([byteArray], { type: mimeType })
- const filename = generateUniqueFilename("upload");
- const filePath = `temp_audio/${filename}`; // Consider making the folder configurable
- const fileRef = ref(storageInstance, filePath);
+ const filename = generateUniqueFilename("upload")
+ const filePath = `temp_audio/${filename}` // Consider making the folder configurable
+ const fileRef = ref(storageInstance, filePath)
console.log(
`Uploading blob (${(blob.size / 1024 / 1024).toFixed(2)} MB) to Firebase path: ${filePath}`,
- );
- const snapshot = await uploadBytes(fileRef, blob);
- console.log("Upload successful:", snapshot.metadata.fullPath);
+ )
+ const snapshot = await uploadBytes(fileRef, blob)
+ console.log("Upload successful:", snapshot.metadata.fullPath)
- const downloadURL = await getDownloadURL(snapshot.ref);
- console.log("Firebase download URL obtained:", downloadURL);
+ const downloadURL = await getDownloadURL(snapshot.ref)
+ console.log("Firebase upload complete, download URL obtained")
- return { url: downloadURL, path: filePath };
+ return { url: downloadURL, path: filePath }
} catch (error: unknown) {
- console.error("Firebase upload error:", error);
+ console.error("Firebase upload error:", error)
// Enhance error reporting
const errorMessage =
- error instanceof Error ? error.message : "Unknown Firebase upload error";
- const errorCode = (error as { code?: string }).code || "N/A";
+ error instanceof Error ? error.message : "Unknown Firebase upload error"
+ const errorCode = (error as { code?: string }).code || "N/A"
throw new Error(
`Firebase upload failed (Code: ${errorCode}): ${errorMessage}`,
- );
+ )
}
}
diff --git a/src/lib/firebase.ts b/src/lib/firebase.ts
index bf05150..2be8073 100644
--- a/src/lib/firebase.ts
+++ b/src/lib/firebase.ts
@@ -1,5 +1,5 @@
-import { initializeApp } from "firebase/app";
-import { getStorage } from "firebase/storage";
+import { type FirebaseApp, getApps, initializeApp } from "firebase/app"
+import { type FirebaseStorage, getStorage } from "firebase/storage"
const firebaseConfig = {
apiKey: process.env.NEXT_PUBLIC_FIREBASE_API_KEY,
@@ -8,11 +8,25 @@ const firebaseConfig = {
storageBucket: process.env.NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.NEXT_PUBLIC_FIREBASE_APP_ID,
-};
+}
-const app = initializeApp(firebaseConfig);
-const storage = getStorage(app);
+let app: FirebaseApp
+let storage: FirebaseStorage
-export const getFirebaseConfig = () => firebaseConfig;
+const getApp = (): FirebaseApp => {
+ if (!app) {
+ const existing = getApps()
+ app = existing.length > 0 ? existing[0] : initializeApp(firebaseConfig)
+ }
+ return app
+}
-export { storage };
+const getFirebaseStorage = (): FirebaseStorage => {
+ if (!storage) {
+ storage = getStorage(getApp())
+ }
+ return storage
+}
+
+export { getApp, getFirebaseStorage as getStorage }
+export const getFirebaseConfig = () => firebaseConfig
diff --git a/src/lib/format-utils.ts b/src/lib/format-utils.ts
new file mode 100644
index 0000000..faddf39
--- /dev/null
+++ b/src/lib/format-utils.ts
@@ -0,0 +1,12 @@
+export const formatDuration = (seconds?: number): string => {
+ if (seconds == null || !Number.isFinite(seconds)) return "--:--"
+ const mins = Math.floor(seconds / 60)
+ const secs = Math.floor(seconds % 60)
+ return `${mins}:${secs.toString().padStart(2, "0")}`
+}
+
+export const formatFileSize = (bytes?: number): string => {
+ if (bytes == null || !Number.isFinite(bytes)) return "--"
+ const mb = bytes / (1024 * 1024)
+ return `${mb.toFixed(1)} MB`
+}
diff --git a/src/lib/pdf-generation.ts b/src/lib/pdf-generation.ts
deleted file mode 100644
index 3b90825..0000000
--- a/src/lib/pdf-generation.ts
+++ /dev/null
@@ -1,279 +0,0 @@
-import { toast } from "sonner";
-import { jsPDF } from "jspdf";
-import "jspdf-autotable";
-
-export const generatePdf = async (
- _templateId: string,
- data: Record,
-): Promise => {
- // Use true PDF generation with jsPDF
- console.log("Using local PDF generation");
- return await generatePdfLocally(data);
-};
-
-// Helper to add header and date
-const addHeaderAndDate = (
- doc: jsPDF,
- title: string,
- formattedDate: string,
- margin: number,
- pageWidth: number,
-) => {
- doc.setFontSize(24);
- doc.setTextColor(0, 102, 204); // #0066cc
- doc.text(title, margin, margin + 10);
-
- doc.setFontSize(10);
- doc.setTextColor(119, 119, 119); // #777777
- const dateWidth = doc.getTextWidth(formattedDate);
- doc.text(formattedDate, pageWidth - margin - dateWidth, margin + 10);
-
- doc.setDrawColor(0, 102, 204); // #0066cc
- doc.setLineWidth(1);
- doc.line(margin, margin + 20, pageWidth - margin, margin + 20);
-};
-
-// Helper to add footer
-const addFooter = (
- doc: jsPDF,
- pageHeight: number,
- margin: number,
- pageWidth: number,
- footerText: string,
-) => {
- doc.setFontSize(8);
- doc.setTextColor(119, 119, 119); // #777777
-
- doc.setDrawColor(221, 221, 221); // #dddddd
- doc.setLineWidth(0.5);
- doc.line(
- margin,
- pageHeight - margin - 20,
- pageWidth - margin,
- pageHeight - margin - 20,
- );
-
- const footerWidth = doc.getTextWidth(footerText);
- const footerX = (pageWidth - footerWidth) / 2;
-
- doc.text(footerText, footerX, pageHeight - margin - 5);
-};
-
-// Helper to render content with page breaks
-const renderContent = (
- doc: jsPDF,
- contentText: string,
- isRTL: boolean,
- margin: number,
- usableWidth: number,
- pageHeight: number,
- lineHeight: number,
-) => {
- let verticalPosition = margin + 40;
- let currentPage = 1;
-
- const lines = doc.splitTextToSize(contentText, usableWidth);
-
- for (let i = 0; i < lines.length; i++) {
- if (verticalPosition > pageHeight - margin) {
- doc.addPage();
- currentPage++;
- verticalPosition = margin + 40;
- }
-
- let xPosition = margin;
- if (isRTL) {
- const lineWidth = doc.getTextWidth(lines[i]);
- xPosition = doc.internal.pageSize.getWidth() - margin - lineWidth;
- }
-
- doc.text(lines[i], xPosition, verticalPosition);
- verticalPosition += lineHeight;
- }
- return currentPage; // Return the total number of pages
-};
-
-// Client-side PDF generation using jsPDF with proper font handling
-const generatePdfLocally = async (
- data: Record,
-): Promise => {
- const toastId = toast.loading("Generating PDF...");
-
- try {
- console.log("Generating PDF using jsPDF");
-
- const title = (data.title as string) || "Transcription";
- const contentText = (data.content as string) || "";
-
- // Check for RTL languages
- const containsArabic = /[\u0600-\u06FF]/.test(contentText);
- const containsHebrew = /[\u0590-\u05FF]/.test(contentText);
- const isRTL = containsArabic || containsHebrew;
-
- // Format current date
- const today = new Date();
- const options: Intl.DateTimeFormatOptions = {
- weekday: "short",
- year: "numeric",
- month: "short",
- day: "numeric",
- hour: "2-digit",
- minute: "2-digit",
- };
- const formattedDate = today.toLocaleDateString("en-US", options);
-
- // Create a PDF document with jsPDF
- const doc = new jsPDF({
- orientation: "portrait",
- unit: "pt",
- format: "a4",
- putOnlyUsedFonts: true,
- compress: true,
- });
-
- // Define page dimensions
- const pageWidth = doc.internal.pageSize.getWidth();
- const pageHeight = doc.internal.pageSize.getHeight();
- const margin = 40;
- const usableWidth = pageWidth - 2 * margin;
-
- // Add initial header and date
- addHeaderAndDate(doc, title, formattedDate, margin, pageWidth);
-
- // Add content (with proper line breaks and page handling)
- doc.setTextColor(51, 51, 51); // #333333
- doc.setFontSize(12);
- const lineHeight = 14;
-
- const totalPages = renderContent(
- doc,
- contentText,
- isRTL,
- margin,
- usableWidth,
- pageHeight,
- lineHeight,
- );
-
- // Add footer to each page
- const footerText =
- "Generated with Transcriptr (https://transcriptr.aramb.dev)";
- for (let i = 1; i <= totalPages; i++) {
- doc.setPage(i);
- addFooter(doc, pageHeight, margin, pageWidth, footerText);
- }
-
- // Convert jsPDF document to blob
- const pdfBlob = doc.output("blob");
-
- toast.success("PDF generated successfully", { id: toastId });
- console.log(`PDF document generated, size: ${pdfBlob.size} bytes`);
-
- return pdfBlob;
- } catch (error) {
- console.error("Error generating PDF document:", error);
-
- // Fallback to HTML if PDF generation fails
- try {
- console.log("Falling back to HTML document generation");
-
- const title = (data.title as string) || "Transcription";
- const contentText = (data.content as string) || "";
-
- // Check for RTL languages
- const containsArabic = /[\u0600-\u06FF]/.test(contentText);
- const containsHebrew = /[\u0590-\u05FF]/.test(contentText);
- const isRTL = containsArabic || containsHebrew;
-
- // Format current date
- const today = new Date();
- const options: Intl.DateTimeFormatOptions = {
- weekday: "short",
- year: "numeric",
- month: "short",
- day: "numeric",
- hour: "2-digit",
- minute: "2-digit",
- };
- const formattedDate = today.toLocaleDateString("en-US", options);
-
- // Create HTML with proper styling and UTF-8 encoding
- const htmlContent = `
-
-
-
-
- ${title}
-
-
-
-
- ${contentText}
-
-
-
- `;
-
- // Convert HTML to Blob
- const blob = new Blob([htmlContent], { type: "text/html" });
-
- toast.warning("PDF generation failed, providing HTML document instead", {
- id: toastId,
- });
- toast.info(
- "HTML document preserves all characters correctly for multilingual support",
- { duration: 5000 },
- );
-
- console.log(`Fallback HTML document generated, size: ${blob.size} bytes`);
- return blob;
- } catch (fallbackError) {
- console.error("Fallback HTML generation also failed:", fallbackError);
- const errorMessage =
- error instanceof Error ? error.message : "Failed to generate document";
- toast.error(errorMessage, { id: toastId });
- throw error;
- }
- }
-};
diff --git a/src/lib/persistence-service.ts b/src/lib/persistence-service.ts
index 5d7ab97..01017b7 100644
--- a/src/lib/persistence-service.ts
+++ b/src/lib/persistence-service.ts
@@ -3,48 +3,51 @@
* Uses IndexedDB for data storage and cookies for session identification
*/
-import { TranscriptionStatus } from "@/services/transcription";
-import type { TranscriptionSegment, TranscriptionIntelligence } from "@/types/transcription";
+import { TranscriptionStatus } from "@/services/transcription"
+import type {
+ TranscriptionIntelligence,
+ TranscriptionSegment,
+} from "@/types/transcription"
-export type { TranscriptionSegment };
+export type { TranscriptionSegment } from "@/types/transcription"
export interface TranscriptionSession {
- id: string; // Unique session ID
- status: TranscriptionStatus; // Current status
- predictionId: string | null; // Transcription job ID
- progress: number; // Progress percentage
- firebaseFilePath: string | null; // Path to temp file if applicable
- createdAt: number; // Timestamp
- lastUpdatedAt: number; // Last activity timestamp
- expiresAt: number; // When this session should expire (24 hours by default)
+ id: string // Unique session ID
+ status: TranscriptionStatus // Current status
+ predictionId: string | null // Transcription job ID
+ progress: number // Progress percentage
+ firebaseFilePath: string | null // Path to temp file if applicable
+ createdAt: number // Timestamp
+ lastUpdatedAt: number // Last activity timestamp
+ expiresAt: number // When this session should expire (24 hours by default)
audioSource: {
- type: "file" | "url";
- name?: string; // Original filename
- size?: number; // File size
- url?: string; // URL for audio if applicable
- duration?: number; // Audio duration in seconds
- };
+ type: "file" | "url"
+ name?: string // Original filename
+ size?: number // File size
+ url?: string // URL for audio if applicable
+ duration?: number // Audio duration in seconds
+ }
options: {
// Transcription options
- language: string;
- diarize: boolean;
- };
+ language: string
+ diarize: boolean
+ }
apiResponses?: Array<{
// Optional API response history
- timestamp: Date;
- data: Record;
- }>;
- result?: string; // Final transcription result if available
- segments?: TranscriptionSegment[]; // Transcription segments with timestamps
- intelligence?: TranscriptionIntelligence; // AI intelligence data
+ timestamp: Date
+ data: Record
+ }>
+ result?: string // Final transcription result if available
+ segments?: TranscriptionSegment[] // Transcription segments with timestamps
+ intelligence?: TranscriptionIntelligence // AI intelligence data
}
// Constants
-const DB_NAME = "transcriptr-db";
-const STORE_NAME = "transcription-sessions";
-const DB_VERSION = 1;
-const SESSION_COOKIE_NAME = "transcriptr_session_id";
-const DEFAULT_SESSION_EXPIRY_HOURS = 24;
+const DB_NAME = "transcriptr-db"
+const STORE_NAME = "transcription-sessions"
+const DB_VERSION = 1
+const SESSION_COOKIE_NAME = "transcriptr_session_id"
+const DEFAULT_SESSION_EXPIRY_HOURS = 24
/**
* Initialize the IndexedDB database
@@ -52,74 +55,78 @@ const DEFAULT_SESSION_EXPIRY_HOURS = 24;
const initDb = (): Promise => {
return new Promise((resolve, reject) => {
// Check for IndexedDB support
- if (!window.indexedDB) {
- console.error("Your browser doesn't support IndexedDB");
- reject(new Error("IndexedDB not supported"));
- return;
+ if (!globalThis.indexedDB) {
+ console.error("Your browser doesn't support IndexedDB")
+ reject(new Error("IndexedDB not supported"))
+ return
}
- const request = window.indexedDB.open(DB_NAME, DB_VERSION);
+ const request = globalThis.indexedDB.open(DB_NAME, DB_VERSION)
request.onerror = (event) => {
- console.error("Database error:", event);
- reject(new Error("Could not open IndexedDB"));
- };
+ console.error("Database error:", event)
+ reject(new Error("Could not open IndexedDB"))
+ }
request.onsuccess = (event) => {
- const db = (event.target as IDBOpenDBRequest).result;
- resolve(db);
- };
+ const db = (event.target as IDBOpenDBRequest).result
+ resolve(db)
+ }
request.onupgradeneeded = (event) => {
- const db = (event.target as IDBOpenDBRequest).result;
+ const db = (event.target as IDBOpenDBRequest).result
// Create object store for sessions
if (!db.objectStoreNames.contains(STORE_NAME)) {
- const store = db.createObjectStore(STORE_NAME, { keyPath: "id" });
+ const store = db.createObjectStore(STORE_NAME, { keyPath: "id" })
// Create indexes for faster queries
- store.createIndex("status", "status", { unique: false });
- store.createIndex("expiresAt", "expiresAt", { unique: false });
- store.createIndex("predictionId", "predictionId", { unique: false });
+ store.createIndex("status", "status", { unique: false })
+ store.createIndex("expiresAt", "expiresAt", { unique: false })
+ store.createIndex("predictionId", "predictionId", { unique: false })
}
- };
- });
-};
+ }
+ })
+}
/**
* Create a new session ID and store in cookie
*/
export const createSessionId = (): string => {
- const timestamp = Date.now();
- const randomString = Math.random().toString(36).substring(2, 10);
- const sessionId = `${timestamp}-${randomString}`;
+ const timestamp = Date.now()
+ const randomBytes = new Uint8Array(5)
+ crypto.getRandomValues(randomBytes)
+ const randomString = Array.from(randomBytes)
+ .map((b) => b.toString(16).padStart(2, "0"))
+ .join("")
+ const sessionId = `${timestamp}-${randomString}`
// Set session cookie
- document.cookie = `${SESSION_COOKIE_NAME}=${sessionId}; path=/; max-age=${60 * 60 * 24}; SameSite=Lax`;
+ document.cookie = `${SESSION_COOKIE_NAME}=${sessionId}; path=/; max-age=${60 * 60 * 24}; SameSite=Lax`
- return sessionId;
-};
+ return sessionId
+}
/**
* Get current session ID from cookie
*/
export const getSessionId = (): string | null => {
- const cookies = document.cookie.split(";");
+ const cookies = document.cookie.split(";")
for (const cookie of cookies) {
- const [name, value] = cookie.trim().split("=");
+ const [name, value] = cookie.trim().split("=")
if (name === SESSION_COOKIE_NAME) {
- return value;
+ return value
}
}
- return null;
-};
+ return null
+}
/**
* Clear the session cookie
*/
export const clearSessionId = (): void => {
- document.cookie = `${SESSION_COOKIE_NAME}=; path=/; max-age=0; SameSite=Lax`;
-};
+ document.cookie = `${SESSION_COOKIE_NAME}=; path=/; max-age=0; SameSite=Lax`
+}
/**
* Save a transcription session to IndexedDB
@@ -128,49 +135,53 @@ export const saveSession = async (
session: TranscriptionSession,
): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readwrite");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readwrite")
+ const store = transaction.objectStore(STORE_NAME)
// Update timestamp
- session.lastUpdatedAt = Date.now();
+ session.lastUpdatedAt = Date.now()
// Save to store
await new Promise((resolve, reject) => {
- const request = store.put(session);
- request.onsuccess = () => resolve();
+ const request = store.put(session)
request.onerror = (event) => {
- console.error("Error saving session:", event);
- reject(new Error("Failed to save session"));
- };
- });
+ console.error("Error saving session:", event)
+ reject(new Error("Failed to save session"))
+ }
+ transaction.oncomplete = () => resolve()
+ transaction.onerror = (event) => {
+ console.error("Transaction error saving session:", event)
+ reject(new Error("Failed to save session"))
+ }
+ })
- console.log("Session saved successfully:", session.id);
+ console.log("Session saved successfully:", session.id)
} catch (error) {
- console.error("Error in saveSession:", error);
+ console.error("Error in saveSession:", error)
}
-};
+}
/**
* Create a new transcription session
*/
export const createSession = async (
options: {
- language: string;
- diarize: boolean;
+ language: string
+ diarize: boolean
},
audioSource: {
- type: "file" | "url";
- name?: string;
- size?: number;
- url?: string;
+ type: "file" | "url"
+ name?: string
+ size?: number
+ url?: string
},
): Promise => {
// Always create a new unique session ID for each transcription
- const sessionId = createSessionId();
+ const sessionId = createSessionId()
- const now = Date.now();
- const expiryHours = DEFAULT_SESSION_EXPIRY_HOURS;
+ const now = Date.now()
+ const expiryHours = DEFAULT_SESSION_EXPIRY_HOURS
const session: TranscriptionSession = {
id: sessionId,
@@ -184,11 +195,11 @@ export const createSession = async (
audioSource,
options,
apiResponses: [],
- };
+ }
- await saveSession(session); // Save the new session immediately
- return session;
-};
+ await saveSession(session) // Save the new session immediately
+ return session
+}
/**
* Get a session by ID
@@ -197,27 +208,27 @@ export const getSession = async (
sessionId: string,
): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readonly");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readonly")
+ const store = transaction.objectStore(STORE_NAME)
const session = await new Promise(
(resolve, reject) => {
- const request = store.get(sessionId);
- request.onsuccess = () => resolve(request.result || null);
+ const request = store.get(sessionId)
+ request.onsuccess = () => resolve(request.result || null)
request.onerror = (event) => {
- console.error("Error reading session:", event);
- reject(new Error("Failed to read session"));
- };
+ console.error("Error reading session:", event)
+ reject(new Error("Failed to read session"))
+ }
},
- );
+ )
- return session;
+ return session
} catch (error) {
- console.error("Error in getSession:", error);
- return null;
+ console.error("Error in getSession:", error)
+ return null
}
-};
+}
/**
* Get the most recent active session (not completed or failed)
@@ -225,54 +236,54 @@ export const getSession = async (
export const getActiveSession =
async (): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readonly");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readonly")
+ const store = transaction.objectStore(STORE_NAME)
// Get all sessions with active statuses
const sessions = await new Promise(
(resolve, reject) => {
const request = store
.index("status")
- .getAll(IDBKeyRange.bound("processing", "starting"));
- request.onsuccess = () => resolve(request.result || []);
+ .getAll(IDBKeyRange.bound("processing", "starting"))
+ request.onsuccess = () => resolve(request.result || [])
request.onerror = (event) => {
- console.error("Error reading sessions:", event);
- reject(new Error("Failed to read sessions"));
- };
+ console.error("Error reading sessions:", event)
+ reject(new Error("Failed to read sessions"))
+ }
},
- );
+ )
if (sessions.length === 0) {
- return null;
+ return null
}
// Find the most recent session
- const currentSessionId = getSessionId();
- const now = Date.now();
+ const currentSessionId = getSessionId()
+ const now = Date.now()
// First check if there's an active session matching the current session cookie
if (currentSessionId) {
- const currentSession = sessions.find((s) => s.id === currentSessionId);
+ const currentSession = sessions.find((s) => s.id === currentSessionId)
if (currentSession && currentSession.expiresAt > now) {
- return currentSession;
+ return currentSession
}
}
// Otherwise return the most recent active session
- const validSessions = sessions.filter((s) => s.expiresAt > now);
+ const validSessions = sessions.filter((s) => s.expiresAt > now)
if (validSessions.length === 0) {
- return null;
+ return null
}
// Sort by last updated time (descending)
- validSessions.sort((a, b) => b.lastUpdatedAt - a.lastUpdatedAt);
- return validSessions[0];
+ validSessions.sort((a, b) => b.lastUpdatedAt - a.lastUpdatedAt)
+ return validSessions[0]
} catch (error) {
- console.error("Error in getActiveSession:", error);
- return null;
+ console.error("Error in getActiveSession:", error)
+ return null
}
- };
+ }
/**
* Update a session with new data
@@ -282,10 +293,10 @@ export const updateSession = async (
updates: Partial,
): Promise => {
try {
- const session = await getSession(sessionId);
+ const session = await getSession(sessionId)
if (!session) {
- console.error("Session not found:", sessionId);
- return null;
+ console.error("Session not found:", sessionId)
+ return null
}
// Apply updates
@@ -293,98 +304,98 @@ export const updateSession = async (
...session,
...updates,
lastUpdatedAt: Date.now(),
- };
+ }
- await saveSession(updatedSession);
- return updatedSession;
+ await saveSession(updatedSession)
+ return updatedSession
} catch (error) {
- console.error("Error in updateSession:", error);
- return null;
+ console.error("Error in updateSession:", error)
+ return null
}
-};
+}
/**
* Delete a session by ID
*/
export const deleteSession = async (sessionId: string): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readwrite");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readwrite")
+ const store = transaction.objectStore(STORE_NAME)
await new Promise((resolve, reject) => {
- const request = store.delete(sessionId);
- request.onsuccess = () => resolve();
+ const request = store.delete(sessionId)
+ request.onsuccess = () => resolve()
request.onerror = (event) => {
- console.error("Error deleting session:", event);
- reject(new Error("Failed to delete session"));
- };
- });
+ console.error("Error deleting session:", event)
+ reject(new Error("Failed to delete session"))
+ }
+ })
// Clear session cookie if it matches
if (getSessionId() === sessionId) {
- clearSessionId();
+ clearSessionId()
}
- return true;
+ return true
} catch (error) {
- console.error("Error in deleteSession:", error);
- return false;
+ console.error("Error in deleteSession:", error)
+ return false
}
-};
+}
/**
* Clean up expired sessions
*/
export const cleanupExpiredSessions = async (): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readwrite");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readwrite")
+ const store = transaction.objectStore(STORE_NAME)
- const now = Date.now();
+ const now = Date.now()
// Get expired sessions
const expiredSessions = await new Promise(
(resolve, reject) => {
const request = store
.index("expiresAt")
- .getAll(IDBKeyRange.upperBound(now));
- request.onsuccess = () => resolve(request.result || []);
+ .getAll(IDBKeyRange.upperBound(now))
+ request.onsuccess = () => resolve(request.result || [])
request.onerror = (event) => {
- console.error("Error reading expired sessions:", event);
- reject(new Error("Failed to read expired sessions"));
- };
+ console.error("Error reading expired sessions:", event)
+ reject(new Error("Failed to read expired sessions"))
+ }
},
- );
+ )
if (expiredSessions.length === 0) {
- return 0;
+ return 0
}
// Delete each expired session
- let deletedCount = 0;
+ let deletedCount = 0
for (const session of expiredSessions) {
await new Promise((resolve, reject) => {
- const request = store.delete(session.id);
+ const request = store.delete(session.id)
request.onsuccess = () => {
- deletedCount++;
- resolve();
- };
+ deletedCount++
+ resolve()
+ }
request.onerror = (event) => {
- console.error("Error deleting session:", event);
- reject(new Error("Failed to delete session"));
- };
- });
+ console.error("Error deleting session:", event)
+ reject(new Error("Failed to delete session"))
+ }
+ })
}
- console.log(`Cleaned up ${deletedCount} expired sessions`);
- return deletedCount;
+ console.log(`Cleaned up ${deletedCount} expired sessions`)
+ return deletedCount
} catch (error) {
- console.error("Error in cleanupExpiredSessions:", error);
- return 0;
+ console.error("Error in cleanupExpiredSessions:", error)
+ return 0
}
-};
+}
/**
* Get all sessions (for history view)
@@ -394,14 +405,14 @@ export const getAllSessions = async (
rangeEnd?: string,
): Promise => {
try {
- const db = await initDb();
- const transaction = db.transaction([STORE_NAME], "readonly");
- const store = transaction.objectStore(STORE_NAME);
+ const db = await initDb()
+ const transaction = db.transaction([STORE_NAME], "readonly")
+ const store = transaction.objectStore(STORE_NAME)
// Get all sessions
const sessions = await new Promise(
(resolve, reject) => {
- let request: IDBRequest;
+ let request: IDBRequest
if (sessionId && rangeEnd) {
if (sessionId > rangeEnd) {
@@ -409,25 +420,25 @@ export const getAllSessions = async (
new Error(
"Invalid key range: lower bound is greater than upper bound.",
),
- );
+ )
}
- const range = IDBKeyRange.bound(sessionId, rangeEnd);
- request = store.getAll(range);
+ const range = IDBKeyRange.bound(sessionId, rangeEnd)
+ request = store.getAll(range)
} else {
- request = store.getAll();
+ request = store.getAll()
}
- request.onsuccess = () => resolve(request.result || []);
+ request.onsuccess = () => resolve(request.result || [])
request.onerror = (event) => {
- console.error("Error reading all sessions:", event);
- reject(new Error("Failed to read sessions"));
- };
+ console.error("Error reading all sessions:", event)
+ reject(new Error("Failed to read sessions"))
+ }
},
- );
+ )
- return sessions;
+ return sessions
} catch (error) {
- console.error("Error in getAllSessions:", error);
- return [];
+ console.error("Error in getAllSessions:", error)
+ return []
}
-};
+}
diff --git a/src/lib/speaker-colors.ts b/src/lib/speaker-colors.ts
new file mode 100644
index 0000000..8a3b277
--- /dev/null
+++ b/src/lib/speaker-colors.ts
@@ -0,0 +1,38 @@
+export const SPEAKER_COLORS = [
+ {
+ border: "border-l-blue-500",
+ badge: "bg-blue-100 text-blue-800 dark:bg-blue-900 dark:text-blue-200",
+ },
+ {
+ border: "border-l-green-500",
+ badge: "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200",
+ },
+ {
+ border: "border-l-purple-500",
+ badge:
+ "bg-purple-100 text-purple-800 dark:bg-purple-900 dark:text-purple-200",
+ },
+ {
+ border: "border-l-orange-500",
+ badge:
+ "bg-orange-100 text-orange-800 dark:bg-orange-900 dark:text-orange-200",
+ },
+ {
+ border: "border-l-pink-500",
+ badge: "bg-pink-100 text-pink-800 dark:bg-pink-900 dark:text-pink-200",
+ },
+ {
+ border: "border-l-teal-500",
+ badge: "bg-teal-100 text-teal-800 dark:bg-teal-900 dark:text-teal-200",
+ },
+] as const
+
+export const getSpeakerColor = (speaker: string) => {
+ if (!speaker) return SPEAKER_COLORS[0]
+ // Hash all chars so any speaker label (numeric, empty-prefix, etc.) maps stably
+ let hash = 0
+ for (let i = 0; i < speaker.length; i++) {
+ hash = (hash * 31 + (speaker.codePointAt(i) ?? 0)) >>> 0
+ }
+ return SPEAKER_COLORS[hash % SPEAKER_COLORS.length]
+}
diff --git a/src/lib/storage-service.ts b/src/lib/storage-service.ts
index 4295a57..09f0a10 100644
--- a/src/lib/storage-service.ts
+++ b/src/lib/storage-service.ts
@@ -1,18 +1,18 @@
-import { storage } from "./firebase";
import {
+ deleteObject,
+ getDownloadURL,
ref,
uploadBytes,
- getDownloadURL,
- deleteObject,
-} from "firebase/storage";
+} from "firebase/storage"
+import { getStorage } from "./firebase"
// Generate a unique filename with timestamp and random string
const generateUniqueFilename = (originalName: string) => {
- const timestamp = Date.now();
- const randomString = Math.random().toString(36).substring(2, 8);
- const fileExtension = originalName.split(".").pop();
- return `audio_${timestamp}_${randomString}.${fileExtension}`;
-};
+ const timestamp = Date.now()
+ const randomString = Math.random().toString(36).substring(2, 8)
+ const fileExtension = originalName.split(".").pop()
+ return `audio_${timestamp}_${randomString}.${fileExtension}`
+}
// Upload audio file to Firebase Storage
// Note: All files are uploaded to Firebase (no base64 encoding)
@@ -21,67 +21,57 @@ export const uploadLargeFile = async (
): Promise<{ url: string; path: string }> => {
try {
// Create a unique filename to avoid collisions
- const filename = generateUniqueFilename(file.name);
- const filePath = `temp_audio/${filename}`;
- const storageRef = ref(storage, filePath);
-
- console.log("Starting Firebase upload for:", filePath);
+ const filename = generateUniqueFilename(file.name)
+ const filePath = `temp_audio/${filename}`
+ const storageRef = ref(getStorage(), filePath)
- // Upload file to Firebase Storage
try {
- const snapshot = await uploadBytes(storageRef, file);
- console.log("File uploaded successfully:", snapshot.metadata.name);
+ await uploadBytes(storageRef, file)
} catch (uploadError) {
- console.error("Firebase uploadBytes error:", uploadError);
- throw uploadError;
+ console.error("Firebase uploadBytes error:", uploadError)
+ throw uploadError
}
- // Get the download URL
- let downloadURL;
+ let downloadURL
try {
- downloadURL = await getDownloadURL(storageRef);
- console.log("Got download URL:", downloadURL);
+ downloadURL = await getDownloadURL(storageRef)
} catch (urlError) {
- console.error("Firebase getDownloadURL error:", urlError);
- throw urlError;
+ console.error("Firebase getDownloadURL error:", urlError)
+ throw urlError
}
- return { url: downloadURL, path: filePath };
+ return { url: downloadURL, path: filePath }
} catch (error: unknown) {
- console.error("Error uploading file to Firebase:", error);
- const errorMessage = error instanceof Error ? error.message : String(error);
- throw new Error(`Failed to upload audio file: ${errorMessage}`);
+ console.error("Error uploading file to Firebase:", error)
+ const errorMessage = error instanceof Error ? error.message : String(error)
+ throw new Error(`Failed to upload audio file: ${errorMessage}`)
}
-};
+}
export const deleteFile = async (path: string): Promise => {
try {
// Check if we got a full URL or just a path
- let filePath = path;
+ let filePath = path
// If it's a URL, try to extract the path
if (path.startsWith("http")) {
// Try to convert URL to storage path - this is tricky and implementation depends on URL format
// For simplicity, if path contains 'temp_audio/', extract that part and everything after
- const match = path.match(/temp_audio\/.+/);
+ const match = /temp_audio\/.+/.exec(path)
if (match) {
- filePath = match[0];
+ filePath = match[0]
} else {
- console.warn(
- "Could not extract file path from URL, using as-is:",
- path,
- );
+ console.warn("Could not extract file path from URL, using as-is:", path)
}
}
// Create a reference to the file
- const fileRef = ref(storage, filePath);
+ const fileRef = ref(getStorage(), filePath)
// Delete the file
- await deleteObject(fileRef);
- console.log("File deleted successfully:", filePath);
+ await deleteObject(fileRef)
} catch (error) {
- console.error("Error deleting file from Firebase:", error);
+ console.error("Error deleting file from Firebase:", error)
// Continue even if deletion fails (we'll rely on Firebase lifecycle rules as backup)
}
-};
+}
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index bd0c391..d084cca 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -1,4 +1,4 @@
-import { clsx, type ClassValue } from "clsx"
+import { type ClassValue, clsx } from "clsx"
import { twMerge } from "tailwind-merge"
export function cn(...inputs: ClassValue[]) {
diff --git a/src/lib/v2-debug.ts b/src/lib/v2-debug.ts
deleted file mode 100644
index 688a22c..0000000
--- a/src/lib/v2-debug.ts
+++ /dev/null
@@ -1,23 +0,0 @@
-// Debug utilities for V2 announcement modal
-
-// Extend the Window interface to include our debug function
-declare global {
- interface Window {
- seenV2: (seen: boolean) => void;
- }
-}
-
-// Initialize debug function
-export const initializeV2Debug = () => {
- if (typeof window !== "undefined") {
- window.seenV2 = (seen: boolean) => {
- if (seen) {
- localStorage.setItem("seenV2", "true");
- console.log("V2 announcement disabled - will not show on next visit");
- } else {
- localStorage.removeItem("seenV2");
- console.log("V2 announcement enabled - will show on next page refresh");
- }
- };
- }
-};
diff --git a/src/server/index.ts b/src/server/index.ts
index 69a1b61..caa608d 100644
--- a/src/server/index.ts
+++ b/src/server/index.ts
@@ -1,64 +1,89 @@
-import express, { Request, Response, RequestHandler } from "express";
// Remove the cors import
-import dotenv from "dotenv";
-import path from "path";
-import { fileURLToPath } from "url";
+import { Readable } from "node:stream"
+import dotenv from "dotenv"
+import express, { Request, RequestHandler, Response } from "express"
+import path from "path"
+import { fileURLToPath } from "url"
-dotenv.config();
+dotenv.config()
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
+const __filename = fileURLToPath(import.meta.url)
+const __dirname = path.dirname(__filename)
-const app = express();
-const port = process.env.PORT || 3001;
+const app = express()
+app.disable("x-powered-by")
+const port = process.env.PORT || 3001
-app.use(express.json({ limit: "50mb" }));
+app.use(express.json({ limit: "50mb" }))
+
+// CORS — restrict to explicit origin allowlist via env
+const allowedOrigins = process.env.ALLOWED_ORIGINS
+ ? process.env.ALLOWED_ORIGINS.split(",").map((o) => o.trim())
+ : ["http://localhost:3000"]
-// Add manual CORS headers to all responses instead
app.use(((req, res, next) => {
- res.header("Access-Control-Allow-Origin", "*");
- res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
+ const origin = req.headers.origin
+ if (origin && allowedOrigins.includes(origin)) {
+ res.header("Access-Control-Allow-Origin", origin)
+ }
+ res.header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept, Authorization",
- );
+ )
// Handle preflight requests
if (req.method === "OPTIONS") {
- return res.status(204).send();
+ return res.status(204).send()
}
- next();
-}) as RequestHandler);
+ next()
+}) as RequestHandler)
app.post("/api/transcribe", (async (req: Request, res: Response) => {
try {
- const { audioUrl, options } = req.body;
+ const { audioUrl, options } = req.body
+
+ if (!audioUrl || typeof audioUrl !== "string") {
+ return res.status(400).json({ error: "audioUrl is required" })
+ }
+ let parsedAudioUrl: URL
+ try {
+ parsedAudioUrl = new URL(audioUrl)
+ } catch {
+ return res.status(400).json({ error: "audioUrl must be a valid URL" })
+ }
+ if (parsedAudioUrl.protocol !== "https:") {
+ return res.status(400).json({ error: "audioUrl must use HTTPS" })
+ }
+ if (!options || typeof options !== "object" || Array.isArray(options)) {
+ return res.status(400).json({ error: "options must be an object" })
+ }
console.log("Request received with options:", {
...options,
audioUrl: audioUrl ? "URL provided" : "not provided",
- });
+ })
interface TranscriptionParams {
- audio_url: string;
- speaker_labels?: boolean;
- language_detection?: boolean;
- language_code?: string;
+ audio_url: string
+ speaker_labels?: boolean
+ language_detection?: boolean
+ language_code?: string
}
const params: TranscriptionParams = {
audio_url: audioUrl,
- };
+ }
if (options.diarize) {
- params.speaker_labels = true;
+ params.speaker_labels = true
}
if (options.language && options.language !== "auto") {
- params.language_code = options.language;
+ params.language_code = options.language
} else {
- params.language_detection = true;
+ params.language_detection = true
}
const response = await fetch("https://api.assemblyai.com/v2/transcript", {
@@ -68,36 +93,30 @@ app.post("/api/transcribe", (async (req: Request, res: Response) => {
"Content-Type": "application/json",
},
body: JSON.stringify(params),
- });
+ })
if (!response.ok) {
- const errorText = await response.text();
- console.error("AssemblyAI API error:", response.status, errorText);
+ const errorText = await response.text()
+ console.error("AssemblyAI API error:", response.status, errorText)
return res.status(response.status).json({
error: `AssemblyAI API error: ${response.status} ${response.statusText}`,
details: errorText,
- });
+ })
}
- const data = await response.json();
- console.log("AssemblyAI API response:", data);
- res.json(data);
+ const data = await response.json()
+ res.json(data)
} catch (error) {
- console.error("Error proxying to AssemblyAI:", error);
+ console.error("Error proxying to AssemblyAI:", error)
res.status(500).json({
- error:
- error instanceof Error
- ? error.message
- : "Failed to communicate with AssemblyAI API",
- });
+ error: "Failed to communicate with AssemblyAI API",
+ })
}
-}) as RequestHandler);
+}) as RequestHandler)
app.get("/api/prediction/:id", (async (req: Request, res: Response) => {
try {
- const { id } = req.params;
-
- console.log(`Checking transcription status for ID: ${id}`);
+ const { id } = req.params
const response = await fetch(
`https://api.assemblyai.com/v2/transcript/${id}`,
@@ -106,159 +125,94 @@ app.get("/api/prediction/:id", (async (req: Request, res: Response) => {
Authorization: process.env.ASSEMBLYAI_API_KEY || "",
},
},
- );
+ )
if (!response.ok) {
- const errorText = await response.text();
+ const errorText = await response.text()
console.error(
`Error checking transcription status: ${response.status}`,
errorText,
- );
+ )
return res.status(response.status).json({
error: `Error checking transcription: ${response.status} ${response.statusText}`,
details: errorText,
- });
+ })
}
- const data = await response.json();
- console.log("Transcription status data:", data);
- res.json(data);
+ const data = await response.json()
+ res.json(data)
} catch (error) {
- console.error("Error checking transcription status:", error);
+ console.error("Error checking transcription status:", error)
res.status(500).json({
- error:
- error instanceof Error
- ? error.message
- : "Failed to check transcription status",
- });
+ error: "Failed to check transcription status",
+ })
}
-}) as RequestHandler);
-
-// Update the Printerz render endpoint handler
+}) as RequestHandler)
-app.post("/api/printerz/render", (async (req: Request, res: Response) => {
+app.post("/api/firebase-proxy", (async (req: Request, res: Response) => {
try {
- const { templateId, printerzData } = req.body;
-
- if (!templateId || !printerzData) {
- return res.status(400).json({
- error: "Missing required parameters: templateId and printerzData",
- });
- }
-
- // Get API key from environment variables
- const apiKey = process.env.PRINTERZ_API_KEY;
- if (!apiKey) {
- return res.status(500).json({ error: "Printerz API key not configured" });
- }
-
- console.log(`Proxying request to Printerz template: ${templateId}`);
- console.log(
- "With data:",
- JSON.stringify(printerzData).substring(0, 200) + "...",
- );
-
- const response = await fetch(
- `https://api.printerz.dev/templates/${templateId}/render`,
- {
- method: "POST",
- headers: {
- "x-api-key": apiKey,
- "Content-Type": "application/json",
- },
- body: JSON.stringify(printerzData),
- },
- );
-
- if (!response.ok) {
- const errorText = await response.text();
- console.error("Printerz API error:", response.status, errorText);
- return res.status(response.status).json({
- error: `Printerz API error: ${response.status} ${response.statusText}`,
- details: errorText,
- });
- }
-
- // Get the PDF data as buffer
- const pdfBuffer = await response.arrayBuffer();
+ const { url } = req.body
- if (!pdfBuffer || pdfBuffer.byteLength === 0) {
- console.error("Received empty PDF buffer from Printerz API");
+ if (!url || typeof url !== "string") {
return res
- .status(500)
- .json({ error: "Received empty PDF from Printerz" });
+ .status(400)
+ .json({ error: "Invalid or missing Firebase Storage URL" })
}
- console.log(`Received PDF buffer of size: ${pdfBuffer.byteLength} bytes`);
-
- // Set appropriate headers for PDF
- res.setHeader("Content-Type", "application/pdf");
- res.setHeader(
- "Content-Disposition",
- 'attachment; filename="transcription.pdf"',
- );
-
- // Send the PDF data and end the response
- res.status(200).send(Buffer.from(pdfBuffer));
- } catch (error) {
- console.error("Error proxying to Printerz:", error);
- res.status(500).json({
- error:
- error instanceof Error
- ? error.message
- : "Failed to communicate with Printerz API",
- });
- }
-}) as RequestHandler);
-
-app.post("/api/firebase-proxy", (async (req: Request, res: Response) => {
- try {
- const { url } = req.body;
+ let parsedUrl: URL
+ try {
+ parsedUrl = new URL(url)
+ } catch {
+ return res.status(400).json({ error: "Malformed Firebase Storage URL" })
+ }
- if (!url || !url.includes("firebasestorage.googleapis.com")) {
+ if (parsedUrl.hostname !== "firebasestorage.googleapis.com") {
return res
.status(400)
- .json({ error: "Invalid or missing Firebase Storage URL" });
+ .json({ error: "Invalid or missing Firebase Storage URL" })
}
- console.log(`Proxying request to Firebase Storage: ${url}`);
+ console.log("Proxying request to Firebase Storage")
- const response = await fetch(url);
+ const response = await fetch(parsedUrl.toString())
if (!response.ok) {
return res.status(response.status).json({
error: `Firebase Storage error: ${response.status}`,
message: await response.text(),
- });
+ })
}
- // Stream the response directly to the client
- const contentType = response.headers.get("content-type");
- res.setHeader("Content-Type", contentType || "application/octet-stream");
+ // Stream the response directly to avoid buffering large audio files
+ const contentType = response.headers.get("content-type")
+ res.setHeader("Content-Type", contentType || "application/octet-stream")
+ res.status(200)
- const arrayBuffer = await response.arrayBuffer();
- res.status(200).send(Buffer.from(arrayBuffer));
+ if (response.body) {
+ Readable.fromWeb(
+ response.body as Parameters[0],
+ ).pipe(res)
+ } else {
+ res.end()
+ }
} catch (error) {
- console.error("Error proxying Firebase Storage request:", error);
+ console.error("Error proxying Firebase Storage request:", error)
res.status(500).json({
- error:
- error instanceof Error
- ? error.message
- : "Failed to proxy Firebase Storage request",
- });
+ error: "Failed to proxy Firebase Storage request",
+ })
}
-}) as RequestHandler);
+}) as RequestHandler)
if (process.env.NODE_ENV === "production") {
- const buildPath = path.resolve(__dirname, "../../dist");
- app.use(express.static(buildPath));
+ const buildPath = path.resolve(__dirname, "../../dist")
+ app.use(express.static(buildPath))
// Handle client-side routing - this is important for React Router
app.get("*", (_req: Request, res: Response) => {
- res.sendFile(path.join(buildPath, "index.html"));
- });
+ res.sendFile(path.join(buildPath, "index.html"))
+ })
}
app.listen(port, () => {
- console.log(`Server running at http://localhost:${port}`);
-});
+ console.log(`Server running at http://localhost:${port}`)
+})
diff --git a/src/services/transcription.ts b/src/services/transcription.ts
index 2a72312..bb6e3fa 100644
--- a/src/services/transcription.ts
+++ b/src/services/transcription.ts
@@ -17,37 +17,37 @@ export const statusMessages: Record = {
}
export const getApiUrl = (endpoint: string) => {
- return `/api/${endpoint}`;
-};
+ return `/api/${endpoint}`
+}
// Convert file to base64
export const fileToBase64 = (file: File): Promise => {
return new Promise((resolve, reject) => {
- const reader = new FileReader();
- reader.readAsDataURL(file);
+ const reader = new FileReader()
+ reader.readAsDataURL(file)
reader.onload = () => {
if (typeof reader.result === "string") {
- resolve(reader.result);
+ resolve(reader.result)
} else {
- reject(new Error("Failed to convert file to base64"));
+ reject(new Error("Failed to convert file to base64"))
}
- };
- reader.onerror = (error) => reject(error);
- });
-};
+ }
+ reader.onerror = (error) => reject(error)
+ })
+}
export const formatErrorMessage = (error: string): string => {
if (
error.includes("Unsupported file format") ||
error.includes("File format not supported")
) {
- return "Unsupported file format. Please convert to MP3, WAV, or FLAC before uploading.";
+ return "Unsupported file format. Please convert to MP3, WAV, or FLAC before uploading."
}
if (error.includes("Soundfile is either not in the correct format")) {
- return "The audio file format is not supported. Please try a different file or format (MP3, WAV, FLAC recommended).";
+ return "The audio file format is not supported. Please try a different file or format (MP3, WAV, FLAC recommended)."
}
- return error;
-};
+ return error
+}
export const formatTimestamp = (date: Date) => {
return date.toLocaleTimeString([], {
@@ -55,5 +55,5 @@ export const formatTimestamp = (date: Date) => {
minute: "2-digit",
second: "2-digit",
hour12: false,
- });
-};
+ })
+}
diff --git a/src/stores/history-store.ts b/src/stores/history-store.ts
new file mode 100644
index 0000000..5514c88
--- /dev/null
+++ b/src/stores/history-store.ts
@@ -0,0 +1,223 @@
+import { create } from "zustand"
+import type { AudioSource, TranscriptionOptions } from "@/types/transcription"
+
+export interface HistoryEntry {
+ predictionId: string
+ audioSource: AudioSource
+ options: TranscriptionOptions
+ status: string
+ createdAt: number
+ result?: string
+}
+
+interface HistoryStore {
+ entries: HistoryEntry[]
+ isLoaded: boolean
+ load: () => Promise
+ add: (entry: HistoryEntry) => Promise
+ patch: (
+ predictionId: string,
+ updates: Partial>,
+ ) => Promise
+ remove: (predictionId: string) => Promise
+ clear: () => Promise
+}
+
+const DB_NAME = "transcriptr-db"
+const HISTORY_STORE_NAME = "transcription-history"
+const DB_VERSION = 2
+
+const initDb = (): Promise => {
+ return new Promise((resolve, reject) => {
+ if (globalThis.window === undefined || !globalThis.indexedDB) {
+ reject(new Error("IndexedDB not available"))
+ return
+ }
+
+ const request = globalThis.indexedDB.open(DB_NAME, DB_VERSION)
+
+ request.onerror = () => reject(new Error("Could not open IndexedDB"))
+
+ request.onsuccess = () => resolve(request.result)
+
+ request.onupgradeneeded = (event) => {
+ const db = (event.target as IDBOpenDBRequest).result
+ const tx = (event.target as IDBOpenDBRequest).transaction!
+
+ const hadSessionsStore = db.objectStoreNames.contains(
+ "transcription-sessions",
+ )
+ const hadHistoryStore = db.objectStoreNames.contains(HISTORY_STORE_NAME)
+
+ if (!hadHistoryStore) {
+ const store = db.createObjectStore(HISTORY_STORE_NAME, {
+ keyPath: "predictionId",
+ })
+ store.createIndex("createdAt", "createdAt", { unique: false })
+ store.createIndex("status", "status", { unique: false })
+ }
+
+ // Migrate completed sessions from the old store into the new history store
+ if (hadSessionsStore && !hadHistoryStore) {
+ const sessStore = tx.objectStore("transcription-sessions")
+ const histStore = tx.objectStore(HISTORY_STORE_NAME)
+ sessStore.getAll().onsuccess = (e) => {
+ const sessions = (e.target as IDBRequest).result as Array<{
+ id: string
+ predictionId: string | null
+ status: string
+ createdAt: number
+ audioSource: { type: string; url?: string; name?: string }
+ options: { language: string; diarize: boolean }
+ result?: string
+ }>
+ for (const s of sessions) {
+ if (!s.predictionId) continue
+ const putReq = histStore.put({
+ predictionId: s.predictionId,
+ audioSource: {
+ type: s.audioSource.type as "file" | "url",
+ url: s.audioSource.url,
+ },
+ options: {
+ language: s.options.language ?? "auto",
+ diarize: s.options.diarize ?? false,
+ aiFeatures: {
+ autoChapters: false,
+ summarization: false,
+ sentimentAnalysis: false,
+ entityDetection: false,
+ keyPhrases: false,
+ contentModeration: false,
+ topicDetection: false,
+ },
+ },
+ status: s.status === "completed" ? "succeeded" : s.status,
+ createdAt: s.createdAt,
+ result: s.result,
+ } satisfies HistoryEntry)
+ putReq.onerror = () => {
+ console.error("Migration failed for entry:", s.predictionId)
+ }
+ }
+ }
+ }
+
+ if (!hadSessionsStore) {
+ const sessStore = db.createObjectStore("transcription-sessions", {
+ keyPath: "id",
+ })
+ sessStore.createIndex("status", "status", { unique: false })
+ sessStore.createIndex("expiresAt", "expiresAt", { unique: false })
+ sessStore.createIndex("predictionId", "predictionId", { unique: false })
+ }
+ }
+ })
+}
+
+const dbOperation = async (
+ mode: IDBTransactionMode,
+ fn: (store: IDBObjectStore) => IDBRequest,
+): Promise => {
+ const db = await initDb()
+ return new Promise((resolve, reject) => {
+ const tx = db.transaction([HISTORY_STORE_NAME], mode)
+ const store = tx.objectStore(HISTORY_STORE_NAME)
+ const request = fn(store)
+ let result: T
+ request.onsuccess = () => {
+ result = request.result
+ }
+ tx.oncomplete = () => resolve(result)
+ tx.onerror = () => reject(new Error("IndexedDB operation failed"))
+ tx.onabort = () => reject(new Error("IndexedDB transaction aborted"))
+ })
+}
+
+export const useHistoryStore = create((set, get) => ({
+ entries: [],
+ isLoaded: false,
+
+ load: async () => {
+ if (get().isLoaded) return
+ try {
+ const entries = await dbOperation("readonly", (store) =>
+ store.getAll(),
+ )
+ // Sort by createdAt descending
+ entries.sort((a, b) => b.createdAt - a.createdAt)
+ set({ entries, isLoaded: true })
+ } catch (error) {
+ console.error("Failed to load history:", error)
+ set({ entries: [], isLoaded: true })
+ }
+ },
+
+ add: async (entry) => {
+ try {
+ await dbOperation("readwrite", (store) => store.put(entry))
+ set((state) => ({
+ entries: [
+ entry,
+ ...state.entries.filter((e) => e.predictionId !== entry.predictionId),
+ ],
+ }))
+ } catch (error) {
+ console.error("Failed to add history entry:", error)
+ }
+ },
+
+ patch: async (predictionId, updates) => {
+ try {
+ const db = await initDb()
+ const merged = await new Promise(
+ (resolve, reject) => {
+ const tx = db.transaction([HISTORY_STORE_NAME], "readwrite")
+ const store = tx.objectStore(HISTORY_STORE_NAME)
+ const getReq = store.get(predictionId)
+ getReq.onsuccess = () => {
+ const existing = getReq.result as HistoryEntry | undefined
+ if (!existing) {
+ resolve(undefined)
+ return
+ }
+ const result = { ...existing, ...updates }
+ store.put(result)
+ resolve(result)
+ }
+ getReq.onerror = () => reject(getReq.error)
+ tx.onerror = () => reject(new Error("IndexedDB transaction failed"))
+ tx.onabort = () => reject(new Error("IndexedDB transaction aborted"))
+ },
+ )
+ if (!merged) return
+ set((state) => ({
+ entries: state.entries.map((e) =>
+ e.predictionId === predictionId ? merged : e,
+ ),
+ }))
+ } catch (error) {
+ console.error("Failed to patch history entry:", error)
+ }
+ },
+
+ remove: async (predictionId) => {
+ try {
+ await dbOperation("readwrite", (store) => store.delete(predictionId))
+ set((state) => ({
+ entries: state.entries.filter((e) => e.predictionId !== predictionId),
+ }))
+ } catch (error) {
+ console.error("Failed to remove history entry:", error)
+ }
+ },
+
+ clear: async () => {
+ try {
+ await dbOperation("readwrite", (store) => store.clear())
+ set({ entries: [] })
+ } catch (error) {
+ console.error("Failed to clear history:", error)
+ }
+ },
+}))
diff --git a/src/stores/options-store.ts b/src/stores/options-store.ts
new file mode 100644
index 0000000..d534b44
--- /dev/null
+++ b/src/stores/options-store.ts
@@ -0,0 +1,65 @@
+import { create } from "zustand"
+import type { AIFeatures } from "@/types/transcription"
+
+const DEFAULT_AI_FEATURES: AIFeatures = {
+ autoChapters: false,
+ summarization: false,
+ sentimentAnalysis: false,
+ entityDetection: false,
+ keyPhrases: false,
+ contentModeration: false,
+ topicDetection: false,
+}
+
+interface OptionsStore {
+ language: string
+ diarize: boolean
+ aiFeatures: AIFeatures
+ setLanguage: (lang: string) => void
+ setDiarize: (val: boolean) => void
+ toggleAiFeature: (key: keyof AIFeatures) => void
+ setAllAiFeatures: (val: boolean) => void
+ reset: () => void
+}
+
+export const useOptionsStore = create((set) => ({
+ language: "auto",
+ diarize: false,
+ aiFeatures: DEFAULT_AI_FEATURES,
+
+ setLanguage: (lang) => set({ language: lang }),
+
+ setDiarize: (val) => set({ diarize: val }),
+
+ toggleAiFeature: (key) =>
+ set((state) => {
+ const updated = { ...state.aiFeatures, [key]: !state.aiFeatures[key] }
+ // autoChapters and summarization are mutually exclusive in AssemblyAI
+ if (key === "autoChapters" && updated.autoChapters) {
+ updated.summarization = false
+ } else if (key === "summarization" && updated.summarization) {
+ updated.autoChapters = false
+ }
+ return { aiFeatures: updated }
+ }),
+
+ setAllAiFeatures: (val) =>
+ set({
+ aiFeatures: {
+ autoChapters: val,
+ summarization: false, // mutually exclusive with autoChapters
+ sentimentAnalysis: val,
+ entityDetection: val,
+ keyPhrases: val,
+ contentModeration: val,
+ topicDetection: val,
+ },
+ }),
+
+ reset: () =>
+ set({
+ language: "auto",
+ diarize: false,
+ aiFeatures: DEFAULT_AI_FEATURES,
+ }),
+}))
diff --git a/src/styles/mobile-changelog.css b/src/styles/mobile-changelog.css
deleted file mode 100644
index e69de29..0000000
diff --git a/src/styles/mobile-feedback.css b/src/styles/mobile-feedback.css
deleted file mode 100644
index 7ffd0c9..0000000
--- a/src/styles/mobile-feedback.css
+++ /dev/null
@@ -1,182 +0,0 @@
-/* Mobile Feedback Form Styles */
-@layer components {
- .mobile-feedback-form {
- /* Prevent zoom on input focus on iOS */
- -webkit-touch-callout: none;
- -webkit-user-select: none;
- user-select: none;
- }
-
- .mobile-feedback-input {
- /* Prevent zoom on iOS */
- font-size: 16px !important;
- /* Better touch targets */
- min-height: 48px;
- padding: 12px 16px;
- /* Rounded corners for mobile */
- border-radius: 8px;
- }
-
- .mobile-feedback-textarea {
- /* Prevent zoom on iOS */
- font-size: 16px !important;
- /* Better touch targets */
- padding: 16px;
- border-radius: 8px;
- /* Disable resize on mobile */
- resize: none;
- }
-
- .mobile-feedback-button {
- /* Large touch targets */
- min-height: 48px;
- padding: 12px 24px;
- font-size: 16px;
- font-weight: 600;
- border-radius: 8px;
- /* Touch feedback */
- transition: all 0.15s ease;
- }
-
- .mobile-feedback-button:active {
- transform: scale(0.98);
- }
-
- .mobile-feedback-button-primary {
- background: rgb(37 99 235);
- color: white;
- border: none;
- }
-
- .mobile-feedback-button-primary:hover {
- background: rgb(29 78 216);
- }
-
- .mobile-feedback-button-primary:disabled {
- background: rgb(156 163 175);
- cursor: not-allowed;
- transform: none;
- }
-
- .mobile-feedback-button-secondary {
- background: transparent;
- color: rgb(107 114 128);
- border: none;
- font-weight: 500;
- }
-
- .mobile-feedback-button-secondary:hover {
- color: rgb(55 65 81);
- }
-
- /* Auto-detected info styling */
- .mobile-feedback-info-card {
- background: rgb(249 250 251);
- border: 1px solid rgb(229 231 235);
- border-radius: 8px;
- padding: 16px;
- }
-
- .dark .mobile-feedback-info-card {
- background: rgb(31 41 55);
- border-color: rgb(75 85 99);
- }
-
- /* Success animation */
- .mobile-feedback-success {
- animation: mobile-feedback-success-bounce 0.6s ease-out;
- }
-
- @keyframes mobile-feedback-success-bounce {
- 0% {
- transform: scale(0.8);
- opacity: 0;
- }
- 50% {
- transform: scale(1.05);
- opacity: 1;
- }
- 100% {
- transform: scale(1);
- opacity: 1;
- }
- }
-
- /* Loading spinner for mobile */
- .mobile-feedback-spinner {
- width: 16px;
- height: 16px;
- border: 2px solid rgb(255 255 255 / 0.3);
- border-top-color: white;
- border-radius: 50%;
- animation: mobile-feedback-spin 0.8s linear infinite;
- }
-
- @keyframes mobile-feedback-spin {
- to {
- transform: rotate(360deg);
- }
- }
-
- /* Modal slide animations */
- .mobile-feedback-modal-enter {
- transform: translateY(100%);
- opacity: 0;
- }
-
- .mobile-feedback-modal-enter-active {
- transform: translateY(0);
- opacity: 1;
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- }
-
- .mobile-feedback-modal-exit {
- transform: translateY(0);
- opacity: 1;
- }
-
- .mobile-feedback-modal-exit-active {
- transform: translateY(100%);
- opacity: 0;
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
- }
-
- /* Safe area support */
- @supports (padding: max(0px)) {
- .mobile-feedback-safe-bottom {
- padding-bottom: max(16px, env(safe-area-inset-bottom));
- }
-
- .mobile-feedback-safe-top {
- padding-top: max(16px, env(safe-area-inset-top));
- }
- }
-
- /* Focus styles for accessibility */
- .mobile-feedback-form input:focus,
- .mobile-feedback-form textarea:focus,
- .mobile-feedback-form select:focus {
- outline: 2px solid rgb(37 99 235);
- outline-offset: 2px;
- border-color: rgb(37 99 235);
- }
-
- /* Dark mode adjustments */
- @media (prefers-color-scheme: dark) {
- .mobile-feedback-button-primary {
- background: rgb(59 130 246);
- }
-
- .mobile-feedback-button-primary:hover {
- background: rgb(37 99 235);
- }
-
- .mobile-feedback-button-secondary {
- color: rgb(156 163 175);
- }
-
- .mobile-feedback-button-secondary:hover {
- color: rgb(209 213 219);
- }
- }
-}
diff --git a/src/styles/mobile.css b/src/styles/mobile.css
deleted file mode 100644
index 888ed0b..0000000
--- a/src/styles/mobile.css
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Mobile-First Optimizations */
-
-/* Touch Target Improvements */
-@media (pointer: coarse) {
- /* Ensure all interactive elements meet minimum touch target size */
- button,
- a,
- input[type="button"],
- input[type="submit"],
- input[type="reset"],
- [role="button"],
- [tabindex]:not([tabindex="-1"]) {
- min-height: 44px;
- min-width: 44px;
- }
-
- /* Increase tap target area for small interactive elements */
- button:not(.no-touch-expand),
- a:not(.no-touch-expand) {
- position: relative;
- }
-
- button:not(.no-touch-expand)::after,
- a:not(.no-touch-expand)::after {
- content: "";
- position: absolute;
- top: 50%;
- left: 50%;
- transform: translate(-50%, -50%);
- min-height: 44px;
- min-width: 44px;
- z-index: -1;
- }
-}
-
-/* Mobile Typography Optimizations */
-@media (max-width: 767px) {
- /* Improve text readability on small screens */
- body {
- font-size: 16px; /* Prevent iOS zoom on input focus */
- line-height: 1.5;
- }
-
- /* Form input optimizations */
- input,
- textarea,
- select {
- font-size: 16px; /* Prevent iOS zoom */
- border-radius: 8px;
- padding: 12px;
- }
-
- /* Button optimizations */
- button {
- padding: 12px 24px;
- font-size: 16px;
- border-radius: 8px;
- font-weight: 600;
- }
-}
-
-/* One-handed navigation support */
-@media (max-width: 767px) {
- /* Thumb-friendly zone for primary actions */
- .mobile-primary-action {
- position: fixed;
- bottom: env(safe-area-inset-bottom, 20px);
- left: 50%;
- transform: translateX(-50%);
- z-index: 40;
- }
-
- /* Easy reach area for navigation */
- .mobile-nav-zone {
- position: fixed;
- bottom: 0;
- left: 0;
- right: 0;
- padding-bottom: env(safe-area-inset-bottom, 0);
- }
-}
-
-/* Improved focus states for mobile */
-@media (pointer: coarse) {
- *:focus-visible {
- outline: 3px solid #3b82f6;
- outline-offset: 2px;
- border-radius: 4px;
- }
-
- button:focus-visible,
- a:focus-visible,
- input:focus-visible,
- textarea:focus-visible {
- box-shadow: 0 0 0 3px rgba(59, 130, 246, 0.3);
- }
-}
-
-/* Reduce motion for users who prefer it */
-@media (prefers-reduced-motion: reduce) {
- *,
- *::before,
- *::after {
- animation-duration: 0.01ms !important;
- animation-iteration-count: 1 !important;
- transition-duration: 0.01ms !important;
- scroll-behavior: auto !important;
- }
-}
-
-/* Safe area support for modern mobile devices */
-.safe-area-padding {
- padding-top: env(safe-area-inset-top);
- padding-bottom: env(safe-area-inset-bottom);
- padding-left: env(safe-area-inset-left);
- padding-right: env(safe-area-inset-right);
-}
-
-/* Viewport height fixes for mobile browsers */
-.mobile-vh-fix {
- height: 100vh;
- height: 100dvh; /* Dynamic viewport height for modern browsers */
-}
-
-/* Scroll behavior optimizations */
-@media (max-width: 767px) {
- .mobile-scroll-container {
- overflow-y: auto;
- overscroll-behavior: contain; /* Prevent overscroll bounce */
- }
-}
-
-/* Touch feedback improvements */
-@media (pointer: coarse) {
- button:active,
- [role="button"]:active {
- transform: scale(0.98);
- transition: transform 0.1s ease;
- }
-
- .touch-feedback:active {
- background-color: #f3f4f6;
- transition: background-color 0.1s ease;
- }
-
- .dark .touch-feedback:active {
- background-color: #1f2937;
- }
-}
diff --git a/src/types/index.ts b/src/types/index.ts
new file mode 100644
index 0000000..62a673a
--- /dev/null
+++ b/src/types/index.ts
@@ -0,0 +1,15 @@
+export type {
+ AIFeatures,
+ AudioSource,
+ Chapter,
+ ContentSafety,
+ Entity,
+ KeyPhrase,
+ SentimentResult,
+ Topics,
+ TranscriptionIntelligence,
+ TranscriptionOptions,
+ TranscriptionOutput,
+ TranscriptionSegment,
+ TranscriptionWord,
+} from "./transcription"
diff --git a/src/types/transcription.ts b/src/types/transcription.ts
index de613b1..0ed559d 100644
--- a/src/types/transcription.ts
+++ b/src/types/transcription.ts
@@ -48,7 +48,7 @@ export interface KeyPhrase {
text: string
count: number
rank: number
- timestamps: { start: number, end: number }[]
+ timestamps: { start: number; end: number }[]
}
export interface ContentSafety {
@@ -76,3 +76,27 @@ export interface TranscriptionOutput {
detected_language: string | null
intelligence?: TranscriptionIntelligence
}
+
+export interface AIFeatures {
+ autoChapters: boolean
+ summarization: boolean
+ sentimentAnalysis: boolean
+ entityDetection: boolean
+ keyPhrases: boolean
+ contentModeration: boolean
+ topicDetection: boolean
+}
+
+export interface TranscriptionOptions {
+ language: string
+ diarize: boolean
+ aiFeatures: AIFeatures
+}
+
+export interface AudioSource {
+ name?: string
+ url?: string
+ duration?: number
+ size?: number
+ type: "file" | "url"
+}
diff --git a/tailwind.config.js b/tailwind.config.js
index 64c7986..f62c9c1 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -12,86 +12,86 @@ export default {
desktop: { min: "1024px" },
},
spacing: {
- touch: "44px", // Minimum touch target size (44px recommended)
+ touch: "44px",
"safe-top": "env(safe-area-inset-top)",
"safe-bottom": "env(safe-area-inset-bottom)",
"safe-left": "env(safe-area-inset-left)",
"safe-right": "env(safe-area-inset-right)",
},
- },
- fontFamily: {
- sans: ['"Space Grotesk"', "sans-serif"],
- },
- colors: {
- border: "var(--color-border)",
- input: "var(--color-input)",
- ring: "var(--color-ring)",
- background: "var(--color-background)",
- foreground: "var(--color-foreground)",
- primary: {
- DEFAULT: "var(--color-primary)",
- foreground: "var(--color-primary-foreground)",
- },
- secondary: {
- DEFAULT: "var(--color-secondary)",
- foreground: "var(--color-secondary-foreground)",
- },
- destructive: {
- DEFAULT: "var(--color-destructive)",
- },
- muted: {
- DEFAULT: "var(--color-muted)",
- foreground: "var(--color-muted-foreground)",
- },
- accent: {
- DEFAULT: "var(--color-accent)",
- foreground: "var(--color-accent-foreground)",
+ fontFamily: {
+ sans: ['"Space Grotesk"', "sans-serif"],
},
- popover: {
- DEFAULT: "var(--color-popover)",
- foreground: "var(--color-popover-foreground)",
+ colors: {
+ border: "var(--color-border)",
+ input: "var(--color-input)",
+ ring: "var(--color-ring)",
+ background: "var(--color-background)",
+ foreground: "var(--color-foreground)",
+ success: "var(--success)",
+ warning: "var(--warning)",
+ primary: {
+ DEFAULT: "var(--color-primary)",
+ foreground: "var(--color-primary-foreground)",
+ },
+ secondary: {
+ DEFAULT: "var(--color-secondary)",
+ foreground: "var(--color-secondary-foreground)",
+ },
+ destructive: {
+ DEFAULT: "var(--color-destructive)",
+ },
+ muted: {
+ DEFAULT: "var(--color-muted)",
+ foreground: "var(--color-muted-foreground)",
+ },
+ accent: {
+ DEFAULT: "var(--color-accent)",
+ foreground: "var(--color-accent-foreground)",
+ },
+ popover: {
+ DEFAULT: "var(--color-popover)",
+ foreground: "var(--color-popover-foreground)",
+ },
+ card: {
+ DEFAULT: "var(--color-card)",
+ foreground: "var(--color-card-foreground)",
+ },
},
- card: {
- DEFAULT: "var(--color-card)",
- foreground: "var(--color-card-foreground)",
+ borderRadius: {
+ lg: "var(--radius)",
+ md: "calc(var(--radius) - 2px)",
+ sm: "calc(var(--radius) - 4px)",
},
- },
- borderRadius: {
- lg: "var(--radius)",
- md: "calc(var(--radius) - 2px)",
- sm: "calc(var(--radius) - 4px)",
- },
- keyframes: {
- "accordion-down": {
- from: { height: "0" },
- to: { height: "var(--radix-accordion-content-height)" },
- },
- "accordion-up": {
- from: { height: "var(--radix-accordion-content-height)" },
- to: { height: "0" },
+ keyframes: {
+ "accordion-down": {
+ from: { height: "0" },
+ to: { height: "var(--radix-accordion-content-height)" },
+ },
+ "accordion-up": {
+ from: { height: "var(--radix-accordion-content-height)" },
+ to: { height: "0" },
+ },
+ "pulse-dot-1": {
+ "0%, 100%": { transform: "scale(1)", opacity: "1" },
+ "50%": { transform: "scale(0.8)", opacity: "0.7" },
+ },
+ "pulse-dot-2": {
+ "0%, 100%": { transform: "scale(1)", opacity: "1" },
+ "50%": { transform: "scale(0.8)", opacity: "0.7" },
+ },
+ "pulse-dot-3": {
+ "0%, 100%": { transform: "scale(1)", opacity: "1" },
+ "50%": { transform: "scale(0.8)", opacity: "0.7" },
+ },
},
- "pulse-dot-1": {
- "0%, 100%": { transform: "scale(1)", opacity: "1" },
- "50%": { transform: "scale(0.8)", opacity: "0.7" },
+ animation: {
+ "accordion-down": "accordion-down 0.2s ease-out",
+ "accordion-up": "accordion-up 0.2s ease-out",
+ "pulse-dot-1": "pulse-dot-1 1.2s infinite ease-in-out",
+ "pulse-dot-2": "pulse-dot-2 1.2s infinite ease-in-out 0.2s",
+ "pulse-dot-3": "pulse-dot-3 1.2s infinite ease-in-out 0.4s",
},
- "pulse-dot-2": {
- "0%, 100%": { transform: "scale(1)", opacity: "1" },
- "50%": { transform: "scale(0.8)", opacity: "0.7" },
- },
- "pulse-dot-3": {
- "0%, 100%": { transform: "scale(1)", opacity: "1" },
- "50%": { transform: "scale(0.8)", opacity: "0.7" },
- },
- },
- animation: {
- "accordion-down": "accordion-down 0.2s ease-out",
- "accordion-up": "accordion-up 0.2s ease-out",
- "pulse-dot-1": "pulse-dot-1 1.2s infinite ease-in-out",
- "pulse-dot-2": "pulse-dot-2 1.2s infinite ease-in-out 0.2s",
- "pulse-dot-3": "pulse-dot-3 1.2s infinite ease-in-out 0.4s",
},
},
- plugins: [
- // Typography plugin might need updating for v4
- ],
-};
+ plugins: [],
+}
diff --git a/tsconfig.json b/tsconfig.json
index 40e4a77..aca9891 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -2,11 +2,7 @@
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
- "lib": [
- "ES2020",
- "DOM",
- "DOM.Iterable"
- ],
+ "lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"esModuleInterop": true,
"skipLibCheck": true,
@@ -28,11 +24,8 @@
"name": "next"
}
],
- "baseUrl": ".",
"paths": {
- "@/*": [
- "./src/*"
- ]
+ "@/*": ["./src/*"]
}
},
"include": [
@@ -42,7 +35,5 @@
".next/types/**/*.ts",
".next/dev/types/**/*.ts"
],
- "exclude": [
- "./node_modules"
- ]
+ "exclude": ["./node_modules"]
}
diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo
index 0cb83e7..f70833f 100644
--- a/tsconfig.tsbuildinfo
+++ b/tsconfig.tsbuildinfo
@@ -1 +1 @@
-{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/emoji/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./next-env.d.ts","./node_modules/motion-utils/dist/index.d.ts","./node_modules/motion-dom/dist/index.d.ts","./node_modules/framer-motion/dist/types.d-cq4vrm6h.d.ts","./node_modules/framer-motion/dist/types/index.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./src/lib/utils.ts","./src/components/ui/card.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./node_modules/@radix-ui/react-accessible-icon/dist/index.d.mts","./node_modules/@radix-ui/react-context/dist/index.d.mts","./node_modules/@radix-ui/react-primitive/dist/index.d.mts","./node_modules/@radix-ui/react-collapsible/dist/index.d.mts","./node_modules/@radix-ui/react-accordion/dist/index.d.mts","./node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","./node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","./node_modules/@radix-ui/react-portal/dist/index.d.mts","./node_modules/@radix-ui/react-dialog/dist/index.d.mts","./node_modules/@radix-ui/react-alert-dialog/dist/index.d.mts","./node_modules/@radix-ui/react-aspect-ratio/dist/index.d.mts","./node_modules/@radix-ui/react-avatar/dist/index.d.mts","./node_modules/@radix-ui/react-checkbox/dist/index.d.mts","./node_modules/@radix-ui/react-arrow/dist/index.d.mts","./node_modules/@radix-ui/rect/dist/index.d.mts","./node_modules/@radix-ui/react-popper/dist/index.d.mts","./node_modules/@radix-ui/react-roving-focus/dist/index.d.mts","./node_modules/@radix-ui/react-menu/dist/index.d.mts","./node_modules/@radix-ui/react-context-menu/dist/index.d.mts","./node_modules/@radix-ui/react-direction/dist/index.d.mts","./node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts","./node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label/dist/index.d.mts","./node_modules/@radix-ui/react-form/dist/index.d.mts","./node_modules/@radix-ui/react-hover-card/dist/index.d.mts","./node_modules/radix-ui/node_modules/@radix-ui/react-label/dist/index.d.mts","./node_modules/@radix-ui/react-menubar/dist/index.d.mts","./node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts","./node_modules/@radix-ui/react-navigation-menu/dist/index.d.mts","./node_modules/@radix-ui/react-one-time-password-field/dist/index.d.mts","./node_modules/@radix-ui/react-password-toggle-field/dist/index.d.mts","./node_modules/@radix-ui/react-popover/dist/index.d.mts","./node_modules/@radix-ui/react-progress/dist/index.d.mts","./node_modules/@radix-ui/react-radio-group/dist/index.d.mts","./node_modules/@radix-ui/react-scroll-area/dist/index.d.mts","./node_modules/@radix-ui/react-select/dist/index.d.mts","./node_modules/@radix-ui/react-separator/dist/index.d.mts","./node_modules/@radix-ui/react-slider/dist/index.d.mts","./node_modules/radix-ui/node_modules/@radix-ui/react-slot/dist/index.d.mts","./node_modules/@radix-ui/react-switch/dist/index.d.mts","./node_modules/@radix-ui/react-tabs/dist/index.d.mts","./node_modules/@radix-ui/react-toast/dist/index.d.mts","./node_modules/@radix-ui/react-toggle/dist/index.d.mts","./node_modules/@radix-ui/react-toggle-group/dist/index.d.mts","./node_modules/@radix-ui/react-toolbar/dist/index.d.mts","./node_modules/@radix-ui/react-tooltip/dist/index.d.mts","./node_modules/radix-ui/dist/index.d.mts","./src/components/ui/button.tsx","./src/components/ui/mobile-navigation.tsx","./src/components/layout/mobileheader.tsx","./src/components/layout/header.tsx","./src/components/layout/mobilefooter.tsx","./src/components/layout/footer.tsx","./src/services/transcription.ts","./src/lib/error-utils.ts","./src/hooks/usetranscriptionpolling.ts","./src/types/transcription.ts","./src/lib/persistence-service.ts","./src/hooks/usesessionpersistence.ts","./src/components/ui/animated-button.tsx","./src/components/ui/tabs.tsx","./src/lib/file-format-utils.ts","./src/hooks/use-file-input.tsx","./node_modules/@tabler/icons-react/dist/tabler-icons-react.d.ts","./src/components/ui/dialog.tsx","./src/components/ui/switch.tsx","./src/components/ui/label.tsx","./src/components/ui/select.tsx","./src/components/transcription/transcriptionoptions.tsx","./src/lib/animations.ts","./src/components/transcription/fileuploadinput.tsx","./src/components/ui/input.tsx","./src/components/transcription/urlinput.tsx","./src/components/uploadaudio.tsx","./src/components/transcription/transcriptionprocessing.tsx","./src/components/transcription/transcriptionerror.tsx","./node_modules/@radix-ui/react-slot/dist/index.d.mts","./src/components/ui/mobile-button-variants.ts","./src/components/ui/mobile-button.tsx","./node_modules/sonner/dist/index.d.mts","./src/components/transcription/mobiletranscriptionresult.tsx","./src/hooks/usescrollanimation.tsx","./src/components/ui/scroll-reveal-section.tsx","./src/components/ui/dropdown-menu.tsx","./node_modules/jszip/index.d.ts","./node_modules/xml-js/types/index.d.ts","./node_modules/docx/dist/index.d.ts","./node_modules/jspdf/types/index.d.ts","./src/components/transcription/transcriptionresult.tsx","./src/components/transcription/sessionrecoveryprompt.tsx","./node_modules/@microsoft/clarity/index.d.ts","./node_modules/react-ga4/types/ga4.d.ts","./node_modules/react-ga4/types/index.d.ts","./src/lib/analytics.ts","./node_modules/@firebase/component/dist/src/provider.d.ts","./node_modules/@firebase/component/dist/src/component_container.d.ts","./node_modules/@firebase/component/dist/src/types.d.ts","./node_modules/@firebase/component/dist/src/component.d.ts","./node_modules/@firebase/component/dist/index.d.ts","./node_modules/@firebase/util/dist/util-public.d.ts","./node_modules/@firebase/logger/dist/src/logger.d.ts","./node_modules/@firebase/logger/dist/index.d.ts","./node_modules/@firebase/app/dist/app-public.d.ts","./node_modules/firebase/app/dist/app/index.d.ts","./node_modules/@firebase/storage/dist/storage-public.d.ts","./node_modules/firebase/storage/dist/storage/index.d.ts","./src/lib/firebase.ts","./src/lib/storage-service.ts","./src/components/transcription/transcriptionform.tsx","./src/components/ui/textarea.tsx","./node_modules/device-detector-js/dist/parsers/client/browser.d.ts","./node_modules/device-detector-js/dist/parsers/client/mobile-apps.d.ts","./node_modules/device-detector-js/dist/parsers/client/feed-readers.d.ts","./node_modules/device-detector-js/dist/parsers/client/libraries.d.ts","./node_modules/device-detector-js/dist/parsers/client/media-players.d.ts","./node_modules/device-detector-js/dist/parsers/client/personal-information-managers.d.ts","./node_modules/device-detector-js/dist/parsers/client/index.d.ts","./node_modules/device-detector-js/dist/typings/device.d.ts","./node_modules/device-detector-js/dist/parsers/device/index.d.ts","./node_modules/device-detector-js/dist/parsers/operating-system/index.d.ts","./node_modules/device-detector-js/dist/parsers/bot/typing.d.ts","./node_modules/device-detector-js/dist/parsers/bot/index.d.ts","./node_modules/device-detector-js/dist/index.d.ts","./src/components/feedback/feedbackform.tsx","./src/components/ui/animated-backdrop.tsx","./src/components/feedback/feedbackmodals.tsx","./node_modules/marked/lib/marked.d.ts","./src/data/changelog.ts","./src/components/mobilechangelog.tsx","./src/components/changelog.tsx","./src/components/changelogmodal.tsx","./src/components/transcription/transcriptionhistory.tsx","./src/components/layout/mainlayout.tsx","./src/app.tsx","./src/app/layout.tsx","./node_modules/react-confetti/dist/react-confetti.d.mts","./src/components/v3announcementmodal.tsx","./src/app/page.tsx","./src/app/api/firebase-proxy/route.ts","./src/app/api/prediction/[id]/route.ts","./src/app/api/printerz-proxy/route.ts","./src/lib/firebase-utils.ts","./src/lib/assemblyai-client.ts","./src/app/api/transcribe/route.ts","./src/app/changelog/page.tsx","./src/app/documentation/page.tsx","./src/components/analytics/analyticsoptout.tsx","./src/app/privacy/page.tsx","./src/components/ui/badge.tsx","./src/components/studio/chapterspanel.tsx","./src/components/studio/summarypanel.tsx","./src/components/studio/sentimentpanel.tsx","./src/components/studio/entitiespanel.tsx","./src/components/studio/keyphrasespanel.tsx","./src/components/transcription/transcriptionstudio.tsx","./src/app/studio/page.tsx","./src/app/terms/page.tsx","./src/components/cookieconsent.tsx","./src/components/documentation.tsx","./src/components/analytics/consentmanager.tsx","./src/components/feedback/feedback.tsx","./src/components/feedback/mobilefeedbackform.tsx","./src/components/feedback/mobilefeedbackmodals.tsx","./src/components/transcription/transcriptionresult-new.tsx","./src/components/ui/loadingfallback.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/animated-card.tsx","./src/components/ui/animated-list.tsx","./src/components/ui/mobile-dialog.tsx","./src/components/ui/mobile-input.tsx","./src/components/ui/progress.tsx","./src/components/ui/scroll-area.tsx","./src/components/ui/separator.tsx","./src/components/ui/sequential-reveal-list.tsx","./node_modules/next-themes/dist/index.d.ts","./src/components/ui/sonner.tsx","./src/components/ui/tooltip.tsx","./src/lib/v2-debug.ts","./src/hooks/usev2announcement.ts","./src/lib/firebase-proxy.ts","./node_modules/jspdf-autotable/dist/index.d.ts","./src/lib/pdf-generation.ts","./node_modules/@types/mime/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/express/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./src/server/index.ts","./node_modules/@types/caseless/index.d.ts","./node_modules/@types/cors/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/file-saver/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/pako/index.d.ts","./node_modules/@types/pdfkit/index.d.ts","./node_modules/@types/pdfmake/interfaces.d.ts","./node_modules/@types/pdfmake/index.d.ts","./node_modules/@types/raf/index.d.ts","./node_modules/form-data/index.d.ts","./node_modules/tough-cookie/dist/index.d.cts","./node_modules/@types/request/index.d.ts","./node_modules/@types/statuses/index.d.ts","./node_modules/@types/tough-cookie/index.d.ts","./node_modules/@types/trusted-types/lib/index.d.ts","./node_modules/@types/trusted-types/index.d.ts","./node_modules/uuid/dist/types.d.ts","./node_modules/uuid/dist/max.d.ts","./node_modules/uuid/dist/nil.d.ts","./node_modules/uuid/dist/parse.d.ts","./node_modules/uuid/dist/stringify.d.ts","./node_modules/uuid/dist/v1.d.ts","./node_modules/uuid/dist/v1tov6.d.ts","./node_modules/uuid/dist/v35.d.ts","./node_modules/uuid/dist/v3.d.ts","./node_modules/uuid/dist/v4.d.ts","./node_modules/uuid/dist/v5.d.ts","./node_modules/uuid/dist/v6.d.ts","./node_modules/uuid/dist/v6tov1.d.ts","./node_modules/uuid/dist/v7.d.ts","./node_modules/uuid/dist/validate.d.ts","./node_modules/uuid/dist/version.d.ts","./node_modules/uuid/dist/index.d.ts","./node_modules/@types/validate-npm-package-name/index.d.ts"],"fileIdsList":[[61,124,132,136,139,141,142,143,155,497,498],[61,124,132,136,139,141,142,143,155,608,609,611],[61,124,132,136,139,141,142,143,155,604,605,606,607],[61,124,132,136,139,141,142,143,155,606],[61,124,132,136,139,141,142,143,155,604,606,607],[61,124,132,136,139,141,142,143,155,605,606,607],[61,124,132,136,139,141,142,143,155,605],[61,124,132,136,139,141,142,143,155,610],[61,124,132,136,139,141,142,143,155],[61,124,132,136,139,141,142,143,155,609,612],[52,61,124,132,136,139,141,142,143,155],[52,61,124,132,136,139,141,142,143,155,512,513,514],[52,61,124,132,136,139,141,142,143,155,512,519],[52,61,124,132,136,139,141,142,143,155,513],[52,61,124,132,136,139,141,142,143,155,512,513],[52,61,124,132,136,139,141,142,143,155,258,512,513],[52,61,124,132,136,139,141,142,143,155,512,513,528],[52,61,124,132,136,139,141,142,143,155,512,513,516,517,518],[52,61,124,132,136,139,141,142,143,155,258,512,513,532],[52,61,124,132,136,139,141,142,143,155,512,513,516,518,526],[52,61,124,132,136,139,141,142,143,155,512,513,516,517,518,526,527],[52,61,124,132,136,139,141,142,143,155,258,512,513,527,528],[52,61,124,132,136,139,141,142,143,155,512,513,516,537],[52,61,124,132,136,139,141,142,143,155,513,527],[52,61,124,132,136,139,141,142,143,155,512,513,516,517,518,526],[52,61,124,132,136,139,141,142,143,155,512,513,524,525],[52,61,124,132,136,139,141,142,143,155,512,513,527],[52,56,61,124,132,136,139,141,142,143,155,181,182,183,184,185,444,490],[52,61,124,132,136,139,141,142,143,155,512,513,516],[52,61,124,132,136,139,141,142,143,155,512,513,527,552],[52,61,124,132,136,139,141,142,143,155,512,513,527,546,553],[61,124,132,136,138,139,141,142,143,155,180,699],[61,124,132,136,138,139,141,142,143,155,180],[61,124,132,135,136,138,139,141,142,143,155,180,693,694,695],[61,124,132,136,139,141,142,143,155,696,698,700],[61,121,122,124,132,136,139,141,142,143,155],[61,123,124,132,136,139,141,142,143,155],[124,132,136,139,141,142,143,155],[61,124,132,136,139,141,142,143,155,163],[61,124,125,130,132,135,136,139,141,142,143,145,155,160,172],[61,124,125,126,132,135,136,139,141,142,143,155],[61,124,127,132,136,139,141,142,143,155,173],[61,124,128,129,132,136,139,141,142,143,146,155],[61,124,129,132,136,139,141,142,143,155,160,169],[61,124,130,132,135,136,139,141,142,143,145,155],[61,123,124,131,132,136,139,141,142,143,155],[61,124,132,133,136,139,141,142,143,155],[61,124,132,134,135,136,139,141,142,143,155],[61,123,124,132,135,136,139,141,142,143,155],[61,124,132,135,136,137,139,141,142,143,155,160,172],[61,124,132,135,136,137,139,141,142,143,155,160,163],[61,111,124,132,135,136,138,139,141,142,143,145,155,160,172],[61,124,132,135,136,138,139,141,142,143,145,155,160,169,172],[61,124,132,136,138,139,140,141,142,143,155,160,169,172],[59,60,61,62,63,64,65,66,67,68,69,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179],[61,124,132,135,136,139,141,142,143,155],[61,124,132,136,139,141,143,155],[61,124,132,136,139,141,142,143,144,155,172],[61,124,132,135,136,139,141,142,143,145,155,160],[61,124,132,136,139,141,142,143,146,155],[61,124,132,136,139,141,142,143,147,155],[61,124,132,135,136,139,141,142,143,150,155],[61,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179],[61,124,132,136,139,141,142,143,152,155],[61,124,132,136,139,141,142,143,153,155],[61,124,129,132,136,139,141,142,143,145,155,163],[61,124,132,135,136,139,141,142,143,155,156],[61,124,132,136,139,141,142,143,155,157,173,176],[61,124,132,135,136,139,141,142,143,155,160,162,163],[61,124,132,136,139,141,142,143,155,161,163],[61,124,132,136,139,141,142,143,155,163,173],[61,124,132,136,139,141,142,143,155,164],[61,121,124,132,136,139,141,142,143,155,160,166,172],[61,124,132,136,139,141,142,143,155,160,165],[61,124,132,135,136,139,141,142,143,155,167,168],[61,124,132,136,139,141,142,143,155,167,168],[61,124,129,132,136,139,141,142,143,145,155,160,169],[61,124,132,136,139,141,142,143,155,170],[61,124,132,136,139,141,142,143,145,155,171],[61,124,132,136,138,139,141,142,143,153,155,172],[61,124,132,136,139,141,142,143,155,173,174],[61,124,129,132,136,139,141,142,143,155,174],[61,124,132,136,139,141,142,143,155,160,175],[61,124,132,136,139,141,142,143,144,155,176],[61,124,132,136,139,141,142,143,155,177],[61,124,127,132,136,139,141,142,143,155],[61,124,129,132,136,139,141,142,143,155],[61,124,132,136,139,141,142,143,155,173],[61,111,124,132,136,139,141,142,143,155],[61,124,132,136,139,141,142,143,155,172],[61,124,132,136,139,141,142,143,155,178],[61,124,132,136,139,141,142,143,150,155],[61,124,132,136,139,141,142,143,155,168],[61,111,124,132,135,136,137,139,141,142,143,150,155,160,163,172,175,176,178],[61,124,132,136,139,141,142,143,155,160,179],[61,124,132,136,139,141,142,143,155,180],[61,124,132,136,139,141,142,143,155,711,712],[61,124,132,136,139,141,142,143,155,180,711],[52,56,61,124,132,136,139,141,142,143,155,181,182,183,185,444,490,586],[52,56,61,124,132,136,139,141,142,143,155,181,182,183,184,401,444,490,586],[52,56,61,124,132,136,139,141,142,143,155,181,182,184,185,444,490,586],[52,61,124,132,136,139,141,142,143,155,185,401,402],[52,61,124,132,136,139,141,142,143,155,185,401],[52,56,61,124,132,136,139,141,142,143,155,182,183,184,185,444,490,586],[52,56,61,124,132,136,139,141,142,143,155,181,183,184,185,444,490,586],[50,51,61,124,132,136,139,141,142,143,155],[61,124,132,136,138,139,140,141,142,143,145,155,160,172,180,704,715,716],[61,124,132,136,139,141,142,143,155,160,180,692],[61,124,132,136,138,139,141,142,143,155,180,697],[61,124,132,136,139,141,142,143,155,720],[61,124,132,136,139,141,142,143,155,504,509],[61,124,132,136,139,141,142,143,155,504],[61,124,132,136,139,141,142,143,155,626,628,629,631],[61,124,132,136,139,141,142,143,155,630],[61,124,132,136,139,141,142,143,155,620,621,622,623,624,625],[61,124,132,136,139,141,142,143,155,627],[61,124,132,136,139,141,142,143,155,160,180,594,595],[61,124,132,136,139,141,142,143,155,172,180],[61,124,132,136,139,141,142,143,155,612],[61,124,132,136,139,141,142,143,155,614],[61,124,132,136,138,139,141,142,143,155,160,180],[52,61,124,132,136,139,141,142,143,155,501],[52,61,124,132,136,139,141,142,143,155,258,500,501,502],[61,124,132,136,139,141,142,143,155,500],[61,124,132,136,139,141,142,143,155,447],[61,124,132,136,139,141,142,143,155,449,450,451,452],[61,124,132,136,139,141,142,143,155,190,192,196,207,397,427,440],[61,124,132,136,139,141,142,143,155,192,202,203,204,206,440],[61,124,132,136,139,141,142,143,155,192,239,241,243,244,247,440,442],[61,124,132,136,139,141,142,143,155,192,196,198,199,200,230,325,397,417,418,426,440,442],[61,124,132,136,139,141,142,143,155,440],[61,124,132,136,139,141,142,143,155,203,295,406,415,435],[61,124,132,136,139,141,142,143,155,192],[61,124,132,136,139,141,142,143,155,186,295,435],[61,124,132,136,139,141,142,143,155,249],[61,124,132,136,139,141,142,143,155,248,440],[61,124,132,136,138,139,141,142,143,155,395,406,495],[61,124,132,136,138,139,141,142,143,155,363,375,415,434],[61,124,132,136,138,139,141,142,143,155,306],[61,124,132,136,139,141,142,143,155,420],[61,124,132,136,139,141,142,143,155,419,420,421],[61,124,132,136,139,141,142,143,155,419],[58,61,124,132,136,138,139,141,142,143,155,186,192,196,199,201,203,207,208,221,222,249,325,336,416,427,440,444],[61,124,132,136,139,141,142,143,155,190,192,205,239,240,245,246,440,495],[61,124,132,136,139,141,142,143,155,205,495],[61,124,132,136,139,141,142,143,155,190,222,350,440,495],[61,124,132,136,139,141,142,143,155,495],[61,124,132,136,139,141,142,143,155,192,205,206,495],[61,124,132,136,139,141,142,143,155,242,495],[61,124,132,136,139,141,142,143,155,208,417,425],[61,124,132,136,139,141,142,143,153,155,258,435],[61,124,132,136,139,141,142,143,155,258,435],[52,61,124,132,136,139,141,142,143,155,258],[52,61,124,132,136,139,141,142,143,155,367],[61,124,132,136,139,141,142,143,155,293,303,304,435,472,479],[61,124,132,136,139,141,142,143,155,292,412,473,474,475,476,478],[61,124,132,136,139,141,142,143,155,411],[61,124,132,136,139,141,142,143,155,411,412],[61,124,132,136,139,141,142,143,155,230,295,296,300],[61,124,132,136,139,141,142,143,155,295],[61,124,132,136,139,141,142,143,155,295,299,301],[61,124,132,136,139,141,142,143,155,295,296,297,298],[61,124,132,136,139,141,142,143,155,477],[52,61,124,132,136,139,141,142,143,155,193,466],[52,61,124,132,136,139,141,142,143,155,172],[52,61,124,132,136,139,141,142,143,155,205,285],[52,61,124,132,136,139,141,142,143,155,205,427],[61,124,132,136,139,141,142,143,155,283,287],[52,61,124,132,136,139,141,142,143,155,284,446],[52,56,61,124,132,136,138,139,141,142,143,155,180,181,182,183,184,185,444,488,489,586],[61,124,132,136,138,139,141,142,143,155],[61,124,132,136,138,139,141,142,143,155,196,229,281,326,347,349,422,423,427,440,441],[61,124,132,136,139,141,142,143,155,221,424],[61,124,132,136,139,141,142,143,155,444],[61,124,132,136,139,141,142,143,155,191],[52,61,124,132,136,139,141,142,143,155,352,365,374,384,386,434],[61,124,132,136,139,141,142,143,153,155,352,365,383,384,385,434,494],[61,124,132,136,139,141,142,143,155,377,378,379,380,381,382],[61,124,132,136,139,141,142,143,155,379],[61,124,132,136,139,141,142,143,155,383],[61,124,132,136,139,141,142,143,155,256,257,258,260],[52,61,124,132,136,139,141,142,143,155,250,251,252,253,259],[61,124,132,136,139,141,142,143,155,256,259],[61,124,132,136,139,141,142,143,155,254],[61,124,132,136,139,141,142,143,155,255],[52,61,124,132,136,139,141,142,143,155,258,284,446],[52,61,124,132,136,139,141,142,143,155,258,445,446],[52,61,124,132,136,139,141,142,143,155,258,446],[61,124,132,136,139,141,142,143,155,326,429],[61,124,132,136,139,141,142,143,155,429],[61,124,132,136,138,139,141,142,143,155,441,446],[61,124,132,136,139,141,142,143,155,371],[61,123,124,132,136,139,141,142,143,155,370],[61,124,132,136,139,141,142,143,155,231,295,312,349,358,361,363,364,405,434,437,441],[61,124,132,136,139,141,142,143,155,277,295,392],[61,124,132,136,139,141,142,143,155,363,434],[52,61,124,132,136,139,141,142,143,155,363,368,369,371,372,373,374,375,376,387,388,389,390,391,393,394,434,435,495],[61,124,132,136,139,141,142,143,155,357],[61,124,132,136,138,139,141,142,143,153,155,193,229,232,253,278,279,326,336,347,348,405,428,440,441,442,444,495],[61,124,132,136,139,141,142,143,155,434],[61,123,124,132,136,139,141,142,143,155,203,279,336,360,428,430,431,432,433,441],[61,124,132,136,139,141,142,143,155,363],[61,123,124,132,136,139,141,142,143,155,229,266,312,353,354,355,356,357,358,359,361,362,434,435],[61,124,132,136,138,139,141,142,143,155,266,267,353,441,442],[61,124,132,136,139,141,142,143,155,203,326,336,349,428,434,441],[61,124,132,136,138,139,141,142,143,155,440,442],[61,124,132,136,138,139,141,142,143,155,160,437,441,442],[61,124,132,136,138,139,141,142,143,153,155,172,186,196,205,231,232,234,263,268,273,277,278,279,281,310,312,314,317,319,322,323,324,325,347,349,427,428,435,437,440,441,442],[61,124,132,136,138,139,141,142,143,155,160],[61,124,132,136,139,141,142,143,155,192,193,194,201,437,438,439,444,446,495],[61,124,132,136,139,141,142,143,155,190,440],[61,124,132,136,139,141,142,143,155,262],[61,124,132,136,138,139,141,142,143,155,160,172,224,247,249,250,251,252,253,260,261,495],[61,124,132,136,139,141,142,143,153,155,172,186,224,239,272,273,274,310,311,312,317,325,326,332,335,337,347,349,428,435,437,440],[61,124,132,136,139,141,142,143,155,201,208,221,325,336,428,440],[61,124,132,136,138,139,141,142,143,155,172,193,196,312,330,437,440],[61,124,132,136,139,141,142,143,155,351],[61,124,132,136,138,139,141,142,143,155,262,333,334,344],[61,124,132,136,139,141,142,143,155,437,440],[61,124,132,136,139,141,142,143,155,358,360],[61,124,132,136,139,141,142,143,155,279,312,427,446],[61,124,132,136,138,139,141,142,143,153,155,235,239,311,317,332,335,339,437],[61,124,132,136,138,139,141,142,143,155,208,221,239,340],[61,124,132,136,139,141,142,143,155,192,234,342,427,440],[61,124,132,136,138,139,141,142,143,155,172,253,440],[61,124,132,136,138,139,141,142,143,155,205,233,234,235,244,262,341,343,427,440],[58,61,124,132,136,138,139,141,142,143,155,279,346,444,446],[61,124,132,136,139,141,142,143,155,309,347],[61,124,132,136,138,139,141,142,143,153,155,172,196,207,208,221,231,232,268,272,273,274,278,310,311,312,314,326,327,329,331,347,349,427,428,435,436,437,446],[61,124,132,136,138,139,141,142,143,155,160,208,332,338,344,437],[61,124,132,136,139,141,142,143,155,211,212,213,214,215,216,217,218,219,220],[61,124,132,136,139,141,142,143,155,263,318],[61,124,132,136,139,141,142,143,155,320],[61,124,132,136,139,141,142,143,155,318],[61,124,132,136,139,141,142,143,155,320,321],[61,124,132,136,138,139,141,142,143,155,196,199,229,230,441],[61,124,132,136,138,139,141,142,143,153,155,191,193,231,277,278,279,280,308,347,437,442,444,446],[61,124,132,136,138,139,141,142,143,153,155,172,195,230,280,312,358,428,436,441],[61,124,132,136,139,141,142,143,155,353],[61,124,132,136,139,141,142,143,155,354],[61,124,132,136,139,141,142,143,155,295,325,405],[61,124,132,136,139,141,142,143,155,355],[61,124,132,136,139,141,142,143,155,223,227],[61,124,132,136,138,139,141,142,143,155,196,223,231],[61,124,132,136,139,141,142,143,155,226,227],[61,124,132,136,139,141,142,143,155,228],[61,124,132,136,139,141,142,143,155,223,224],[61,124,132,136,139,141,142,143,155,223,275],[61,124,132,136,139,141,142,143,155,223],[61,124,132,136,139,141,142,143,155,263,316,436],[61,124,132,136,139,141,142,143,155,315],[61,124,132,136,139,141,142,143,155,224,435,436],[61,124,132,136,139,141,142,143,155,313,436],[61,124,132,136,139,141,142,143,155,224,435],[61,124,132,136,139,141,142,143,155,405],[61,124,132,136,139,141,142,143,155,196,225,231,279,295,312,346,349,352,358,365,366,396,397,400,404,427,437,441],[61,124,132,136,139,141,142,143,155,288,291,293,294,303,304],[52,61,124,132,136,139,141,142,143,155,183,185,258,398,399],[52,61,124,132,136,139,141,142,143,155,183,185,258,398,399,403],[61,124,132,136,139,141,142,143,155,414],[61,124,132,136,139,141,142,143,155,203,267,279,346,349,363,371,375,407,408,409,410,412,413,416,427,434,440],[61,124,132,136,139,141,142,143,155,303],[61,124,132,136,138,139,141,142,143,155,308],[61,124,132,136,139,141,142,143,155,308],[61,124,132,136,138,139,141,142,143,155,231,276,281,305,307,346,437,444,446],[61,124,132,136,139,141,142,143,155,288,289,290,291,293,294,303,304,445],[58,61,124,132,136,138,139,141,142,143,153,155,172,223,224,232,278,279,312,344,345,347,427,428,437,440,441,444],[61,124,132,136,139,141,142,143,155,267,269,272,428],[61,124,132,136,138,139,141,142,143,155,263,440],[61,124,132,136,139,141,142,143,155,266,363],[61,124,132,136,139,141,142,143,155,265],[61,124,132,136,139,141,142,143,155,267,268],[61,124,132,136,139,141,142,143,155,264,266,440],[61,124,132,136,138,139,141,142,143,155,195,267,269,270,271,440,441],[52,61,124,132,136,139,141,142,143,155,295,302,435],[61,124,132,136,139,141,142,143,155,188,189],[52,61,124,132,136,139,141,142,143,155,193],[52,61,124,132,136,139,141,142,143,155,292,435],[52,58,61,124,132,136,139,141,142,143,155,278,279,444,446],[61,124,132,136,139,141,142,143,155,193,466,467],[52,61,124,132,136,139,141,142,143,155,287],[52,61,124,132,136,139,141,142,143,153,155,172,191,246,282,284,286,446],[61,124,132,136,139,141,142,143,155,205,435,441],[61,124,132,136,139,141,142,143,155,328,435],[52,61,124,132,136,138,139,141,142,143,153,155,190,191,241,287,444,445],[52,61,124,132,136,139,141,142,143,155,181,182,183,184,185,444,490,586],[52,53,54,55,56,61,124,132,136,139,141,142,143,155],[61,124,132,136,139,141,142,143,155,236,237,238],[61,124,132,136,139,141,142,143,155,236],[52,56,61,124,132,136,138,139,140,141,142,143,153,155,180,181,182,183,184,185,186,191,232,339,383,442,443,446,490,586],[61,124,132,136,139,141,142,143,155,454],[61,124,132,136,139,141,142,143,155,456],[61,124,132,136,139,141,142,143,155,458],[61,124,132,136,139,141,142,143,155,460],[61,124,132,136,139,141,142,143,155,462,463,464],[61,124,132,136,139,141,142,143,155,468],[57,61,124,132,136,139,141,142,143,155,448,453,455,457,459,461,465,469,471,481,482,484,493,494,495,496],[61,124,132,136,139,141,142,143,155,470],[61,124,132,136,139,141,142,143,155,480],[61,124,132,136,139,141,142,143,155,284],[61,124,132,136,139,141,142,143,155,483],[61,123,124,132,136,139,141,142,143,155,267,269,270,272,485,486,487,490,491,492],[61,124,132,136,139,141,142,143,155,511,514,515,518,519,520,521,522,523,529,530,531,532,533,534,536,537,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555],[61,124,132,136,139,141,142,143,155,601],[61,124,132,136,139,141,142,143,155,160,180],[61,77,80,83,84,124,132,136,139,141,142,143,155,172],[61,80,124,132,136,139,141,142,143,155,160,172],[61,80,84,124,132,136,139,141,142,143,155,172],[61,124,132,136,139,141,142,143,155,160],[61,74,124,132,136,139,141,142,143,155],[61,78,124,132,136,139,141,142,143,155],[61,76,77,80,124,132,136,139,141,142,143,155,172],[61,124,132,136,139,141,142,143,145,155,169],[61,74,124,132,136,139,141,142,143,155,180],[61,76,80,124,132,136,139,141,142,143,145,155,172],[61,71,72,73,75,79,124,132,135,136,139,141,142,143,155,160,172],[61,80,88,96,124,132,136,139,141,142,143,155],[61,72,78,124,132,136,139,141,142,143,155],[61,80,105,106,124,132,136,139,141,142,143,155],[61,72,75,80,124,132,136,139,141,142,143,155,163,172,180],[61,80,124,132,136,139,141,142,143,155],[61,76,80,124,132,136,139,141,142,143,155,172],[61,71,124,132,136,139,141,142,143,155],[61,74,75,76,78,79,80,81,82,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,124,132,136,139,141,142,143,155],[61,80,98,101,124,132,136,139,141,142,143,155],[61,80,88,89,90,124,132,136,139,141,142,143,155],[61,78,80,89,91,124,132,136,139,141,142,143,155],[61,79,124,132,136,139,141,142,143,155],[61,72,74,80,124,132,136,139,141,142,143,155],[61,80,84,89,91,124,132,136,139,141,142,143,155],[61,84,124,132,136,139,141,142,143,155],[61,78,80,83,124,132,136,139,141,142,143,155,172],[61,72,76,80,88,124,132,136,139,141,142,143,155],[61,80,98,124,132,136,139,141,142,143,155],[61,91,124,132,136,139,141,142,143,155],[61,74,80,105,124,132,136,139,141,142,143,155,163,178,180],[61,124,132,136,139,141,142,143,155,722,723,724,725,726,727,728,730,731,732,733,734,735,736,737],[61,124,132,136,139,141,142,143,155,722],[61,124,132,136,139,141,142,143,155,722,729],[61,124,132,136,139,141,142,143,155,258,503,642],[61,124,132,136,139,141,142,143,155,258,493],[61,124,132,136,139,141,142,143,155,258,493,651,652],[61,124,132,136,139,141,142,143,155,258,639],[61,124,132,136,139,141,142,143,155,258,471,557],[61,124,132,136,139,141,142,143,155,258,484,497],[52,61,124,132,136,139,141,142,143,155,258,503,507,560,562,567,579,585,589,598,618,635,640,641,646],[61,124,132,136,139,141,142,143,155,258,471,656],[52,61,124,132,136,139,141,142,143,155,258,471,481,508,557,567,589,664],[61,124,132,136,139,141,142,143,155,258,471],[52,61,124,132,136,139,141,142,143,155,258,557,589,603],[52,61,124,132,136,139,141,142,143,155,258,603,667],[52,61,124,132,136,139,141,142,143,155,258,471,508,557,636,637,638],[61,124,132,136,139,141,142,143,155,258,503,579,634,639],[61,124,132,136,139,141,142,143,155,258,471,503,508,557,579,589],[61,124,132,136,139,141,142,143,155,258,471,633],[52,61,124,132,136,139,141,142,143,155,258,503,508,557,576,577,579,581,619,632],[52,61,124,132,136,139,141,142,143,155,258,503,508,633,634],[52,61,124,132,136,139,141,142,143,155,258,503,633,671],[61,124,132,136,139,141,142,143,155,258,471,561],[61,124,132,136,139,141,142,143,155,258,559],[52,61,124,132,136,139,141,142,143,155,258,503,507,560,562,567,579,585,589,598,618,635,640,641],[61,124,132,136,139,141,142,143,155,258,558],[52,61,124,132,136,139,141,142,143,155,258,471,503,508,557,636,637],[52,61,124,132,136,139,141,142,143,155,258,506,566],[52,61,124,132,136,139,141,142,143,155,258,566],[52,61,124,132,136,139,141,142,143,155,258,503,508,557,571,579],[52,61,124,132,136,139,141,142,143,155,258,503,508,557,588,589],[61,124,132,136,139,141,142,143,155,258,503,507,557,567,579],[61,124,132,136,139,141,142,143,155,258,557],[52,61,124,132,136,139,141,142,143,155,258,503,563,564,565,567,568,578,579,583,584,585,590,598,599,603,617],[52,61,124,132,136,139,141,142,143,155,258,503,557,567,574,579],[52,61,124,132,136,139,141,142,143,155,258,557,574,575,576,577],[52,61,124,132,136,139,141,142,143,155,258,508,557,589,592],[52,61,124,132,136,139,141,142,143,155,258,508,557,589,592,593,596,597],[52,61,124,132,136,139,141,142,143,155,258,506,507,508,557,566,570,581,589,596,658,659,660,661,662,663],[52,61,124,132,136,139,141,142,143,155,258,508,581],[52,61,124,132,136,139,141,142,143,155,258,506,556,557],[52,61,124,132,136,139,141,142,143,155,258,503],[52,61,124,132,136,139,141,142,143,155,258,503,510,557],[61,124,132,136,139,141,142,143,155,258,503,507],[52,61,124,132,136,139,141,142,143,155,258,506,510,556],[52,61,124,132,136,139,141,142,143,155,258,506],[52,61,124,132,136,139,141,142,143,155,258,506,556,557,573],[52,61,124,132,136,139,141,142,143,155,258,506,556,573],[52,61,124,132,136,139,141,142,143,155,258,506,556],[61,124,132,136,139,141,142,143,155,258],[61,124,132,136,139,141,142,143,155,258,510],[52,61,124,132,136,139,141,142,143,155,258,506,510,586,587],[52,61,124,132,136,139,141,142,143,155,258,506,508,519,557],[52,61,124,132,136,139,141,142,143,155,258,471,503,508,557],[52,61,124,132,136,139,141,142,143,155,258,503,591],[52,61,124,132,136,139,141,142,143,155,258,503,579,591],[61,124,132,136,139,141,142,143,155,258,589,684],[52,61,124,132,136,139,141,142,143,155,258,508,569,570,571,572,578,580,582],[52,61,124,132,136,139,141,142,143,155,258,503,508,557,579,634,645],[52,61,124,132,136,139,141,142,143,155,258,571],[52,61,124,132,136,139,141,142,143,155,258,567],[52,61,124,132,136,139,141,142,143,155,258,563,564],[52,61,124,132,136,139,141,142,143,155,258,687],[61,124,132,136,139,141,142,143,155,258,600,602],[61,124,132,136,139,141,142,143,155,258,503],[61,124,132,136,139,141,142,143,155,258,589],[61,124,132,136,139,141,142,143,155,258,613,615,616],[61,124,132,136,139,141,142,143,155,258,613,615],[61,124,132,136,139,141,142,143,155,258,589,597,690],[61,124,132,136,139,141,142,143,155,258,563,566],[61,124,132,136,139,141,142,143,155,258,615,616],[61,124,132,136,139,141,142,143,155,258,504,505],[61,124,132,136,139,141,142,143,147,155,172,258,701,702]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"438b41419b1df9f1fbe33b5e1b18f5853432be205991d1b19f5b7f351675541e","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"487b694c3de27ddf4ad107d4007ad304d29effccf9800c8ae23c2093638d906a","impliedFormat":1},{"version":"3a80bc85f38526ca3b08007ee80712e7bb0601df178b23fbf0bf87036fce40ce","impliedFormat":1},{"version":"ccf4552357ce3c159ef75f0f0114e80401702228f1898bdc9402214c9499e8c0","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"2931540c47ee0ff8a62860e61782eb17b155615db61e36986e54645ec67f67c2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"f6faf5f74e4c4cc309a6c6a6c4da02dbb840be5d3e92905a23dcd7b2b0bd1986","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"33e981bf6376e939f99bd7f89abec757c64897d33c005036b9a10d9587d80187","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"b41767d372275c154c7ea6c9d5449d9a741b8ce080f640155cc88ba1763e35b3","impliedFormat":1},{"version":"3bacf516d686d08682751a3bd2519ea3b8041a164bfb4f1d35728993e70a2426","impliedFormat":1},{"version":"7fb266686238369442bd1719bc0d7edd0199da4fb8540354e1ff7f16669b4323","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"54c3e2371e3d016469ad959697fd257e5621e16296fa67082c2575d0bf8eced0","impliedFormat":1},{"version":"beb8233b2c220cfa0feea31fbe9218d89fa02faa81ef744be8dce5acb89bb1fd","impliedFormat":1},{"version":"c183b931b68ad184bc8e8372bf663f3d33304772fb482f29fb91b3c391031f3e","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"48cc3ec153b50985fb95153258a710782b25975b10dd4ac8a4f3920632d10790","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"e1528ca65ac90f6fa0e4a247eb656b4263c470bb22d9033e466463e13395e599","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"866078923a56d026e39243b4392e282c1c63159723996fa89243140e1388a98d","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"435b3711465425770ed2ee2f1cf00ce071835265e0851a7dc4600ab4b007550e","impliedFormat":1},{"version":"7e49f52a159435fc8df4de9dc377ef5860732ca2dc9efec1640531d3cf5da7a3","impliedFormat":1},{"version":"dd4bde4bdc2e5394aed6855e98cf135dfdf5dd6468cad842e03116d31bbcc9bc","impliedFormat":1},{"version":"4d4e879009a84a47c05350b8dca823036ba3a29a3038efed1be76c9f81e45edf","affectsGlobalScope":true,"impliedFormat":1},{"version":"237ba5ac2a95702a114a309e39c53a5bddff5f6333b325db9764df9b34f3502b","impliedFormat":1},{"version":"9ba13b47cb450a438e3076c4a3f6afb9dc85e17eae50f26d4b2d72c0688c9251","impliedFormat":1},{"version":"b64cd4401633ea4ecadfd700ddc8323a13b63b106ac7127c1d2726f32424622c","impliedFormat":1},{"version":"37c6e5fe5715814412b43cc9b50b24c67a63c4e04e753e0d1305970d65417a60","impliedFormat":1},{"version":"1d024184fb57c58c5c91823f9d10b4915a4867b7934e89115fd0d861a9df27c8","impliedFormat":1},{"version":"ee0e4946247f842c6dd483cbb60a5e6b484fee07996e3a7bc7343dfb68a04c5d","impliedFormat":1},{"version":"ef051f42b7e0ef5ca04552f54c4552eac84099d64b6c5ad0ef4033574b6035b8","impliedFormat":1},{"version":"853a43154f1d01b0173d9cbd74063507ece57170bad7a3b68f3fa1229ad0a92f","impliedFormat":1},{"version":"56231e3c39a031bfb0afb797690b20ed4537670c93c0318b72d5180833d98b72","impliedFormat":1},{"version":"5cc7c39031bfd8b00ad58f32143d59eb6ffc24f5d41a20931269011dccd36c5e","impliedFormat":1},{"version":"b0b69c61b0f0ec8ca15db4c8c41f6e77f4cacb784d42bca948f42dea33e8757e","affectsGlobalScope":true,"impliedFormat":1},{"version":"f96a48183254c00d24575401f1a761b4ce4927d927407e7862a83e06ce5d6964","impliedFormat":1},{"version":"cc25940cfb27aa538e60d465f98bb5068d4d7d33131861ace43f04fe6947d68f","impliedFormat":1},{"version":"f83fb2b1338afbb3f9d733c7d6e8b135826c41b0518867df0c0ace18ae1aa270","impliedFormat":1},{"version":"01ff95aa1443e3f7248974e5a771f513cb2ac158c8898f470a1792f817bee497","impliedFormat":1},{"version":"757227c8b345c57d76f7f0e3bbad7a91ffca23f1b2547cbed9e10025816c9cb7","impliedFormat":1},{"version":"42a05d8f239f74587d4926aba8cc54792eed8e8a442c7adc9b38b516642aadfe","impliedFormat":1},{"version":"5d21b58d60383cc6ab9ad3d3e265d7d25af24a2c9b506247e0e50b0a884920be","impliedFormat":1},{"version":"101f482fd48cb4c7c0468dcc6d62c843d842977aea6235644b1edd05e81fbf22","impliedFormat":1},{"version":"ae6757460f37078884b1571a3de3ebaf724d827d7e1d53626c02b3c2a408ac63","affectsGlobalScope":true,"impliedFormat":1},{"version":"9451a46a89ed209e2e08329e6cac59f89356eae79a7230f916d8cc38725407c7","impliedFormat":1},{"version":"3ef397f12387eff17f550bc484ea7c27d21d43816bbe609d495107f44b97e933","impliedFormat":1},{"version":"1023282e2ba810bc07905d3668349fbd37a26411f0c8f94a70ef3c05fe523fcf","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"e236b5eba291f51bdf32c231673e6cab81b5410850e61f51a7a524dddadc0f95","impliedFormat":1},{"version":"f7ba0e839daa0702e3ff1a1a871c0d8ea2d586ce684dd8a72c786c36a680b1d9","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f2c62938251b45715fd2a9887060ec4fbc8724727029d1cbce373747252bdd7","impliedFormat":1},{"version":"e3ace08b6bbd84655d41e244677b474fd995923ffef7149ddb68af8848b60b05","impliedFormat":1},{"version":"132580b0e86c48fab152bab850fc57a4b74fe915c8958d2ccb052b809a44b61c","impliedFormat":1},{"version":"af4ab0aa8908fc9a655bb833d3bc28e117c4f0e1038c5a891546158beb25accb","impliedFormat":1},{"version":"69c9a5a9392e8564bd81116e1ed93b13205201fb44cb35a7fde8c9f9e21c4b23","impliedFormat":1},{"version":"5f8fc37f8434691ffac1bfd8fc2634647da2c0e84253ab5d2dd19a7718915b35","impliedFormat":1},{"version":"5981c2340fd8b076cae8efbae818d42c11ffc615994cb060b1cd390795f1be2b","impliedFormat":1},{"version":"f64deb26664af64dc274637343bde8d82f930c77af05a412c7d310b77207a448","impliedFormat":1},{"version":"ed4f674fc8c0c993cc7e145069ac44129e03519b910c62be206a0cc777bdc60b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0250da3eb85c99624f974e77ef355cdf86f43980251bc371475c2b397ba55bcd","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"3d3a5f27ffbc06c885dd4d5f9ee20de61faf877fe2c3a7051c4825903d9a7fdc","impliedFormat":1},{"version":"12806f9f085598ef930edaf2467a5fa1789a878fba077cd27e85dc5851e11834","impliedFormat":1},{"version":"bce309f4d9b67c18d4eeff5bba6cf3e67b2b0aead9f03f75d6060c553974d7ba","impliedFormat":1},{"version":"a43fe41c33d0a192a0ecaf9b92e87bef3709c9972e6d53c42c49251ccb962d69","impliedFormat":1},{"version":"a177959203c017fad3ecc4f3d96c8757a840957a4959a3ae00dab9d35961ca6c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6fc727ccf9b36e257ff982ea0badeffbfc2c151802f741bddff00c6af3b784cf","impliedFormat":1},{"version":"2a00d005e3af99cd1cfa75220e60c61b04bfb6be7ca7453bfe2ef6cca37cc03c","impliedFormat":1},{"version":"4844a4c9b4b1e812b257676ed8a80b3f3be0e29bf05e742cc2ea9c3c6865e6c6","impliedFormat":1},{"version":"064878a60367e0407c42fb7ba02a2ea4d83257357dc20088e549bd4d89433e9c","impliedFormat":1},{"version":"14d4bd22d1b05824971b98f7e91b2484c90f1a684805c330476641417c3d9735","impliedFormat":1},{"version":"c3877fef8a43cd434f9728f25a97575b0eb73d92f38b5c87c840daccc3e21d97","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"1dbd83860e7634f9c236647f45dbc5d3c4f9eba8827d87209d6e9826fdf4dbd5","impliedFormat":1},{"version":"41ef7992c555671a8fe54db302788adefa191ded810a50329b79d20a6772d14c","impliedFormat":1},{"version":"041a7781b9127ab568d2cdcce62c58fdea7c7407f40b8c50045d7866a2727130","impliedFormat":1},{"version":"b37f83e7deea729aa9ce5593f78905afb45b7532fdff63041d374f60059e7852","impliedFormat":1},{"version":"e1cb68f3ef3a8dd7b2a9dfb3de482ed6c0f1586ba0db4e7d73c1d2147b6ffc51","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"5c9b31919ea1cb350a7ae5e71c9ced8f11723e4fa258a8cc8d16ae46edd623c7","impliedFormat":1},{"version":"4aa42ce8383b45823b3a1d3811c0fdd5f939f90254bc4874124393febbaf89f6","impliedFormat":1},{"version":"96ffa70b486207241c0fcedb5d9553684f7fa6746bc2b04c519e7ebf41a51205","impliedFormat":1},{"version":"3677988e03b749874eb9c1aa8dc88cd77b6005e5c4c39d821cda7b80d5388619","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f4625edcb57b37b84506e8b276eb59ca30d31f88c6656d29d4e90e3bc58e69df","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"c685d9f68c70fe11ce527287526585a06ea13920bb6c18482ca84945a4e433a7","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"4e01846df98d478a2a626ec3641524964b38acaac13945c2db198bf9f3df22ee","impliedFormat":1},{"version":"678d6d4c43e5728bf66e92fc2269da9fa709cb60510fed988a27161473c3853f","impliedFormat":1},{"version":"ffa495b17a5ef1d0399586b590bd281056cee6ce3583e34f39926f8dcc6ecdb5","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"e2a37ac938c4bede5bb284b9d2d042da299528f1e61f6f57538f1bd37d760869","impliedFormat":1},{"version":"76def37aff8e3a051cf406e10340ffba0f28b6991c5d987474cc11137796e1eb","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"bfb7f8475428637bee12bdd31bd9968c1c8a1cc2c3e426c959e2f3a307f8936f","impliedFormat":1},{"version":"6f491d0108927478d3247bbbc489c78c2da7ef552fd5277f1ab6819986fdf0b1","impliedFormat":1},{"version":"594fe24fc54645ab6ccb9dba15d3a35963a73a395b2ef0375ea34bf181ccfd63","impliedFormat":1},{"version":"7cb0ee103671d1e201cd53dda12bc1cd0a35f1c63d6102720c6eeb322cb8e17e","impliedFormat":1},{"version":"15a234e5031b19c48a69ccc1607522d6e4b50f57d308ecb7fe863d44cd9f9eb3","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"05c97cddbaf99978f83d96de2d8af86aded9332592f08ce4a284d72d0952c391","impliedFormat":1},{"version":"72179f9dd22a86deaad4cc3490eb0fe69ee084d503b686985965654013f1391b","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"7b6ff760c8a240b40dab6e4419b989f06a5b782f4710d2967e67c695ef3e93c4","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"803cd2aaf1921c218916c2c7ee3fce653e852d767177eb51047ff15b5b253893","impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"7ab12b2f1249187223d11a589f5789c75177a0b597b9eb7f8e2e42d045393347","impliedFormat":1},{"version":"ad37fb4be61c1035b68f532b7220f4e8236cf245381ce3b90ac15449ecfe7305","impliedFormat":1},{"version":"93436bd74c66baba229bfefe1314d122c01f0d4c1d9e35081a0c4f0470ac1a6c","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"50b5bc34ce6b12eccb76214b51aadfa56572aa6cc79c2b9455cdbb3d6c76af1d","impliedFormat":1},{"version":"b7e16ef7f646a50991119b205794ebfd3a4d8f8e0f314981ebbe991639023d0e","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"6e9082e91370de5040e415cd9f24e595b490382e8c7402c4e938a8ce4bccc99f","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"12d218a49dbe5655b911e6cc3c13b2c655e4c783471c3b0432137769c79e1b3c","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"6b0fc04121360f752d196ba35b6567192f422d04a97b2840d7d85f8b79921c92","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"42b81043b00ff27c6bd955aea0f6e741545f2265978bf364b614702b72a027ab","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"97e5ccc7bb88419005cbdf812243a5b3186cdef81b608540acabe1be163fc3e4","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"6b3453eebd474cc8acf6d759f1668e6ce7425a565e2996a20b644c72916ecf75","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"89cd3444e389e42c56fd0d072afef31387e7f4107651afd2c03950f22dc36f77","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"e39a304f882598138a8022106cb8de332abbbb87f3fee71c5ca6b525c11c51fc","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"fcdf3e40e4a01b9a4b70931b8b51476b210c511924fcfe3f0dae19c4d52f1a54","impliedFormat":1},{"version":"345c4327b637d34a15aba4b7091eb068d6ab40a3dedaab9f00986253c9704e53","impliedFormat":1},{"version":"3a788c7fb7b1b1153d69a4d1d9e1d0dfbcf1127e703bdb02b6d12698e683d1fb","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"4805f6161c2c8cefb8d3b8bd96a080c0fe8dbc9315f6ad2e53238f9a79e528a6","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"2b5b70d7782fe028487a80a1c214e67bd610532b9f978b78fa60f5b4a359f77e","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"7e6ac205dcb9714f708354fd863bffa45cee90740706cc64b3b39b23ebb84744","impliedFormat":1},{"version":"61dc6e3ac78d64aa864eedd0a208b97b5887cc99c5ba65c03287bf57d83b1eb9","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"5b2323ca2d1bd97e1f32f09452908e015b012e0e4f958f649cbe0c8989a3fb4f","impliedFormat":1},{"version":"f730b468deecf26188ad62ee8950dc29aa2aea9543bb08ed714c3db019359fd9","impliedFormat":1},{"version":"933aee906d42ea2c53b6892192a8127745f2ec81a90695df4024308ba35a8ff4","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"144bc326e90b894d1ec78a2af3ffb2eb3733f4d96761db0ca0b6239a8285f972","impliedFormat":1},{"version":"a3e3f0efcae272ab8ee3298e4e819f7d9dd9ff411101f45444877e77cfeca9a4","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"58659b06d33fa430bee1105b75cf876c0a35b2567207487c8578aec51ca2d977","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"30e6520444df1a004f46fdc8096f3fe06f7bbd93d09c53ada9dcdde59919ccca","impliedFormat":1},{"version":"6c800b281b9e89e69165fd11536195488de3ff53004e55905e6c0059a2d8591e","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"a58beefce74db00dbb60eb5a4bb0c6726fb94c7797c721f629142c0ae9c94306","impliedFormat":1},{"version":"41eeb453ccb75c5b2c3abef97adbbd741bd7e9112a2510e12f03f646dc9ad13d","impliedFormat":1},{"version":"502fa5863df08b806dbf33c54bee8c19f7e2ad466785c0fc35465d7c5ff80995","impliedFormat":1},{"version":"c91a2d08601a1547ffef326201be26db94356f38693bb18db622ae5e9b3d7c92","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"9586918b63f24124a5ca1d0cc2979821a8a57f514781f09fc5aa9cae6d7c0138","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"ad10d4f0517599cdeca7755b930f148804e3e0e5b5a3847adce0f1f71bbccd74","impliedFormat":1},{"version":"1042064ece5bb47d6aba91648fbe0635c17c600ebdf567588b4ca715602f0a9d","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"55095860901097726220b6923e35a812afdd49242a1246d7b0942ee7eb34c6e4","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"d193c8a86144b3a87b22bc1f5534b9c3e0f5a187873ec337c289a183973a58fe","impliedFormat":1},{"version":"1a6e6ba8a07b74e3ad237717c0299d453f9ceb795dbc2f697d1f2dd07cb782d2","impliedFormat":1},{"version":"58d70c38037fc0f949243388ff7ae20cf43321107152f14a9d36ca79311e0ada","impliedFormat":1},{"version":"f56bdc6884648806d34bc66d31cdb787c4718d04105ce2cd88535db214631f82","impliedFormat":1},{"version":"190da5eac6478d61ab9731ab2146fbc0164af2117a363013249b7e7992f1cccb","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"49f95e989b4632c6c2a578cc0078ee19a5831832d79cc59abecf5160ea71abad","impliedFormat":1},{"version":"9666533332f26e8995e4d6fe472bdeec9f15d405693723e6497bf94120c566c8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"8a8c64dafaba11c806efa56f5c69f611276471bef80a1db1f71316ec4168acef","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"d0a4cac61fa080f2be5ebb68b82726be835689b35994ba0e22e3ed4d2bc45e3b","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"2d7db1d73456e8c5075387d4240c29a2a900847f9c1bff106a2e490da8fbd457","impliedFormat":1},{"version":"2b15c805f48e4e970f8ec0b1915f22d13ca6212375e8987663e2ef5f0205e832","impliedFormat":1},{"version":"205a31b31beb7be73b8df18fcc43109cbc31f398950190a0967afc7a12cb478c","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"dba6c7006e14a98ec82999c6f89fbbbfd1c642f41db148535f3b77b8018829b8","impliedFormat":1},{"version":"7f897b285f22a57a5c4dc14a27da2747c01084a542b4d90d33897216dceeea2e","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"2ded4f930d6abfaa0625cf55e58f565b7cbd4ab5b574dd2cb19f0a83a2f0be8b","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"ca0f4d9068d652bad47e326cf6ba424ac71ab866e44b24ddb6c2bd82d129586a","affectsGlobalScope":true,"impliedFormat":1},{"version":"04d36005fcbeac741ac50c421181f4e0316d57d148d37cc321a8ea285472462b","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"a46dba563f70f32f9e45ae015f3de979225f668075d7a427f874e0f6db584991","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"02c4fc9e6bb27545fa021f6056e88ff5fdf10d9d9f1467f1d10536c6e749ac50","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"bd4131091b773973ca5d2326c60b789ab1f5e02d8843b3587effe6e1ea7c9d86","impliedFormat":1},{"version":"c7f6485931085bf010fbaf46880a9b9ec1a285ad9dc8c695a9e936f5a48f34b4","impliedFormat":1},{"version":"14f6b927888a1112d662877a5966b05ac1bf7ed25d6c84386db4c23c95a5363b","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"d24ff95760ea2dfcc7c57d0e269356984e7046b7e0b745c80fea71559f15bdd8","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"83fe880c090afe485a5c02262c0b7cdd76a299a50c48d9bde02be8e908fb4ae6","impliedFormat":1},{"version":"13c1b657932e827a7ed510395d94fc8b743b9d053ab95b7cd829b2bc46fb06db","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"6511e4503cf74c469c60aafd6589e4d14d5eb0a25f9bf043dcbecdf65f261972","impliedFormat":1},{"version":"078131f3a722a8ad3fc0b724cd3497176513cdcb41c80f96a3acbda2a143b58e","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"9e155d2255348d950b1f65643fb26c0f14f5109daf8bd9ee24a866ad0a743648","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"7a883e9c84e720810f86ef4388f54938a65caa0f4d181a64e9255e847a7c9f51","impliedFormat":1},{"version":"a0ba218ac1baa3da0d5d9c1ec1a7c2f8676c284e6f5b920d6d049b13fa267377","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"d408d6f32de8d1aba2ff4a20f1aa6a6edd7d92c997f63b90f8ad3f9017cf5e46","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"9d622ea608d43eb463c0c4538fd5baa794bc18ea0bb8e96cd2ab6fd483d55fe2","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"371bf6127c1d427836de95197155132501cb6b69ef8709176ce6e0b85d059264","impliedFormat":1},{"version":"2bafd700e617d3693d568e972d02b92224b514781f542f70d497a8fdf92d52a2","affectsGlobalScope":true,"impliedFormat":1},{"version":"5542d8a7ea13168cb573be0d1ba0d29460d59430fb12bb7bf4674efd5604e14c","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"a3f41ed1b4f2fc3049394b945a68ae4fdefd49fa1739c32f149d32c0545d67f5","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"b6c1f64158da02580f55e8a2728eda6805f79419aed46a930f43e68ad66a38fc","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"330896c1a2b9693edd617be24fbf9e5895d6e18c7955d6c08f028f272b37314d","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"4c0a1233155afb94bd4d7518c75c84f98567cd5f13fc215d258de196cdb40d91","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"a68d4b3182e8d776cdede7ac9630c209a7bfbb59191f99a52479151816ef9f9e","impliedFormat":99},{"version":"39644b343e4e3d748344af8182111e3bbc594930fff0170256567e13bbdbebb0","impliedFormat":99},{"version":"ed7fd5160b47b0de3b1571c5c5578e8e7e3314e33ae0b8ea85a895774ee64749","impliedFormat":99},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"8fac4a15690b27612d8474fb2fc7cc00388df52d169791b78d1a3645d60b4c8b","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},"7ad303e40d4fddf44f156129e397511953a71481c5cfd86b1862649aaaf240cc",{"version":"37c7961117708394f64361ade31a41f96cef7f2a6606300821c72438dd4abda3","impliedFormat":1},{"version":"75f1e4ffacfea9f4baf4c1df6aebf18f7dac028c5e1a1300a7d17f5071e37c14","affectsGlobalScope":true,"impliedFormat":1},{"version":"64d4c41b11c1c817ddd39c4febdba05b560e4bdc4aef196ca48799b732ec8241","impliedFormat":1},{"version":"e4fdefba646eb133e52e30b00b3086f8849be02becb89c98b3ed4e873e40c8fc","impliedFormat":1},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"51954e948be6a5b728fcfaf561f12331b4f54f068934c77adfc8f70eea17d285","impliedFormat":1},{"version":"7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},{"version":"0cc5b5e29134c6f0065c7fe79ccdcca1f15c55fdab62de64f278d6e8e705f549","signature":"0b8fd7aa2222d31c2de139a76ef2aa14dc86717c45b9ef30e2c733be1fa2707e"},{"version":"1fd7bfea6c425ce8ec33a7d92edae59f10bc09f86ae01658447509d09ca663f1","impliedFormat":1},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"024829c0b317972acf4f871bf701525f81896ad74015f1a52d46ae6036205cb9","impliedFormat":99},{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"0943a6e4e026d0de8a4969ee975a7283e0627bf41aa4635d8502f6f24365ac9b","impliedFormat":99},{"version":"1461efc4aefd3e999244f238f59c9b9753a7e3dfede923ebe2b4a11d6e13a0d0","impliedFormat":99},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":99},{"version":"31c30cc54e8c3da37c8e2e40e5658471f65915df22d348990d1601901e8c9ff3","impliedFormat":99},{"version":"36d8011f1437aecf0e6e88677d933e4fb3403557f086f4ac00c5a4cb6d028ac2","impliedFormat":99},{"version":"8085954ba165e611c6230596078063627f3656fed3fb68ad1e36a414c4d7599a","impliedFormat":99},{"version":"2c57db2bf2dbd9e8ef4853be7257d62a1cb72845f7b976bb4ee827d362675f96","impliedFormat":99},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":99},{"version":"56a87e37f91f5625eb7d5f8394904f3f1e2a90fb08f347161dc94f1ae586bdd0","impliedFormat":99},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":99},{"version":"68b6a7501a56babd7bcd840e0d638ee7ec582f1e70b3c36ebf32e5e5836913c8","impliedFormat":99},{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":99},{"version":"6da2e0928bdab05861abc4e4abebea0c7cf0b67e25374ba35a94df2269563dd8","impliedFormat":99},{"version":"e7b00bec016013bcde74268d837a8b57173951add2b23c8fd12ffe57f204d88f","impliedFormat":99},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},{"version":"044047026c70439867589d8596ffe417b56158a1f054034f590166dd793b676b","impliedFormat":99},{"version":"89ad9a4e8044299f356f38879a1c2176bc60c997519b442c92cc5a70b731a360","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},{"version":"fd4f58cd6b5fc8ce8af0d04bfef5142f15c4bafaac9a9899c6daa056f10bb517","impliedFormat":99},{"version":"2a00cea77767cb26393ee6f972fd32941249a0d65b246bfcb20a780a2b919a21","impliedFormat":99},{"version":"440cb5b34e06fabe3dcb13a3f77b98d771bf696857c8e97ce170b4f345f8a26b","impliedFormat":99},{"version":"5bc7f0946c94e23765bd1b8f62dc3ab65d7716285ca7cf45609f57777ddb436f","impliedFormat":99},{"version":"7d5a5e603a68faea3d978630a84cacad7668f11e14164c4dd10224fa1e210f56","impliedFormat":99},{"version":"2535fc1a5fe64892783ff8f61321b181c24f824e688a4a05ae738da33466605b","impliedFormat":99},{"version":"cbfd5ef0c8fdb4983202252b5f5758a579f4500edc3b9ad413da60cffb5c3564","impliedFormat":99},{"version":"9f7a3c434912fd3feb87af4aabdf0d1b614152ecb5e7b2aa1fff3429879cdd51","impliedFormat":99},{"version":"99d1a601593495371e798da1850b52877bf63d0678f15722d5f048e404f002e4","impliedFormat":99},{"version":"1179ef8174e0e4a09d35576199df04803b1db17c0fb35b9326442884bc0b0cce","impliedFormat":99},{"version":"9c580c6eae94f8c9a38373566e59d5c3282dc194aa266b23a50686fe10560159","impliedFormat":99},{"version":"cc3738ba01d9af5ba1206a313896837ff8779791afcd9869e582783550f17f38","impliedFormat":99},{"version":"a80ec72f5e178862476deaeed532c305bdfcd3627014ae7ac2901356d794fc93","impliedFormat":99},{"version":"4a5aa16151dbec524bb043a5cbce2c3fec75957d175475c115a953aca53999a9","impliedFormat":99},{"version":"7a14bf21ae8a29d64c42173c08f026928daf418bed1b97b37ac4bb2aa197b89b","impliedFormat":99},{"version":"c5013d60cbff572255ccc87c314c39e198c8cc6c5aa7855db7a21b79e06a510f","impliedFormat":99},{"version":"69ec8d900cfec3d40e50490fedbbea5c1b49d32c38adbc236e73a3b8978c0b11","impliedFormat":99},{"version":"7fd629484ba6772b686885b443914655089246f75a13dd685845d0abae337671","impliedFormat":99},{"version":"13dcccb62e8537329ac0448f088ab16fe5b0bbed71e56906d28d202072759804","impliedFormat":99},{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":99},{"version":"ccb9fbe369885d02cf6c2b2948fb5060451565d37b04356bbe753807f98e0682","impliedFormat":99},{"version":"f9a76928845e1a726acac6d13069066a35cca11b38e54da32e45a205094d729f","signature":"20b22815c081d9256a85c4c7f2e36978b0430a4d50bfca444b430c2eda65f48d"},{"version":"ac4aa3d300e45b9b6cca50d880a5dd264a26c0782096b44a272d0d7e3223ac1c","signature":"f90ea2e895a59d6c73f377b3f6817771289aa57e0bbb0ac94852395f32c1eda6"},{"version":"1e4decc58c17f8d8a11b9566c17a2a87aca222effba15b1d0138e280c685afcf","signature":"55605f36433e1da3c0e2547eb92862f773a9277c26a90cc7ab90e54bc37a96fb"},{"version":"7256cbfe942df75ad4544b694d3a1c7ac710964e59a0161da46d31678dedcbd7","signature":"eb7ca65a288b7a14f9a47fb22547c58c9e3797cfe92d22bcd69e5ceb68d08ff0"},{"version":"920f9c399b6866739accb6a8f6ecd22cc9e7010959a9afa504d584879ee8f995","signature":"5a729b0dda7b2b58a3f1b0c848bfcf68ada662738028da933301147aab808e28"},{"version":"976f969775aaab7e2c093a1d83a0a9c90a950641a86ec6a04d7718b6f69c1706","signature":"c74607b28e28c31b15f0ba04a16f74f0e177560d6ce4aadf53e484c214b30db2"},{"version":"21a851bcdb740a2c34e3c4df004bce3ee767b0d026996b61026ffadc98accdcc","signature":"ba2ca822aa0a0a02c53fc208ecccb75480ce5b8fcba244e2a1d71fca3bff3bd0"},{"version":"b859d11b881c641fb2ca114a6ea4657b82bb04f3cd98c99586e762263ee899d4","signature":"5fda0a4fa09ccd58380059049b5004f5728277b965c53c9b4d70e8c513d0012f"},{"version":"3b178827da9b7d1507b21967dc99e9c72424804f37e429408183ca1a85b4ccd6","signature":"538931e4b2496e534adb865850ea2c3cd61e3865ea6ed4443da7ff8c415d2295"},{"version":"07cb5b71ed39b13b04be688d7ce98f006a2699f95eb276021058ab3c964e7d5d","signature":"edaceee7c4c0e9814963115bfb5b9dca2aef6127e48810a62d912df8b24c8dcb"},{"version":"b518b2135d855c0eba5c71b79255d92406570ff68c33969b6314dea7b7c34032","signature":"4f6402c4437df1fab510e33085f1f81b759fe774619b482289a5943fb1dcc824"},{"version":"49db564a5cf2bbd909bf27e423f48a7b4abd5c9418fb46da52a2efd7e2b112cb","signature":"a3a707d204ecd2269f38d6d782c9de67b408db75923f56109cd64b51fcfa35f2"},{"version":"13328b95903279f72ece3dabc11fd3b5dcdf89756f99dd55846fe8472574d7b5","signature":"f79b508114860f003a8835ff6007953b1571c514be270591d2196137ac123697"},{"version":"18dabacea98b86455a9f217bc9dfa67e9b7316dbaa66ab0b48fc340ea2b5f6d2","signature":"f9f7b608197d9af5c280783e2b0159fa15da2bd2279521052c42d4b531f20412"},{"version":"c9ba3613ff318af0b7a5cb8851ef534f526c56f9d1893c7f426258a7381a55fe","signature":"d45953865eac28ab753e960468424cd208d864d8da3f32f3b12c1e5085adce76"},{"version":"1e3caad2de609d39e2969e75a182ef32239c46edd2154d6baadb1daf14b702d2","signature":"9d682392d33e1b7e6a7d7754d23b45a7ed2279b0d2de699184d050814a14a67b"},{"version":"8a0a7697701966c260f53ac2ae91a232265974e6aa406220b02eef197bb9f0c0","impliedFormat":1},{"version":"63db3fb27a8445bbb4503e3f21ef4a769c4cd53908d659b5663469a270604e52","signature":"603bed59050fefb5195265c6ac968e11857bda170f505abae14a05153c94b5dc"},{"version":"cae76385bb6c4b3621f40357b095881d53048894b79366e7692bf1f4f977460e","signature":"fff78d55a5efd4bc32447cbf63580f39272c762b7cf884017db7cf5a5dadef9b"},{"version":"87204bb2dfa8d5f5057aa0d38d0f22c21618e60042a8ebda1ad7892a33c0899b","signature":"5eb22f1450a20efb3e3060d8881e74d6de7d2ebb2955ecb6a4a3c8dfbf46c10f"},{"version":"427883b56c0fb3bef9a767b3eb1ae94ed1c67744887dfde017d3907280fe9ff8","signature":"ab9a76f17e37aa15a8255e8688e802f1b8287789caeafc518d1d09dea8237dfb"},{"version":"259de2e6b17d8bf545577b4e09810977b152d8a8ee93a8d863fcddfd8b6c2c91","signature":"7e5590ef961524ec6e1cea9443d8842426fb17e39db78d8fb6d30f1187749f75"},{"version":"bae1b36da2ec48a179b9f7ab76ea9d7226104e24349711c9360345c5ee4d4175","signature":"fb7b5eee18dca672aad27e24619731f0fc595b56114ae25a81078ed87e2e648b"},{"version":"67d29c0b34f0c451998815ebadd3000bba3c27fe07e850bc507f6fe15ba4d37e","signature":"0eae8a162e3210c9cd4992033e2434690d472723efc1380bdd147967fde1c365"},{"version":"8933fbf8cd690291cb9ac98312e7c324a60103b374bbbd9a1122b98d14e83fc7","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"1e6d93b6d5b0bf8d98ab2a9409d987bdeb5856928336ba9272701b27058d46b9","signature":"0d43e27b58a755e3b4bc0d7c24971deafe885f7dce6ba2f00e8efaaee5739384"},{"version":"43d93281ca41a7f4f66297371d786b595026107b739119a6488ac1bd5815e795","signature":"b35b6fbfdabc3ffbaa036e1a23772fbda9fae14a3f12f11ecbfcdfabcaa9e09d"},{"version":"6bf8be8a80764f2c265a04ea8ad4e6fa978739f74dd3e18097243ef727aa900f","signature":"a7394635358821c19699a4cc8cc39f61bc9299f17e58b85c51eacfc2dba4abe1"},{"version":"16c73538546bd9c07b9a9ca7272c2f74779126a0f183f9639c4b45520fdb0d50","signature":"361e8fdc0f533077d3c02f3a2f4c5b40d9bbb0b69242004de06367e777669f70"},{"version":"a346701ad6dcdaa58e388fe0995fc5304c09c395b8cba68ed872780f8c102004","impliedFormat":99},{"version":"5e41ec2d0a7356dbfaec18eea16e3ea823de41bd1ed2ab0bc995c312da07ad2b","signature":"961f9a0edd9ba7844f580bcd6a3ef0329de302c57383237df49f31e03b33dcc0"},{"version":"d11cab84cdc3ef6b7ccb3d37f85132afb489a8dc228eeda83c36190e39293f95","signature":"37dbdc54dcaeb40c0dcbbee7c594fac47a7f6533014cf54230dbdea2de59b005"},{"version":"6aa2859da46f726a22040725e684ea964d7469a6b26f1c0a6634bb65e79062b0","impliedFormat":99},{"version":"ce988d322204070b047ed36cc1d04cb0d1b939ee9f0e021958c1dfe008283170","signature":"8a5a1b67ff9a86dcac2e4b3d736f28e4a11df55967fbe5157646f027daf39ec4"},{"version":"fed092b070fb8b26a2133fbaec0ca0dbb68c7e5f15a1b397ca4b77372101263b","signature":"2fe0f5ae81632e3b2b2d3c4f49ba32a6ff14d56588d226789909a400e2946ee6"},{"version":"45a23e8c58baa96ff3cea389a934b765d6c6b3e26bfb2b9cc9b9332d89a0b3a2","signature":"106f2bbbe48cc851add2d594d7fc8b9df020d42008d7803528bcf7f86ed9e930"},{"version":"a5e4ecfb67ffd6ea319b4efe7435870ad99f98a3b4cc99dfc52b5301d85e3836","signature":"1deafa91a4662c336b0dafea8e8905503571147d617abec808e73234c2f03217"},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"88b5951f985004aa155482185bf17f17a5cda391fc7b9c6a367020fa112d3c04","impliedFormat":1},{"version":"49c719a8e721ca3734baf3bca132689e87a71ca89fe6c44ca1d08fe672d2caa1","impliedFormat":99},{"version":"98137bb3bf4804403e7f845acea4cbfa7cdad2c860706a120f71a1206d9b65a1","impliedFormat":1},{"version":"e04485f7be83fe9cf74ab1a6c102e778acaf3dcff1debf5e128cec619053fe8c","signature":"10d3a99c5c353dc910b610192b129e02a59257e87990e178d71a9a7cfcaaaafd"},{"version":"a66ddc5525d1ca23c64356764a2b2e80a94020648f97635132333a73f2a6875e","signature":"581e676c7617d5925e7a8f110a482e1b3930a445f62948eb17bfbf366c91b579"},{"version":"26afc6c96b1e06037049ae351d88496b46568106e29d0dd2e9b610dc0042d5d0","impliedFormat":99},{"version":"929be3f6ac8e1c865f001506d259ae95e50d9e7d4214566bcead2c521bac1a8f","impliedFormat":1},{"version":"e2d3ca815e4e80e776b350af277719da5f93064c7fb1e8d4bb08ba86d9e5cbb8","impliedFormat":1},{"version":"a8534b4c4155f793ce64ff9cd222b02564bdeccf0781dc494a856019d8c2ab6b","signature":"687caf6611cb90a78644006a9d6109cb76e3e2d681d0cf46cb71d8be5368ad3f"},{"version":"cdbd35458f506b843f280d695d192968af4b0f27db3d5c0707934d97e96dd88d","impliedFormat":1},{"version":"0d86e751cdf42541f9b0dc579f1fad78ba02c9b57104723187d942c53bd63092","impliedFormat":1},{"version":"dae32a2a0cc5be690082fc59bd4b16ab58fc400d8802dc3073657ff4e825c48a","impliedFormat":1},{"version":"654bbcc8726e2a7a684460eda9c7d25847716587b04a72e0b88e75d828aa3db1","impliedFormat":1},{"version":"5c252941b1299551ad4f3f44ef995ee7a79585aebe2c5318271297496f2611c6","impliedFormat":1},{"version":"ca862092adc2e7df5d8244e202db4a5479bee59299ed6620773040d5e843e780","impliedFormat":1},{"version":"84ab1b8202996d370d7580cd15c85fe5981c9fd8ce4e20019de7203c8e9b594e","impliedFormat":1},{"version":"b7b58b11be801068222c596659957f4defdeec281974feb02a28d9c9ea38cd51","impliedFormat":1},{"version":"27a8d35a2910e71c796d71fb6d570a36dfcaef8cc69bd02e0b14fd143b908e04","impliedFormat":1},{"version":"d488bd13a9d714f30014a5f8a8df1be6b11ae3411efa63ba6643af44749bc153","impliedFormat":1},{"version":"d5a0858f7e98793a455e8f3d23f04077d1e588e72d82570bca31bab2d9f8ceae","impliedFormat":1},{"version":"6a9069e81da9856ed6780b17db0417d8a8ce217babf3681bfe29dcdad8f15f3d","impliedFormat":1},{"version":"773797695b285566e850938120112a2747c81ba0df4fd59f1a001ee978b6b56d","signature":"987d20e04ffea71576576de9392f0409f3f448b1849201731eb0828732dcdb03"},{"version":"eddb09dafa08b53540ae27cd4a56ae4b010ad32c379b523b9afd3b7aca77f56c","signature":"a801514de4f7aab90389cb964812c9854f32c56154e8913f915acd381d3abd9e"},{"version":"285732d343d51fe5c790c84798c76c3828921ab0a00ccfca0f332a6f7f2458c8","signature":"f00d34418fb3bad4e34c231d836c6d4164263eb66304c92c25ac208da8e1b423"},{"version":"3a0d238edb6082d6054412f650a68a5445cc6967e09430d37daf8914e28e20da","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"b27272c310f74fe57fc09e2f1f1a85d5d9cea66e6548193a1ceb3a49227fd337","impliedFormat":1},{"version":"c32fc9e8d8dd5dec8befa0090513915b5db284a3f458c0d36e237b6855620b4c","impliedFormat":1},{"version":"964aa613de023d8f25665b0e0422448f27c86d1b735dff96e151e34a3fde98d0","impliedFormat":1},{"version":"612e957934052ee5f82a63250d0242dca21da9acee8457df3807c2761b9a256d","impliedFormat":1},{"version":"49311ad5f5acef95eb65c2b92693ca222e5aa9680b81a717f8bae910c8193134","impliedFormat":1},{"version":"44f548700fbc5a851241e4e224cbbefb045729ead501516b29a524b3a0435749","impliedFormat":1},{"version":"71f33216fb5c7ea557dcb8400268ae85590b7bf3a912bc3e623a5434532b59f6","impliedFormat":1},{"version":"86e0a4f9b4bb434e69614b881f95bf76a411a96157c6ecdfd106d90de7a9b292","impliedFormat":1},{"version":"5665680438ea881a310320c71b8fc2669df282f331d2e356d9d0543366369118","impliedFormat":1},{"version":"6ec7a682062396f37ee704687b5019227b76c9d45178af0554f6f1d53c4182f5","impliedFormat":1},{"version":"9e97d5a835b7f160b212af745445d8ea5f5ee4b8401528db2bdb3309f39dc69c","impliedFormat":1},{"version":"e66da0c2cd7116c9ce5ff7d08274b636b67e15ca51d8187607aeb29f3165ef35","impliedFormat":1},{"version":"6c684c63fb60550aca4ddf48c44aa9ba41481586fea8e9cec311bf37247d550b","impliedFormat":1},{"version":"8fc18d8bc6931fae9e96cc2ef78aaee285e5ceb38078e8a5297453d4c0adef8c","signature":"fa4da3667c8150438d44910b2046be1e85a39f2e7ad3f353f766e5850e1b36a2"},{"version":"52fbad94a740c1834ba569df16721a7cfaf22c9e98ccd8f32db7f632b8fc4ede","signature":"adec553c8988bca1a677053dc569e802e249c82051c343f569bb4caf57db8d2b"},{"version":"28e5d096d8bc3d85628f6fe7a7bed3d218a80e31693fec50fb118665f6250e9b","signature":"409b782dc55b26017db2381fa07ce4d39233e052e9b031f67ebb31c0d417930a","affectsGlobalScope":true},{"version":"dae5b9f74f24c35a89c21652878572a1be244d0ee0afe3491e83155ec3dd9f75","impliedFormat":99},{"version":"15ba7f2f662a39ff4d6f7e74ae0eb6b03275cedee2dcdfdea3fbaf2b34ffe256","signature":"7e0e510adaa12bc2c861a4875791d07059c4939a203ace368bdb21e702f4666a"},{"version":"210b76c5101202f21ec79b67fcc33ce8dbc7d821d071052eae3663a114fa924f","signature":"af85c01c24afb3b03b1f21daa61a7c2261e7bd20397981ce718d474bc61928f9"},{"version":"b6f4e98498c065a85a5da8dca3605edd3a7203a48181a8017b1c7d5aca56a765","signature":"73c0bdde6bd9e63c3728cb58134a0dabf58b5ce3a3f1aace8f5330cb78ace308"},{"version":"23c33cba4a0cf53cd326b088862e5bd8f1e7779ab1cd603ff236d3ef40772fb8","signature":"22ae74981c8d653cb8698534a4e2d79f49d1364fdd3ac38a85892d8952e16833"},{"version":"d57f233b2d25d1ea94826e2c6fbbb3c6b8e0c29b8ad05713958032dcacaf16e2","signature":"302a39c123692d976d95f006872379732bf827a7f7f4354d82f8d7c2bfa6b23a"},{"version":"7369bd5a0e3c88ecb9ccd3220171d360a6334b4537b7aa326d1448b899a0e495","signature":"47d1bd9dbf4ff62bba8728097af715248672f061be6c663e7a7992dc6c41aa64"},{"version":"3bfd900fddb100f202350832d66d27f089e2e0e32042a46631b4bf1ac325f375","signature":"731f3f7d6296e3c464933db8a6b89f280c518317efc76f8ce07de89dd7989871","affectsGlobalScope":true},{"version":"901b7399f6056c47253f1bf244c753a77c5d6f6529d89e2773eff5afe1c68342","signature":"9032586ab03e834cb9651f010b10cd8f45a3b43ce1106c2ee92355353b66dbb0"},{"version":"f982092c1f6f10503bdeffbf6987caaba481ab696e0e99376fb86d8b214b21b9","impliedFormat":99},{"version":"b560d2ce46c16cb7853ffde9e057593d6397161a33fe65fab18344ef530caedc","signature":"7e8e722d35c822f4af7d363907b3e75008c6ea6f31da5ada4125cc82cbdc9940"},{"version":"e09921df90716775048eb883b881e10c1d5eb438b9231310347b0926a92cb6ea","signature":"8881ff83e1c4788085d80ecab27fa470e63a4e38ff9829fb08bcbb4986112021"},{"version":"f3b56bd042884fba075c314864b9c854acd7613b8d0870e168839279d0ff7230","signature":"637359a3d5dd761b30682c5ee386d320d5ac6327c9b03e408cd63e14837db390"},{"version":"29035b13799e77a39cc7ad5fa3793ee1df6ea0e2741da5a5ec4dec06e0a21d61","signature":"7d5cd4551bfda693a5ac6cfd06bf80c120a27d1ddb4d85e73d2ea25b3bd6c34a"},{"version":"8524dd9edc940d37b02b5d298de6f5cd1f5c576cb2434272106228f0f208a5ca","signature":"637359a3d5dd761b30682c5ee386d320d5ac6327c9b03e408cd63e14837db390"},{"version":"415fb2a1e562c6b0e3943ae8394a252009c04f52db433141ca8d60f438da1e00","signature":"af8cfbe5ac30a6a63f82abfa8ec4afd6445e5fab1facf83a3834e8cc7587a826"},{"version":"559b8c958fff8784a615e5ab8ae14e923681a515339965793fe6458261040574","signature":"c214478dab3c8035a9c6ef99d4675f092648faf519cddd2041cb7e23cd7936fa"},{"version":"bf8531e39e53e0f7b3144d51191eba3b392dd9b017b2dc5b3bd3a2fe8b804d90","signature":"b507eff70a55f2d68504832b674c71233d6b803826cc48933be1730ba4135a8c"},{"version":"060da698f8f3029310ed6615246ba7b54612fb916f6805be797273ff0cce8383","signature":"4342e71013ec7a6dffb4b2ac135320a7d9df0331dda8179303919d54e063beec"},{"version":"c0fbcd1ac1bb0b4ac02e7ff5264b46fb0b1105218daddd9d5f4648178edc5c5a","signature":"23af0f2ba3a27117c93845c4b3f186b71fa304a280cf408847942d7a64a12c1d"},{"version":"c0dd28110cf46ee0119cd8baad7b053d32da9bae08961c3b33dd00f953631858","signature":"c00339d9dc2b5fb9ee9dbbf3dba43bf07db000681cb76c883eedf434ef0fd4d1"},{"version":"325110095dfd92e2378e1eb825f80c2f86b98d2a4f54e907ce8731770bc2b8d5","signature":"20db600d3355c8773d3858d3391896f60b2b080df7288b562afa74bd47050281"},{"version":"a304cd8acfeb6ac35fa10492c2e207c3f186e7b1839c5164a8e3e3bea768fa00","signature":"42127a23505f3e2ba48d5ca2267bc9838e0ea87c7930d9ab1daa486554de9924"},{"version":"a29787f99ecfd75536043c96883c041af7cbed8fbacf2911980d1c53ef2138fa","signature":"22b4794663ef5951d86ce825ea2be2cde255c2bc0deb993f7190309cfa5a0eee"},{"version":"e9c57869ed401e08025b0a9fb40701fec98ac29ebea8f09fd4a02566de8c439b","signature":"bba86ec04e7eace76e380907f3fa8f59307d5a2d180c6f0056ab50ebac49a299"},{"version":"5cb1ca5780349eb78e41a588617c3336d7613f5759fcfb350ce99f1486df1fa0","signature":"d7803d92856795ae4477d2e271e81b7b7f90cd0adcfc0b5a6d2141bd4b8ec146"},{"version":"2752d74810f2f36fe2a3afed4caf7894eb618784a54a739e7eea8e4d1b191041","signature":"c3b2f933aa364d47522e2a254036880efc6a7698862a81241a38e971de565330"},{"version":"f90691ec43331d2721732cf6a148fbbc2c9f5bb85cbe3f990e6dcac6ae5bd986","signature":"9a6c971e967f0d4f67dae3ef9d5cc295bcac87891900ea87724551a60281bfba"},{"version":"c998b4220f4e2e7035fbb79e97beded93f9cfd11959c76ce6026c942b66e55be","signature":"18cd00f0f0bcbf74a43220b88e048fa519f3c13786902a391f61e91544095941"},{"version":"7dd8e961927e0062ff83ba689d3355605f2fed1c2f6b76dc84f407b2458c9e7b","signature":"b4fa3fb4c6c169e2121eebef45db8467554ba6b3f5c00813055b91bbd436dadf"},{"version":"546fad6fc240a6c0d6c57c04f402ae3bbc158af28ea0718244e63cbaba8a3432","signature":"fdac5e1b66d15d0391c208f463ccf207cafd13ceb4d27a49aa34c4c9fbecab45"},{"version":"bad5c00ed8acbc03bbd3bfaf9af34b60883a7b44f56584590a662fde77d61e09","signature":"45fd0978877709277d8ea255dc266e4862204b85e1ab6aef6f7d9ef5b93cd51c"},{"version":"c3b882ebb337805384210b6d6e5dfdabc3a922e5ffbe9721c39c319e18010da6","signature":"8539c91bb5dd9d29eab26010795fb6d5eab5958f12aad4b3fcc3b5ec5e6a8bc6"},{"version":"99dc2c12970399ac4a85054a3e902b7d462024db6fbebff5e209d02b52804f72","signature":"c626d9d61b4364ef0fcd36a2c274a187a10bc5eee9cb4ba035eba0c41e0f77b3"},{"version":"57ca6809cdf81b3b45b1a1208fb2e6880262a3f2711016348b9ca77f5fb78f80","signature":"43c6c3c0f43119b0596c422e3b624ad4d0cc99571742a92de9b7101c586857c0"},{"version":"2dd3e47de46b1cb1c46c283a05ea049c98338a64e18b8adf8d49f6167d97d790","signature":"e7fbc12c3f8cbfb820507d82534123cb9d81c69fe94db0b886fe0485f272ecb6"},{"version":"02eed27d67d72df08f2678a94e5cd43b363057776a3ab0ec3bbc06c9ba770fdc","signature":"a48dec7f9948cc66dea99a9af2c6fc870f903c898c89be5f1cdb6d4f8bfad509","affectsGlobalScope":true},{"version":"a45e2b74afd6a651e360f1c09da2932d87901005c353a95b6d5ee131fb7aa7aa","signature":"2f27926d18dcd2962a779d71abcc2a3618bc0c87fdbb8f0248d4508f3cd4380a"},{"version":"61b22272f9732aa2f61db9f44aba372e6c2436c934d281ae2ec9d3dc4aac0408","signature":"c514dffde695fde265a3f71dac8f8fb59cfc67de22d8cd80f18e14824159d515"},{"version":"7ba01791cf207ee7e53f9ae33ffd386560c535bd3754b8267d1cc9c624f115c5","signature":"3c18a774bdb775b4e06554bcdff3558c15267e764a71987a4cff4009fb1b4965"},{"version":"403397bc1d6d45d1e617097b4540efae08e567c812bc8b0ee8df7f550b32e2f9","signature":"95fcf300daf74a30df9e74349664cc7b8b5ce5850de755f11db1dfc47a988055"},{"version":"218c4047b06feda0b75d8bda03ebc1fcd0f9e53390278ffea31d3c3ca2fe7320","signature":"f4bcb6c39852869a48cee4f46cdb51046479e0706c65e177e462ed500a00925e"},{"version":"2b48a503872a16f3076180778be7efafe2547d8d3eec689d2cca1ea9222678c0","signature":"a7da83113cab67cfb0ebc4eaec44b27ece83d0c9c7d74892713b981683013bc0"},{"version":"103521c192c9ab04e99ccc431648ef557e31959852245a6e6aaae1fe36008ca1","signature":"8ddbb01fa9ff8cdd43fc69a66c246fc0cbbcb32c0bb0e68ad0b6373468d0a237"},{"version":"a0f067634ddd822f808ff4f53b1f0483aa96caec79396cdd2c4ca8a6c4aa33c7","signature":"c01db3fe3a0f722df012fd4b2b4770e630514dac527c5c1a17f61cc18290ce56"},{"version":"5225268a554316cc68b0ef52312e8a293319944f41eda1e5b4cab121696303b0","signature":"458b890fb07a867fd5e9792a602501742ea05319f77c0bf4311184e1e5408682"},{"version":"e76e051e4c96c4cb6c0cae3bb9171f2abe84306f75eb8b30089e8d714dbf4731","signature":"b9f1bf3713fc43fd9e929b746540e6d606807cc121fe59d4454efdf3b009c18a"},{"version":"25f0bba624aa3e5436dc36435d26558a6739e6c0e6f5d0c66e95ee539eab7e03","signature":"927f399c9359790437576476206d741caba685b6402de63e659554bbae42fc22"},{"version":"6c05d0fcee91437571513c404e62396ee798ff37a2d8bef2104accdc79deb9c0","impliedFormat":1},{"version":"d712a830eb32ae0403e651ef21db804cf3312de91b371dd38bc376553125f373","signature":"02fd33a56b76bd10e3b16dfc99d1e66f0d5ab8ce0b0015e09c115d025a229ba2"},{"version":"e6353cafeac460f161c54e7de2d0fb73f34c0e3ffc46aa186c73990c5eec64d0","signature":"976fa650e0eded7ae392e74f9d33e1f9b80f994ff17175a28f71b70bd8df32d7"},{"version":"b732d639bb124b45ecc42f9689dc10383a4d71a7ddde8dd9d0e43226112ebcf5","signature":"b949fbe5eee57f487829559e832abd29e586a645951a602536f3eabafffc8858","affectsGlobalScope":true},{"version":"334f2954e0b58bd4847e3cec0e5c810569ad2b42516c2fd4ff7c4ca0e286d155","signature":"40730b834cd1676718f9f53f5dfc1c7ac92e0df70e4385fb8b52bcfb8147323a"},{"version":"9e77d6087469e1f054c8cb35a2c7d0c0fc7b018f1de64aeb48171077c634ce49","signature":"6aa03bd2f5573a0b0e11612c8aed85473d69acbd18075f1de423aa2414aeaf46"},{"version":"fb67e9d5d8ec38dd6465a77ebc0b5e2c31fbb787e709cea1ba9e3079cdf9f398","impliedFormat":1},{"version":"2165ea92f28a268f68f817651dd2d90ac4fcec4e3a363567e8516af58b86570b","signature":"77ed30b58cd6408fac06d3f51f120718a370949416b81068dbe0648d725612a3"},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"a1936fd7bdd911dc2fea8bb2edf2e1eb8765c657a9c0a50de2a7cf4e2fa0ca8d","impliedFormat":1},{"version":"170554e7565b4a0f8b3de2828d7ffd17f58c728115e037ddf55b76af2c1e2348","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"2174e20517788d2a1379fc0aaacd87899a70f9e0197b4295edabfe75c4db03d8","impliedFormat":1},{"version":"25be1eb939c9c63242c7a45446edb20c40541da967f43f1aa6a00ed53c0552db","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"ba854883a418fca4343b51cb93718d481770f3b81e978bbf6378a2385264e55c","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"4ba01987c4b2c4b94a24c0a05bffbd75ab64d9fe8335dc63e9955d6c51a63468","impliedFormat":1},{"version":"c793dbebca7380a0ff70a7c19eafa8914c1869b52ab0eddf0d820e0eac39ab51","affectsGlobalScope":true,"impliedFormat":1},{"version":"610c801d2d9e95ad3d15b1a9e5f9194508ae2fd10aaa1451178f4f7f40f7b4ce","impliedFormat":1},{"version":"edeca7074d6c4cc16e8ebb5a630304fd4473a3967f1b82ffb71a367bbc138fc0","impliedFormat":1},{"version":"4cf58cd73f135e59d2268b4b792623bd8cc7ea887d96498f2a64d550beb930bb","impliedFormat":1},{"version":"e91ad231af87f864b3f07cd0e39b1cf6c133988156f087c1c3ccb0a5491c9115","impliedFormat":1},{"version":"1fd5dcbeb175a97c46ac125c12cb8f0de5186e76f5ee3c4708fa0cca1874d585","impliedFormat":1},{"version":"319c37263037e8d9481a3dc7eadf6afa6a5f5c002189ebe28776ac1a62a38e15","impliedFormat":1},{"version":"1f4ae755492a669b317903a6b1664cb7af3fe0c3d1eec6447f4e95a80616d15a","impliedFormat":1},{"version":"03c258e060b7da220973f84b89615e4e9850e9b5d30b3a8e4840b3e3268ae8eb","impliedFormat":1},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"2c3b8be03577c98530ef9cb1a76e2c812636a871f367e9edf4c5f3ce702b77f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"cff399d99c68e4fafdd5835d443a980622267a39ac6f3f59b9e3d60d60c4f133","impliedFormat":99},{"version":"6ada175c0c585e89569e8feb8ff6fc9fc443d7f9ca6340b456e0f94cbef559bf","impliedFormat":99},{"version":"e56e4d95fad615c97eb0ae39c329a4cda9c0af178273a9173676cc9b14b58520","impliedFormat":99},{"version":"73e8dfd5e7d2abc18bdb5c5873e64dbdd1082408dd1921cad6ff7130d8339334","impliedFormat":99},{"version":"fc820b2f0c21501f51f79b58a21d3fa7ae5659fc1812784dbfbb72af147659ee","impliedFormat":99},{"version":"4f041ef66167b5f9c73101e5fd8468774b09429932067926f9b2960cc3e4f99d","impliedFormat":99},{"version":"31501b8fc4279e78f6a05ca35e365e73c0b0c57d06dbe8faecb10c7254ce7714","impliedFormat":99},{"version":"7bc76e7d4bbe3764abaf054aed3a622c5cdbac694e474050d71ce9d4ab93ea4b","impliedFormat":99},{"version":"ff4e9db3eb1e95d7ba4b5765e4dc7f512b90fb3b588adfd5ca9b0d9d7a56a1ae","impliedFormat":99},{"version":"f205fd03cd15ea054f7006b7ef8378ef29c315149da0726f4928d291e7dce7b9","impliedFormat":99},{"version":"d683908557d53abeb1b94747e764b3bd6b6226273514b96a942340e9ce4b7be7","impliedFormat":99},{"version":"7c6d5704e2f236fddaf8dbe9131d998a4f5132609ef795b78c3b63f46317f88a","impliedFormat":99},{"version":"d05bd4d28c12545827349b0ac3a79c50658d68147dad38d13e97e22353544496","impliedFormat":99},{"version":"b6436d90a5487d9b3c3916b939f68e43f7eaca4b0bb305d897d5124180a122b9","impliedFormat":99},{"version":"04ace6bedd6f59c30ea6df1f0f8d432c728c8bc5c5fd0c5c1c80242d3ab51977","impliedFormat":99},{"version":"57a8a7772769c35ba7b4b1ba125f0812deec5c7102a0d04d9e15b1d22880c9e8","impliedFormat":99},{"version":"badcc9d59770b91987e962f8e3ddfa1e06671b0e4c5e2738bbd002255cad3f38","impliedFormat":99},{"version":"0b301e46295e7dee8bcead624b4a0f94ab8ba1cb3f572b726977322293be2196","impliedFormat":1}],"root":[499,506,507,[557,572],[574,585],587,588,[590,593],598,599,603,[616,619],[633,635],[637,644],[646,683],[685,689],691,703],"options":{"allowImportingTsExtensions":true,"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7,"useDefineForClassFields":true},"referencedMap":[[499,1],[612,2],[608,3],[607,4],[605,5],[604,6],[606,7],[611,8],[610,9],[614,10],[609,9],[600,9],[241,9],[511,11],[515,12],[520,13],[524,14],[521,14],[522,15],[523,16],[514,15],[529,17],[512,11],[519,18],[530,11],[516,14],[531,17],[517,14],[533,19],[532,14],[534,20],[528,21],[536,22],[538,23],[539,24],[540,11],[541,25],[526,26],[518,14],[513,11],[542,15],[543,27],[527,15],[544,15],[545,25],[546,14],[547,15],[586,28],[549,15],[550,27],[551,29],[553,30],[552,14],[554,31],[555,20],[537,14],[525,9],[573,11],[700,32],[704,9],[699,33],[705,33],[706,9],[696,34],[701,35],[707,9],[697,9],[708,9],[709,9],[692,9],[121,36],[122,36],[123,37],[61,38],[124,39],[125,40],[126,41],[59,9],[127,42],[128,43],[129,44],[130,45],[131,46],[132,47],[133,47],[134,48],[135,49],[136,50],[137,51],[62,9],[60,9],[138,52],[139,53],[140,54],[180,55],[141,56],[142,57],[143,56],[144,58],[145,59],[146,60],[147,61],[148,61],[149,61],[150,62],[151,63],[152,64],[153,65],[154,66],[155,67],[156,67],[157,68],[158,9],[159,9],[160,69],[161,70],[162,69],[163,71],[164,72],[165,73],[166,74],[167,75],[168,76],[169,77],[170,78],[171,79],[172,80],[173,81],[174,82],[175,83],[176,84],[177,85],[63,56],[64,9],[65,86],[66,87],[67,9],[68,88],[69,9],[112,89],[113,90],[114,91],[115,91],[116,92],[117,9],[118,39],[119,93],[120,90],[178,94],[179,95],[710,9],[711,96],[713,97],[712,98],[694,9],[714,9],[695,9],[184,99],[401,11],[185,100],[183,101],[403,102],[402,103],[181,104],[399,9],[182,105],[50,9],[52,106],[398,11],[258,11],[717,107],[693,108],[698,109],[718,9],[719,9],[721,110],[720,9],[739,9],[70,9],[510,111],[509,112],[504,9],[51,9],[632,113],[631,114],[630,9],[620,9],[622,9],[626,115],[623,9],[624,9],[621,9],[625,9],[628,116],[629,9],[627,9],[596,117],[702,118],[613,119],[615,120],[715,121],[502,122],[503,123],[690,9],[597,9],[594,96],[508,11],[636,9],[501,124],[500,9],[684,11],[448,125],[453,126],[443,127],[205,128],[245,129],[427,130],[240,131],[222,9],[397,9],[203,9],[416,132],[271,133],[204,9],[325,134],[248,135],[249,136],[396,137],[413,138],[307,139],[421,140],[422,141],[420,142],[419,9],[417,143],[247,144],[206,145],[350,9],[351,146],[277,147],[207,148],[278,147],[273,147],[194,147],[243,149],[242,9],[426,150],[438,9],[230,9],[372,151],[373,152],[367,11],[475,9],[375,9],[376,153],[368,154],[480,155],[479,156],[474,9],[292,9],[412,157],[411,9],[473,158],[369,11],[301,159],[297,160],[302,161],[300,9],[299,162],[298,9],[476,9],[472,9],[478,163],[477,9],[296,160],[467,164],[470,165],[286,166],[285,167],[284,168],[483,11],[283,169],[265,9],[486,9],[489,9],[488,11],[490,170],[187,9],[423,171],[424,172],[425,173],[200,9],[233,9],[199,174],[186,9],[388,11],[192,175],[387,176],[386,177],[377,9],[378,9],[385,9],[380,9],[383,178],[379,9],[381,179],[384,180],[382,179],[202,9],[197,9],[198,147],[253,9],[259,181],[260,182],[257,183],[255,184],[256,185],[251,9],[394,153],[280,153],[447,186],[454,187],[458,188],[430,189],[429,9],[268,9],[491,190],[442,191],[370,192],[371,193],[365,194],[356,9],[393,195],[432,11],[357,196],[395,197],[390,198],[389,9],[391,9],[362,9],[349,199],[431,200],[434,201],[359,202],[363,203],[354,204],[408,205],[441,206],[311,207],[326,208],[195,209],[440,210],[191,211],[261,212],[252,9],[262,213],[338,214],[250,9],[337,215],[58,9],[331,216],[232,9],[352,217],[327,9],[196,9],[226,9],[335,218],[201,9],[263,219],[361,220],[428,221],[360,9],[334,9],[254,9],[340,222],[341,223],[418,9],[343,224],[345,225],[344,226],[235,9],[333,209],[347,227],[310,228],[332,229],[339,230],[210,9],[214,9],[213,9],[212,9],[217,9],[211,9],[220,9],[219,9],[216,9],[215,9],[218,9],[221,231],[209,9],[319,232],[318,9],[323,233],[320,234],[322,235],[324,233],[321,234],[231,236],[281,237],[437,238],[492,9],[462,239],[464,240],[358,241],[463,242],[435,200],[374,200],[208,9],[312,243],[227,244],[228,245],[229,246],[225,247],[407,247],[275,247],[313,248],[276,248],[224,249],[223,9],[317,250],[316,251],[315,252],[314,253],[436,254],[406,255],[405,256],[366,257],[400,258],[404,259],[415,260],[414,261],[410,262],[309,263],[306,264],[308,265],[305,266],[346,267],[336,9],[452,9],[348,268],[409,9],[264,269],[355,171],[353,270],[266,271],[269,272],[487,9],[267,273],[270,273],[450,9],[449,9],[451,9],[485,9],[272,274],[433,9],[303,275],[295,11],[246,9],[190,276],[279,9],[456,11],[189,9],[466,277],[294,11],[460,153],[293,278],[445,279],[291,277],[193,9],[468,280],[289,11],[290,11],[282,9],[188,9],[288,281],[287,282],[234,283],[364,65],[274,65],[342,9],[329,284],[328,9],[392,160],[304,11],[439,174],[446,285],[53,11],[56,286],[57,287],[54,11],[55,9],[244,87],[239,288],[238,9],[237,289],[236,9],[444,290],[455,291],[457,292],[459,293],[461,294],[465,295],[498,296],[469,296],[497,297],[471,298],[481,299],[482,300],[484,301],[493,302],[496,174],[495,9],[494,96],[556,303],[535,14],[548,11],[645,11],[601,9],[602,304],[330,305],[589,11],[505,9],[716,9],[48,9],[49,9],[8,9],[9,9],[11,9],[10,9],[2,9],[12,9],[13,9],[14,9],[15,9],[16,9],[17,9],[18,9],[19,9],[3,9],[20,9],[21,9],[4,9],[22,9],[26,9],[23,9],[24,9],[25,9],[27,9],[28,9],[29,9],[5,9],[30,9],[31,9],[32,9],[33,9],[6,9],[37,9],[34,9],[35,9],[36,9],[38,9],[7,9],[39,9],[44,9],[45,9],[40,9],[41,9],[42,9],[43,9],[1,9],[46,9],[47,9],[88,306],[100,307],[86,308],[101,309],[110,310],[77,311],[78,312],[76,313],[109,96],[104,314],[108,315],[80,316],[97,317],[79,318],[107,319],[74,320],[75,314],[81,321],[82,9],[87,322],[85,321],[72,323],[111,324],[102,325],[91,326],[90,321],[92,327],[95,328],[89,329],[93,330],[105,96],[83,331],[84,332],[96,333],[73,309],[99,334],[98,321],[94,335],[103,9],[71,9],[106,336],[738,337],[723,9],[724,9],[725,9],[726,9],[722,9],[727,338],[728,9],[730,339],[729,338],[731,338],[732,339],[733,338],[734,9],[735,338],[736,9],[737,9],[595,9],[643,340],[648,341],[649,341],[650,341],[653,342],[654,343],[655,344],[644,345],[647,346],[657,347],[665,348],[666,349],[656,350],[669,351],[639,352],[640,353],[667,354],[668,344],[670,355],[633,356],[635,357],[671,356],[672,358],[562,359],[560,360],[642,361],[561,349],[559,362],[638,363],[659,364],[662,365],[663,365],[661,364],[660,153],[580,366],[590,367],[599,368],[585,369],[618,370],[641,371],[578,372],[584,369],[673,373],[598,374],[664,375],[582,376],[675,377],[634,378],[569,379],[676,380],[677,378],[658,381],[557,381],[507,382],[574,383],[593,384],[581,382],[576,385],[674,386],[587,387],[588,388],[678,389],[679,382],[558,390],[680,385],[681,385],[592,391],[577,384],[682,385],[683,392],[685,393],[575,385],[570,381],[619,382],[686,385],[583,394],[646,395],[637,386],[572,396],[591,378],[568,397],[565,398],[688,399],[603,400],[579,401],[652,386],[564,386],[571,386],[689,402],[651,403],[616,404],[691,405],[567,406],[617,407],[506,408],[687,386],[703,409],[563,386],[566,386]],"affectedFilesPendingEmit":[643,648,649,650,653,654,655,644,647,657,665,666,656,669,639,640,667,668,670,633,635,671,672,562,560,642,561,559,638,659,662,663,661,660,580,590,599,585,618,641,578,584,673,598,664,582,675,634,569,676,677,658,557,507,574,593,581,576,674,587,588,678,679,558,680,681,592,577,682,683,685,575,570,619,686,583,646,637,572,591,568,565,688,603,579,652,564,571,689,651,616,691,567,617,506,687,703,563,566],"version":"5.9.3"}
\ No newline at end of file
+{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2025.float16.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/blob.d.ts","./node_modules/@types/node/web-globals/console.d.ts","./node_modules/@types/node/web-globals/crypto.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/encoding.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/undici-types/utility.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client-stats.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/round-robin-pool.d.ts","./node_modules/undici-types/h2c-client.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-call-history.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/snapshot-agent.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cache-interceptor.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/web-globals/importmeta.d.ts","./node_modules/@types/node/web-globals/messaging.d.ts","./node_modules/@types/node/web-globals/navigator.d.ts","./node_modules/@types/node/web-globals/performance.d.ts","./node_modules/@types/node/web-globals/storage.d.ts","./node_modules/@types/node/web-globals/streams.d.ts","./node_modules/@types/node/web-globals/timers.d.ts","./node_modules/@types/node/web-globals/url.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/inspector/promises.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/buffer/index.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/path/posix.d.ts","./node_modules/@types/node/path/win32.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/quic.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/sqlite.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/test/reporters.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/util/types.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./node_modules/lucide-react/dist/lucide-react.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./src/lib/utils.ts","./src/components/ui/card.tsx","./src/components/errors/errorstate.tsx","./src/components/layout/footer.tsx","./node_modules/@tabler/icons-react/dist/tabler-icons-react.d.ts","./node_modules/@radix-ui/react-accessible-icon/dist/index.d.mts","./node_modules/@radix-ui/react-context/dist/index.d.mts","./node_modules/@radix-ui/react-primitive/dist/index.d.mts","./node_modules/@radix-ui/react-collapsible/dist/index.d.mts","./node_modules/@radix-ui/react-accordion/dist/index.d.mts","./node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","./node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","./node_modules/@radix-ui/react-portal/dist/index.d.mts","./node_modules/@radix-ui/react-dialog/dist/index.d.mts","./node_modules/@radix-ui/react-alert-dialog/dist/index.d.mts","./node_modules/@radix-ui/react-aspect-ratio/dist/index.d.mts","./node_modules/@radix-ui/react-avatar/dist/index.d.mts","./node_modules/@radix-ui/react-checkbox/dist/index.d.mts","./node_modules/@radix-ui/react-arrow/dist/index.d.mts","./node_modules/@radix-ui/rect/dist/index.d.mts","./node_modules/@radix-ui/react-popper/dist/index.d.mts","./node_modules/@radix-ui/react-roving-focus/dist/index.d.mts","./node_modules/@radix-ui/react-menu/dist/index.d.mts","./node_modules/@radix-ui/react-context-menu/dist/index.d.mts","./node_modules/@radix-ui/react-direction/dist/index.d.mts","./node_modules/@radix-ui/react-dropdown-menu/dist/index.d.mts","./node_modules/@radix-ui/react-form/node_modules/@radix-ui/react-label/dist/index.d.mts","./node_modules/@radix-ui/react-form/dist/index.d.mts","./node_modules/@radix-ui/react-hover-card/dist/index.d.mts","./node_modules/radix-ui/node_modules/@radix-ui/react-label/dist/index.d.mts","./node_modules/@radix-ui/react-menubar/dist/index.d.mts","./node_modules/@radix-ui/react-visually-hidden/dist/index.d.mts","./node_modules/@radix-ui/react-navigation-menu/dist/index.d.mts","./node_modules/@radix-ui/react-one-time-password-field/dist/index.d.mts","./node_modules/@radix-ui/react-password-toggle-field/dist/index.d.mts","./node_modules/@radix-ui/react-popover/dist/index.d.mts","./node_modules/@radix-ui/react-progress/dist/index.d.mts","./node_modules/@radix-ui/react-radio-group/dist/index.d.mts","./node_modules/@radix-ui/react-scroll-area/dist/index.d.mts","./node_modules/@radix-ui/react-select/dist/index.d.mts","./node_modules/@radix-ui/react-separator/dist/index.d.mts","./node_modules/@radix-ui/react-slider/dist/index.d.mts","./node_modules/radix-ui/node_modules/@radix-ui/react-slot/dist/index.d.mts","./node_modules/@radix-ui/react-switch/dist/index.d.mts","./node_modules/@radix-ui/react-tabs/dist/index.d.mts","./node_modules/@radix-ui/react-toast/dist/index.d.mts","./node_modules/@radix-ui/react-toggle/dist/index.d.mts","./node_modules/@radix-ui/react-toggle-group/dist/index.d.mts","./node_modules/@radix-ui/react-toolbar/dist/index.d.mts","./node_modules/@radix-ui/react-tooltip/dist/index.d.mts","./node_modules/radix-ui/dist/index.d.mts","./src/components/ui/dropdown-menu.tsx","./src/components/layout/header.tsx","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./src/components/ui/button.tsx","./src/app/error.tsx","./src/app/global-error.tsx","./node_modules/@vercel/analytics/dist/react/index.d.mts","./src/components/analytics/vercelanalytics.tsx","./node_modules/motion-utils/dist/index.d.ts","./node_modules/motion-dom/dist/index.d.ts","./node_modules/framer-motion/dist/types.d-docc-kzb.d.ts","./node_modules/framer-motion/dist/types/index.d.ts","./src/components/ui/animated-backdrop.tsx","./node_modules/device-detector-js/dist/parsers/client/browser.d.ts","./node_modules/device-detector-js/dist/parsers/client/mobile-apps.d.ts","./node_modules/device-detector-js/dist/parsers/client/feed-readers.d.ts","./node_modules/device-detector-js/dist/parsers/client/libraries.d.ts","./node_modules/device-detector-js/dist/parsers/client/media-players.d.ts","./node_modules/device-detector-js/dist/parsers/client/personal-information-managers.d.ts","./node_modules/device-detector-js/dist/parsers/client/index.d.ts","./node_modules/device-detector-js/dist/typings/device.d.ts","./node_modules/device-detector-js/dist/parsers/device/index.d.ts","./node_modules/device-detector-js/dist/parsers/operating-system/index.d.ts","./node_modules/device-detector-js/dist/parsers/bot/typing.d.ts","./node_modules/device-detector-js/dist/parsers/bot/index.d.ts","./node_modules/device-detector-js/dist/index.d.ts","./src/components/feedback/feedbackform.tsx","./src/components/feedback/feedbackmodals.tsx","./src/app/layout.tsx","./src/app/not-found.tsx","./node_modules/sonner/dist/index.d.mts","./src/lib/file-format-utils.ts","./src/hooks/use-file-input.tsx","./src/lib/animations.ts","./src/components/transcription/fileuploadinput.tsx","./src/components/ui/dialog.tsx","./src/components/ui/label.tsx","./src/components/ui/select.tsx","./src/components/ui/switch.tsx","./src/components/transcription/transcriptionoptions.tsx","./src/components/ui/input.tsx","./src/components/transcription/urlinput.tsx","./src/components/ui/animated-button.tsx","./src/components/ui/tabs.tsx","./src/components/uploadaudio.tsx","./src/lib/error-utils.ts","./node_modules/@firebase/util/dist/util-public.d.ts","./node_modules/@firebase/component/dist/src/provider.d.ts","./node_modules/@firebase/component/dist/src/component_container.d.ts","./node_modules/@firebase/component/dist/src/types.d.ts","./node_modules/@firebase/component/dist/src/component.d.ts","./node_modules/@firebase/component/dist/index.d.ts","./node_modules/@firebase/logger/dist/src/logger.d.ts","./node_modules/@firebase/logger/dist/index.d.ts","./node_modules/@firebase/app/dist/app-public.d.ts","./node_modules/@firebase/storage/dist/storage-public.d.ts","./node_modules/firebase/storage/dist/storage/index.d.ts","./node_modules/firebase/app/dist/app/index.d.ts","./src/lib/firebase.ts","./src/lib/storage-service.ts","./src/services/transcription.ts","./node_modules/zustand/esm/vanilla.d.mts","./node_modules/zustand/esm/react.d.mts","./node_modules/zustand/esm/index.d.mts","./src/types/transcription.ts","./src/stores/history-store.ts","./src/app/page.tsx","./src/app/about/page.tsx","./src/app/api/firebase-proxy/route.ts","./node_modules/assemblyai/dist/types/files/index.d.ts","./node_modules/assemblyai/dist/types/helpers/index.d.ts","./node_modules/assemblyai/dist/types/openapi.generated.d.ts","./node_modules/assemblyai/dist/types/transcripts/index.d.ts","./node_modules/assemblyai/dist/types/asyncapi.generated.d.ts","./node_modules/assemblyai/dist/types/realtime/index.d.ts","./node_modules/assemblyai/dist/types/streaming/index.d.ts","./node_modules/assemblyai/dist/types/services/index.d.ts","./node_modules/assemblyai/dist/types/deprecated.d.ts","./node_modules/assemblyai/dist/types/index.d.ts","./node_modules/assemblyai/dist/index.d.ts","./node_modules/assemblyai/dist/services/base.d.ts","./node_modules/assemblyai/dist/services/lemur/index.d.ts","./node_modules/assemblyai/dist/services/realtime/service.d.ts","./node_modules/assemblyai/dist/services/realtime/factory.d.ts","./node_modules/assemblyai/dist/services/realtime/index.d.ts","./node_modules/assemblyai/dist/services/files/index.d.ts","./node_modules/assemblyai/dist/services/transcripts/index.d.ts","./node_modules/assemblyai/dist/services/streaming/service.d.ts","./node_modules/assemblyai/dist/services/streaming/factory.d.ts","./node_modules/assemblyai/dist/services/streaming/index.d.ts","./node_modules/assemblyai/dist/services/index.d.ts","./node_modules/assemblyai/dist/exports/index.d.ts","./src/lib/assemblyai-client.ts","./src/app/api/prediction/[id]/route.ts","./src/lib/firebase-utils.ts","./src/app/api/transcribe/route.ts","./node_modules/marked/lib/marked.d.ts","./src/data/changelog.ts","./src/components/changelog.tsx","./src/app/changelog/page.tsx","./src/app/documentation/page.tsx","./src/app/errors/[code]/page.tsx","./src/app/history/page.tsx","./src/components/analytics/analyticsoptout.tsx","./src/app/privacy/page.tsx","./src/app/studio/page.tsx","./src/hooks/useaudioplayer.ts","./src/lib/format-utils.ts","./src/components/studio/audioplayer.tsx","./src/components/studio/chapterspanel.tsx","./src/lib/speaker-colors.ts","./src/components/studio/enhancedtranscript.tsx","./src/components/studio/entitiespanel.tsx","./node_modules/jszip/index.d.ts","./node_modules/xml-js/types/index.d.ts","./node_modules/docx/dist/index.d.ts","./src/lib/export-formats.ts","./src/components/studio/exportcontrols.tsx","./src/components/ui/badge.tsx","./src/components/studio/filedetails.tsx","./src/components/studio/keyboardshortcutsmodal.tsx","./src/components/studio/keyphrasespanel.tsx","./src/components/studio/sentimentpanel.tsx","./src/components/studio/summarypanel.tsx","./src/components/studio/transcriptstatistics.tsx","./src/components/transcription/transcriptionstudio.tsx","./src/app/studio/[id]/page.tsx","./src/app/terms/page.tsx","./src/app/transcribe/[id]/page.tsx","./src/components/documentation.tsx","./src/components/feedback/feedback.tsx","./src/components/ui/loadingfallback.tsx","./src/components/ui/alert-dialog.tsx","./src/components/ui/animated-card.tsx","./src/components/ui/animated-list.tsx","./src/components/ui/mobile-button-variants.ts","./node_modules/@radix-ui/react-slot/dist/index.d.mts","./src/components/ui/mobile-button.tsx","./src/components/ui/mobile-dialog.tsx","./src/components/ui/mobile-input.tsx","./src/components/ui/mobile-navigation.tsx","./src/components/ui/progress.tsx","./src/components/ui/scroll-area.tsx","./src/hooks/usescrollanimation.tsx","./src/components/ui/scroll-reveal-section.tsx","./src/components/ui/separator.tsx","./node_modules/next-themes/dist/index.d.ts","./src/components/ui/sonner.tsx","./src/components/ui/textarea.tsx","./src/components/ui/tooltip.tsx","./src/hooks/usedebounce.ts","./src/hooks/usetranscriptionpolling.ts","./src/lib/firebase-proxy.ts","./src/lib/persistence-service.ts","./node_modules/dotenv/lib/main.d.ts","./node_modules/@types/mime/index.d.ts","./node_modules/@types/send/index.d.ts","./node_modules/@types/qs/index.d.ts","./node_modules/@types/range-parser/index.d.ts","./node_modules/@types/express-serve-static-core/index.d.ts","./node_modules/@types/http-errors/index.d.ts","./node_modules/@types/serve-static/index.d.ts","./node_modules/@types/connect/index.d.ts","./node_modules/@types/body-parser/index.d.ts","./node_modules/@types/express/index.d.ts","./src/server/index.ts","./src/stores/options-store.ts","./src/types/index.ts","./.next/types/cache-life.d.ts","./.next/types/validator.ts"],"fileIdsList":[[61,124,132,136,139,141,142,143,156,473,474,475,476],[61,124,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,216,514,517,520,605,643,644,645,670,672,676,677,678,679,681,682,703,704,705],[61,124,132,136,139,141,142,143,156,518,519,520],[61,124,132,136,139,141,142,143,156,623,628,630],[61,124,132,136,139,141,142,143,156,624,625,626,627],[61,124,132,136,139,141,142,143,156,626],[61,124,132,136,139,141,142,143,156,624,626,627],[61,124,132,136,139,141,142,143,156,625,626,627],[61,124,132,136,139,141,142,143,156,625],[61,124,132,136,139,141,142,143,156,629],[61,124,132,136,139,141,142,143,156,623,631],[52,61,124,132,136,139,141,142,143,156],[52,61,124,132,136,139,141,142,143,156,531,532,533],[52,61,124,132,136,139,141,142,143,156,531,538],[52,61,124,132,136,139,141,142,143,156,532],[52,61,124,132,136,139,141,142,143,156,531,532],[52,61,124,132,136,139,141,142,143,156,216,531,532],[52,61,124,132,136,139,141,142,143,156,531,532,547],[52,61,124,132,136,139,141,142,143,156,531,532,535,536,537],[52,61,124,132,136,139,141,142,143,156,216,531,532,551],[52,61,124,132,136,139,141,142,143,156,531,532,535,537,545],[52,61,124,132,136,139,141,142,143,156,531,532,535,536,537,545,546],[52,61,124,132,136,139,141,142,143,156,216,531,532,546,547],[52,61,124,132,136,139,141,142,143,156,531,532,535,556],[52,61,124,132,136,139,141,142,143,156,532,546],[52,61,124,132,136,139,141,142,143,156,531,532,535,536,537,545],[52,61,124,132,136,139,141,142,143,156,531,532,543,544],[52,61,124,132,136,139,141,142,143,156,531,532,546],[52,56,61,124,132,136,139,141,142,143,156,182,183,184,185,186,468,513],[52,61,124,132,136,139,141,142,143,156,531,532,535],[52,61,124,132,136,139,141,142,143,156,531,532,546,571],[52,61,124,132,136,139,141,142,143,156,531,532,546,565,572],[61,124,132,136,138,139,141,142,143,156,181,739],[61,124,132,136,138,139,141,142,143,156,181],[61,124,132,135,136,138,139,141,142,143,156,181,733,734,735],[61,124,132,136,139,141,142,143,156,736,738,740],[61,121,122,124,132,136,139,141,142,143,156],[61,123,124,132,136,139,141,142,143,156],[124,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,164],[61,124,125,130,132,135,136,139,141,142,143,145,156,161,173],[61,124,125,126,132,135,136,139,141,142,143,156],[61,124,127,132,136,139,141,142,143,156,174],[61,124,128,129,132,136,139,141,142,143,147,156],[61,124,129,132,136,139,141,142,143,156,161,170],[61,124,130,132,135,136,139,141,142,143,145,156],[61,123,124,131,132,136,139,141,142,143,156],[61,124,132,133,136,139,141,142,143,156],[61,124,132,134,135,136,139,141,142,143,156],[61,123,124,132,135,136,139,141,142,143,156],[61,124,132,135,136,137,139,141,142,143,156,161,173],[61,124,132,135,136,137,139,141,142,143,156,161,164],[61,111,124,132,135,136,138,139,141,142,143,145,156,161,173],[61,124,132,135,136,138,139,141,142,143,145,156,161,170,173],[61,124,132,136,138,139,140,141,142,143,156,161,170,173],[59,60,61,62,63,64,65,66,67,68,69,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180],[61,124,132,135,136,139,141,142,143,156],[61,124,132,136,139,141,143,156],[61,124,132,136,139,141,142,143,144,156,173],[61,124,132,135,136,139,141,142,143,145,156,161],[61,124,132,136,139,141,142,143,147,156],[61,124,132,136,139,141,142,143,148,156],[61,124,132,135,136,139,141,142,143,151,156],[61,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180],[61,124,132,136,139,141,142,143,153,156],[61,124,132,136,139,141,142,143,154,156],[61,124,129,132,136,139,141,142,143,145,156,164],[61,124,132,135,136,139,141,142,143,156,157],[61,124,132,136,139,141,142,143,156,158,174,177],[61,124,132,135,136,139,141,142,143,156,161,163,164],[61,124,132,136,139,141,142,143,156,162,164],[61,124,132,136,139,141,142,143,156,164,174],[61,124,132,136,139,141,142,143,156,165],[61,121,124,132,136,139,141,142,143,156,161,167,173],[61,124,132,136,139,141,142,143,156,161,166],[61,124,132,135,136,139,141,142,143,156,168,169],[61,124,132,136,139,141,142,143,156,168,169],[61,124,129,132,136,139,141,142,143,145,156,161,170],[61,124,132,136,139,141,142,143,156,171],[61,124,132,136,139,141,142,143,145,156,172],[61,124,132,136,138,139,141,142,143,154,156,173],[61,124,132,136,139,141,142,143,156,174,175],[61,124,129,132,136,139,141,142,143,156,175],[61,124,132,136,139,141,142,143,156,161,176],[61,124,132,136,139,141,142,143,144,156,177],[61,124,132,136,139,141,142,143,156,178],[61,124,127,132,136,139,141,142,143,156],[61,124,129,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,174],[61,111,124,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,173],[61,124,132,136,139,141,142,143,156,179],[61,124,132,136,139,141,142,143,151,156],[61,124,132,136,139,141,142,143,156,169],[61,111,124,132,135,136,137,139,141,142,143,151,156,161,164,173,176,177,179],[61,124,132,136,139,141,142,143,156,161,180],[52,56,61,124,132,136,139,141,142,143,156,182,183,184,186,468,513,713],[52,56,61,124,132,136,139,141,142,143,156,182,183,184,185,449,468,513,713],[52,56,61,124,132,136,139,141,142,143,156,182,183,185,186,468,513,713],[52,61,124,132,136,139,141,142,143,156,186,449,450],[52,61,124,132,136,139,141,142,143,156,186,449],[52,56,61,124,132,136,139,141,142,143,156,183,184,185,186,468,513,713],[52,56,61,124,132,136,139,141,142,143,156,182,184,185,186,468,513,713],[50,51,61,124,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,161,181,732],[61,124,132,136,138,139,141,142,143,156,181,737],[61,124,132,136,139,141,142,143,156,655,667],[61,124,132,136,139,141,142,143,156,656],[61,124,132,136,139,141,142,143,156,656,657],[61,124,132,136,139,141,142,143,156,656,658,661,662,663,666],[61,124,132,136,139,141,142,143,156,656,657,659],[61,124,132,136,139,141,142,143,156,659,660],[61,124,132,136,139,141,142,143,156,656,657,664],[61,124,132,136,139,141,142,143,156,664,665],[61,124,132,136,139,141,142,143,156,656,657,662],[61,124,132,136,139,141,142,143,156,646,648,649],[61,124,132,136,139,141,142,143,156,181],[61,124,132,136,139,141,142,143,156,646,648,649,650,651,652,653,654],[61,124,132,136,139,141,142,143,156,647],[61,124,132,136,139,141,142,143,156,650],[61,124,132,136,139,141,142,143,156,655],[61,124,132,136,139,141,142,143,156,646,648],[61,124,132,136,139,141,142,143,156,523,578],[61,124,132,136,139,141,142,143,156,523],[61,124,132,136,139,141,142,143,156,596,598,599,601],[61,124,132,136,139,141,142,143,156,600],[61,124,132,136,139,141,142,143,156,590,591,592,593,594,595],[61,124,132,136,139,141,142,143,156,597],[61,124,132,136,139,141,142,143,156,161,690,691],[61,124,132,136,139,141,142,143,156,173,181],[61,124,132,136,139,141,142,143,156,631],[61,124,132,136,139,141,142,143,156,632],[52,61,124,132,136,139,141,142,143,156,586],[52,61,124,132,136,139,141,142,143,156,216,585,586,587],[61,124,132,136,139,141,142,143,156,585],[61,124,132,136,139,141,142,143,156,471],[61,124,132,136,139,141,142,143,156,419,482,483],[61,124,132,136,139,141,142,143,156,191,192,194,206,230,345,356,464],[61,124,132,136,139,141,142,143,156,194,225,226,227,229,464],[61,124,132,136,139,141,142,143,156,194,362,364,366,367,369,464,466],[61,124,132,136,139,141,142,143,156,194,228,265,464],[61,124,132,136,139,141,142,143,156,192,194,205,206,212,218,223,344,345,346,355,464,466],[61,124,132,136,139,141,142,143,156,464],[61,124,132,136,139,141,142,143,156,201,207,226,246,341],[61,124,132,136,139,141,142,143,156,194],[61,124,132,136,139,141,142,143,156,187,201,207],[61,124,132,136,139,141,142,143,156,373],[61,124,132,136,139,141,142,143,156,370,371,373],[61,124,132,136,139,141,142,143,156,370,372,464],[61,124,132,136,138,139,141,142,143,156,246,443,461],[61,124,132,136,138,139,141,142,143,156,317,320,336,341,461],[61,124,132,136,138,139,141,142,143,156,289,461],[61,124,132,136,139,141,142,143,156,349],[61,124,132,136,139,141,142,143,156,348,349,350],[61,124,132,136,139,141,142,143,156,348],[58,61,124,132,136,138,139,141,142,143,156,187,194,206,212,218,224,226,230,231,244,245,312,342,343,356,464,468],[61,124,132,136,139,141,142,143,156,191,194,228,265,362,363,368,464,516],[61,124,132,136,139,141,142,143,156,228,516],[61,124,132,136,139,141,142,143,156,191,245,414,464,516],[61,124,132,136,139,141,142,143,156,516],[61,124,132,136,139,141,142,143,156,194,228,229,516],[61,124,132,136,139,141,142,143,156,365,516],[61,124,132,136,139,141,142,143,156,231,344,347,354],[52,61,124,132,136,139,141,142,143,156,419],[61,124,132,136,139,141,142,143,154,156,201,216],[61,124,132,136,139,141,142,143,156,201,216],[52,61,124,132,136,139,141,142,143,156,286],[52,61,124,132,136,139,141,142,143,156,216],[52,61,124,132,136,139,141,142,143,156,207,216,419],[61,124,132,136,139,141,142,143,156,201,272,286,287,498,505],[61,124,132,136,139,141,142,143,156,271,499,500,501,502,504],[61,124,132,136,139,141,142,143,156,322],[61,124,132,136,139,141,142,143,156,322,323],[61,124,132,136,139,141,142,143,156,205,207,274,275],[61,124,132,136,139,141,142,143,156,207,281,282],[61,124,132,136,139,141,142,143,156,207,276,284],[61,124,132,136,139,141,142,143,156,281],[61,124,132,136,139,141,142,143,156,199,207,274,275,276,277,278,279,280,281,284],[61,124,132,136,139,141,142,143,156,207,274,281,282,283,285],[61,124,132,136,139,141,142,143,156,207,275,277,278],[61,124,132,136,139,141,142,143,156,275,277,280,282],[61,124,132,136,139,141,142,143,156,503],[61,124,132,136,139,141,142,143,156,207],[52,61,124,132,136,139,141,142,143,156,195,492],[52,61,124,132,136,139,141,142,143,156,173],[52,61,124,132,136,139,141,142,143,156,228,263],[52,61,124,132,136,139,141,142,143,156,228,356],[61,124,132,136,139,141,142,143,156,261,266],[52,61,124,132,136,139,141,142,143,156,262,470],[52,56,61,124,132,136,138,139,141,142,143,156,182,183,184,185,186,468,512,713],[61,124,132,136,138,139,141,142,143,156,207],[61,124,132,136,138,139,141,142,143,156,206,211,292,309,351,352,356,411,413,464,465],[61,124,132,136,139,141,142,143,156,244,353],[61,124,132,136,139,141,142,143,156,468],[61,124,132,136,139,141,142,143,156,193],[52,61,124,132,136,139,141,142,143,156,198,201,416,432,434],[61,124,132,136,139,141,142,143,154,156,201,416,431,432,433,515],[61,124,132,136,139,141,142,143,156,425,426,427,428,429,430],[61,124,132,136,139,141,142,143,156,427],[61,124,132,136,139,141,142,143,156,431],[61,124,132,136,139,141,142,143,156,216,380,381,383],[52,61,124,132,136,139,141,142,143,156,207,374,375,376,377,382],[61,124,132,136,139,141,142,143,156,380,382],[61,124,132,136,139,141,142,143,156,378],[61,124,132,136,139,141,142,143,156,379],[52,61,124,132,136,139,141,142,143,156,216,262,470],[52,61,124,132,136,139,141,142,143,156,216,469,470],[52,61,124,132,136,139,141,142,143,156,216,470],[61,124,132,136,139,141,142,143,156,309,310],[61,124,132,136,139,141,142,143,156,310],[61,124,132,136,138,139,141,142,143,156,465,470],[61,124,132,136,139,141,142,143,156,339],[61,123,124,132,136,139,141,142,143,156,338],[61,124,132,136,139,141,142,143,156,201,207,213,215,317,330,334,336,413,416,453,454,461,465],[61,124,132,136,139,141,142,143,156,207,256,278],[61,124,132,136,139,141,142,143,156,317,328,331,336],[52,61,124,132,136,139,141,142,143,156,198,201,317,320,336,339,373,420,421,422,423,424,435,436,437,438,439,440,441,442,516],[61,124,132,136,139,141,142,143,156,198,201,226,317,324,325,326,329,330],[61,124,132,136,139,141,142,143,156,161,207,226,328,335,416,417,461],[61,124,132,136,139,141,142,143,156,332],[61,124,132,136,138,139,141,142,143,154,156,195,207,211,221,253,254,257,309,312,377,411,412,453,464,465,466,468,516],[61,124,132,136,139,141,142,143,156,198,199,201],[61,124,132,136,139,141,142,143,156,317],[61,123,124,132,136,139,141,142,143,156,226,253,254,311,312,313,314,315,316,465],[61,124,132,136,139,141,142,143,156,336],[61,123,124,132,136,139,141,142,143,156,200,201,211,215,251,317,324,325,326,327,328,331,332,333,334,335,454],[61,124,132,136,138,139,141,142,143,156,251,252,324,465,466],[61,124,132,136,139,141,142,143,156,226,254,309,312,317,413,465],[61,124,132,136,138,139,141,142,143,156,464,466],[61,124,132,136,138,139,141,142,143,156,161,461,465,466],[61,124,132,136,138,139,141,142,143,154,156,187,201,206,213,215,218,221,228,248,253,254,255,256,257,292,293,295,298,300,303,304,305,306,308,356,411,413,461,464,465,466],[61,124,132,136,138,139,141,142,143,156,161],[61,124,132,136,139,141,142,143,156,194,195,196,224,461,462,463,468,470,516],[61,124,132,136,139,141,142,143,156,191,192,464],[61,124,132,136,139,141,142,143,156,385],[61,124,132,136,138,139,141,142,143,156,161,173,203,369,373,374,375,376,377,383,384,516],[61,124,132,136,139,141,142,143,154,156,173,187,201,203,215,218,254,293,298,308,309,362,389,390,391,397,400,401,411,413,461,464],[61,124,132,136,139,141,142,143,156,218,224,231,244,254,312,464],[61,124,132,136,138,139,141,142,143,156,173,195,206,215,254,395,461,464],[61,124,132,136,139,141,142,143,156,415],[61,124,132,136,138,139,141,142,143,156,385,398,399,408],[61,124,132,136,139,141,142,143,156,461,464],[61,124,132,136,139,141,142,143,156,314,454],[61,124,132,136,139,141,142,143,156,215,253,356,470],[61,124,132,136,138,139,141,142,143,154,156,193,298,358,362,391,397,400,403,461],[61,124,132,136,138,139,141,142,143,156,231,244,362,404],[61,124,132,136,139,141,142,143,156,194,255,356,406,464,466],[61,124,132,136,138,139,141,142,143,156,173,377,464],[61,124,132,136,138,139,141,142,143,156,228,255,356,357,358,367,385,405,407,464],[58,61,124,132,136,138,139,141,142,143,156,253,410,468,470],[61,124,132,136,139,141,142,143,156,307,411],[61,124,132,136,138,139,141,142,143,154,156,201,204,206,207,213,215,221,230,231,244,254,257,293,295,305,308,309,356,389,390,391,392,394,396,411,413,461,470],[61,124,132,136,138,139,141,142,143,156,161,231,397,402,408,461],[61,124,132,136,139,141,142,143,156,234,235,236,237,238,239,240,241,242,243],[61,124,132,136,139,141,142,143,156,248,299],[61,124,132,136,139,141,142,143,156,301],[61,124,132,136,139,141,142,143,156,299],[61,124,132,136,139,141,142,143,156,301,302],[61,124,132,136,138,139,141,142,143,156,205,206,207,211,212,465],[61,124,132,136,138,139,141,142,143,154,156,193,195,213,217,253,256,257,291,411,461,466,468,470],[61,124,132,136,138,139,141,142,143,154,156,173,197,204,205,215,217,254,409,454,460,465],[61,124,132,136,139,141,142,143,156,324],[61,124,132,136,139,141,142,143,156,325],[61,124,132,136,139,141,142,143,156,207,218,453],[61,124,132,136,139,141,142,143,156,326],[61,124,132,136,139,141,142,143,156,200],[61,124,132,136,139,141,142,143,156,202,214],[61,124,132,136,138,139,141,142,143,156,202,206,213],[61,124,132,136,139,141,142,143,156,209,214],[61,124,132,136,139,141,142,143,156,210],[61,124,132,136,139,141,142,143,156,202,203],[61,124,132,136,139,141,142,143,156,202,258],[61,124,132,136,139,141,142,143,156,202],[61,124,132,136,139,141,142,143,156,204,248,297],[61,124,132,136,139,141,142,143,156,296],[61,124,132,136,139,141,142,143,156,201,203,204],[61,124,132,136,139,141,142,143,156,204,294],[61,124,132,136,139,141,142,143,156,201,203],[61,124,132,136,139,141,142,143,156,253,356],[61,124,132,136,139,141,142,143,156,453],[61,124,132,136,138,139,141,142,143,156,173,213,215,219,253,356,410,413,416,417,418,444,445,448,452,454,461,465],[61,124,132,136,139,141,142,143,156,267,270,272,273,286,287],[52,61,124,132,136,139,141,142,143,156,184,186,216,446,447],[52,61,124,132,136,139,141,142,143,156,184,186,216,446,447,451],[61,124,132,136,139,141,142,143,156,340],[61,124,132,136,139,141,142,143,156,226,247,252,253,317,318,319,320,321,323,336,337,339,342,410,413,464,466],[61,124,132,136,139,141,142,143,156,286],[61,124,132,136,138,139,141,142,143,156,291,461],[61,124,132,136,139,141,142,143,156,291],[61,124,132,136,138,139,141,142,143,156,213,259,288,290,292,410,461,468,470],[61,124,132,136,139,141,142,143,156,267,268,269,270,272,273,286,287,469],[58,61,124,132,136,138,139,141,142,143,154,156,173,202,203,215,221,253,254,257,356,408,409,411,461,464,465,468],[61,124,132,136,139,141,142,143,156,198,201,208],[61,124,132,136,139,141,142,143,156,252,254,386,389],[61,124,132,136,139,141,142,143,156,252,387,455,456,457,458,459],[61,124,132,136,138,139,141,142,143,156,248,464],[61,124,132,136,138,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,251,336],[61,124,132,136,139,141,142,143,156,250],[61,124,132,136,139,141,142,143,156,252,305],[61,124,132,136,139,141,142,143,156,249,251,464],[61,124,132,136,138,139,141,142,143,156,197,252,386,387,388,461,464,465],[52,61,124,132,136,139,141,142,143,156,201,207,285],[52,61,124,132,136,139,141,142,143,156,199],[61,124,132,136,139,141,142,143,156,189,190],[52,61,124,132,136,139,141,142,143,156,195],[52,61,124,132,136,139,141,142,143,156,201,271],[52,58,61,124,132,136,139,141,142,143,156,253,257,468,470],[61,124,132,136,139,141,142,143,156,195,492,493],[52,61,124,132,136,139,141,142,143,156,266],[52,61,124,132,136,139,141,142,143,154,156,173,193,260,262,264,265,470],[61,124,132,136,139,141,142,143,156,201,228,465],[61,124,132,136,139,141,142,143,156,201,393],[52,61,124,132,136,138,139,141,142,143,154,156,191,193,266,364,468,469],[52,61,124,132,136,139,141,142,143,156,182,183,184,185,186,468,513,713],[52,53,54,55,56,61,124,132,136,139,141,142,143,156],[61,124,132,136,139,141,142,143,156,359,360,361],[61,124,132,136,139,141,142,143,156,359],[52,56,61,124,132,136,138,139,140,141,142,143,154,156,181,182,183,184,185,186,187,193,221,226,403,431,466,467,470,513,713],[61,124,132,136,139,141,142,143,156,478],[61,124,132,136,139,141,142,143,156,480],[61,124,132,136,139,141,142,143,156,484],[61,124,132,136,139,141,142,143,156,486],[61,124,132,136,139,141,142,143,156,488,489,490],[61,124,132,136,139,141,142,143,156,494],[57,61,124,132,136,139,141,142,143,156,472,477,479,481,485,487,491,495,497,507,508,510,514,515,516,517],[61,124,132,136,139,141,142,143,156,496],[61,124,132,136,139,141,142,143,156,506],[61,124,132,136,139,141,142,143,156,262],[61,124,132,136,139,141,142,143,156,509],[61,123,124,132,136,139,141,142,143,156,252,386,387,389,455,456,458,459,511,513],[61,124,132,136,139,141,142,143,156,530,533,534,537,538,539,540,541,542,548,549,550,551,552,553,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,572,573,574],[61,124,132,136,139,141,142,143,156,161,181],[61,76,79,82,83,124,132,136,139,141,142,143,156,173],[61,79,124,132,136,139,141,142,143,156,161,173],[61,79,83,124,132,136,139,141,142,143,156,173],[61,124,132,136,139,141,142,143,156,161],[61,73,124,132,136,139,141,142,143,156],[61,77,124,132,136,139,141,142,143,156],[61,75,76,79,124,132,136,139,141,142,143,156,173],[61,124,132,136,139,141,142,143,145,156,170],[61,73,124,132,136,139,141,142,143,156,181],[61,75,79,124,132,136,139,141,142,143,145,156,173],[61,70,71,72,74,78,124,132,135,136,139,141,142,143,156,161,173],[61,79,88,96,124,132,136,139,141,142,143,156],[61,71,77,124,132,136,139,141,142,143,156],[61,79,105,106,124,132,136,139,141,142,143,156],[61,71,74,79,124,132,136,139,141,142,143,156,164,173,181],[61,79,124,132,136,139,141,142,143,156],[61,75,79,124,132,136,139,141,142,143,156,173],[61,70,124,132,136,139,141,142,143,156],[61,73,74,75,77,78,79,80,81,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,106,107,108,109,110,124,132,136,139,141,142,143,156],[61,79,98,101,124,132,136,139,141,142,143,156],[61,79,88,89,90,124,132,136,139,141,142,143,156],[61,77,79,89,91,124,132,136,139,141,142,143,156],[61,78,124,132,136,139,141,142,143,156],[61,71,73,79,124,132,136,139,141,142,143,156],[61,79,83,89,91,124,132,136,139,141,142,143,156],[61,83,124,132,136,139,141,142,143,156],[61,77,79,82,124,132,136,139,141,142,143,156,173],[61,71,75,79,88,124,132,136,139,141,142,143,156],[61,79,98,124,132,136,139,141,142,143,156],[61,91,124,132,136,139,141,142,143,156],[61,73,79,105,124,132,136,139,141,142,143,156,164,179,181],[61,124,132,136,139,141,142,143,156,638,639],[61,124,132,136,139,141,142,143,156,638],[61,124,132,136,139,141,142,143,156,216,497,522,528,577],[61,124,132,136,139,141,142,143,156,216,514],[61,124,132,136,139,141,142,143,156,216,514,669],[61,124,132,136,139,141,142,143,156,216,514,668,669,671],[61,124,132,136,139,141,142,143,156,216,522,526,528,577,674,675],[52,61,124,132,136,139,141,142,143,156,216,497,522,527,528,577,580],[61,124,132,136,139,141,142,143,156,216,497,507,522,527,528,577,580],[52,61,124,132,136,139,141,142,143,156,216,497,522,527,580],[52,61,124,132,136,139,141,142,143,156,216,507,522,526,528,577,580,617,642],[61,124,132,136,139,141,142,143,156,216,515,518,584,604],[61,124,132,136,139,141,142,143,156,216,497,522,527,528,577,580],[52,61,124,132,136,139,141,142,143,156,216,507,528,577,607,621,622,636,637,641,642],[61,124,132,136,139,141,142,143,156,216,497,528,577,680],[52,61,124,132,136,139,141,142,143,156,216,497,507,522,580,607,637,641,702],[52,61,124,132,136,139,141,142,143,156,216,507,522,580],[61,124,132,136,139,141,142,143,156,216,497,528,577],[52,61,124,132,136,139,141,142,143,156,216,497,507,522,526,580,607,622,637,641,642],[52,61,124,132,136,139,141,142,143,156,216,580,607],[61,124,132,136,139,141,142,143,156,216,583],[52,61,124,132,136,139,141,142,143,156,216,497,522,580,588,673,674],[61,124,132,136,139,141,142,143,156,216,497,580],[61,124,132,136,139,141,142,143,156,216,522,525,526],[61,124,132,136,139,141,142,143,156,216,497,603],[52,61,124,132,136,139,141,142,143,156,216,522,580,602],[52,61,124,132,136,139,141,142,143,156,216,522,588,589,603],[61,124,132,136,139,141,142,143,156,216,497],[52,61,124,132,136,139,141,142,143,156,216,497,507,522,525,576],[52,61,124,132,136,139,141,142,143,156,216,522,525,526,580,607,641,684],[52,61,124,132,136,139,141,142,143,156,216,525,641],[52,61,124,132,136,139,141,142,143,156,216,522,525,580,607,617,641,684,687],[52,61,124,132,136,139,141,142,143,156,216,641],[52,61,124,132,136,139,141,142,143,156,216,522,526,580,607,641,692,693],[52,61,124,132,136,139,141,142,143,156,216,522,526,641,684,695],[52,61,124,132,136,139,141,142,143,156,216,522,580],[52,61,124,132,136,139,141,142,143,156,216,522,526,641],[52,61,124,132,136,139,141,142,143,156,216,522,580,588,608,610],[52,61,124,132,136,139,141,142,143,156,216,580,612,613,614,615],[52,61,124,132,136,139,141,142,143,156,216,522,526,580,620,641,683,685,686,688,689,694,696,697,698,699,700,701],[52,61,124,132,136,139,141,142,143,156,216,522,617],[52,61,124,132,136,139,141,142,143,156,216,525,575,580],[52,61,124,132,136,139,141,142,143,156,216,588],[52,61,124,132,136,139,141,142,143,156,216,579,580,588],[61,124,132,136,139,141,142,143,156,216,526,588],[52,61,124,132,136,139,141,142,143,156,216,525,575,579],[52,61,124,132,136,139,141,142,143,156,216,525],[52,61,124,132,136,139,141,142,143,156,216,525,529,575,580],[52,61,124,132,136,139,141,142,143,156,216,525,529,575],[52,61,124,132,136,139,141,142,143,156,216,525,575],[61,124,132,136,139,141,142,143,156,216],[61,124,132,136,139,141,142,143,156,216,579],[52,61,124,132,136,139,141,142,143,156,216,525,579,712,713],[52,61,124,132,136,139,141,142,143,156,216,522,525,538,580],[52,61,124,132,136,139,141,142,143,156,216,497,522,580,588],[52,61,124,132,136,139,141,142,143,156,216,588,720],[61,124,132,136,139,141,142,143,156,216,607,723],[52,61,124,132,136,139,141,142,143,156,216,522,608,609,611,616,618,619,620],[52,61,124,132,136,139,141,142,143,156,216,608],[52,61,124,132,136,139,141,142,143,156,216,607],[52,61,124,132,136,139,141,142,143,156,216,622,637],[61,124,132,136,139,141,142,143,156,216,588],[61,124,132,136,139,141,142,143,156,216,668],[61,124,132,136,139,141,142,143,156,216,641,684,692],[61,124,132,136,139,141,142,143,156,216,633,635],[61,124,132,136,139,141,142,143,156,216,633,634],[61,124,132,136,139,141,142,143,156,216,637,641],[61,124,132,136,139,141,142,143,156,216,523,524],[61,124,132,136,139,141,142,143,148,156,173,216,731,741],[61,124,132,136,139,141,142,143,156,216,640,641],[61,124,132,136,139,141,142,143,156,216,641]],"fileInfos":[{"version":"bcd24271a113971ba9eb71ff8cb01bc6b0f872a85c23fdbe5d93065b375933cd","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f88bedbeb09c6f5a6645cb24c7c55f1aa22d19ae96c8e6959cbd8b85a707bc6","impliedFormat":1},{"version":"7fe93b39b810eadd916be8db880dd7f0f7012a5cc6ffb62de8f62a2117fa6f1f","impliedFormat":1},{"version":"bb0074cc08b84a2374af33d8bf044b80851ccc9e719a5e202eacf40db2c31600","impliedFormat":1},{"version":"1a7daebe4f45fb03d9ec53d60008fbf9ac45a697fdc89e4ce218bc94b94f94d6","impliedFormat":1},{"version":"f94b133a3cb14a288803be545ac2683e0d0ff6661bcd37e31aaaec54fc382aed","impliedFormat":1},{"version":"f59d0650799f8782fd74cf73c19223730c6d1b9198671b1c5b3a38e1188b5953","impliedFormat":1},{"version":"d6b1eba8496bdd0eed6fc8a685768fe01b2da4a0388b5fe7df558290bffcf32f","affectsGlobalScope":true,"impliedFormat":1},{"version":"7f57fc4404ff020bc45b9c620aff2b40f700b95fe31164024c453a5e3c163c54","impliedFormat":1},{"version":"eadcffda2aa84802c73938e589b9e58248d74c59cb7fcbca6474e3435ac15504","affectsGlobalScope":true,"impliedFormat":1},{"version":"105ba8ff7ba746404fe1a2e189d1d3d2e0eb29a08c18dded791af02f29fb4711","affectsGlobalScope":true,"impliedFormat":1},{"version":"00343ca5b2e3d48fa5df1db6e32ea2a59afab09590274a6cccb1dbae82e60c7c","affectsGlobalScope":true,"impliedFormat":1},{"version":"ebd9f816d4002697cb2864bea1f0b70a103124e18a8cd9645eeccc09bdf80ab4","affectsGlobalScope":true,"impliedFormat":1},{"version":"2c1afac30a01772cd2a9a298a7ce7706b5892e447bb46bdbeef720f7b5da77ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"7b0225f483e4fa685625ebe43dd584bb7973bbd84e66a6ba7bbe175ee1048b4f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c0a4b8ac6ce74679c1da2b3795296f5896e31c38e888469a8e0f99dc3305de60","affectsGlobalScope":true,"impliedFormat":1},{"version":"3084a7b5f569088e0146533a00830e206565de65cae2239509168b11434cd84f","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5079c53f0f141a0698faa903e76cb41cd664e3efb01cc17a5c46ec2eb0bef42","affectsGlobalScope":true,"impliedFormat":1},{"version":"32cafbc484dea6b0ab62cf8473182bbcb23020d70845b406f80b7526f38ae862","affectsGlobalScope":true,"impliedFormat":1},{"version":"fca4cdcb6d6c5ef18a869003d02c9f0fd95df8cfaf6eb431cd3376bc034cad36","affectsGlobalScope":true,"impliedFormat":1},{"version":"b93ec88115de9a9dc1b602291b85baf825c85666bf25985cc5f698073892b467","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c06dcc3fe849fcb297c247865a161f995cc29de7aa823afdd75aaaddc1419b","affectsGlobalScope":true,"impliedFormat":1},{"version":"b77e16112127a4b169ef0b8c3a4d730edf459c5f25fe52d5e436a6919206c4d7","affectsGlobalScope":true,"impliedFormat":1},{"version":"fbffd9337146eff822c7c00acbb78b01ea7ea23987f6c961eba689349e744f8c","affectsGlobalScope":true,"impliedFormat":1},{"version":"a995c0e49b721312f74fdfb89e4ba29bd9824c770bbb4021d74d2bf560e4c6bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"c7b3542146734342e440a84b213384bfa188835537ddbda50d30766f0593aff9","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce6180fa19b1cccd07ee7f7dbb9a367ac19c0ed160573e4686425060b6df7f57","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f02e2476bccb9dbe21280d6090f0df17d2f66b74711489415a8aa4df73c9675","affectsGlobalScope":true,"impliedFormat":1},{"version":"45e3ab34c1c013c8ab2dc1ba4c80c780744b13b5676800ae2e3be27ae862c40c","affectsGlobalScope":true,"impliedFormat":1},{"version":"805c86f6cca8d7702a62a844856dbaa2a3fd2abef0536e65d48732441dde5b5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e42e397f1a5a77994f0185fd1466520691456c772d06bf843e5084ceb879a0ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"f4c2b41f90c95b1c532ecc874bd3c111865793b23aebcc1c3cbbabcd5d76ffb0","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab26191cfad5b66afa11b8bf935ef1cd88fabfcb28d30b2dfa6fad877d050332","affectsGlobalScope":true,"impliedFormat":1},{"version":"2088bc26531e38fb05eedac2951480db5309f6be3fa4a08d2221abb0f5b4200d","affectsGlobalScope":true,"impliedFormat":1},{"version":"cb9d366c425fea79716a8fb3af0d78e6b22ebbab3bd64d25063b42dc9f531c1e","affectsGlobalScope":true,"impliedFormat":1},{"version":"500934a8089c26d57ebdb688fc9757389bb6207a3c8f0674d68efa900d2abb34","affectsGlobalScope":true,"impliedFormat":1},{"version":"689da16f46e647cef0d64b0def88910e818a5877ca5379ede156ca3afb780ac3","affectsGlobalScope":true,"impliedFormat":1},{"version":"bc21cc8b6fee4f4c2440d08035b7ea3c06b3511314c8bab6bef7a92de58a2593","affectsGlobalScope":true,"impliedFormat":1},{"version":"7ca53d13d2957003abb47922a71866ba7cb2068f8d154877c596d63c359fed25","affectsGlobalScope":true,"impliedFormat":1},{"version":"54725f8c4df3d900cb4dac84b64689ce29548da0b4e9b7c2de61d41c79293611","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5594bc3076ac29e6c1ebda77939bc4c8833de72f654b6e376862c0473199323","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f3eb332c2d73e729f3364fcc0c2b375e72a121e8157d25a82d67a138c83a95c","affectsGlobalScope":true,"impliedFormat":1},{"version":"6f4427f9642ce8d500970e4e69d1397f64072ab73b97e476b4002a646ac743b1","affectsGlobalScope":true,"impliedFormat":1},{"version":"48915f327cd1dea4d7bd358d9dc7732f58f9e1626a29cc0c05c8c692419d9bb7","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7bf9377723203b5a6a4b920164df22d56a43f593269ba6ae1fdc97774b68855","affectsGlobalScope":true,"impliedFormat":1},{"version":"f128dae7c44d8f35ee42e0a437000a57c9f06cc04f8b4fb42eebf44954d53dc8","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ecb8e347cb6b2a8927c09b86263663289418df375f5e68e11a0ae683776978f","affectsGlobalScope":true,"impliedFormat":1},{"version":"1ce14b81c5cc821994aa8ec1d42b220dd41b27fcc06373bce3958af7421b77d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3a048b3e9302ef9a34ef4ebb9aecfb28b66abb3bce577206a79fee559c230da","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"0ccdaa19852d25ecd84eec365c3bfa16e7859cadecf6e9ca6d0dbbbee439743f","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc2110f7decca6bfb9392e30421cfa1436479e4a6756e8fec6cbc22625d4f881","affectsGlobalScope":true,"impliedFormat":1},{"version":"096116f8fedc1765d5bd6ef360c257b4a9048e5415054b3bf3c41b07f8951b0b","affectsGlobalScope":true,"impliedFormat":1},{"version":"e5e01375c9e124a83b52ee4b3244ed1a4d214a6cfb54ac73e164a823a4a7860a","affectsGlobalScope":true,"impliedFormat":1},{"version":"f90ae2bbce1505e67f2f6502392e318f5714bae82d2d969185c4a6cecc8af2fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"4b58e207b93a8f1c88bbf2a95ddc686ac83962b13830fe8ad3f404ffc7051fb4","affectsGlobalScope":true,"impliedFormat":1},{"version":"1fefabcb2b06736a66d2904074d56268753654805e829989a46a0161cd8412c5","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"c18a99f01eb788d849ad032b31cafd49de0b19e083fe775370834c5675d7df8e","affectsGlobalScope":true,"impliedFormat":1},{"version":"5247874c2a23b9a62d178ae84f2db6a1d54e6c9a2e7e057e178cc5eea13757fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"cdcf9ea426ad970f96ac930cd176d5c69c6c24eebd9fc580e1572d6c6a88f62c","impliedFormat":1},{"version":"23cd712e2ce083d68afe69224587438e5914b457b8acf87073c22494d706a3d0","impliedFormat":1},{"version":"156a859e21ef3244d13afeeba4e49760a6afa035c149dda52f0c45ea8903b338","impliedFormat":1},{"version":"10ec5e82144dfac6f04fa5d1d6c11763b3e4dbbac6d99101427219ab3e2ae887","impliedFormat":1},{"version":"615754924717c0b1e293e083b83503c0a872717ad5aa60ed7f1a699eb1b4ea5c","impliedFormat":1},{"version":"074de5b2fdead0165a2757e3aaef20f27a6347b1c36adea27d51456795b37682","impliedFormat":1},{"version":"68834d631c8838c715f225509cfc3927913b9cc7a4870460b5b60c8dbdb99baf","impliedFormat":1},{"version":"4137ebf04166f3a325f056aa56101adc75e9dceb30404a1844eb8604d89770e2","impliedFormat":1},{"version":"ccab02f3920fc75c01174c47fcf67882a11daf16baf9e81701d0a94636e94556","impliedFormat":1},{"version":"3e11fce78ad8c0e1d1db4ba5f0652285509be3acdd519529bc8fcef85f7dafd9","impliedFormat":1},{"version":"ea6bc8de8b59f90a7a3960005fd01988f98fd0784e14bc6922dde2e93305ec7d","impliedFormat":1},{"version":"36107995674b29284a115e21a0618c4c2751b32a8766dd4cb3ba740308b16d59","impliedFormat":1},{"version":"914a0ae30d96d71915fc519ccb4efbf2b62c0ddfb3a3fc6129151076bc01dc60","impliedFormat":1},{"version":"9c32412007b5662fd34a8eb04292fb5314ec370d7016d1c2fb8aa193c807fe22","impliedFormat":1},{"version":"7fd1b31fd35876b0aa650811c25ec2c97a3c6387e5473eb18004bed86cdd76b6","impliedFormat":1},{"version":"4d327f7d72ad0918275cea3eee49a6a8dc8114ae1d5b7f3f5d0774de75f7439a","impliedFormat":1},{"version":"6ebe8ebb8659aaa9d1acbf3710d7dae3e923e97610238b9511c25dc39023a166","impliedFormat":1},{"version":"e85d7f8068f6a26710bff0cc8c0fc5e47f71089c3780fbede05857331d2ddec9","impliedFormat":1},{"version":"7befaf0e76b5671be1d47b77fcc65f2b0aad91cc26529df1904f4a7c46d216e9","impliedFormat":1},{"version":"0a60a292b89ca7218b8616f78e5bbd1c96b87e048849469cccb4355e98af959a","impliedFormat":1},{"version":"0b6e25234b4eec6ed96ab138d96eb70b135690d7dd01f3dd8a8ab291c35a683a","impliedFormat":1},{"version":"9666f2f84b985b62400d2e5ab0adae9ff44de9b2a34803c2c5bd3c8325b17dc0","impliedFormat":1},{"version":"40cd35c95e9cf22cfa5bd84e96408b6fcbca55295f4ff822390abb11afbc3dca","impliedFormat":1},{"version":"b1616b8959bf557feb16369c6124a97a0e74ed6f49d1df73bb4b9ddf68acf3f3","impliedFormat":1},{"version":"5b03a034c72146b61573aab280f295b015b9168470f2df05f6080a2122f9b4df","impliedFormat":1},{"version":"40b463c6766ca1b689bfcc46d26b5e295954f32ad43e37ee6953c0a677e4ae2b","impliedFormat":1},{"version":"249b9cab7f5d628b71308c7d9bb0a808b50b091e640ba3ed6e2d0516f4a8d91d","impliedFormat":1},{"version":"80aae6afc67faa5ac0b32b5b8bc8cc9f7fa299cff15cf09cc2e11fd28c6ae29e","impliedFormat":1},{"version":"f473cd2288991ff3221165dcf73cd5d24da30391f87e85b3dd4d0450c787a391","impliedFormat":1},{"version":"499e5b055a5aba1e1998f7311a6c441a369831c70905cc565ceac93c28083d53","impliedFormat":1},{"version":"8aee8b6d4f9f62cf3776cda1305fb18763e2aade7e13cea5bbe699112df85214","impliedFormat":1},{"version":"98498b101803bb3dde9f76a56e65c14b75db1cc8bec5f4db72be541570f74fc5","impliedFormat":1},{"version":"1cc2a09e1a61a5222d4174ab358a9f9de5e906afe79dbf7363d871a7edda3955","impliedFormat":1},{"version":"5d0375ca7310efb77e3ef18d068d53784faf62705e0ad04569597ae0e755c401","impliedFormat":1},{"version":"59af37caec41ecf7b2e76059c9672a49e682c1a2aa6f9d7dc78878f53aa284d6","impliedFormat":1},{"version":"addf417b9eb3f938fddf8d81e96393a165e4be0d4a8b6402292f9c634b1cb00d","impliedFormat":1},{"version":"b64d4d1c5f877f9c666e98e833f0205edb9384acc46e98a1fef344f64d6aba44","impliedFormat":1},{"version":"adf27937dba6af9f08a68c5b1d3fce0ca7d4b960c57e6d6c844e7d1a8e53adae","impliedFormat":1},{"version":"12950411eeab8563b349cb7959543d92d8d02c289ed893d78499a19becb5a8cc","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"c9381908473a1c92cb8c516b184e75f4d226dad95c3a85a5af35f670064d9a2f","impliedFormat":1},{"version":"c3f5289820990ab66b70c7fb5b63cb674001009ff84b13de40619619a9c8175f","affectsGlobalScope":true,"impliedFormat":1},{"version":"b3275d55fac10b799c9546804126239baf020d220136163f763b55a74e50e750","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa68a0a3b7cb32c00e39ee3cd31f8f15b80cac97dce51b6ee7fc14a1e8deb30b","affectsGlobalScope":true,"impliedFormat":1},{"version":"1cf059eaf468efcc649f8cf6075d3cb98e9a35a0fe9c44419ec3d2f5428d7123","affectsGlobalScope":true,"impliedFormat":1},{"version":"6c36e755bced82df7fb6ce8169265d0a7bb046ab4e2cb6d0da0cb72b22033e89","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"7a93de4ff8a63bafe62ba86b89af1df0ccb5e40bb85b0c67d6bbcfdcf96bf3d4","affectsGlobalScope":true,"impliedFormat":1},{"version":"90e85f9bc549dfe2b5749b45fe734144e96cd5d04b38eae244028794e142a77e","affectsGlobalScope":true,"impliedFormat":1},{"version":"e0a5deeb610b2a50a6350bd23df6490036a1773a8a71d70f2f9549ab009e67ee","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2ae155afe8a01cc0ae612d99117cf8ef16692ba7c4366590156fdec1bcf2d8c","impliedFormat":1},{"version":"3f5e5d9be35913db9fea42a63f3df0b7e3c8703b97670a2125587b4dbbd56d7c","impliedFormat":1},{"version":"8caeb65fdc3bfe0d13f86f67324fcb2d858ed1c55f1f0cce892eb1acfb9f3239","impliedFormat":1},{"version":"57c23df0b5f7a8e26363a3849b0bc7763f6b241207157c8e40089d1df4116f35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3b8bc0c17b54081b0878673989216229e575d67a10874e84566a21025a2461ee","impliedFormat":1},{"version":"5b0db5a58b73498792a29bfebc333438e61906fef75da898b410e24e52229e6f","impliedFormat":1},{"version":"dbe055b2b29a7bab2c1ca8f259436306adb43f469dca7e639a02cd3695d3f621","impliedFormat":1},{"version":"1678b04557dca52feab73cc67610918a7f5e25bfdba3e7fa081acd625d93106d","impliedFormat":1},{"version":"e3905f6902f0b69e5eefc230daa69fdd4ab707a973ec2d086d65af1b3ea47ef0","impliedFormat":1},{"version":"2ea729503db9793f2691162fec3dd1118cab62e96d025f8eeb376d43ec293395","impliedFormat":1},{"version":"9ec87fea42b92894b0f209931a880789d43c3397d09dd99c631ae40a2f7071d1","impliedFormat":1},{"version":"c68e88cdfadfb6c8ba5fc38e58a3a166b0beae77b1f05b7d921150a32a5ffb8d","impliedFormat":1},{"version":"2bc7aa4fba46df0bd495425a7c8201437a7d465f83854fac859df2d67f664df3","impliedFormat":1},{"version":"41d17e1ad9a002feb11c8cdd2777e5bbc0cdb1e3f595d237e4dded0b6949983b","impliedFormat":1},{"version":"07e4e61e946a9c15045539ecd5f5d2d02e7aab6fa82567826857e09cf0f37c2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c4714ccc29149efb8777a1da0b04b8d2258f5d13ddbf4cd3c3d361fb531ac86","impliedFormat":1},{"version":"3ff275f84f89f8a7c0543da838f9da9614201abc4ce74c533029825adfb4433d","impliedFormat":1},{"version":"0eb5d0cbf09de5d34542b977fd6a933bb2e0817bffe8e1a541b2f1ad1b9af1ff","impliedFormat":1},{"version":"f9713757bcdfa4d58b48c0fb249e752c94a3eee8bf4532b906094246ac49ef88","impliedFormat":1},{"version":"2c2bdaa1d8ead9f68628d6d9d250e46ee8e81aa4898b4769a36956ae15e060fe","impliedFormat":1},{"version":"c32c840c62d8bd7aeb3147aa6754cd2d922b990a6b6634530cb2ebdce5adc8e9","impliedFormat":1},{"version":"e1c1a0b4d1ead0de9eca52203aeb1f771f21e6238d6fcd15aa56ac2a02f1b7bf","impliedFormat":1},{"version":"82b91e4e42e6c41bc7fc1b6c2dc5eba6a2ba98375eb1f210e6ff6bba2d54177e","impliedFormat":1},{"version":"6fe28249ac0c7bc19a79aa9264baf00efbd080e868dbe1d3052033ad1c64f206","affectsGlobalScope":true,"impliedFormat":1},{"version":"cbed824fec91efefc7bbdcb8b43d1a531fdbebd0e2ef19481501ff365a93cb70","impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"d0716593b3f2b0451bcf0c24cfa86dec2235c325c89f201934248b7c742715fc","impliedFormat":1},{"version":"ec501101c2a96133a6c695f934c8f6642149cc728571b29cbb7b770984c1088e","impliedFormat":1},{"version":"b214ebcf76c51b115453f69729ee8aa7b7f8eccdae2a922b568a45c2d7ff52f7","impliedFormat":1},{"version":"429c9cdfa7d126255779efd7e6d9057ced2d69c81859bbab32073bad52e9ba76","impliedFormat":1},{"version":"2991bca2cc0f0628a278df2a2ccdb8d6cbcb700f3761abbed62bba137d5b1790","impliedFormat":1},{"version":"ce8653341224f8b45ff46d2a06f2cacb96f841f768a886c9d8dd8ec0878b11bd","affectsGlobalScope":true,"impliedFormat":1},{"version":"230763250f20449fa7b3c9273e1967adb0023dc890d4be1553faca658ee65971","impliedFormat":1},{"version":"c3e9078b60cb329d1221f5878e88cecfa3e74460550e605a58fcfb41a66029ff","impliedFormat":1},{"version":"a74edb3bab7394a9dbde529d60632be590def2f5f01024dbd85441587fbfbbe0","impliedFormat":1},{"version":"0ea59f7d3e51440baa64f429253759b106cfcbaf51e474cae606e02265b37cf8","impliedFormat":1},{"version":"bc18a1991ba681f03e13285fa1d7b99b03b67ee671b7bc936254467177543890","impliedFormat":1},{"version":"00049ccc87f3f37726db03c01ca68fe74fd9c0109b68c29eb9923ebec2c76b13","impliedFormat":1},{"version":"fa94bbf532b7af8f394b95fa310980d6e20bd2d4c871c6a6cb9f70f03750a44b","impliedFormat":1},{"version":"68d3f35108e2608b1f2f28b36d19d7055f31c4465cc5692cbd06c716a9fe7973","impliedFormat":1},{"version":"a6d543044570fbeed13a7f9925a868081cd2b14ef59cdd9da6ae76d41cab03d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"7fa2214bb0d64701bc6f9ce8cde2fd2ff8c571e0b23065fa04a8a5a6beb91511","impliedFormat":1},{"version":"f1c93e046fb3d9b7f8249629f4b63dc068dd839b824dd0aa39a5e68476dc9420","impliedFormat":1},{"version":"eab2f3179607acb3d44b2db2a76dd7d621c5039b145dc160a1ee733963f9d2f5","impliedFormat":1},{"version":"841983e39bd4cbb463be385e92fda11057cab368bf27100a801c492f1d86cbaa","impliedFormat":1},{"version":"6f5383b3df1cdf4ff1aa7fb0850f77042b5786b5e65ec9a9b6be56ebfe4d9036","impliedFormat":1},{"version":"62fc21ed9ccbd83bd1166de277a4b5daaa8d15b5fa614c75610d20f3b73fba87","impliedFormat":1},{"version":"e4156ddb25aa0e3b5303d372f26957b36778f0f6bbd4326359269873295e3058","affectsGlobalScope":true,"impliedFormat":1},{"version":"cc1b433a84cae05ddc5672d4823170af78606ad21ecef60dbc4570190cbf1357","impliedFormat":1},{"version":"9d3821bc75c59577e52643324cec92fc2145642e8d17cf7ee07a3181f21d985d","impliedFormat":1},{"version":"7f78cfb2b343838612c192cb251746e3a7c62ac7675726a47e130d9b213f6580","impliedFormat":1},{"version":"201db9cf1687fab1adf5282fcba861f382b32303dc4f67c89d59655e78a25461","impliedFormat":1},{"version":"c77fb31bc17fd241d3922a9f88c59e3361cdf76d1328ba9412fc6bf7310b638d","impliedFormat":1},{"version":"0a20eaf2e4b1e3c1e1f87f7bccb0c936375b23b022baeea750519b7c9bc6ce83","impliedFormat":1},{"version":"b484ec11ba00e3a2235562a41898d55372ccabe607986c6fa4f4aba72093749f","impliedFormat":1},{"version":"a16b91b27bd6b706c687c88cbc8a7d4ee98e5ed6043026d6b84bda923c0aed67","impliedFormat":1},{"version":"694b812e0ed11285e8822cf8131e3ce7083a500b3b1d185fff9ed1089677bd0a","impliedFormat":1},{"version":"99ab6d0d660ce4d21efb52288a39fd35bb3f556980ec5463b1ae8f304a3bbc85","impliedFormat":1},{"version":"6eeded8c7e352be6e0efb83f4935ec752513c4d22043b52522b90849a49a3a11","impliedFormat":1},{"version":"6c1ad90050ffbb151cacc68e2d06ea1a26a945659391e32651f5d42b86fd7f2c","impliedFormat":1},{"version":"55cdbeebe76a1fa18bbd7e7bf73350a2173926bd3085bb050cf5a5397025ee4e","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"02bfbc3c205e1f4368c77fa49c55da3f47a732d6e4b1e5eb91122bc96eb97608","affectsGlobalScope":true},"7b550dda9686c16f36a17bf9051d5dbf31e98555b30d114ac49fc49a1e712651",{"version":"e2e3eaf9705313f5e3ba3e2ffdb4cb82422b42f0add65f68025f61ad7c64de92","impliedFormat":1},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"8658354b90861a76abc7b3c04ece2124295c7da0cc4c4d31c2c78d8607188d03","impliedFormat":1},{"version":"51bbf14cd1f84f49aab2e0dbee420137015d56b6677bb439e83a908cd292cce1","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},{"version":"62b71e71ed2134eb1736342dba8974bc09bd0cdbc2ca3a5c04e5b9ea660191f8","signature":"9bc26c030aef4b75d3bf757291b79add9c525e1ed6a83579c53c5077feaab77d"},{"version":"b9d9227635d0a95a62149f119c47ed05dffcc0c9b78e901d89fa95b0f5872537","signature":"4573bee78a9834d231acc7f68fdb1978b8d1629bdad5a6250486fa73290f1123"},{"version":"f4715c4005eace94a5b6109df73df2256c6f53ef1010faec015ad06bbe86a6f3","signature":"1043c497f77ed2451a49a4fde80a171b375ea0bc554ac33d929ae2858abba968"},{"version":"c2e517e26a1190ff13b0bfeebfb0abf26485f344a4807a6abaa7795ef4776c51","impliedFormat":1},{"version":"024829c0b317972acf4f871bf701525f81896ad74015f1a52d46ae6036205cb9","impliedFormat":99},{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"caf4af98bf464ad3e10c46cf7d340556f89197aab0f87f032c7b84eb8ddb24d9","impliedFormat":99},{"version":"0943a6e4e026d0de8a4969ee975a7283e0627bf41aa4635d8502f6f24365ac9b","impliedFormat":99},{"version":"1461efc4aefd3e999244f238f59c9b9753a7e3dfede923ebe2b4a11d6e13a0d0","impliedFormat":99},{"version":"7ec047b73f621c526468517fea779fec2007dd05baa880989def59126c98ef79","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"dfcf16e716338e9fe8cf790ac7756f61c85b83b699861df970661e97bf482692","impliedFormat":99},{"version":"31c30cc54e8c3da37c8e2e40e5658471f65915df22d348990d1601901e8c9ff3","impliedFormat":99},{"version":"36d8011f1437aecf0e6e88677d933e4fb3403557f086f4ac00c5a4cb6d028ac2","impliedFormat":99},{"version":"8085954ba165e611c6230596078063627f3656fed3fb68ad1e36a414c4d7599a","impliedFormat":99},{"version":"2c57db2bf2dbd9e8ef4853be7257d62a1cb72845f7b976bb4ee827d362675f96","impliedFormat":99},{"version":"6b5f886fe41e2e767168e491fe6048398ed6439d44e006d9f51cc31265f08978","impliedFormat":99},{"version":"56a87e37f91f5625eb7d5f8394904f3f1e2a90fb08f347161dc94f1ae586bdd0","impliedFormat":99},{"version":"6b863463764ae572b9ada405bf77aac37b5e5089a3ab420d0862e4471051393b","impliedFormat":99},{"version":"68b6a7501a56babd7bcd840e0d638ee7ec582f1e70b3c36ebf32e5e5836913c8","impliedFormat":99},{"version":"89783bd45ab35df55203b522f8271500189c3526976af533a599a86caaf31362","impliedFormat":99},{"version":"6da2e0928bdab05861abc4e4abebea0c7cf0b67e25374ba35a94df2269563dd8","impliedFormat":99},{"version":"e7b00bec016013bcde74268d837a8b57173951add2b23c8fd12ffe57f204d88f","impliedFormat":99},{"version":"26e6c521a290630ea31f0205a46a87cab35faac96e2b30606f37bae7bcda4f9d","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},{"version":"044047026c70439867589d8596ffe417b56158a1f054034f590166dd793b676b","impliedFormat":99},{"version":"89ad9a4e8044299f356f38879a1c2176bc60c997519b442c92cc5a70b731a360","impliedFormat":99},{"version":"71acd198e19fa38447a3cbc5c33f2f5a719d933fccf314aaff0e8b0593271324","impliedFormat":99},{"version":"fd4f58cd6b5fc8ce8af0d04bfef5142f15c4bafaac9a9899c6daa056f10bb517","impliedFormat":99},{"version":"2a00cea77767cb26393ee6f972fd32941249a0d65b246bfcb20a780a2b919a21","impliedFormat":99},{"version":"440cb5b34e06fabe3dcb13a3f77b98d771bf696857c8e97ce170b4f345f8a26b","impliedFormat":99},{"version":"5bc7f0946c94e23765bd1b8f62dc3ab65d7716285ca7cf45609f57777ddb436f","impliedFormat":99},{"version":"7d5a5e603a68faea3d978630a84cacad7668f11e14164c4dd10224fa1e210f56","impliedFormat":99},{"version":"2535fc1a5fe64892783ff8f61321b181c24f824e688a4a05ae738da33466605b","impliedFormat":99},{"version":"cbfd5ef0c8fdb4983202252b5f5758a579f4500edc3b9ad413da60cffb5c3564","impliedFormat":99},{"version":"9f7a3c434912fd3feb87af4aabdf0d1b614152ecb5e7b2aa1fff3429879cdd51","impliedFormat":99},{"version":"99d1a601593495371e798da1850b52877bf63d0678f15722d5f048e404f002e4","impliedFormat":99},{"version":"1179ef8174e0e4a09d35576199df04803b1db17c0fb35b9326442884bc0b0cce","impliedFormat":99},{"version":"9c580c6eae94f8c9a38373566e59d5c3282dc194aa266b23a50686fe10560159","impliedFormat":99},{"version":"cc3738ba01d9af5ba1206a313896837ff8779791afcd9869e582783550f17f38","impliedFormat":99},{"version":"a80ec72f5e178862476deaeed532c305bdfcd3627014ae7ac2901356d794fc93","impliedFormat":99},{"version":"4a5aa16151dbec524bb043a5cbce2c3fec75957d175475c115a953aca53999a9","impliedFormat":99},{"version":"7a14bf21ae8a29d64c42173c08f026928daf418bed1b97b37ac4bb2aa197b89b","impliedFormat":99},{"version":"c5013d60cbff572255ccc87c314c39e198c8cc6c5aa7855db7a21b79e06a510f","impliedFormat":99},{"version":"69ec8d900cfec3d40e50490fedbbea5c1b49d32c38adbc236e73a3b8978c0b11","impliedFormat":99},{"version":"7fd629484ba6772b686885b443914655089246f75a13dd685845d0abae337671","impliedFormat":99},{"version":"13dcccb62e8537329ac0448f088ab16fe5b0bbed71e56906d28d202072759804","impliedFormat":99},{"version":"233267a4a036c64aee95f66a0d31e3e0ef048cccc57dd66f9cf87582b38691e4","impliedFormat":99},{"version":"ccb9fbe369885d02cf6c2b2948fb5060451565d37b04356bbe753807f98e0682","impliedFormat":99},{"version":"f80f1e7c37cecdcb5928121bbc666ed3083faf3603925a970448737a7d5cb27f","signature":"708242129c2ff69e6e9d501ebe4cda0cfe39afe539c80fcc9a5b27861ecc744d"},{"version":"601bca2b6ff9fc2e52480269b7d8d5c67621d936ec3f0fea4881273f668cb7be","signature":"0a5a9f14c5cf8c76f560e44248244813b1ebbea85f58b3bfacc20e61aabd1327"},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"68f50eb985c6762b49eada1b79850e052f42278fe9d0a89711533892a47889e1","signature":"07e7edda95fc1a6bc54f2e35d1f4d3801a1211d2e537d1824603e055dcb23f8d"},{"version":"34b45ed785c7f2142daf64942d17e01b58f1d2017b1584ac230e93d322c01a9e","signature":"d0e941890807582f4d65d383d72a0f5ca0498de14e8223245954ae642e6147a0"},{"version":"2fed14a1cce34d6f4ecaae06449c045c78d9ef0bf1737e0b711400225edaf65c","signature":"cb07f70387382722966caf7f9038dd03d46abcadd580f8463e1f78cf18489e98"},{"version":"602ea9ed45abeef5564c6a7524fb4e71a569bd8063ed9c8f19a78d9bd090ad06","affectsGlobalScope":true,"impliedFormat":99},{"version":"0febf5d606951599c6ac67ded116a7fdd51e5f849a01cac817749e8ee67632e0","signature":"1d3e5511d0680466833d0bcaebbcbed41c14d31d027cfd7f74ce5711c9ea843d"},{"version":"37c7961117708394f64361ade31a41f96cef7f2a6606300821c72438dd4abda3","impliedFormat":1},{"version":"f5a0ca672513d5a3e303b36801e4573bb17ae002da225c28c1723eeee0f97145","affectsGlobalScope":true,"impliedFormat":1},{"version":"3d9189f26f01d4e36d3fb380810ef5999992235282e3c293da77d1d8aed09d9f","impliedFormat":1},{"version":"d9bf522aa42728ab077c4675515f5c2d1b739cb37a07d2903f3a0227219fd58f","impliedFormat":1},{"version":"8c8bf0c0e465b31c005d700c4881157a3f38022e837e567392e163a057178979","signature":"adec553c8988bca1a677053dc569e802e249c82051c343f569bb4caf57db8d2b"},{"version":"b27272c310f74fe57fc09e2f1f1a85d5d9cea66e6548193a1ceb3a49227fd337","impliedFormat":1},{"version":"c32fc9e8d8dd5dec8befa0090513915b5db284a3f458c0d36e237b6855620b4c","impliedFormat":1},{"version":"964aa613de023d8f25665b0e0422448f27c86d1b735dff96e151e34a3fde98d0","impliedFormat":1},{"version":"612e957934052ee5f82a63250d0242dca21da9acee8457df3807c2761b9a256d","impliedFormat":1},{"version":"49311ad5f5acef95eb65c2b92693ca222e5aa9680b81a717f8bae910c8193134","impliedFormat":1},{"version":"44f548700fbc5a851241e4e224cbbefb045729ead501516b29a524b3a0435749","impliedFormat":1},{"version":"71f33216fb5c7ea557dcb8400268ae85590b7bf3a912bc3e623a5434532b59f6","impliedFormat":1},{"version":"86e0a4f9b4bb434e69614b881f95bf76a411a96157c6ecdfd106d90de7a9b292","impliedFormat":1},{"version":"5665680438ea881a310320c71b8fc2669df282f331d2e356d9d0543366369118","impliedFormat":1},{"version":"6ec7a682062396f37ee704687b5019227b76c9d45178af0554f6f1d53c4182f5","impliedFormat":1},{"version":"9e97d5a835b7f160b212af745445d8ea5f5ee4b8401528db2bdb3309f39dc69c","impliedFormat":1},{"version":"e66da0c2cd7116c9ce5ff7d08274b636b67e15ca51d8187607aeb29f3165ef35","impliedFormat":1},{"version":"6c684c63fb60550aca4ddf48c44aa9ba41481586fea8e9cec311bf37247d550b","impliedFormat":1},{"version":"6e902d9301c9b96abbe43e03d0148ca3a1abe2445f5ebe44ac5901a8dadc7c5a","signature":"561be32ff81796553be5b6ca8f67e01264159cb3de92a8d7f2d98069ab947dc0","affectsGlobalScope":true},{"version":"0f7892cc8d0ad6405e05da37c1480cd4d9400bfd3aade9eb7934eec510c1ce0f","signature":"686abac88feaeb6515fab321b88f4d13a8a59a0cdee49a07523737332f2665bc","affectsGlobalScope":true},{"version":"255b585e4c5022b98093120d3d298cb6fe191c97202ededfcef0c446cee9a4d8","signature":"9032586ab03e834cb9651f010b10cd8f45a3b43ce1106c2ee92355353b66dbb0"},{"version":"1b888b24a65735b64477d73655400d642f10a3adc7bec144eac2fd9f88d66316","signature":"ecfd1bee66efd232643d94e93e82ad4b74aa7bc6be51a32385d2380b29adddda"},{"version":"6aa2859da46f726a22040725e684ea964d7469a6b26f1c0a6634bb65e79062b0","impliedFormat":99},{"version":"47c70aa4accf016cd68d28ed84f7b52f7d2a23e5c7b53e40024db93faec44369","signature":"d45953865eac28ab753e960468424cd208d864d8da3f32f3b12c1e5085adce76"},{"version":"d4602e9d868e19cf25e19739eb692d2bec391d2ee4c9eecd9bc9b748755f0eb4","signature":"922e50a7b9734d975a9d08016a05b514b95da9b4cfdebbbfb9c0d9eb23feeed7"},{"version":"04de77dd3ce6421d29b665b75ed63a0f03c59a5804a8657afdc9b522e6386dea","signature":"fb7b5eee18dca672aad27e24619731f0fc595b56114ae25a81078ed87e2e648b"},{"version":"16b393713785eab77fdc2b6a08f8f3d87b1f224a952e33d9f219573f1a6126b1","signature":"0eae8a162e3210c9cd4992033e2434690d472723efc1380bdd147967fde1c365"},{"version":"88e9e74c62c882b7aa6dc6aa3f0fea2f83f7c822d1e0d75974802a525a259eca","signature":"970d9cee167f2c4280fe6d48ad80f19ee912263a56bb83136904cea15a331f12"},{"version":"237a245ffd1b4d07c68cac28aaa68a4cba90033ac7a4518c9a2b519547ccbfcb","signature":"c9b68469568a4dd2e96c63341c49d8d542232042db650c50b95cc177123512a9"},{"version":"5e138c3b2a52216bb2fe2563575875edaa5dc7b304df93cdf61e1e9591b708ea","signature":"3444f62e38283633a5a0b99da3ae379c4b20153f07d3494d555f87c93352070d"},{"version":"07505bb8aed68e54064ab4e3084c69843a5e2882aad3ce3b553b27161e1ef08f","signature":"f86fa0d1af7b57b82e0372f35c9c9176f02463868ee841e387b14fbf0d77c110"},{"version":"7fad82050d720278744dd4cde45fc7d288f6c6352d63b4019dbf015ff92e376d","signature":"7e5590ef961524ec6e1cea9443d8842426fb17e39db78d8fb6d30f1187749f75"},{"version":"224b57756612706b208bfb5bf79419944cdcd10d108d132d9542b8e9d2b7a40c","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"d19f8950f239c8532de468981c42fc1b74cc7156eee0087c99750007588c7b4d","signature":"0d43e27b58a755e3b4bc0d7c24971deafe885f7dce6ba2f00e8efaaee5739384"},{"version":"8e829614eb4a9585977da6de7c8a91ec70a1e81bd102dce50e1087def7f33fd7","signature":"5a426bac3dee84af2db10c84739aeeb8a4e124b491fbe914001d019051aaa9e4"},{"version":"4c488fe570d25080f9afc69912675481b79e7fbf055a567c77d86f335e43a802","signature":"4e513f3e9e87f3a4b25b60e6362c36b4069f2d4d978ebc2cc736a9ba9f0075f5"},{"version":"642c1b512c6d4bb7fdc9594238548d9cc45fa21dc91a7aa861352747a9e7b8df","signature":"b35b6fbfdabc3ffbaa036e1a23772fbda9fae14a3f12f11ecbfcdfabcaa9e09d"},{"version":"778706913ca9f4ae27b2618e5b99f5cd2760881240b095dfea961ba81b388418","signature":"5fda0a4fa09ccd58380059049b5004f5728277b965c53c9b4d70e8c513d0012f"},{"version":"5a39b65f1aa6dac1a189afe5b95a5dcc0f82459b859ce2377cdfb1e994b90c3d","impliedFormat":1},{"version":"cdbd35458f506b843f280d695d192968af4b0f27db3d5c0707934d97e96dd88d","impliedFormat":1},{"version":"0d86e751cdf42541f9b0dc579f1fad78ba02c9b57104723187d942c53bd63092","impliedFormat":1},{"version":"dae32a2a0cc5be690082fc59bd4b16ab58fc400d8802dc3073657ff4e825c48a","impliedFormat":1},{"version":"654bbcc8726e2a7a684460eda9c7d25847716587b04a72e0b88e75d828aa3db1","impliedFormat":1},{"version":"5c252941b1299551ad4f3f44ef995ee7a79585aebe2c5318271297496f2611c6","impliedFormat":1},{"version":"84ab1b8202996d370d7580cd15c85fe5981c9fd8ce4e20019de7203c8e9b594e","impliedFormat":1},{"version":"b7b58b11be801068222c596659957f4defdeec281974feb02a28d9c9ea38cd51","impliedFormat":1},{"version":"27a8d35a2910e71c796d71fb6d570a36dfcaef8cc69bd02e0b14fd143b908e04","impliedFormat":1},{"version":"d5a0858f7e98793a455e8f3d23f04077d1e588e72d82570bca31bab2d9f8ceae","impliedFormat":1},{"version":"6a9069e81da9856ed6780b17db0417d8a8ce217babf3681bfe29dcdad8f15f3d","impliedFormat":1},{"version":"d488bd13a9d714f30014a5f8a8df1be6b11ae3411efa63ba6643af44749bc153","impliedFormat":1},{"version":"f5ddbc6eb6d410e70557f358fa03e802746f29662411731b79006806c72fbe65","signature":"c663b8fb7b9daa870515a40d83dbc4d769297b84825b7b8e66be542ae764d5a6"},{"version":"a736b84d0b558f7ddd5b65c540b63dc3eee0ac2205084b331c5a0c75d550bfe5","signature":"a801514de4f7aab90389cb964812c9854f32c56154e8913f915acd381d3abd9e"},{"version":"d86a8e8788b598e10cb8cc6d202b283e40d14e9bfb34401ed599d60bf97adf82","signature":"ba2ca822aa0a0a02c53fc208ecccb75480ce5b8fcba244e2a1d71fca3bff3bd0"},{"version":"4d7d964609a07368d076ce943b07106c5ebee8138c307d3273ba1cf3a0c3c751","impliedFormat":99},{"version":"0e48c1354203ba2ca366b62a0f22fec9e10c251d9d6420c6d435da1d079e6126","impliedFormat":99},{"version":"0662a451f0584bb3026340c3661c3a89774182976cd373eca502a1d3b5c7b580","impliedFormat":99},{"version":"3a09a242ee059e1747c2ed3076388e0dee5a93519b432ad24f4df9c9dbd35d41","signature":"2281e5706fa3ef7f0801ae98145ff0eaa6927378557c7f9645c2c2d1d85420c9"},{"version":"fab278c7446986eec0993fb3c532fcd9929de331156998ba3da8671dc78c14d1","signature":"b3fbff4fa62ed309d034c3f3313e93ae035e52ff54ff33cdfe8ee79f15f06a09"},{"version":"65a4f9127b0f130b16d50758c9e66484d3cb73e2326c0964453dd895ac75063d","signature":"1d6ffcd209a9e029d56eff17768c7c7f5e6c1627d59a104b39a8c371dba8b8fe"},{"version":"56dffd59ac063156243d447d16535db3cb0c1100debc87e45e523a2870b562d1","signature":"f9b077b7d4abdf432c4212824d85a5db7a8c83fc20f9818f2cc8d29536e1e4e4"},{"version":"bc4138ba19f465630be21f053c4cacb06409411a0fb62ec62813cd5649836c34","signature":"637359a3d5dd761b30682c5ee386d320d5ac6327c9b03e408cd63e14837db390"},{"version":"2e64dd0f088b7429d1e6a4ff0877475e1bb7458979459fe6f6f7158b9a3ac638","impliedFormat":1},{"version":"b7f0f8aa049f0f162c39fa8c6a4f8dc04b8db9efe34a1850ac7eb4977dc2de1e","impliedFormat":1},{"version":"cef460d17e8968ee05c323dc100949e381584050b9173c238f0de3a59a096d49","impliedFormat":1},{"version":"bafa721fdd9ca80cc1083076288e2d798b36b746b571bd1cbb9edb2a3f06baee","impliedFormat":1},{"version":"b7b5ec9dd5f0e9930f978b30803552cd5684d6b71f92d8d5f1d67193db13faf5","impliedFormat":1},{"version":"fadc668a209a0bcf9faf339227ee2019d9b03d80de5d1279d668fd9e906da46f","impliedFormat":1},{"version":"97e144974349f14313c247222f4183905e1d01d25e2169ecbd44c4887c010327","impliedFormat":1},{"version":"c93f9e03b8102eb41463c29ea0cbb9fd8f0a18706adc1dbe1e544de8e41c2aab","impliedFormat":1},{"version":"bdca08600a5c4e64c5ba525beacf5cdb8b67f8eb251b5b409ed53add6cd7c8d3","impliedFormat":1},{"version":"24a93a13aefabc1756253fb3695497731d005b5855595c1b55c6ea585fe829ec","impliedFormat":1},{"version":"7bce27ab83928ad7698e0fabc9c7115dc8005816cfbb5ecbea36fa001aa60441","impliedFormat":1},{"version":"2838645d8dcaffaa103ac694bee43eb714f310ac5303f1d268cde2968458be69","impliedFormat":1},{"version":"3b1c4c2e0617be08b9456ff3c1b416d2279f30219c0c7f3aa3c0ced19ab3ea39","impliedFormat":1},{"version":"e5ca806e08eb53a68c326c6d58f2340f4bfd3e3c2ebd4c063efa27af53840b21","impliedFormat":1},{"version":"fa71acd4d7ec35a4dbb8f390e28e45e27ffc8b330d76d949730efbe5d8149b0d","impliedFormat":1},{"version":"b854cab9880af900cc54bec182c304460c56fe153884bd5a4a5f14719e49c043","impliedFormat":1},{"version":"74a3f5c83722f14573aa00478215c3c09271f30552b3a480a9401cfe09f915c3","impliedFormat":1},{"version":"ab2de88a5597d631afaa47bf2a22d58a3d54218da33d2df3d72afe2fe288cba7","impliedFormat":1},{"version":"d5d8abfafcc47a60a8bb15714f58c89d06837bccf47a7a5641e8ea3fd17889fc","impliedFormat":1},{"version":"4f5310633533aa2331792ad080ab4e94494656494e7505f464fa05acf48b72b0","impliedFormat":1},{"version":"b854cab9880af900cc54bec182c304460c56fe153884bd5a4a5f14719e49c043","impliedFormat":1},{"version":"bf057713d611872f779364c8c75afd7574a39098c9e662e518fe0faa5d043eaa","impliedFormat":1},{"version":"53e2f910651dfd884bbfd9e77ebe99275145fb59336723b7440916feb6a30261","impliedFormat":1},{"version":"6ade946434520a1ad0fa140f7ec298f220a91af0123ad6ba461178f0fc00451a","signature":"96c9eb99a6b3b8ffc3a9489063ec9c0d57ca50d9af1cd70838f84d2910287ed6"},{"version":"16fbe080291299bb7094094e766c81cf1205640b9a6720512012789b17585330","signature":"7d5cd4551bfda693a5ac6cfd06bf80c120a27d1ddb4d85e73d2ea25b3bd6c34a"},{"version":"1ab0ef8465095ad5462bfb40d7133ed046b897c47e8a582cb633b6a7076ad14c","signature":"af8cfbe5ac30a6a63f82abfa8ec4afd6445e5fab1facf83a3834e8cc7587a826"},{"version":"6be1b9e9a08e879756229e9738d0529078c3a93be0529c29fc6ffe82357b9c79","signature":"b507eff70a55f2d68504832b674c71233d6b803826cc48933be1730ba4135a8c"},{"version":"951765f4db0f5a4fab97fd750625a6a27db1db7da44655bad300ce88805ab662","impliedFormat":99},{"version":"2fd5ac0f7b8852a4331a3e529e0d7d38b1aeb4066ce21362f8fa6df1041fe41d","signature":"7e0e510adaa12bc2c861a4875791d07059c4939a203ace368bdb21e702f4666a"},{"version":"4cfa0913295820133fcff0033e4b68f1320e45790c1a7c9cccb7f385d6c889dd","signature":"73c0bdde6bd9e63c3728cb58134a0dabf58b5ce3a3f1aace8f5330cb78ace308"},{"version":"65ebbeeaf6f852541fee0bf4482d171cd583345241d49d621234c99a9431f86e","signature":"4342e71013ec7a6dffb4b2ac135320a7d9df0331dda8179303919d54e063beec"},{"version":"c2a068d1af703182805f990229e999c9359227f973a5fdc6717ce4db42e6cb28","signature":"23af0f2ba3a27117c93845c4b3f186b71fa304a280cf408847942d7a64a12c1d"},{"version":"e82f2d1c7416bee32a7053a28a34beac35ab3ebbcbaf145409d46bd5430ae178","signature":"b4a59a49217396633aeedad7a4be7a10a3307f206b5ab182cb34926a70d720b8"},{"version":"7e293b8fd955d659db2083f1703b958fd103e66c0ff8b2e5608203271ed3f156","signature":"464cbdcf4321dc28426079060c6b69cc494ebdfaa47cdc7c3348b3354c576e40"},{"version":"623199926801333496ec1a84763907994268dadb2bf1239c0985c431afc91388","signature":"c00339d9dc2b5fb9ee9dbbf3dba43bf07db000681cb76c883eedf434ef0fd4d1"},{"version":"c2e33d50eff76fb4d658abbddabccdfe932ee8b8b73d2cfc9162e76c855b2bd5","signature":"20db600d3355c8773d3858d3391896f60b2b080df7288b562afa74bd47050281"},{"version":"d7f9bceb923b7e99d722ed3b04e4cba57ffc3a0aad7057383262ec397a25f31f","signature":"a6f58ea8cd092820fae82de59cef31e30ed93e5044d37e150206c9d8b89fb220"},{"version":"c352fbea880e15742c5504213e672667a0b55f5c7d3dd557b431bcd88b8a91d3","signature":"de3e2c7e0b00788778c09a3003864a9e458669a547defaf30c2905037f56b186"},{"version":"e3a2d46a5438b554692cfd5c19b5bfdad7c3c8bf16d0b38b3ca5f538a6879f5c","signature":"c95f33f270a928678d0b1253dbcb066e3ca0721f3a7850f63460129f0a0a7459"},{"version":"3d0aaffe1030c41919d026034936f488842d8ff03bb345ec93451e95625a400c","signature":"4112178d5e7ebb135df5d45ebcea6b4ab1a807d542be87bea420e8768f1462e0"},{"version":"f113bc183802eb5e6622722d6875cef7df74315d1edb9e87e745062fef62c5a9","signature":"22b4794663ef5951d86ce825ea2be2cde255c2bc0deb993f7190309cfa5a0eee"},{"version":"bab2cae3538a01e964539a7544339e4dff91535fec668c7adfb146077bc197e8","signature":"410172d8113dc01438285805ffcfe04793f2327e792ad57cafd7d1363836781a"},{"version":"43c67e8882d793a20c809542e51ccd4c7d27e9d9770481b5a71c31b8eada1b6e","signature":"a289b52c42199ac1caf418a20671ea74cbb80e11e82e22224b3bd89e197e20b5"},{"version":"770d0864b533ef3d172edf481830df13d2170b0570b3d8e765a7730e9ac2c920","signature":"c3b2f933aa364d47522e2a254036880efc6a7698862a81241a38e971de565330"},{"version":"522cb15ff9bef5a65c2f3dbd10dbba9e7ecae4de32f90f5c0b4198132be63ae4","impliedFormat":1},{"version":"88b5951f985004aa155482185bf17f17a5cda391fc7b9c6a367020fa112d3c04","impliedFormat":1},{"version":"b8f832403e5a772b4b35f4414c03be9252b33efb6a6f1729894d5e8d371e5e6e","impliedFormat":99},{"version":"7d06ddcc506f4729aa979fa187c78079fea7848230b96138438e005e0ad1799e","signature":"754667aef40c564c2daf7fabd4b7b7c49f07bb8f0d6a7312e906e2a33dfde711"},{"version":"0ee5b00a19b8c29a61a1ea566ae36b778d6bf0306b6486d245debe29fa40e679","signature":"1e0c6b7485e03c2f4556d4ed4059e8ff38fc4d5a57ed842a242d90877059948f"},{"version":"341ec34722a64c3cbda2ebd102f99769c62129affeeb52e132f67e4b63df2159","signature":"444259d2a56bf8deb21a2a52387822dfe9791111912d174dc32c49688b976732"},{"version":"dd01f7b4bdb636857b60b29b9af10d15e26751af4a447a231bdf2aed3e90f74f","signature":"7da29b93d4f01b65fe0961736a9819d24576083bd2fcdbd80ff15124eec9f5ea"},{"version":"567a2a60b717eb9910cd5d971dc9264f7b2cbb2599a0e9e7c7a7ff0f0f90af2c","signature":"e3a24a58728b79455feb5543366dc96c557afa81ac5a73f107e97a889aa7eaf8"},{"version":"3cc4ae9a0bd9d88fdf50a60ce6d04082569e28b2e287ae1c5119bc6c46ca0166","signature":"9a6c971e967f0d4f67dae3ef9d5cc295bcac87891900ea87724551a60281bfba"},{"version":"96efb1bbe8f8857d62658fb80f174ee82f0dc978bb3238cf3ddaae7865e3a338","signature":"d7803d92856795ae4477d2e271e81b7b7f90cd0adcfc0b5a6d2141bd4b8ec146"},{"version":"3baf8eec7b841e6aaf96d779fee05077b29d462481e3147d70826e2fc1d965cc","signature":"bba86ec04e7eace76e380907f3fa8f59307d5a2d180c6f0056ab50ebac49a299"},{"version":"933757797023def2acdb7e8bf04c7ab419edec6e076aecaa413f636050931147","signature":"de183ad7b4915acfb92e3d7c117ef570f41e906024aaabf0f84c61842c3ea3dc"},{"version":"4c57f51ab675a1f398181daaa12fcc710b4f2dd60b68915e74229f516745294c","signature":"790e334b187fc956e27e3be7380a4b3b1e6be1c9638dc67a55ec533f1017e618"},{"version":"b3f4799dd5ccd35b9b67faf8e0fe7f5a5fbfc2e0debd9eb2f2136e550d022afb","signature":"c5f64e4c6af0a71b5fb2d91834f75c53ff2c98b55e07d3d181dedebfe049fe59"},{"version":"0f4fd2e7d34b16f25356f4fb70141e55cfb415e99279892088542f48f6a1a468","signature":"fdac5e1b66d15d0391c208f463ccf207cafd13ceb4d27a49aa34c4c9fbecab45"},{"version":"9d59003e9bfcc0ab96210a827063009694956f83a491977ee268b8dfcb6203b5","signature":"9c6f70e94f80322cf8ca774cdbcf4f1b5507d32557db3d9eaaf34696118536fa"},{"version":"5a7b058e3cde4f9f76cd903112e79ee5aa4a72839fe688c1d228a89e36292459","signature":"8539c91bb5dd9d29eab26010795fb6d5eab5958f12aad4b3fcc3b5ec5e6a8bc6"},{"version":"262c5ec7d5900248a54b6d3bb5b3562f3af9cff3a69eae75c255d6a69c01e0cc","signature":"43c6c3c0f43119b0596c422e3b624ad4d0cc99571742a92de9b7101c586857c0"},{"version":"e3156b9822be2d3deefaf3a0ca0539bbce5760a01709b366c3dccf116967f866","signature":"c514dffde695fde265a3f71dac8f8fb59cfc67de22d8cd80f18e14824159d515"},{"version":"441e74ac9c3a1dba5135377cb5bf346fec46b9cc49c21cfc3bd3485d702dfcd7","signature":"e7741f977456759194299f11edb185e8f6cdd51c47e3e88d938db050feeb233c"},{"version":"7422159b26a79ae4d9302e15dc103c7184c3e95b13accab7c279cbba5d1ee1af","signature":"95fcf300daf74a30df9e74349664cc7b8b5ce5850de755f11db1dfc47a988055"},{"version":"90e1c273467b1e4d88a5148c5994426cdd722cdbb8338b5f268289e0f12d3bc0","signature":"f4bcb6c39852869a48cee4f46cdb51046479e0706c65e177e462ed500a00925e"},{"version":"54358ad2798c2c7cff142e9a75b75674c8f80553bc3bc9c86688b13a5174af0a","signature":"2897ac265c2440d9b999de7afc1a4f9772fd260a3cbb3bfb0c3b73b0dd0f0a53"},{"version":"a346701ad6dcdaa58e388fe0995fc5304c09c395b8cba68ed872780f8c102004","impliedFormat":99},{"version":"54f6a98df24c2daed75bfbcedfd26af77737d180259745838c221aa9cf2f6db5","signature":"55c870eb0fb11315a49b905bed54e68b2d28799099b31eddf743849176c9e3bc"},{"version":"7846ea589a15b41508f00e43b026a656e09beb71d9d9b114c36f1218d3e3c83a","signature":"eff72f696a287fb1cbaa89b73c8b8e97a58a6ff3f7e27534676cb11e9e3cb598"},{"version":"968c5c5b31efc06753b2073e0f6f411c4af9fb3cb7e8cc75a7597457164fba50","signature":"8ddbb01fa9ff8cdd43fc69a66c246fc0cbbcb32c0bb0e68ad0b6373468d0a237"},{"version":"4535de2a212d32ddd990ab1b39e2df969c4bfa89e8ac939d9ebed248c546036e","signature":"f90ea2e895a59d6c73f377b3f6817771289aa57e0bbb0ac94852395f32c1eda6"},{"version":"7b6fc6fdeb7f78f6c58ea9a1ad8518632a22e4aaebda74905cc5bd4ed1e7824e","signature":"f942a4018d363d25471bb549fd1af38c5fc6af7429a58e91d3ff0ae82795bbc7"},{"version":"b239affae0430411957266df719f9a16c7b5020c2792493fd2ae018ff151f988","signature":"d457429a313780a569fef5162b0dc629be96829effcd94bf25f8372bf931d84a"},{"version":"6ed11361472a445c7762b72826b03dec1c846b43e915a9fab6e5f5f2829a19a6","signature":"2fe0f5ae81632e3b2b2d3c4f49ba32a6ff14d56588d226789909a400e2946ee6"},{"version":"cee4545494819ab3fe4bc4ee2605955961890457d005f2277124ccb8611e2bf3","signature":"f5b9db12926d5124fd2b95df89385fae64223764c373bc885bda4930b4eeec80"},{"version":"6da869a2f1fc907b482575107e6925de360c127732ef2705db5bf719c55f95a2","signature":"e7e948d55c8f02b24c9760ab35cb50730a6b3c72005c2a2c970ed865d206f2fc"},{"version":"6c05d0fcee91437571513c404e62396ee798ff37a2d8bef2104accdc79deb9c0","impliedFormat":1},{"version":"516bfadb206325e34ad8cf151b930f11625c4f1df411d0947d35838cdbc6527a","signature":"02fd33a56b76bd10e3b16dfc99d1e66f0d5ab8ce0b0015e09c115d025a229ba2"},{"version":"efd93a23cfaedad93d8b9d36c7dae263ca703c1241803ed2c471a060c434b80f","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"d2b705a7a2220e194cec2b92f009e2a1d88080511582286aea1e0baf29a726dc","signature":"55c6a17e8068d09a4103bbc24e2384d39a0c35ec61d8625dd6158923840345c2"},{"version":"0dc136b06e9ff09eeec233e9e505cdbe6bc7314dc07d2a5cc8ee22c3ac0c2f63","signature":"55c0f90ab0a263c74c58f8e7ade7b414c47fad26da8d71b187e3c23481d6afb0"},{"version":"5ad1c901b2cec84439b6861d5c1f17b94f8aa97c7cda490c688d219dd37cafb4","signature":"538931e4b2496e534adb865850ea2c3cd61e3865ea6ed4443da7ff8c415d2295"},{"version":"f67e5130d4a7917595cd7a8f927704100923a2f0f0c3c4202cbd9baa7995a6e8","signature":"5e2d86502ee7a83f7c2a618d5bd305df472135fd9cca91c1f8a2dfaf8351e10b"},{"version":"194c3bb2a20645ae322c0d96629af35f3c17f15aa7ede3fa23a484d269ba8ddd","signature":"1ad68413a88f54fade36b6265a87c6b4ec5cbf21ee10903ba0b37728dfb22b6b"},{"version":"85652d7bb13bd2141b3d0c68d07ac1a11e933dd32ca2bb4b1b83b8aa5f62251c","impliedFormat":1},{"version":"d3f2d715f57df3f04bf7b16dde01dec10366f64fce44503c92b8f78f614c1769","impliedFormat":1},{"version":"b78cd10245a90e27e62d0558564f5d9a16576294eee724a59ae21b91f9269e4a","impliedFormat":1},{"version":"baac9896d29bcc55391d769e408ff400d61273d832dd500f21de766205255acb","impliedFormat":1},{"version":"2f5747b1508ccf83fad0c251ba1e5da2f5a30b78b09ffa1cfaf633045160afed","impliedFormat":1},{"version":"86ea91bfa7fef1eeb958056f30f1db4e0680bc9b5132e5e9d6e9cfd773c0c4fd","affectsGlobalScope":true,"impliedFormat":1},{"version":"b71c603a539078a5e3a039b20f2b0a0d1708967530cf97dec8850a9ca45baa2b","impliedFormat":1},{"version":"168d88e14e0d81fe170e0dadd38ae9d217476c11435ea640ddb9b7382bdb6c1f","impliedFormat":1},{"version":"104c67f0da1bdf0d94865419247e20eded83ce7f9911a1aa75fc675c077ca66e","impliedFormat":1},{"version":"cc0d0b339f31ce0ab3b7a5b714d8e578ce698f1e13d7f8c60bfb766baeb1d35c","impliedFormat":1},{"version":"8e04cf0688e0d921111659c2b55851957017148fa7b977b02727477d155b3c47","impliedFormat":1},{"version":"27f05b3dc1282cfa942d5ca36a4ace3ab148fbd213c453d36b7ee0e491dbad73","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"69c228128622ef8e424f35bfe7c121a8fc46aebebd7102d498fd0b70cd98f334","signature":"fbc36850165f32266d565928b0c627f4323ce38a69abe240111e59efa5569909"},{"version":"0bd0f9be7022ec133e6429707be45262fdc1a20235b129bffd3d192ef17a5ad3","signature":"e67703b48f55c336acf672bdaa0ac2645bae0c3b1aa899733ec9cc50d351c8f9"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"a1d14402dabda7bd6f11a23101bbd6f2d195573956c252c58dd465ffcc6a9313","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[520,521,[525,528],576,577,[580,582],584,589,[603,606],[608,622],[635,637],[641,645],[669,672],[674,689],[693,712],[714,722],[724,730],[742,746]],"options":{"allowImportingTsExtensions":true,"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"noFallthroughCasesInSwitch":true,"noUnusedLocals":true,"noUnusedParameters":true,"skipLibCheck":true,"strict":true,"target":7,"useDefineForClassFields":true},"referencedMap":[[745,1],[520,2],[746,3],[521,4],[631,5],[628,6],[627,7],[625,8],[624,9],[626,10],[630,11],[629,2],[632,12],[623,2],[364,2],[530,13],[534,14],[539,15],[543,16],[540,16],[541,17],[542,18],[533,17],[548,19],[531,13],[538,20],[549,13],[535,16],[550,19],[536,16],[552,21],[551,16],[553,22],[547,23],[555,24],[557,25],[558,26],[559,13],[560,27],[545,28],[537,16],[532,13],[561,17],[562,29],[546,17],[563,17],[564,27],[565,16],[566,17],[713,30],[568,17],[569,29],[570,31],[572,32],[571,16],[573,33],[574,22],[556,16],[544,2],[529,13],[740,34],[739,35],[736,36],[741,37],[737,2],[732,2],[121,38],[122,38],[123,39],[61,40],[124,41],[125,42],[126,43],[59,2],[127,44],[128,45],[129,46],[130,47],[131,48],[132,49],[133,49],[134,50],[135,51],[136,52],[137,53],[62,2],[60,2],[138,54],[139,55],[140,56],[181,57],[141,58],[142,59],[143,58],[144,60],[145,61],[147,62],[148,63],[149,63],[150,63],[151,64],[152,65],[153,66],[154,67],[155,68],[156,69],[157,69],[158,70],[159,2],[160,2],[161,71],[162,72],[163,71],[164,73],[165,74],[166,75],[167,76],[168,77],[169,78],[170,79],[171,80],[172,81],[173,82],[174,83],[175,84],[176,85],[177,86],[178,87],[63,58],[64,2],[65,88],[66,89],[67,2],[68,90],[69,2],[112,91],[113,92],[114,93],[115,93],[116,94],[117,2],[118,41],[119,95],[120,92],[179,96],[180,97],[734,2],[735,2],[185,98],[449,13],[186,99],[184,100],[451,101],[450,102],[182,103],[447,2],[183,104],[50,2],[52,105],[446,13],[216,13],[733,106],[738,107],[583,2],[668,108],[656,108],[657,109],[662,110],[667,111],[658,110],[660,112],[661,113],[659,109],[665,114],[666,115],[664,109],[663,116],[650,2],[654,117],[646,118],[647,2],[655,119],[648,120],[651,121],[653,122],[652,122],[649,123],[146,2],[579,124],[578,125],[523,2],[51,2],[602,126],[601,127],[600,2],[590,2],[592,2],[596,128],[593,2],[594,2],[591,2],[595,2],[598,129],[599,2],[597,2],[692,130],[731,131],[634,132],[633,133],[587,134],[588,135],[690,118],[522,13],[673,2],[586,136],[585,2],[723,13],[472,137],[477,1],[484,138],[467,139],[220,2],[228,140],[368,141],[371,142],[343,2],[356,143],[363,144],[245,2],[345,2],[226,2],[342,145],[388,146],[227,2],[218,147],[370,148],[372,149],[373,150],[444,151],[337,152],[290,153],[350,154],[351,155],[349,156],[348,2],[344,157],[369,158],[229,159],[414,2],[415,160],[256,161],[230,162],[257,161],[293,161],[196,161],[366,163],[365,2],[355,164],[462,2],[205,2],[483,165],[422,166],[423,167],[419,168],[501,2],[320,2],[424,169],[420,170],[506,171],[505,172],[500,2],[271,2],[323,173],[322,2],[499,174],[421,13],[276,175],[283,176],[285,177],[275,2],[280,178],[282,179],[284,180],[279,181],[277,2],[281,182],[502,2],[498,2],[504,183],[503,2],[274,184],[493,185],[496,186],[264,187],[263,188],[262,189],[509,13],[261,190],[250,2],[511,2],[512,13],[513,191],[188,2],[352,192],[353,193],[354,194],[192,2],[357,2],[212,195],[187,2],[436,13],[194,196],[435,197],[434,198],[425,2],[426,2],[433,2],[428,2],[431,199],[427,2],[429,200],[432,201],[430,200],[225,2],[222,2],[223,161],[377,2],[382,202],[383,203],[381,204],[379,205],[380,206],[375,2],[442,169],[217,169],[471,207],[478,208],[482,209],[311,210],[310,2],[305,2],[458,211],[466,212],[338,213],[339,214],[417,215],[327,2],[440,216],[315,13],[332,217],[443,218],[328,2],[331,219],[329,2],[441,220],[438,221],[437,2],[439,2],[335,2],[413,222],[200,223],[313,224],[317,225],[333,226],[336,227],[325,228],[318,229],[465,230],[391,231],[309,232],[197,233],[464,234],[193,235],[384,236],[376,2],[385,237],[402,238],[374,2],[401,239],[58,2],[396,240],[221,2],[416,241],[392,2],[206,2],[208,2],[347,2],[400,242],[224,2],[248,243],[334,244],[254,245],[314,2],[399,2],[378,2],[404,246],[405,247],[346,2],[407,248],[409,249],[408,250],[358,2],[398,233],[411,251],[308,252],[397,253],[403,254],[233,2],[237,2],[236,2],[235,2],[240,2],[234,2],[243,2],[242,2],[239,2],[238,2],[241,2],[244,255],[232,2],[300,256],[299,2],[304,257],[301,258],[303,259],[306,257],[302,258],[213,260],[292,261],[461,262],[459,2],[488,263],[490,264],[454,265],[489,266],[201,267],[198,267],[231,2],[215,268],[214,269],[210,270],[211,271],[219,272],[247,272],[258,272],[294,273],[259,273],[203,274],[202,2],[298,275],[297,276],[296,277],[295,278],[204,279],[445,280],[246,281],[453,282],[418,283],[448,284],[452,285],[341,286],[340,287],[321,288],[307,289],[289,290],[291,291],[288,292],[410,293],[312,2],[476,2],[209,294],[412,295],[460,296],[319,2],[249,297],[326,298],[324,299],[251,300],[386,301],[455,2],[252,302],[387,302],[474,2],[473,2],[475,2],[457,2],[456,2],[389,303],[316,2],[286,304],[207,305],[265,2],[191,306],[253,2],[480,13],[190,2],[492,307],[273,13],[486,169],[272,308],[469,309],[270,307],[195,2],[494,310],[268,13],[269,13],[260,2],[189,2],[267,311],[266,312],[255,313],[330,67],[390,67],[406,2],[394,314],[393,2],[278,184],[199,2],[287,13],[463,195],[470,315],[53,13],[56,316],[57,317],[54,13],[55,2],[367,89],[362,318],[361,2],[360,319],[359,2],[468,320],[479,321],[481,322],[485,323],[487,324],[491,325],[519,326],[495,326],[518,327],[497,328],[507,329],[508,330],[510,331],[514,332],[517,195],[516,2],[515,118],[575,333],[554,16],[567,13],[395,334],[607,13],[524,2],[48,2],[49,2],[8,2],[9,2],[11,2],[10,2],[2,2],[12,2],[13,2],[14,2],[15,2],[16,2],[17,2],[18,2],[19,2],[3,2],[20,2],[21,2],[4,2],[22,2],[26,2],[23,2],[24,2],[25,2],[27,2],[28,2],[29,2],[5,2],[30,2],[31,2],[32,2],[33,2],[6,2],[37,2],[34,2],[35,2],[36,2],[38,2],[7,2],[39,2],[44,2],[45,2],[40,2],[41,2],[42,2],[43,2],[46,2],[1,2],[47,2],[88,335],[100,336],[85,337],[101,338],[110,339],[76,340],[77,341],[75,342],[109,118],[104,343],[108,344],[79,345],[97,346],[78,347],[107,348],[73,349],[74,343],[80,350],[81,2],[87,351],[84,350],[71,352],[111,353],[102,354],[91,355],[90,350],[92,356],[95,357],[89,358],[93,359],[105,118],[82,360],[83,361],[96,362],[72,338],[99,363],[98,350],[86,361],[94,364],[103,2],[70,2],[106,365],[691,2],[640,366],[639,367],[638,2],[644,368],[645,369],[670,370],[672,371],[676,372],[677,368],[581,373],[678,374],[582,375],[679,376],[605,377],[606,378],[643,379],[681,380],[703,381],[682,382],[704,383],[705,384],[680,385],[584,386],[675,387],[706,388],[527,389],[707,390],[603,391],[604,392],[528,393],[577,394],[685,395],[686,396],[688,397],[689,398],[694,399],[696,400],[697,401],[698,398],[699,396],[700,169],[701,402],[611,403],[616,404],[702,405],[618,406],[709,407],[589,408],[619,409],[710,410],[711,408],[695,411],[580,411],[526,412],[612,413],[576,414],[617,412],[613,415],[708,416],[712,417],[714,418],[715,419],[716,412],[717,420],[718,415],[719,415],[721,421],[614,414],[722,415],[724,422],[615,415],[620,411],[725,412],[726,415],[621,423],[674,416],[609,424],[683,425],[727,169],[720,408],[728,426],[610,427],[669,428],[622,416],[693,429],[608,416],[729,416],[671,430],[635,431],[684,416],[730,432],[687,416],[636,430],[525,433],[742,434],[637,416],[642,435],[743,435],[744,436],[641,416]],"affectedFilesPendingEmit":[746,644,645,670,672,676,677,581,678,582,679,605,606,643,681,703,682,704,705,680,584,675,706,527,707,603,604,528,577,685,686,688,689,694,696,697,698,699,700,701,611,616,702,618,709,589,619,710,711,695,580,526,612,576,617,613,708,712,714,715,716,717,718,719,721,614,722,724,615,620,725,726,621,674,609,683,727,720,728,610,669,622,693,608,729,671,635,684,730,687,636,525,742,637,642,743,744,641],"version":"6.0.3"}
\ No newline at end of file