Spaces:
Runtime error
Runtime error
Error handling (#64)
Browse filesThis view is limited to 50 files because it contains too many changes. Β
See raw diff
- .eslintignore +0 -13
- .eslintrc.cjs +0 -41
- eslint-rules/enforce-extensions.js +171 -0
- eslint.config.mts +99 -0
- package.json +25 -18
- pnpm-lock.yaml +569 -718
- src/lib/actions/autofocus.ts +7 -0
- src/lib/components/DebugMenu.svelte +0 -81
- src/lib/components/InferencePlayground/InferencePlaygroundModelSelectorModal.svelte +0 -175
- src/lib/components/{Avatar.svelte β avatar.svelte} +7 -3
- src/lib/components/debug-menu.svelte +123 -0
- src/lib/components/{Icons/IconProvider.svelte β icon-provider.svelte} +8 -5
- src/lib/components/{InferencePlayground/InferencePlaygroundCodeSnippets.svelte β inference-playground/code-snippets.svelte} +57 -55
- src/lib/components/{InferencePlayground/InferencePlaygroundConversationHeader.svelte β inference-playground/conversation-header.svelte} +19 -19
- src/lib/components/{InferencePlayground/InferencePlaygroundConversation.svelte β inference-playground/conversation.svelte} +32 -47
- src/lib/components/{InferencePlayground/generationConfigSettings.ts β inference-playground/generation-config-settings.ts} +0 -0
- src/lib/components/{InferencePlayground/InferencePlaygroundGenerationConfig.svelte β inference-playground/generation-config.svelte} +13 -7
- src/lib/components/{InferencePlayground/InferencePlaygroundHFTokenModal.svelte β inference-playground/hf-token-modal.svelte} +16 -9
- src/lib/components/{InferencePlayground/InferencePlaygroundMessage.svelte β inference-playground/message.svelte} +25 -18
- src/lib/components/inference-playground/model-selector-modal.svelte +165 -0
- src/lib/components/{InferencePlayground/InferencePlaygroundModelSelector.svelte β inference-playground/model-selector.svelte} +18 -18
- src/lib/components/{InferencePlayground/InferencePlayground.svelte β inference-playground/playground.svelte} +134 -137
- src/lib/components/{InferencePlayground/InferencePlaygroundProjectSelect.svelte β inference-playground/project-select.svelte} +28 -27
- src/lib/components/{InferencePlayground/InferencePlaygroundProviderSelect.svelte β inference-playground/provider-select.svelte} +26 -23
- src/lib/components/{InferencePlayground/inferencePlaygroundUtils.ts β inference-playground/utils.ts} +1 -2
- src/lib/components/label-pro.svelte +23 -0
- src/lib/components/{Prompts.svelte β prompts.svelte} +22 -24
- src/lib/components/quota-modal.svelte +106 -0
- src/lib/components/toaster.svelte +171 -0
- src/lib/components/toaster.svelte.ts +39 -0
- src/lib/spells/README.md +3 -0
- src/lib/spells/abort-manager.svelte.ts +34 -0
- src/lib/spells/create-init.svelte.ts +14 -0
- src/lib/spells/extract.svelte.ts +21 -0
- src/lib/spells/textarea-autosize.svelte.ts +67 -0
- src/lib/state/models.svelte.ts +10 -0
- src/lib/{stores/session.ts β state/session.svelte.ts} +66 -99
- src/lib/state/token.svelte.ts +35 -0
- src/lib/stores/models.ts +0 -8
- src/lib/stores/mounted.ts +0 -9
- src/lib/stores/token.ts +0 -31
- src/lib/types.ts +9 -3
- src/lib/utils/compare.ts +3 -0
- src/lib/utils/effect.ts +0 -51
- src/lib/utils/is.ts +37 -0
- src/lib/utils/model.ts +0 -5
- src/lib/utils/object.ts +20 -0
- src/routes/+layout.svelte +10 -3
- src/routes/+page.svelte +2 -2
- src/routes/+page.ts +2 -2
.eslintignore
DELETED
|
@@ -1,13 +0,0 @@
|
|
| 1 |
-
.DS_Store
|
| 2 |
-
node_modules
|
| 3 |
-
/build
|
| 4 |
-
/.svelte-kit
|
| 5 |
-
/package
|
| 6 |
-
.env
|
| 7 |
-
.env.*
|
| 8 |
-
!.env.example
|
| 9 |
-
|
| 10 |
-
# Ignore files for PNPM, NPM and YARN
|
| 11 |
-
pnpm-lock.yaml
|
| 12 |
-
package-lock.json
|
| 13 |
-
yarn.lock
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
.eslintrc.cjs
DELETED
|
@@ -1,41 +0,0 @@
|
|
| 1 |
-
module.exports = {
|
| 2 |
-
root: true,
|
| 3 |
-
parser: "@typescript-eslint/parser",
|
| 4 |
-
extends: ["eslint:recommended", "plugin:@typescript-eslint/recommended", "plugin:svelte/recommended", "prettier"],
|
| 5 |
-
plugins: ["@typescript-eslint"],
|
| 6 |
-
ignorePatterns: ["*.cjs"],
|
| 7 |
-
overrides: [
|
| 8 |
-
{
|
| 9 |
-
files: ["*.svelte"],
|
| 10 |
-
parser: "svelte-eslint-parser",
|
| 11 |
-
parserOptions: {
|
| 12 |
-
parser: "@typescript-eslint/parser",
|
| 13 |
-
},
|
| 14 |
-
},
|
| 15 |
-
],
|
| 16 |
-
parserOptions: {
|
| 17 |
-
sourceType: "module",
|
| 18 |
-
ecmaVersion: 2020,
|
| 19 |
-
extraFileExtensions: [".svelte"],
|
| 20 |
-
project: "./tsconfig.json",
|
| 21 |
-
},
|
| 22 |
-
rules: {
|
| 23 |
-
"require-yield": "off",
|
| 24 |
-
"@typescript-eslint/no-explicit-any": "error",
|
| 25 |
-
"@typescript-eslint/no-non-null-assertion": "error",
|
| 26 |
-
"@typescript-eslint/no-unused-vars": [
|
| 27 |
-
// prevent variables with a _ prefix from being marked as unused
|
| 28 |
-
"error",
|
| 29 |
-
{
|
| 30 |
-
argsIgnorePattern: "^_",
|
| 31 |
-
},
|
| 32 |
-
],
|
| 33 |
-
"object-shorthand": ["error", "always"],
|
| 34 |
-
"svelte/no-at-html-tags": "off",
|
| 35 |
-
},
|
| 36 |
-
env: {
|
| 37 |
-
browser: true,
|
| 38 |
-
es2017: true,
|
| 39 |
-
node: true,
|
| 40 |
-
},
|
| 41 |
-
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
eslint-rules/enforce-extensions.js
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import fs from "fs";
|
| 2 |
+
import path from "path";
|
| 3 |
+
|
| 4 |
+
export default {
|
| 5 |
+
meta: {
|
| 6 |
+
type: "suggestion",
|
| 7 |
+
docs: {
|
| 8 |
+
description: "Enforce file extensions in import statements",
|
| 9 |
+
},
|
| 10 |
+
fixable: "code",
|
| 11 |
+
schema: [
|
| 12 |
+
{
|
| 13 |
+
type: "object",
|
| 14 |
+
properties: {
|
| 15 |
+
ignorePaths: {
|
| 16 |
+
type: "array",
|
| 17 |
+
items: { type: "string" },
|
| 18 |
+
},
|
| 19 |
+
includePaths: {
|
| 20 |
+
type: "array",
|
| 21 |
+
items: { type: "string" },
|
| 22 |
+
description: "Path patterns to include (e.g., '$lib/')",
|
| 23 |
+
},
|
| 24 |
+
tsToJs: {
|
| 25 |
+
type: "boolean",
|
| 26 |
+
description: "Convert .ts files to .js when importing",
|
| 27 |
+
},
|
| 28 |
+
aliases: {
|
| 29 |
+
type: "object",
|
| 30 |
+
description: "Map of path aliases to their actual paths (e.g., {'$lib': 'src/lib'})",
|
| 31 |
+
},
|
| 32 |
+
},
|
| 33 |
+
additionalProperties: false,
|
| 34 |
+
},
|
| 35 |
+
],
|
| 36 |
+
messages: {
|
| 37 |
+
missingExtension: "Import should include a file extension",
|
| 38 |
+
noFileFound: "Import is missing extension and no matching file was found",
|
| 39 |
+
},
|
| 40 |
+
},
|
| 41 |
+
create(context) {
|
| 42 |
+
const options = context.options[0] || {};
|
| 43 |
+
const ignorePaths = options.ignorePaths || [];
|
| 44 |
+
const includePaths = options.includePaths || [];
|
| 45 |
+
const tsToJs = options.tsToJs !== undefined ? options.tsToJs : true; // Default to true
|
| 46 |
+
const aliases = options.aliases || {};
|
| 47 |
+
|
| 48 |
+
// Get the project root directory
|
| 49 |
+
const projectRoot = process.cwd();
|
| 50 |
+
|
| 51 |
+
// Utility function to resolve file paths
|
| 52 |
+
function resolveImportPath(importPath, currentFilePath) {
|
| 53 |
+
// Handle relative paths
|
| 54 |
+
if (importPath.startsWith("./") || importPath.startsWith("../")) {
|
| 55 |
+
return path.resolve(path.dirname(currentFilePath), importPath);
|
| 56 |
+
}
|
| 57 |
+
|
| 58 |
+
// Handle aliased paths
|
| 59 |
+
for (const [alias, aliasPath] of Object.entries(aliases)) {
|
| 60 |
+
// Check if the import starts with this alias
|
| 61 |
+
if (importPath === alias || importPath.startsWith(`${alias}/`)) {
|
| 62 |
+
// Replace the alias with the actual path
|
| 63 |
+
const relativePath = importPath === alias ? "" : importPath.slice(alias.length + 1); // +1 for the slash
|
| 64 |
+
|
| 65 |
+
// Convert the aliasPath to an absolute path
|
| 66 |
+
let absoluteAliasPath = aliasPath;
|
| 67 |
+
if (!path.isAbsolute(absoluteAliasPath)) {
|
| 68 |
+
absoluteAliasPath = path.resolve(projectRoot, aliasPath);
|
| 69 |
+
}
|
| 70 |
+
|
| 71 |
+
return path.join(absoluteAliasPath, relativePath);
|
| 72 |
+
}
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
return null;
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
// Find the file extension by checking which file exists
|
| 79 |
+
function findActualFile(basePath) {
|
| 80 |
+
if (!basePath) return null;
|
| 81 |
+
|
| 82 |
+
try {
|
| 83 |
+
// Get the directory and base name
|
| 84 |
+
const dir = path.dirname(basePath);
|
| 85 |
+
const base = path.basename(basePath);
|
| 86 |
+
|
| 87 |
+
// If the directory doesn't exist, return early
|
| 88 |
+
if (!fs.existsSync(dir)) {
|
| 89 |
+
return null;
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
// Read all files in the directory
|
| 93 |
+
const files = fs.readdirSync(dir);
|
| 94 |
+
|
| 95 |
+
// Look for files that match our base name plus any extension
|
| 96 |
+
for (const file of files) {
|
| 97 |
+
const fileParts = path.parse(file);
|
| 98 |
+
|
| 99 |
+
// If we find a file that matches our base name
|
| 100 |
+
if (fileParts.name === base) {
|
| 101 |
+
// Handle TypeScript to JavaScript conversion
|
| 102 |
+
if (tsToJs && fileParts.ext === ".ts") {
|
| 103 |
+
return {
|
| 104 |
+
actualPath: path.join(dir, file),
|
| 105 |
+
importExt: ".js", // Import as .js even though it's a .ts file
|
| 106 |
+
};
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
// Otherwise use the actual extension
|
| 110 |
+
return {
|
| 111 |
+
actualPath: path.join(dir, file),
|
| 112 |
+
importExt: fileParts.ext,
|
| 113 |
+
};
|
| 114 |
+
}
|
| 115 |
+
}
|
| 116 |
+
} catch (error) {
|
| 117 |
+
// If there's an error checking file existence, return null
|
| 118 |
+
console.error("Error checking files:", error);
|
| 119 |
+
}
|
| 120 |
+
|
| 121 |
+
return null;
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
return {
|
| 125 |
+
ImportDeclaration(node) {
|
| 126 |
+
const source = node.source.value;
|
| 127 |
+
|
| 128 |
+
// Check if it's a relative import or matches a manually specified include path
|
| 129 |
+
const isRelativeImport = source.startsWith("./") || source.startsWith("../");
|
| 130 |
+
const isAliasedPath = Object.keys(aliases).some(alias => source === alias || source.startsWith(`${alias}/`));
|
| 131 |
+
const isIncludedPath = includePaths.some(pattern => source.startsWith(pattern));
|
| 132 |
+
|
| 133 |
+
// Skip if it's not a relative import, aliased path, or included path
|
| 134 |
+
if (!isRelativeImport && !isAliasedPath && !isIncludedPath) {
|
| 135 |
+
return;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
// Skip ignored paths
|
| 139 |
+
if (ignorePaths.some(path => source.includes(path))) {
|
| 140 |
+
return;
|
| 141 |
+
}
|
| 142 |
+
|
| 143 |
+
// Check if the import already has an extension
|
| 144 |
+
const hasExtension = path.extname(source) !== "";
|
| 145 |
+
if (!hasExtension) {
|
| 146 |
+
// Get current file path to resolve the import
|
| 147 |
+
const currentFilePath = context.getFilename();
|
| 148 |
+
|
| 149 |
+
// Try to determine the correct file by checking what exists
|
| 150 |
+
const resolvedPath = resolveImportPath(source, currentFilePath);
|
| 151 |
+
const fileInfo = findActualFile(resolvedPath);
|
| 152 |
+
|
| 153 |
+
context.report({
|
| 154 |
+
node,
|
| 155 |
+
messageId: fileInfo ? "missingExtension" : "noFileFound",
|
| 156 |
+
fix(fixer) {
|
| 157 |
+
// Only provide a fix if we found a file
|
| 158 |
+
if (fileInfo) {
|
| 159 |
+
// Replace the string literal with one that includes the extension
|
| 160 |
+
return fixer.replaceText(node.source, `"${source}${fileInfo.importExt}"`);
|
| 161 |
+
}
|
| 162 |
+
|
| 163 |
+
// Otherwise, don't try to fix
|
| 164 |
+
return null;
|
| 165 |
+
},
|
| 166 |
+
});
|
| 167 |
+
}
|
| 168 |
+
},
|
| 169 |
+
};
|
| 170 |
+
},
|
| 171 |
+
};
|
eslint.config.mts
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import js from "@eslint/js";
|
| 2 |
+
import svelte from "eslint-plugin-svelte";
|
| 3 |
+
import globals from "globals";
|
| 4 |
+
import ts from "typescript-eslint";
|
| 5 |
+
import svelteConfig from "./svelte.config.js";
|
| 6 |
+
import enforceExt from "./eslint-rules/enforce-extensions.js";
|
| 7 |
+
import prettier from "eslint-plugin-prettier/recommended";
|
| 8 |
+
|
| 9 |
+
export default ts.config(
|
| 10 |
+
js.configs.recommended,
|
| 11 |
+
ts.configs.recommended,
|
| 12 |
+
...svelte.configs.recommended,
|
| 13 |
+
prettier,
|
| 14 |
+
// Configure svelte
|
| 15 |
+
{
|
| 16 |
+
files: ["**/*.svelte", "**/*.svelte.ts", "**/*.svelte.js"],
|
| 17 |
+
// See more details at: https://typescript-eslint.io/packages/parser/
|
| 18 |
+
languageOptions: {
|
| 19 |
+
parserOptions: {
|
| 20 |
+
projectService: true,
|
| 21 |
+
extraFileExtensions: [".svelte"], // Add support for additional file extensions, such as .svelte
|
| 22 |
+
parser: ts.parser,
|
| 23 |
+
// Specify a parser for each language, if needed:
|
| 24 |
+
// parser: {
|
| 25 |
+
// ts: ts.parser,
|
| 26 |
+
// js: espree, // Use espree for .js files (add: import espree from 'espree')
|
| 27 |
+
// typescript: ts.parser
|
| 28 |
+
// },
|
| 29 |
+
|
| 30 |
+
// We recommend importing and specifying svelte.config.js.
|
| 31 |
+
// By doing so, some rules in eslint-plugin-svelte will automatically read the configuration and adjust their behavior accordingly.
|
| 32 |
+
// While certain Svelte settings may be statically loaded from svelte.config.js even if you donβt specify it,
|
| 33 |
+
// explicitly specifying it ensures better compatibility and functionality.
|
| 34 |
+
svelteConfig,
|
| 35 |
+
},
|
| 36 |
+
},
|
| 37 |
+
},
|
| 38 |
+
{
|
| 39 |
+
plugins: {
|
| 40 |
+
local: {
|
| 41 |
+
rules: {
|
| 42 |
+
"enforce-ext": enforceExt,
|
| 43 |
+
},
|
| 44 |
+
},
|
| 45 |
+
},
|
| 46 |
+
},
|
| 47 |
+
{
|
| 48 |
+
rules: {
|
| 49 |
+
"require-yield": "off",
|
| 50 |
+
"@typescript-eslint/no-explicit-any": "error",
|
| 51 |
+
"@typescript-eslint/no-unused-expressions": "off",
|
| 52 |
+
// "@typescript-eslint/no-non-null-assertion": "error",
|
| 53 |
+
|
| 54 |
+
"@typescript-eslint/no-unused-vars": [
|
| 55 |
+
"error",
|
| 56 |
+
{
|
| 57 |
+
argsIgnorePattern: "^_",
|
| 58 |
+
},
|
| 59 |
+
],
|
| 60 |
+
|
| 61 |
+
"object-shorthand": ["error", "always"],
|
| 62 |
+
"svelte/no-at-html-tags": "off",
|
| 63 |
+
"svelte/require-each-key": "off",
|
| 64 |
+
"local/enforce-ext": [
|
| 65 |
+
"error",
|
| 66 |
+
{
|
| 67 |
+
includePaths: ["$lib/"],
|
| 68 |
+
aliases: {
|
| 69 |
+
$lib: "src/lib",
|
| 70 |
+
},
|
| 71 |
+
},
|
| 72 |
+
],
|
| 73 |
+
},
|
| 74 |
+
},
|
| 75 |
+
{
|
| 76 |
+
ignores: [
|
| 77 |
+
"**/*.cjs",
|
| 78 |
+
"**/.DS_Store",
|
| 79 |
+
"**/node_modules",
|
| 80 |
+
"build",
|
| 81 |
+
".svelte-kit",
|
| 82 |
+
"package",
|
| 83 |
+
"**/.env",
|
| 84 |
+
"**/.env.*",
|
| 85 |
+
"!**/.env.example",
|
| 86 |
+
"**/pnpm-lock.yaml",
|
| 87 |
+
"**/package-lock.json",
|
| 88 |
+
"**/yarn.lock",
|
| 89 |
+
],
|
| 90 |
+
},
|
| 91 |
+
{
|
| 92 |
+
languageOptions: {
|
| 93 |
+
globals: {
|
| 94 |
+
...globals.browser,
|
| 95 |
+
...globals.node,
|
| 96 |
+
},
|
| 97 |
+
},
|
| 98 |
+
}
|
| 99 |
+
);
|
package.json
CHANGED
|
@@ -9,46 +9,53 @@
|
|
| 9 |
"prepare": "ts-patch install && svelte-kit sync || echo ''",
|
| 10 |
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
| 11 |
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
| 12 |
-
"lint": "prettier . --check . && eslint
|
| 13 |
-
"format": "prettier . --write ."
|
|
|
|
| 14 |
},
|
| 15 |
"devDependencies": {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
"@iconify-json/carbon": "^1.2.8",
|
|
|
|
| 17 |
"@ryoppippi/unplugin-typia": "^1.0.0",
|
| 18 |
"@samchon/openapi": "^3.0.0",
|
| 19 |
"@sveltejs/adapter-auto": "^3.2.2",
|
| 20 |
"@sveltejs/adapter-node": "^5.2.0",
|
| 21 |
-
"@sveltejs/kit": "^2.
|
| 22 |
-
"@sveltejs/vite-plugin-svelte": "^
|
|
|
|
| 23 |
"@tailwindcss/postcss": "^4.0.9",
|
| 24 |
-
"@typescript-eslint/eslint-plugin": "^6.21.0",
|
| 25 |
-
"@typescript-eslint/parser": "^6.21.0",
|
| 26 |
"clsx": "^2.1.1",
|
| 27 |
-
"eslint": "^
|
| 28 |
-
"eslint-config-prettier": "^
|
| 29 |
-
"eslint-plugin-
|
|
|
|
| 30 |
"highlight.js": "^11.10.0",
|
|
|
|
|
|
|
| 31 |
"postcss": "^8.4.38",
|
| 32 |
"prettier": "^3.1.1",
|
| 33 |
-
"prettier-plugin-svelte": "^3.
|
| 34 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
| 35 |
-
"
|
| 36 |
-
"svelte
|
|
|
|
| 37 |
"tailwind-merge": "^3.0.2",
|
| 38 |
"tailwindcss": "^4.0.9",
|
| 39 |
"ts-patch": "^3.3.0",
|
| 40 |
"tslib": "^2.4.1",
|
| 41 |
"typescript": "^5.8.2",
|
|
|
|
| 42 |
"unplugin-icons": "^22.1.0",
|
| 43 |
-
"vite": "^5.
|
| 44 |
},
|
| 45 |
"type": "module",
|
| 46 |
"dependencies": {
|
| 47 |
-
"
|
| 48 |
-
"@huggingface/inference": "^3.5.1",
|
| 49 |
-
"@huggingface/tasks": "^0.17.1",
|
| 50 |
-
"@melt-ui/svelte": "^0.86.3",
|
| 51 |
-
"@tailwindcss/container-queries": "^0.1.1",
|
| 52 |
"typia": "^8.0.0"
|
| 53 |
}
|
| 54 |
}
|
|
|
|
| 9 |
"prepare": "ts-patch install && svelte-kit sync || echo ''",
|
| 10 |
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json",
|
| 11 |
"check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch",
|
| 12 |
+
"lint": "prettier . --check . && eslint src/",
|
| 13 |
+
"format": "prettier . --write .",
|
| 14 |
+
"clean": "rm -rf ./node_modules/ && rm -rf ./.svelte-kit/ && ni && echo 'Project cleaned!'"
|
| 15 |
},
|
| 16 |
"devDependencies": {
|
| 17 |
+
"@eslint/eslintrc": "^3.3.0",
|
| 18 |
+
"@eslint/js": "^9.22.0",
|
| 19 |
+
"@huggingface/hub": "^1.0.1",
|
| 20 |
+
"@huggingface/inference": "^3.5.1",
|
| 21 |
+
"@huggingface/tasks": "^0.17.1",
|
| 22 |
"@iconify-json/carbon": "^1.2.8",
|
| 23 |
+
"@iconify-json/material-symbols": "^1.2.15",
|
| 24 |
"@ryoppippi/unplugin-typia": "^1.0.0",
|
| 25 |
"@samchon/openapi": "^3.0.0",
|
| 26 |
"@sveltejs/adapter-auto": "^3.2.2",
|
| 27 |
"@sveltejs/adapter-node": "^5.2.0",
|
| 28 |
+
"@sveltejs/kit": "^2.5.27",
|
| 29 |
+
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
| 30 |
+
"@tailwindcss/container-queries": "^0.1.1",
|
| 31 |
"@tailwindcss/postcss": "^4.0.9",
|
|
|
|
|
|
|
| 32 |
"clsx": "^2.1.1",
|
| 33 |
+
"eslint": "^9.22.0",
|
| 34 |
+
"eslint-config-prettier": "^10.1.1",
|
| 35 |
+
"eslint-plugin-prettier": "^5.2.3",
|
| 36 |
+
"globals": "^16.0.0",
|
| 37 |
"highlight.js": "^11.10.0",
|
| 38 |
+
"jiti": "^2.4.2",
|
| 39 |
+
"melt": "^0.18.4",
|
| 40 |
"postcss": "^8.4.38",
|
| 41 |
"prettier": "^3.1.1",
|
| 42 |
+
"prettier-plugin-svelte": "^3.2.6",
|
| 43 |
"prettier-plugin-tailwindcss": "^0.6.11",
|
| 44 |
+
"runed": "^0.24.0",
|
| 45 |
+
"svelte": "^5.20.4",
|
| 46 |
+
"svelte-check": "^4.0.0",
|
| 47 |
"tailwind-merge": "^3.0.2",
|
| 48 |
"tailwindcss": "^4.0.9",
|
| 49 |
"ts-patch": "^3.3.0",
|
| 50 |
"tslib": "^2.4.1",
|
| 51 |
"typescript": "^5.8.2",
|
| 52 |
+
"typescript-eslint": "^8.26.1",
|
| 53 |
"unplugin-icons": "^22.1.0",
|
| 54 |
+
"vite": "^5.4.4"
|
| 55 |
},
|
| 56 |
"type": "module",
|
| 57 |
"dependencies": {
|
| 58 |
+
"eslint-plugin-svelte": "^3.3.1",
|
|
|
|
|
|
|
|
|
|
|
|
|
| 59 |
"typia": "^8.0.0"
|
| 60 |
}
|
| 61 |
}
|
pnpm-lock.yaml
CHANGED
|
@@ -8,6 +8,19 @@ importers:
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
'@huggingface/hub':
|
| 12 |
specifier: ^1.0.1
|
| 13 |
version: 1.0.1
|
|
@@ -17,19 +30,12 @@ importers:
|
|
| 17 |
'@huggingface/tasks':
|
| 18 |
specifier: ^0.17.1
|
| 19 |
version: 0.17.1
|
| 20 |
-
'@melt-ui/svelte':
|
| 21 |
-
specifier: ^0.86.3
|
| 22 |
-
version: 0.86.3(svelte@4.2.19)
|
| 23 |
-
'@tailwindcss/container-queries':
|
| 24 |
-
specifier: ^0.1.1
|
| 25 |
-
version: 0.1.1(tailwindcss@4.0.9)
|
| 26 |
-
typia:
|
| 27 |
-
specifier: ^8.0.0
|
| 28 |
-
version: 8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2)
|
| 29 |
-
devDependencies:
|
| 30 |
'@iconify-json/carbon':
|
| 31 |
specifier: ^1.2.8
|
| 32 |
version: 1.2.8
|
|
|
|
|
|
|
|
|
|
| 33 |
'@ryoppippi/unplugin-typia':
|
| 34 |
specifier: ^1.0.0
|
| 35 |
version: 1.2.0(@samchon/openapi@3.0.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.9)(yaml@2.7.0)
|
|
@@ -38,40 +44,46 @@ importers:
|
|
| 38 |
version: 3.0.0
|
| 39 |
'@sveltejs/adapter-auto':
|
| 40 |
specifier: ^3.2.2
|
| 41 |
-
version: 3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@
|
| 42 |
'@sveltejs/adapter-node':
|
| 43 |
specifier: ^5.2.0
|
| 44 |
-
version: 5.2.12(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@
|
| 45 |
'@sveltejs/kit':
|
| 46 |
-
specifier: ^2.
|
| 47 |
-
version: 2.18.0(@sveltejs/vite-plugin-svelte@
|
| 48 |
'@sveltejs/vite-plugin-svelte':
|
| 49 |
-
specifier: ^
|
| 50 |
-
version:
|
|
|
|
|
|
|
|
|
|
| 51 |
'@tailwindcss/postcss':
|
| 52 |
specifier: ^4.0.9
|
| 53 |
version: 4.0.9
|
| 54 |
-
'@typescript-eslint/eslint-plugin':
|
| 55 |
-
specifier: ^6.21.0
|
| 56 |
-
version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)
|
| 57 |
-
'@typescript-eslint/parser':
|
| 58 |
-
specifier: ^6.21.0
|
| 59 |
-
version: 6.21.0(eslint@8.57.1)(typescript@5.8.2)
|
| 60 |
clsx:
|
| 61 |
specifier: ^2.1.1
|
| 62 |
version: 2.1.1
|
| 63 |
eslint:
|
| 64 |
-
specifier: ^
|
| 65 |
-
version:
|
| 66 |
eslint-config-prettier:
|
| 67 |
-
specifier: ^
|
| 68 |
-
version:
|
| 69 |
-
eslint-plugin-
|
| 70 |
-
specifier: ^2.
|
| 71 |
-
version: 2.
|
|
|
|
|
|
|
|
|
|
| 72 |
highlight.js:
|
| 73 |
specifier: ^11.10.0
|
| 74 |
version: 11.11.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 75 |
postcss:
|
| 76 |
specifier: ^8.4.38
|
| 77 |
version: 8.5.3
|
|
@@ -79,17 +91,20 @@ importers:
|
|
| 79 |
specifier: ^3.1.1
|
| 80 |
version: 3.5.3
|
| 81 |
prettier-plugin-svelte:
|
| 82 |
-
specifier: ^3.
|
| 83 |
-
version: 3.3.3(prettier@3.5.3)(svelte@
|
| 84 |
prettier-plugin-tailwindcss:
|
| 85 |
specifier: ^0.6.11
|
| 86 |
-
version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@
|
|
|
|
|
|
|
|
|
|
| 87 |
svelte:
|
| 88 |
-
specifier: ^
|
| 89 |
-
version:
|
| 90 |
svelte-check:
|
| 91 |
-
specifier: ^
|
| 92 |
-
version:
|
| 93 |
tailwind-merge:
|
| 94 |
specifier: ^3.0.2
|
| 95 |
version: 3.0.2
|
|
@@ -105,11 +120,14 @@ importers:
|
|
| 105 |
typescript:
|
| 106 |
specifier: ^5.8.2
|
| 107 |
version: 5.8.2
|
|
|
|
|
|
|
|
|
|
| 108 |
unplugin-icons:
|
| 109 |
specifier: ^22.1.0
|
| 110 |
-
version: 22.1.0(svelte@
|
| 111 |
vite:
|
| 112 |
-
specifier: ^5.
|
| 113 |
version: 5.4.14(lightningcss@1.29.1)
|
| 114 |
|
| 115 |
packages:
|
|
@@ -426,13 +444,33 @@ packages:
|
|
| 426 |
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
|
| 427 |
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
| 428 |
|
| 429 |
-
'@eslint/
|
| 430 |
-
resolution: {integrity: sha512-
|
| 431 |
-
engines: {node: ^
|
| 432 |
|
| 433 |
-
'@eslint/
|
| 434 |
-
resolution: {integrity: sha512-
|
| 435 |
-
engines: {node: ^
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 436 |
|
| 437 |
'@floating-ui/core@1.6.9':
|
| 438 |
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
|
|
@@ -457,30 +495,41 @@ packages:
|
|
| 457 |
'@huggingface/tasks@0.17.1':
|
| 458 |
resolution: {integrity: sha512-kN5F/pzwxtmdZ0jORumNyegNKOX/ciU5G/DMZcqK3SJShod4C6yfvBRCMn5sEDzanxtU8VjX+7TaInQFmmU8Nw==}
|
| 459 |
|
| 460 |
-
'@
|
| 461 |
-
resolution: {integrity: sha512-
|
| 462 |
-
engines: {node: '>=
|
| 463 |
-
|
|
|
|
|
|
|
|
|
|
| 464 |
|
| 465 |
'@humanwhocodes/module-importer@1.0.1':
|
| 466 |
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
|
| 467 |
engines: {node: '>=12.22'}
|
| 468 |
|
| 469 |
-
'@humanwhocodes/
|
| 470 |
-
resolution: {integrity: sha512-
|
| 471 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 472 |
|
| 473 |
'@iconify-json/carbon@1.2.8':
|
| 474 |
resolution: {integrity: sha512-6xh4YiFBz6qoSnB3XMe23WvjTJroDFXB17J1MbiT7nATFe+70+em1acRXr8hgP/gYpwFMHFc4IvjA/IPTPnTzg==}
|
| 475 |
|
|
|
|
|
|
|
|
|
|
| 476 |
'@iconify/types@2.0.0':
|
| 477 |
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
|
| 478 |
|
| 479 |
'@iconify/utils@2.3.0':
|
| 480 |
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
|
| 481 |
|
| 482 |
-
'@
|
| 483 |
-
resolution: {integrity: sha512-
|
|
|
|
| 484 |
|
| 485 |
'@jridgewell/gen-mapping@0.3.8':
|
| 486 |
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
|
@@ -500,11 +549,6 @@ packages:
|
|
| 500 |
'@jridgewell/trace-mapping@0.3.25':
|
| 501 |
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
| 502 |
|
| 503 |
-
'@melt-ui/svelte@0.86.3':
|
| 504 |
-
resolution: {integrity: sha512-ZsWmHGd6P636mws1CgatlX7JtLkWoUBPXeNzPzvHYgZdagp8io8MPFotDIfRyKwTEQFUqF9fhBks6CWr0Nupuw==}
|
| 505 |
-
peerDependencies:
|
| 506 |
-
svelte: ^3.0.0 || ^4.0.0 || ^5.0.0-next.118
|
| 507 |
-
|
| 508 |
'@nodelib/fs.scandir@2.1.5':
|
| 509 |
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
| 510 |
engines: {node: '>= 8'}
|
|
@@ -517,6 +561,10 @@ packages:
|
|
| 517 |
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
| 518 |
engines: {node: '>= 8'}
|
| 519 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 520 |
'@polka/url@1.0.0-next.28':
|
| 521 |
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
|
| 522 |
|
|
@@ -657,6 +705,14 @@ packages:
|
|
| 657 |
'@samchon/openapi@3.0.0':
|
| 658 |
resolution: {integrity: sha512-eVQlyKRYv1/C2Mikc1xZr7c0jMjg1vjPkeY/gheKB4c5WOOWyTNZ1uvnXR+ETpPHwaQ54I9NrQZhoNk6BEGuuw==}
|
| 659 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 660 |
'@sveltejs/adapter-auto@3.3.1':
|
| 661 |
resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
|
| 662 |
peerDependencies:
|
|
@@ -676,24 +732,21 @@ packages:
|
|
| 676 |
svelte: ^4.0.0 || ^5.0.0-next.0
|
| 677 |
vite: ^5.0.3 || ^6.0.0
|
| 678 |
|
| 679 |
-
'@sveltejs/vite-plugin-svelte-inspector@
|
| 680 |
-
resolution: {integrity: sha512-
|
| 681 |
-
engines: {node: ^18.0.0 || >=
|
| 682 |
peerDependencies:
|
| 683 |
-
'@sveltejs/vite-plugin-svelte': ^
|
| 684 |
-
svelte: ^
|
| 685 |
vite: ^5.0.0
|
| 686 |
|
| 687 |
-
'@sveltejs/vite-plugin-svelte@
|
| 688 |
-
resolution: {integrity: sha512-
|
| 689 |
-
engines: {node: ^18.0.0 || >=
|
| 690 |
peerDependencies:
|
| 691 |
-
svelte: ^
|
| 692 |
vite: ^5.0.0
|
| 693 |
|
| 694 |
-
'@swc/helpers@0.5.15':
|
| 695 |
-
resolution: {integrity: sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==}
|
| 696 |
-
|
| 697 |
'@tailwindcss/container-queries@0.1.1':
|
| 698 |
resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==}
|
| 699 |
peerDependencies:
|
|
@@ -784,75 +837,55 @@ packages:
|
|
| 784 |
'@types/json-schema@7.0.15':
|
| 785 |
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
| 786 |
|
| 787 |
-
'@types/pug@2.0.10':
|
| 788 |
-
resolution: {integrity: sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==}
|
| 789 |
-
|
| 790 |
'@types/resolve@1.20.2':
|
| 791 |
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
| 792 |
|
| 793 |
-
'@
|
| 794 |
-
resolution: {integrity: sha512-
|
| 795 |
-
|
| 796 |
-
'@typescript-eslint/eslint-plugin@6.21.0':
|
| 797 |
-
resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==}
|
| 798 |
-
engines: {node: ^16.0.0 || >=18.0.0}
|
| 799 |
peerDependencies:
|
| 800 |
-
'@typescript-eslint/parser': ^
|
| 801 |
-
eslint: ^
|
| 802 |
-
typescript: '
|
| 803 |
-
peerDependenciesMeta:
|
| 804 |
-
typescript:
|
| 805 |
-
optional: true
|
| 806 |
|
| 807 |
-
'@typescript-eslint/parser@
|
| 808 |
-
resolution: {integrity: sha512-
|
| 809 |
-
engines: {node: ^
|
| 810 |
peerDependencies:
|
| 811 |
-
eslint: ^
|
| 812 |
-
typescript: '
|
| 813 |
-
peerDependenciesMeta:
|
| 814 |
-
typescript:
|
| 815 |
-
optional: true
|
| 816 |
|
| 817 |
-
'@typescript-eslint/scope-manager@
|
| 818 |
-
resolution: {integrity: sha512-
|
| 819 |
-
engines: {node: ^
|
| 820 |
|
| 821 |
-
'@typescript-eslint/type-utils@
|
| 822 |
-
resolution: {integrity: sha512-
|
| 823 |
-
engines: {node: ^
|
| 824 |
peerDependencies:
|
| 825 |
-
eslint: ^
|
| 826 |
-
typescript: '
|
| 827 |
-
peerDependenciesMeta:
|
| 828 |
-
typescript:
|
| 829 |
-
optional: true
|
| 830 |
|
| 831 |
-
'@typescript-eslint/types@
|
| 832 |
-
resolution: {integrity: sha512-
|
| 833 |
-
engines: {node: ^
|
| 834 |
|
| 835 |
-
'@typescript-eslint/typescript-estree@
|
| 836 |
-
resolution: {integrity: sha512-
|
| 837 |
-
engines: {node: ^
|
| 838 |
peerDependencies:
|
| 839 |
-
typescript: '
|
| 840 |
-
peerDependenciesMeta:
|
| 841 |
-
typescript:
|
| 842 |
-
optional: true
|
| 843 |
|
| 844 |
-
'@typescript-eslint/utils@
|
| 845 |
-
resolution: {integrity: sha512-
|
| 846 |
-
engines: {node: ^
|
| 847 |
peerDependencies:
|
| 848 |
-
eslint: ^
|
| 849 |
-
|
| 850 |
-
'@typescript-eslint/visitor-keys@6.21.0':
|
| 851 |
-
resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==}
|
| 852 |
-
engines: {node: ^16.0.0 || >=18.0.0}
|
| 853 |
|
| 854 |
-
'@
|
| 855 |
-
resolution: {integrity: sha512-
|
|
|
|
| 856 |
|
| 857 |
acorn-jsx@5.3.2:
|
| 858 |
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
|
@@ -879,9 +912,9 @@ packages:
|
|
| 879 |
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
| 880 |
engines: {node: '>=8'}
|
| 881 |
|
| 882 |
-
|
| 883 |
-
resolution: {integrity: sha512-
|
| 884 |
-
engines: {node: '>=
|
| 885 |
|
| 886 |
argparse@2.0.1:
|
| 887 |
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
|
@@ -893,9 +926,9 @@ packages:
|
|
| 893 |
array-timsort@1.0.3:
|
| 894 |
resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
|
| 895 |
|
| 896 |
-
|
| 897 |
-
resolution: {integrity: sha512-
|
| 898 |
-
engines: {node: '>=
|
| 899 |
|
| 900 |
axobject-query@4.1.0:
|
| 901 |
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
|
|
@@ -907,10 +940,6 @@ packages:
|
|
| 907 |
base64-js@1.5.1:
|
| 908 |
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
| 909 |
|
| 910 |
-
binary-extensions@2.3.0:
|
| 911 |
-
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
|
| 912 |
-
engines: {node: '>=8'}
|
| 913 |
-
|
| 914 |
bl@4.1.0:
|
| 915 |
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
| 916 |
|
|
@@ -924,10 +953,6 @@ packages:
|
|
| 924 |
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
| 925 |
engines: {node: '>=8'}
|
| 926 |
|
| 927 |
-
buffer-crc32@1.0.0:
|
| 928 |
-
resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
|
| 929 |
-
engines: {node: '>=8.0.0'}
|
| 930 |
-
|
| 931 |
buffer@5.7.1:
|
| 932 |
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
| 933 |
|
|
@@ -942,9 +967,9 @@ packages:
|
|
| 942 |
chardet@0.7.0:
|
| 943 |
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
|
| 944 |
|
| 945 |
-
chokidar@
|
| 946 |
-
resolution: {integrity: sha512-
|
| 947 |
-
engines: {node: '>=
|
| 948 |
|
| 949 |
cli-cursor@3.1.0:
|
| 950 |
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
|
|
@@ -966,9 +991,6 @@ packages:
|
|
| 966 |
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
|
| 967 |
engines: {node: '>=6'}
|
| 968 |
|
| 969 |
-
code-red@1.0.4:
|
| 970 |
-
resolution: {integrity: sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==}
|
| 971 |
-
|
| 972 |
color-convert@2.0.1:
|
| 973 |
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
| 974 |
engines: {node: '>=7.0.0'}
|
|
@@ -1014,10 +1036,6 @@ packages:
|
|
| 1014 |
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
| 1015 |
engines: {node: '>= 8'}
|
| 1016 |
|
| 1017 |
-
css-tree@2.3.1:
|
| 1018 |
-
resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==}
|
| 1019 |
-
engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
|
| 1020 |
-
|
| 1021 |
cssesc@3.0.0:
|
| 1022 |
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
| 1023 |
engines: {node: '>=4'}
|
|
@@ -1045,14 +1063,6 @@ packages:
|
|
| 1045 |
defu@6.1.4:
|
| 1046 |
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
|
| 1047 |
|
| 1048 |
-
dequal@2.0.3:
|
| 1049 |
-
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
|
| 1050 |
-
engines: {node: '>=6'}
|
| 1051 |
-
|
| 1052 |
-
detect-indent@6.1.0:
|
| 1053 |
-
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
|
| 1054 |
-
engines: {node: '>=8'}
|
| 1055 |
-
|
| 1056 |
detect-libc@1.0.3:
|
| 1057 |
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
|
| 1058 |
engines: {node: '>=0.10'}
|
|
@@ -1064,13 +1074,9 @@ packages:
|
|
| 1064 |
diff-match-patch@1.0.5:
|
| 1065 |
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
|
| 1066 |
|
| 1067 |
-
|
| 1068 |
-
resolution: {integrity: sha512-
|
| 1069 |
-
engines: {node:
|
| 1070 |
-
|
| 1071 |
-
doctrine@3.0.0:
|
| 1072 |
-
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
| 1073 |
-
engines: {node: '>=6.0.0'}
|
| 1074 |
|
| 1075 |
drange@1.1.1:
|
| 1076 |
resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==}
|
|
@@ -1083,9 +1089,6 @@ packages:
|
|
| 1083 |
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
|
| 1084 |
engines: {node: '>=10.13.0'}
|
| 1085 |
|
| 1086 |
-
es6-promise@3.3.1:
|
| 1087 |
-
resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==}
|
| 1088 |
-
|
| 1089 |
esbuild@0.21.5:
|
| 1090 |
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
|
| 1091 |
engines: {node: '>=12'}
|
|
@@ -1104,48 +1107,70 @@ packages:
|
|
| 1104 |
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
| 1105 |
engines: {node: '>=10'}
|
| 1106 |
|
| 1107 |
-
eslint-compat-utils@0.
|
| 1108 |
-
resolution: {integrity: sha512
|
| 1109 |
engines: {node: '>=12'}
|
| 1110 |
peerDependencies:
|
| 1111 |
eslint: '>=6.0.0'
|
| 1112 |
|
| 1113 |
-
eslint-config-prettier@
|
| 1114 |
-
resolution: {integrity: sha512-
|
| 1115 |
hasBin: true
|
| 1116 |
peerDependencies:
|
| 1117 |
eslint: '>=7.0.0'
|
| 1118 |
|
| 1119 |
-
eslint-plugin-
|
| 1120 |
-
resolution: {integrity: sha512-
|
| 1121 |
-
engines: {node: ^14.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1122 |
peerDependencies:
|
| 1123 |
-
eslint: ^
|
| 1124 |
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
|
| 1125 |
peerDependenciesMeta:
|
| 1126 |
svelte:
|
| 1127 |
optional: true
|
| 1128 |
|
| 1129 |
-
eslint-scope@
|
| 1130 |
-
resolution: {integrity: sha512-
|
| 1131 |
-
engines: {node: ^
|
| 1132 |
|
| 1133 |
eslint-visitor-keys@3.4.3:
|
| 1134 |
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
|
| 1135 |
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
| 1136 |
|
| 1137 |
-
eslint@
|
| 1138 |
-
resolution: {integrity: sha512-
|
| 1139 |
-
engines: {node: ^
|
| 1140 |
-
|
|
|
|
|
|
|
|
|
|
| 1141 |
hasBin: true
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1142 |
|
| 1143 |
esm-env@1.2.2:
|
| 1144 |
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
|
| 1145 |
|
| 1146 |
-
espree@
|
| 1147 |
-
resolution: {integrity: sha512-
|
| 1148 |
-
engines: {node: ^
|
| 1149 |
|
| 1150 |
esprima@4.0.1:
|
| 1151 |
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
|
|
@@ -1156,6 +1181,9 @@ packages:
|
|
| 1156 |
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
|
| 1157 |
engines: {node: '>=0.10'}
|
| 1158 |
|
|
|
|
|
|
|
|
|
|
| 1159 |
esrecurse@4.3.0:
|
| 1160 |
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
|
| 1161 |
engines: {node: '>=4.0'}
|
|
@@ -1167,9 +1195,6 @@ packages:
|
|
| 1167 |
estree-walker@2.0.2:
|
| 1168 |
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
| 1169 |
|
| 1170 |
-
estree-walker@3.0.3:
|
| 1171 |
-
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
|
| 1172 |
-
|
| 1173 |
esutils@2.0.3:
|
| 1174 |
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
| 1175 |
engines: {node: '>=0.10.0'}
|
|
@@ -1184,6 +1209,9 @@ packages:
|
|
| 1184 |
fast-deep-equal@3.1.3:
|
| 1185 |
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
| 1186 |
|
|
|
|
|
|
|
|
|
|
| 1187 |
fast-glob@3.3.3:
|
| 1188 |
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
|
| 1189 |
engines: {node: '>=8.6.0'}
|
|
@@ -1209,9 +1237,9 @@ packages:
|
|
| 1209 |
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
|
| 1210 |
engines: {node: '>=8'}
|
| 1211 |
|
| 1212 |
-
file-entry-cache@
|
| 1213 |
-
resolution: {integrity: sha512-
|
| 1214 |
-
engines: {node:
|
| 1215 |
|
| 1216 |
fill-range@7.1.1:
|
| 1217 |
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
|
@@ -1229,19 +1257,13 @@ packages:
|
|
| 1229 |
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
|
| 1230 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 1231 |
|
| 1232 |
-
flat-cache@
|
| 1233 |
-
resolution: {integrity: sha512-
|
| 1234 |
-
engines: {node:
|
| 1235 |
|
| 1236 |
flatted@3.3.3:
|
| 1237 |
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
|
| 1238 |
|
| 1239 |
-
focus-trap@7.6.4:
|
| 1240 |
-
resolution: {integrity: sha512-xx560wGBk7seZ6y933idtjJQc1l+ck+pI3sKvhKozdBV1dRZoKhkW5xoCaFv9tQiX5RH1xfSxjuNu6g+lmN/gw==}
|
| 1241 |
-
|
| 1242 |
-
fs.realpath@1.0.0:
|
| 1243 |
-
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
|
| 1244 |
-
|
| 1245 |
fsevents@2.3.3:
|
| 1246 |
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
| 1247 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
@@ -1258,25 +1280,21 @@ packages:
|
|
| 1258 |
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
| 1259 |
engines: {node: '>=10.13.0'}
|
| 1260 |
|
| 1261 |
-
glob@7.2.3:
|
| 1262 |
-
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
|
| 1263 |
-
deprecated: Glob versions prior to v9 are no longer supported
|
| 1264 |
-
|
| 1265 |
global-prefix@4.0.0:
|
| 1266 |
resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
|
| 1267 |
engines: {node: '>=16'}
|
| 1268 |
|
| 1269 |
-
globals@
|
| 1270 |
-
resolution: {integrity: sha512-
|
| 1271 |
-
engines: {node: '>=
|
| 1272 |
|
| 1273 |
globals@15.15.0:
|
| 1274 |
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
|
| 1275 |
engines: {node: '>=18'}
|
| 1276 |
|
| 1277 |
-
|
| 1278 |
-
resolution: {integrity: sha512-
|
| 1279 |
-
engines: {node: '>=
|
| 1280 |
|
| 1281 |
graceful-fs@4.2.11:
|
| 1282 |
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
|
@@ -1322,10 +1340,6 @@ packages:
|
|
| 1322 |
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
| 1323 |
engines: {node: '>=0.8.19'}
|
| 1324 |
|
| 1325 |
-
inflight@1.0.6:
|
| 1326 |
-
resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
|
| 1327 |
-
deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
|
| 1328 |
-
|
| 1329 |
inherits@2.0.4:
|
| 1330 |
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
| 1331 |
|
|
@@ -1337,10 +1351,6 @@ packages:
|
|
| 1337 |
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
|
| 1338 |
engines: {node: '>=12.0.0'}
|
| 1339 |
|
| 1340 |
-
is-binary-path@2.1.0:
|
| 1341 |
-
resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==}
|
| 1342 |
-
engines: {node: '>=8'}
|
| 1343 |
-
|
| 1344 |
is-core-module@2.16.1:
|
| 1345 |
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
|
| 1346 |
engines: {node: '>= 0.4'}
|
|
@@ -1368,10 +1378,6 @@ packages:
|
|
| 1368 |
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
| 1369 |
engines: {node: '>=0.12.0'}
|
| 1370 |
|
| 1371 |
-
is-path-inside@3.0.3:
|
| 1372 |
-
resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
|
| 1373 |
-
engines: {node: '>=8'}
|
| 1374 |
-
|
| 1375 |
is-reference@1.2.1:
|
| 1376 |
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
|
| 1377 |
|
|
@@ -1389,6 +1395,22 @@ packages:
|
|
| 1389 |
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
|
| 1390 |
engines: {node: '>=16'}
|
| 1391 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1392 |
jiti@2.4.2:
|
| 1393 |
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
|
| 1394 |
hasBin: true
|
|
@@ -1495,10 +1517,6 @@ packages:
|
|
| 1495 |
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
| 1496 |
engines: {node: '>=10'}
|
| 1497 |
|
| 1498 |
-
lilconfig@3.1.3:
|
| 1499 |
-
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
|
| 1500 |
-
engines: {node: '>=14'}
|
| 1501 |
-
|
| 1502 |
local-pkg@1.1.1:
|
| 1503 |
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
|
| 1504 |
engines: {node: '>=14'}
|
|
@@ -1527,8 +1545,11 @@ packages:
|
|
| 1527 |
magic-string@0.30.17:
|
| 1528 |
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
| 1529 |
|
| 1530 |
-
|
| 1531 |
-
resolution: {integrity: sha512-
|
|
|
|
|
|
|
|
|
|
| 1532 |
|
| 1533 |
merge2@1.4.1:
|
| 1534 |
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
|
@@ -1542,24 +1563,16 @@ packages:
|
|
| 1542 |
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
| 1543 |
engines: {node: '>=6'}
|
| 1544 |
|
| 1545 |
-
min-indent@1.0.1:
|
| 1546 |
-
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
|
| 1547 |
-
engines: {node: '>=4'}
|
| 1548 |
-
|
| 1549 |
minimatch@3.1.2:
|
| 1550 |
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
| 1551 |
|
| 1552 |
-
minimatch@9.0.
|
| 1553 |
-
resolution: {integrity: sha512-
|
| 1554 |
engines: {node: '>=16 || 14 >=14.17'}
|
| 1555 |
|
| 1556 |
minimist@1.2.8:
|
| 1557 |
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
| 1558 |
|
| 1559 |
-
mkdirp@0.5.6:
|
| 1560 |
-
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
|
| 1561 |
-
hasBin: true
|
| 1562 |
-
|
| 1563 |
mlly@1.7.4:
|
| 1564 |
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
|
| 1565 |
|
|
@@ -1590,13 +1603,6 @@ packages:
|
|
| 1590 |
natural-compare@1.4.0:
|
| 1591 |
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
| 1592 |
|
| 1593 |
-
normalize-path@3.0.0:
|
| 1594 |
-
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
|
| 1595 |
-
engines: {node: '>=0.10.0'}
|
| 1596 |
-
|
| 1597 |
-
once@1.4.0:
|
| 1598 |
-
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
|
| 1599 |
-
|
| 1600 |
onetime@5.1.2:
|
| 1601 |
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
| 1602 |
engines: {node: '>=6'}
|
|
@@ -1644,10 +1650,6 @@ packages:
|
|
| 1644 |
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
|
| 1645 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 1646 |
|
| 1647 |
-
path-is-absolute@1.0.1:
|
| 1648 |
-
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
| 1649 |
-
engines: {node: '>=0.10.0'}
|
| 1650 |
-
|
| 1651 |
path-key@3.1.1:
|
| 1652 |
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
| 1653 |
engines: {node: '>=8'}
|
|
@@ -1655,19 +1657,12 @@ packages:
|
|
| 1655 |
path-parse@1.0.7:
|
| 1656 |
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
| 1657 |
|
| 1658 |
-
path-type@4.0.0:
|
| 1659 |
-
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
|
| 1660 |
-
engines: {node: '>=8'}
|
| 1661 |
-
|
| 1662 |
pathe@1.1.2:
|
| 1663 |
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
|
| 1664 |
|
| 1665 |
pathe@2.0.3:
|
| 1666 |
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
|
| 1667 |
|
| 1668 |
-
periscopic@3.1.0:
|
| 1669 |
-
resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==}
|
| 1670 |
-
|
| 1671 |
picocolors@1.1.1:
|
| 1672 |
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
| 1673 |
|
|
@@ -1701,23 +1696,11 @@ packages:
|
|
| 1701 |
ts-node:
|
| 1702 |
optional: true
|
| 1703 |
|
| 1704 |
-
postcss-
|
| 1705 |
-
resolution: {integrity: sha512-
|
| 1706 |
-
engines: {node: '>=
|
| 1707 |
peerDependencies:
|
| 1708 |
-
postcss:
|
| 1709 |
-
ts-node: '>=9.0.0'
|
| 1710 |
-
peerDependenciesMeta:
|
| 1711 |
-
postcss:
|
| 1712 |
-
optional: true
|
| 1713 |
-
ts-node:
|
| 1714 |
-
optional: true
|
| 1715 |
-
|
| 1716 |
-
postcss-safe-parser@6.0.0:
|
| 1717 |
-
resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==}
|
| 1718 |
-
engines: {node: '>=12.0'}
|
| 1719 |
-
peerDependencies:
|
| 1720 |
-
postcss: ^8.3.3
|
| 1721 |
|
| 1722 |
postcss-scss@4.0.9:
|
| 1723 |
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
|
|
@@ -1725,8 +1708,8 @@ packages:
|
|
| 1725 |
peerDependencies:
|
| 1726 |
postcss: ^8.4.29
|
| 1727 |
|
| 1728 |
-
postcss-selector-parser@
|
| 1729 |
-
resolution: {integrity: sha512-
|
| 1730 |
engines: {node: '>=4'}
|
| 1731 |
|
| 1732 |
postcss@8.5.3:
|
|
@@ -1737,6 +1720,10 @@ packages:
|
|
| 1737 |
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
| 1738 |
engines: {node: '>= 0.8.0'}
|
| 1739 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1740 |
prettier-plugin-svelte@3.3.3:
|
| 1741 |
resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==}
|
| 1742 |
peerDependencies:
|
|
@@ -1803,6 +1790,10 @@ packages:
|
|
| 1803 |
engines: {node: '>=14'}
|
| 1804 |
hasBin: true
|
| 1805 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1806 |
punycode@2.3.1:
|
| 1807 |
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
| 1808 |
engines: {node: '>=6'}
|
|
@@ -1817,13 +1808,16 @@ packages:
|
|
| 1817 |
resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
|
| 1818 |
engines: {node: '>=4'}
|
| 1819 |
|
|
|
|
|
|
|
|
|
|
| 1820 |
readable-stream@3.6.2:
|
| 1821 |
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
| 1822 |
engines: {node: '>= 6'}
|
| 1823 |
|
| 1824 |
-
readdirp@
|
| 1825 |
-
resolution: {integrity: sha512-
|
| 1826 |
-
engines: {node: '>=
|
| 1827 |
|
| 1828 |
repeat-string@1.6.1:
|
| 1829 |
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
|
|
@@ -1850,16 +1844,6 @@ packages:
|
|
| 1850 |
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
|
| 1851 |
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
| 1852 |
|
| 1853 |
-
rimraf@2.7.1:
|
| 1854 |
-
resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==}
|
| 1855 |
-
deprecated: Rimraf versions prior to v4 are no longer supported
|
| 1856 |
-
hasBin: true
|
| 1857 |
-
|
| 1858 |
-
rimraf@3.0.2:
|
| 1859 |
-
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
|
| 1860 |
-
deprecated: Rimraf versions prior to v4 are no longer supported
|
| 1861 |
-
hasBin: true
|
| 1862 |
-
|
| 1863 |
rollup@4.34.9:
|
| 1864 |
resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==}
|
| 1865 |
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
|
@@ -1872,6 +1856,16 @@ packages:
|
|
| 1872 |
run-parallel@1.2.0:
|
| 1873 |
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
| 1874 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1875 |
rxjs@7.8.2:
|
| 1876 |
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
|
| 1877 |
|
|
@@ -1885,9 +1879,6 @@ packages:
|
|
| 1885 |
safer-buffer@2.1.2:
|
| 1886 |
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
| 1887 |
|
| 1888 |
-
sander@0.5.1:
|
| 1889 |
-
resolution: {integrity: sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==}
|
| 1890 |
-
|
| 1891 |
semver@7.7.1:
|
| 1892 |
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
|
| 1893 |
engines: {node: '>=10'}
|
|
@@ -1911,14 +1902,6 @@ packages:
|
|
| 1911 |
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
|
| 1912 |
engines: {node: '>=18'}
|
| 1913 |
|
| 1914 |
-
slash@3.0.0:
|
| 1915 |
-
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
|
| 1916 |
-
engines: {node: '>=8'}
|
| 1917 |
-
|
| 1918 |
-
sorcery@0.11.1:
|
| 1919 |
-
resolution: {integrity: sha512-o7npfeJE6wi6J9l0/5LKshFzZ2rMatRiCDwYeDQaOzqdzRJwALhX7mk/A/ecg6wjMu7wdZbmXfD2S/vpOg0bdQ==}
|
| 1920 |
-
hasBin: true
|
| 1921 |
-
|
| 1922 |
source-map-js@1.2.1:
|
| 1923 |
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
| 1924 |
engines: {node: '>=0.10.0'}
|
|
@@ -1934,10 +1917,6 @@ packages:
|
|
| 1934 |
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
| 1935 |
engines: {node: '>=8'}
|
| 1936 |
|
| 1937 |
-
strip-indent@3.0.0:
|
| 1938 |
-
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
|
| 1939 |
-
engines: {node: '>=8'}
|
| 1940 |
-
|
| 1941 |
strip-json-comments@3.1.1:
|
| 1942 |
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
| 1943 |
engines: {node: '>=8'}
|
|
@@ -1950,70 +1929,30 @@ packages:
|
|
| 1950 |
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
| 1951 |
engines: {node: '>= 0.4'}
|
| 1952 |
|
| 1953 |
-
svelte-check@
|
| 1954 |
-
resolution: {integrity: sha512-
|
|
|
|
| 1955 |
hasBin: true
|
| 1956 |
peerDependencies:
|
| 1957 |
-
svelte: ^
|
|
|
|
| 1958 |
|
| 1959 |
-
svelte-eslint-parser@
|
| 1960 |
-
resolution: {integrity: sha512-
|
| 1961 |
-
engines: {node: ^
|
| 1962 |
peerDependencies:
|
| 1963 |
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
|
| 1964 |
peerDependenciesMeta:
|
| 1965 |
svelte:
|
| 1966 |
optional: true
|
| 1967 |
|
| 1968 |
-
svelte
|
| 1969 |
-
resolution: {integrity: sha512-
|
| 1970 |
-
engines: {node:
|
| 1971 |
-
peerDependencies:
|
| 1972 |
-
svelte: ^3.19.0 || ^4.0.0
|
| 1973 |
-
|
| 1974 |
-
svelte-preprocess@5.1.4:
|
| 1975 |
-
resolution: {integrity: sha512-IvnbQ6D6Ao3Gg6ftiM5tdbR6aAETwjhHV+UKGf5bHGYR69RQvF1ho0JKPcbUON4vy4R7zom13jPjgdOWCQ5hDA==}
|
| 1976 |
-
engines: {node: '>= 16.0.0'}
|
| 1977 |
-
peerDependencies:
|
| 1978 |
-
'@babel/core': ^7.10.2
|
| 1979 |
-
coffeescript: ^2.5.1
|
| 1980 |
-
less: ^3.11.3 || ^4.0.0
|
| 1981 |
-
postcss: ^7 || ^8
|
| 1982 |
-
postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
|
| 1983 |
-
pug: ^3.0.0
|
| 1984 |
-
sass: ^1.26.8
|
| 1985 |
-
stylus: ^0.55.0
|
| 1986 |
-
sugarss: ^2.0.0 || ^3.0.0 || ^4.0.0
|
| 1987 |
-
svelte: ^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0
|
| 1988 |
-
typescript: '>=3.9.5 || ^4.0.0 || ^5.0.0'
|
| 1989 |
-
peerDependenciesMeta:
|
| 1990 |
-
'@babel/core':
|
| 1991 |
-
optional: true
|
| 1992 |
-
coffeescript:
|
| 1993 |
-
optional: true
|
| 1994 |
-
less:
|
| 1995 |
-
optional: true
|
| 1996 |
-
postcss:
|
| 1997 |
-
optional: true
|
| 1998 |
-
postcss-load-config:
|
| 1999 |
-
optional: true
|
| 2000 |
-
pug:
|
| 2001 |
-
optional: true
|
| 2002 |
-
sass:
|
| 2003 |
-
optional: true
|
| 2004 |
-
stylus:
|
| 2005 |
-
optional: true
|
| 2006 |
-
sugarss:
|
| 2007 |
-
optional: true
|
| 2008 |
-
typescript:
|
| 2009 |
-
optional: true
|
| 2010 |
-
|
| 2011 |
-
svelte@4.2.19:
|
| 2012 |
-
resolution: {integrity: sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==}
|
| 2013 |
-
engines: {node: '>=16'}
|
| 2014 |
|
| 2015 |
-
|
| 2016 |
-
resolution: {integrity: sha512-
|
|
|
|
| 2017 |
|
| 2018 |
tailwind-merge@3.0.2:
|
| 2019 |
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
|
|
@@ -2025,9 +1964,6 @@ packages:
|
|
| 2025 |
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
| 2026 |
engines: {node: '>=6'}
|
| 2027 |
|
| 2028 |
-
text-table@0.2.0:
|
| 2029 |
-
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
| 2030 |
-
|
| 2031 |
through@2.3.8:
|
| 2032 |
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
|
| 2033 |
|
|
@@ -2046,11 +1982,11 @@ packages:
|
|
| 2046 |
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
| 2047 |
engines: {node: '>=6'}
|
| 2048 |
|
| 2049 |
-
ts-api-utils@
|
| 2050 |
-
resolution: {integrity: sha512-
|
| 2051 |
-
engines: {node: '>=
|
| 2052 |
peerDependencies:
|
| 2053 |
-
typescript: '>=4.
|
| 2054 |
|
| 2055 |
ts-patch@3.3.0:
|
| 2056 |
resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
|
|
@@ -2063,10 +1999,6 @@ packages:
|
|
| 2063 |
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
| 2064 |
engines: {node: '>= 0.8.0'}
|
| 2065 |
|
| 2066 |
-
type-fest@0.20.2:
|
| 2067 |
-
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
|
| 2068 |
-
engines: {node: '>=10'}
|
| 2069 |
-
|
| 2070 |
type-fest@0.21.3:
|
| 2071 |
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
|
| 2072 |
engines: {node: '>=10'}
|
|
@@ -2075,6 +2007,13 @@ packages:
|
|
| 2075 |
resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
|
| 2076 |
engines: {node: '>=16'}
|
| 2077 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2078 |
typescript@5.6.3:
|
| 2079 |
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
|
| 2080 |
engines: {node: '>=14.17'}
|
|
@@ -2210,10 +2149,10 @@ packages:
|
|
| 2210 |
yaml:
|
| 2211 |
optional: true
|
| 2212 |
|
| 2213 |
-
vitefu@0.
|
| 2214 |
-
resolution: {integrity: sha512
|
| 2215 |
peerDependencies:
|
| 2216 |
-
vite: ^3.0.0 || ^4.0.0 || ^5.0.0
|
| 2217 |
peerDependenciesMeta:
|
| 2218 |
vite:
|
| 2219 |
optional: true
|
|
@@ -2242,9 +2181,6 @@ packages:
|
|
| 2242 |
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
| 2243 |
engines: {node: '>=8'}
|
| 2244 |
|
| 2245 |
-
wrappy@1.0.2:
|
| 2246 |
-
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
|
| 2247 |
-
|
| 2248 |
yaml@1.10.2:
|
| 2249 |
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
| 2250 |
engines: {node: '>= 6'}
|
|
@@ -2262,6 +2198,9 @@ packages:
|
|
| 2262 |
resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
|
| 2263 |
engines: {node: '>=12.20'}
|
| 2264 |
|
|
|
|
|
|
|
|
|
|
| 2265 |
snapshots:
|
| 2266 |
|
| 2267 |
'@alloc/quick-lru@5.2.0': {}
|
|
@@ -2422,19 +2361,33 @@ snapshots:
|
|
| 2422 |
'@esbuild/win32-x64@0.25.1':
|
| 2423 |
optional: true
|
| 2424 |
|
| 2425 |
-
'@eslint-community/eslint-utils@4.4.1(eslint@
|
| 2426 |
dependencies:
|
| 2427 |
-
eslint:
|
| 2428 |
eslint-visitor-keys: 3.4.3
|
| 2429 |
|
| 2430 |
'@eslint-community/regexpp@4.12.1': {}
|
| 2431 |
|
| 2432 |
-
'@eslint/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2433 |
dependencies:
|
| 2434 |
ajv: 6.12.6
|
| 2435 |
debug: 4.4.0
|
| 2436 |
-
espree:
|
| 2437 |
-
globals:
|
| 2438 |
ignore: 5.3.2
|
| 2439 |
import-fresh: 3.3.1
|
| 2440 |
js-yaml: 4.1.0
|
|
@@ -2443,7 +2396,14 @@ snapshots:
|
|
| 2443 |
transitivePeerDependencies:
|
| 2444 |
- supports-color
|
| 2445 |
|
| 2446 |
-
'@eslint/js@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2447 |
|
| 2448 |
'@floating-ui/core@1.6.9':
|
| 2449 |
dependencies:
|
|
@@ -2468,22 +2428,27 @@ snapshots:
|
|
| 2468 |
|
| 2469 |
'@huggingface/tasks@0.17.1': {}
|
| 2470 |
|
| 2471 |
-
'@
|
|
|
|
|
|
|
| 2472 |
dependencies:
|
| 2473 |
-
'@
|
| 2474 |
-
|
| 2475 |
-
minimatch: 3.1.2
|
| 2476 |
-
transitivePeerDependencies:
|
| 2477 |
-
- supports-color
|
| 2478 |
|
| 2479 |
'@humanwhocodes/module-importer@1.0.1': {}
|
| 2480 |
|
| 2481 |
-
'@humanwhocodes/
|
|
|
|
|
|
|
| 2482 |
|
| 2483 |
'@iconify-json/carbon@1.2.8':
|
| 2484 |
dependencies:
|
| 2485 |
'@iconify/types': 2.0.0
|
| 2486 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2487 |
'@iconify/types@2.0.0': {}
|
| 2488 |
|
| 2489 |
'@iconify/utils@2.3.0':
|
|
@@ -2499,9 +2464,9 @@ snapshots:
|
|
| 2499 |
transitivePeerDependencies:
|
| 2500 |
- supports-color
|
| 2501 |
|
| 2502 |
-
'@
|
| 2503 |
dependencies:
|
| 2504 |
-
'@
|
| 2505 |
|
| 2506 |
'@jridgewell/gen-mapping@0.3.8':
|
| 2507 |
dependencies:
|
|
@@ -2520,16 +2485,6 @@ snapshots:
|
|
| 2520 |
'@jridgewell/resolve-uri': 3.1.2
|
| 2521 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 2522 |
|
| 2523 |
-
'@melt-ui/svelte@0.86.3(svelte@4.2.19)':
|
| 2524 |
-
dependencies:
|
| 2525 |
-
'@floating-ui/core': 1.6.9
|
| 2526 |
-
'@floating-ui/dom': 1.6.13
|
| 2527 |
-
'@internationalized/date': 3.7.0
|
| 2528 |
-
dequal: 2.0.3
|
| 2529 |
-
focus-trap: 7.6.4
|
| 2530 |
-
nanoid: 5.1.2
|
| 2531 |
-
svelte: 4.2.19
|
| 2532 |
-
|
| 2533 |
'@nodelib/fs.scandir@2.1.5':
|
| 2534 |
dependencies:
|
| 2535 |
'@nodelib/fs.stat': 2.0.5
|
|
@@ -2542,6 +2497,8 @@ snapshots:
|
|
| 2542 |
'@nodelib/fs.scandir': 2.1.5
|
| 2543 |
fastq: 1.19.1
|
| 2544 |
|
|
|
|
|
|
|
| 2545 |
'@polka/url@1.0.0-next.28': {}
|
| 2546 |
|
| 2547 |
'@rollup/plugin-commonjs@28.0.2(rollup@4.34.9)':
|
|
@@ -2669,22 +2626,28 @@ snapshots:
|
|
| 2669 |
|
| 2670 |
'@samchon/openapi@3.0.0': {}
|
| 2671 |
|
| 2672 |
-
'@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2673 |
dependencies:
|
| 2674 |
-
'@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@
|
| 2675 |
import-meta-resolve: 4.1.0
|
| 2676 |
|
| 2677 |
-
'@sveltejs/adapter-node@5.2.12(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@
|
| 2678 |
dependencies:
|
| 2679 |
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.9)
|
| 2680 |
'@rollup/plugin-json': 6.1.0(rollup@4.34.9)
|
| 2681 |
'@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9)
|
| 2682 |
-
'@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@
|
| 2683 |
rollup: 4.34.9
|
| 2684 |
|
| 2685 |
-
'@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@
|
| 2686 |
dependencies:
|
| 2687 |
-
'@sveltejs/vite-plugin-svelte':
|
| 2688 |
'@types/cookie': 0.6.0
|
| 2689 |
cookie: 0.6.0
|
| 2690 |
devalue: 5.1.1
|
|
@@ -2696,36 +2659,31 @@ snapshots:
|
|
| 2696 |
sade: 1.8.1
|
| 2697 |
set-cookie-parser: 2.7.1
|
| 2698 |
sirv: 3.0.1
|
| 2699 |
-
svelte:
|
| 2700 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2701 |
|
| 2702 |
-
'@sveltejs/vite-plugin-svelte-inspector@
|
| 2703 |
dependencies:
|
| 2704 |
-
'@sveltejs/vite-plugin-svelte':
|
| 2705 |
debug: 4.4.0
|
| 2706 |
-
svelte:
|
| 2707 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2708 |
transitivePeerDependencies:
|
| 2709 |
- supports-color
|
| 2710 |
|
| 2711 |
-
'@sveltejs/vite-plugin-svelte@
|
| 2712 |
dependencies:
|
| 2713 |
-
'@sveltejs/vite-plugin-svelte-inspector':
|
| 2714 |
debug: 4.4.0
|
| 2715 |
deepmerge: 4.3.1
|
| 2716 |
kleur: 4.1.5
|
| 2717 |
magic-string: 0.30.17
|
| 2718 |
-
svelte:
|
| 2719 |
-
svelte-hmr: 0.16.0(svelte@4.2.19)
|
| 2720 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2721 |
-
vitefu: 0.
|
| 2722 |
transitivePeerDependencies:
|
| 2723 |
- supports-color
|
| 2724 |
|
| 2725 |
-
'@swc/helpers@0.5.15':
|
| 2726 |
-
dependencies:
|
| 2727 |
-
tslib: 2.8.1
|
| 2728 |
-
|
| 2729 |
'@tailwindcss/container-queries@0.1.1(tailwindcss@4.0.9)':
|
| 2730 |
dependencies:
|
| 2731 |
tailwindcss: 4.0.9
|
|
@@ -2798,99 +2756,84 @@ snapshots:
|
|
| 2798 |
|
| 2799 |
'@types/json-schema@7.0.15': {}
|
| 2800 |
|
| 2801 |
-
'@types/pug@2.0.10': {}
|
| 2802 |
-
|
| 2803 |
'@types/resolve@1.20.2': {}
|
| 2804 |
|
| 2805 |
-
'@
|
| 2806 |
-
|
| 2807 |
-
'@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.8.2))(eslint@8.57.1)(typescript@5.8.2)':
|
| 2808 |
dependencies:
|
| 2809 |
'@eslint-community/regexpp': 4.12.1
|
| 2810 |
-
'@typescript-eslint/parser':
|
| 2811 |
-
'@typescript-eslint/scope-manager':
|
| 2812 |
-
'@typescript-eslint/type-utils':
|
| 2813 |
-
'@typescript-eslint/utils':
|
| 2814 |
-
'@typescript-eslint/visitor-keys':
|
| 2815 |
-
|
| 2816 |
-
eslint: 8.57.1
|
| 2817 |
graphemer: 1.4.0
|
| 2818 |
ignore: 5.3.2
|
| 2819 |
natural-compare: 1.4.0
|
| 2820 |
-
|
| 2821 |
-
ts-api-utils: 1.4.3(typescript@5.8.2)
|
| 2822 |
-
optionalDependencies:
|
| 2823 |
typescript: 5.8.2
|
| 2824 |
transitivePeerDependencies:
|
| 2825 |
- supports-color
|
| 2826 |
|
| 2827 |
-
'@typescript-eslint/parser@
|
| 2828 |
dependencies:
|
| 2829 |
-
'@typescript-eslint/scope-manager':
|
| 2830 |
-
'@typescript-eslint/types':
|
| 2831 |
-
'@typescript-eslint/typescript-estree':
|
| 2832 |
-
'@typescript-eslint/visitor-keys':
|
| 2833 |
debug: 4.4.0
|
| 2834 |
-
eslint:
|
| 2835 |
-
optionalDependencies:
|
| 2836 |
typescript: 5.8.2
|
| 2837 |
transitivePeerDependencies:
|
| 2838 |
- supports-color
|
| 2839 |
|
| 2840 |
-
'@typescript-eslint/scope-manager@
|
| 2841 |
dependencies:
|
| 2842 |
-
'@typescript-eslint/types':
|
| 2843 |
-
'@typescript-eslint/visitor-keys':
|
| 2844 |
|
| 2845 |
-
'@typescript-eslint/type-utils@
|
| 2846 |
dependencies:
|
| 2847 |
-
'@typescript-eslint/typescript-estree':
|
| 2848 |
-
'@typescript-eslint/utils':
|
| 2849 |
debug: 4.4.0
|
| 2850 |
-
eslint:
|
| 2851 |
-
ts-api-utils:
|
| 2852 |
-
optionalDependencies:
|
| 2853 |
typescript: 5.8.2
|
| 2854 |
transitivePeerDependencies:
|
| 2855 |
- supports-color
|
| 2856 |
|
| 2857 |
-
'@typescript-eslint/types@
|
| 2858 |
|
| 2859 |
-
'@typescript-eslint/typescript-estree@
|
| 2860 |
dependencies:
|
| 2861 |
-
'@typescript-eslint/types':
|
| 2862 |
-
'@typescript-eslint/visitor-keys':
|
| 2863 |
debug: 4.4.0
|
| 2864 |
-
|
| 2865 |
is-glob: 4.0.3
|
| 2866 |
-
minimatch: 9.0.
|
| 2867 |
semver: 7.7.1
|
| 2868 |
-
ts-api-utils:
|
| 2869 |
-
optionalDependencies:
|
| 2870 |
typescript: 5.8.2
|
| 2871 |
transitivePeerDependencies:
|
| 2872 |
- supports-color
|
| 2873 |
|
| 2874 |
-
'@typescript-eslint/utils@
|
| 2875 |
dependencies:
|
| 2876 |
-
'@eslint-community/eslint-utils': 4.4.1(eslint@
|
| 2877 |
-
'@
|
| 2878 |
-
'@types
|
| 2879 |
-
'@typescript-eslint/
|
| 2880 |
-
|
| 2881 |
-
|
| 2882 |
-
eslint: 8.57.1
|
| 2883 |
-
semver: 7.7.1
|
| 2884 |
transitivePeerDependencies:
|
| 2885 |
- supports-color
|
| 2886 |
-
- typescript
|
| 2887 |
|
| 2888 |
-
'@typescript-eslint/visitor-keys@
|
| 2889 |
dependencies:
|
| 2890 |
-
'@typescript-eslint/types':
|
| 2891 |
-
eslint-visitor-keys:
|
| 2892 |
-
|
| 2893 |
-
'@ungap/structured-clone@1.3.0': {}
|
| 2894 |
|
| 2895 |
acorn-jsx@5.3.2(acorn@8.14.0):
|
| 2896 |
dependencies:
|
|
@@ -2915,10 +2858,7 @@ snapshots:
|
|
| 2915 |
dependencies:
|
| 2916 |
color-convert: 2.0.1
|
| 2917 |
|
| 2918 |
-
|
| 2919 |
-
dependencies:
|
| 2920 |
-
normalize-path: 3.0.0
|
| 2921 |
-
picomatch: 2.3.1
|
| 2922 |
|
| 2923 |
argparse@2.0.1: {}
|
| 2924 |
|
|
@@ -2926,7 +2866,7 @@ snapshots:
|
|
| 2926 |
|
| 2927 |
array-timsort@1.0.3: {}
|
| 2928 |
|
| 2929 |
-
|
| 2930 |
|
| 2931 |
axobject-query@4.1.0: {}
|
| 2932 |
|
|
@@ -2934,8 +2874,6 @@ snapshots:
|
|
| 2934 |
|
| 2935 |
base64-js@1.5.1: {}
|
| 2936 |
|
| 2937 |
-
binary-extensions@2.3.0: {}
|
| 2938 |
-
|
| 2939 |
bl@4.1.0:
|
| 2940 |
dependencies:
|
| 2941 |
buffer: 5.7.1
|
|
@@ -2955,8 +2893,6 @@ snapshots:
|
|
| 2955 |
dependencies:
|
| 2956 |
fill-range: 7.1.1
|
| 2957 |
|
| 2958 |
-
buffer-crc32@1.0.0: {}
|
| 2959 |
-
|
| 2960 |
buffer@5.7.1:
|
| 2961 |
dependencies:
|
| 2962 |
base64-js: 1.5.1
|
|
@@ -2971,17 +2907,9 @@ snapshots:
|
|
| 2971 |
|
| 2972 |
chardet@0.7.0: {}
|
| 2973 |
|
| 2974 |
-
chokidar@
|
| 2975 |
dependencies:
|
| 2976 |
-
|
| 2977 |
-
braces: 3.0.3
|
| 2978 |
-
glob-parent: 5.1.2
|
| 2979 |
-
is-binary-path: 2.1.0
|
| 2980 |
-
is-glob: 4.0.3
|
| 2981 |
-
normalize-path: 3.0.0
|
| 2982 |
-
readdirp: 3.6.0
|
| 2983 |
-
optionalDependencies:
|
| 2984 |
-
fsevents: 2.3.3
|
| 2985 |
|
| 2986 |
cli-cursor@3.1.0:
|
| 2987 |
dependencies:
|
|
@@ -2995,14 +2923,6 @@ snapshots:
|
|
| 2995 |
|
| 2996 |
clsx@2.1.1: {}
|
| 2997 |
|
| 2998 |
-
code-red@1.0.4:
|
| 2999 |
-
dependencies:
|
| 3000 |
-
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3001 |
-
'@types/estree': 1.0.6
|
| 3002 |
-
acorn: 8.14.0
|
| 3003 |
-
estree-walker: 3.0.3
|
| 3004 |
-
periscopic: 3.1.0
|
| 3005 |
-
|
| 3006 |
color-convert@2.0.1:
|
| 3007 |
dependencies:
|
| 3008 |
color-name: 1.1.4
|
|
@@ -3041,11 +2961,6 @@ snapshots:
|
|
| 3041 |
shebang-command: 2.0.0
|
| 3042 |
which: 2.0.2
|
| 3043 |
|
| 3044 |
-
css-tree@2.3.1:
|
| 3045 |
-
dependencies:
|
| 3046 |
-
mdn-data: 2.0.30
|
| 3047 |
-
source-map-js: 1.2.1
|
| 3048 |
-
|
| 3049 |
cssesc@3.0.0: {}
|
| 3050 |
|
| 3051 |
debug@4.4.0:
|
|
@@ -3062,23 +2977,13 @@ snapshots:
|
|
| 3062 |
|
| 3063 |
defu@6.1.4: {}
|
| 3064 |
|
| 3065 |
-
dequal@2.0.3: {}
|
| 3066 |
-
|
| 3067 |
-
detect-indent@6.1.0: {}
|
| 3068 |
-
|
| 3069 |
detect-libc@1.0.3: {}
|
| 3070 |
|
| 3071 |
devalue@5.1.1: {}
|
| 3072 |
|
| 3073 |
diff-match-patch@1.0.5: {}
|
| 3074 |
|
| 3075 |
-
|
| 3076 |
-
dependencies:
|
| 3077 |
-
path-type: 4.0.0
|
| 3078 |
-
|
| 3079 |
-
doctrine@3.0.0:
|
| 3080 |
-
dependencies:
|
| 3081 |
-
esutils: 2.0.3
|
| 3082 |
|
| 3083 |
drange@1.1.1: {}
|
| 3084 |
|
|
@@ -3089,8 +2994,6 @@ snapshots:
|
|
| 3089 |
graceful-fs: 4.2.11
|
| 3090 |
tapable: 2.2.1
|
| 3091 |
|
| 3092 |
-
es6-promise@3.3.1: {}
|
| 3093 |
-
|
| 3094 |
esbuild@0.21.5:
|
| 3095 |
optionalDependencies:
|
| 3096 |
'@esbuild/aix-ppc64': 0.21.5
|
|
@@ -3149,91 +3052,100 @@ snapshots:
|
|
| 3149 |
|
| 3150 |
escape-string-regexp@4.0.0: {}
|
| 3151 |
|
| 3152 |
-
eslint-compat-utils@0.
|
| 3153 |
dependencies:
|
| 3154 |
-
eslint:
|
| 3155 |
semver: 7.7.1
|
| 3156 |
|
| 3157 |
-
eslint-config-prettier@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3158 |
dependencies:
|
| 3159 |
-
eslint:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3160 |
|
| 3161 |
-
eslint-plugin-svelte@
|
| 3162 |
dependencies:
|
| 3163 |
-
'@eslint-community/eslint-utils': 4.4.1(eslint@
|
| 3164 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3165 |
-
eslint:
|
| 3166 |
-
eslint-compat-utils: 0.
|
| 3167 |
esutils: 2.0.3
|
| 3168 |
known-css-properties: 0.35.0
|
| 3169 |
postcss: 8.5.3
|
| 3170 |
postcss-load-config: 3.1.4(postcss@8.5.3)
|
| 3171 |
-
postcss-safe-parser:
|
| 3172 |
-
postcss-selector-parser: 6.1.2
|
| 3173 |
semver: 7.7.1
|
| 3174 |
-
svelte-eslint-parser:
|
| 3175 |
optionalDependencies:
|
| 3176 |
-
svelte:
|
| 3177 |
transitivePeerDependencies:
|
| 3178 |
- ts-node
|
| 3179 |
|
| 3180 |
-
eslint-scope@
|
| 3181 |
dependencies:
|
| 3182 |
esrecurse: 4.3.0
|
| 3183 |
estraverse: 5.3.0
|
| 3184 |
|
| 3185 |
eslint-visitor-keys@3.4.3: {}
|
| 3186 |
|
| 3187 |
-
eslint@
|
|
|
|
|
|
|
| 3188 |
dependencies:
|
| 3189 |
-
'@eslint-community/eslint-utils': 4.4.1(eslint@
|
| 3190 |
'@eslint-community/regexpp': 4.12.1
|
| 3191 |
-
'@eslint/
|
| 3192 |
-
'@eslint/
|
| 3193 |
-
'@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3194 |
'@humanwhocodes/module-importer': 1.0.1
|
| 3195 |
-
'@
|
| 3196 |
-
'@
|
|
|
|
| 3197 |
ajv: 6.12.6
|
| 3198 |
chalk: 4.1.2
|
| 3199 |
cross-spawn: 7.0.6
|
| 3200 |
debug: 4.4.0
|
| 3201 |
-
doctrine: 3.0.0
|
| 3202 |
escape-string-regexp: 4.0.0
|
| 3203 |
-
eslint-scope:
|
| 3204 |
-
eslint-visitor-keys:
|
| 3205 |
-
espree:
|
| 3206 |
esquery: 1.6.0
|
| 3207 |
esutils: 2.0.3
|
| 3208 |
fast-deep-equal: 3.1.3
|
| 3209 |
-
file-entry-cache:
|
| 3210 |
find-up: 5.0.0
|
| 3211 |
glob-parent: 6.0.2
|
| 3212 |
-
globals: 13.24.0
|
| 3213 |
-
graphemer: 1.4.0
|
| 3214 |
ignore: 5.3.2
|
| 3215 |
imurmurhash: 0.1.4
|
| 3216 |
is-glob: 4.0.3
|
| 3217 |
-
is-path-inside: 3.0.3
|
| 3218 |
-
js-yaml: 4.1.0
|
| 3219 |
json-stable-stringify-without-jsonify: 1.0.1
|
| 3220 |
-
levn: 0.4.1
|
| 3221 |
lodash.merge: 4.6.2
|
| 3222 |
minimatch: 3.1.2
|
| 3223 |
natural-compare: 1.4.0
|
| 3224 |
optionator: 0.9.4
|
| 3225 |
-
|
| 3226 |
-
|
| 3227 |
transitivePeerDependencies:
|
| 3228 |
- supports-color
|
| 3229 |
|
| 3230 |
esm-env@1.2.2: {}
|
| 3231 |
|
| 3232 |
-
espree@
|
| 3233 |
dependencies:
|
| 3234 |
acorn: 8.14.0
|
| 3235 |
acorn-jsx: 5.3.2(acorn@8.14.0)
|
| 3236 |
-
eslint-visitor-keys:
|
| 3237 |
|
| 3238 |
esprima@4.0.1: {}
|
| 3239 |
|
|
@@ -3241,6 +3153,10 @@ snapshots:
|
|
| 3241 |
dependencies:
|
| 3242 |
estraverse: 5.3.0
|
| 3243 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3244 |
esrecurse@4.3.0:
|
| 3245 |
dependencies:
|
| 3246 |
estraverse: 5.3.0
|
|
@@ -3249,10 +3165,6 @@ snapshots:
|
|
| 3249 |
|
| 3250 |
estree-walker@2.0.2: {}
|
| 3251 |
|
| 3252 |
-
estree-walker@3.0.3:
|
| 3253 |
-
dependencies:
|
| 3254 |
-
'@types/estree': 1.0.6
|
| 3255 |
-
|
| 3256 |
esutils@2.0.3: {}
|
| 3257 |
|
| 3258 |
exsolve@1.0.4: {}
|
|
@@ -3265,6 +3177,8 @@ snapshots:
|
|
| 3265 |
|
| 3266 |
fast-deep-equal@3.1.3: {}
|
| 3267 |
|
|
|
|
|
|
|
| 3268 |
fast-glob@3.3.3:
|
| 3269 |
dependencies:
|
| 3270 |
'@nodelib/fs.stat': 2.0.5
|
|
@@ -3289,9 +3203,9 @@ snapshots:
|
|
| 3289 |
dependencies:
|
| 3290 |
escape-string-regexp: 1.0.5
|
| 3291 |
|
| 3292 |
-
file-entry-cache@
|
| 3293 |
dependencies:
|
| 3294 |
-
flat-cache:
|
| 3295 |
|
| 3296 |
fill-range@7.1.1:
|
| 3297 |
dependencies:
|
|
@@ -3312,20 +3226,13 @@ snapshots:
|
|
| 3312 |
locate-path: 7.2.0
|
| 3313 |
path-exists: 5.0.0
|
| 3314 |
|
| 3315 |
-
flat-cache@
|
| 3316 |
dependencies:
|
| 3317 |
flatted: 3.3.3
|
| 3318 |
keyv: 4.5.4
|
| 3319 |
-
rimraf: 3.0.2
|
| 3320 |
|
| 3321 |
flatted@3.3.3: {}
|
| 3322 |
|
| 3323 |
-
focus-trap@7.6.4:
|
| 3324 |
-
dependencies:
|
| 3325 |
-
tabbable: 6.2.0
|
| 3326 |
-
|
| 3327 |
-
fs.realpath@1.0.0: {}
|
| 3328 |
-
|
| 3329 |
fsevents@2.3.3:
|
| 3330 |
optional: true
|
| 3331 |
|
|
@@ -3339,35 +3246,17 @@ snapshots:
|
|
| 3339 |
dependencies:
|
| 3340 |
is-glob: 4.0.3
|
| 3341 |
|
| 3342 |
-
glob@7.2.3:
|
| 3343 |
-
dependencies:
|
| 3344 |
-
fs.realpath: 1.0.0
|
| 3345 |
-
inflight: 1.0.6
|
| 3346 |
-
inherits: 2.0.4
|
| 3347 |
-
minimatch: 3.1.2
|
| 3348 |
-
once: 1.4.0
|
| 3349 |
-
path-is-absolute: 1.0.1
|
| 3350 |
-
|
| 3351 |
global-prefix@4.0.0:
|
| 3352 |
dependencies:
|
| 3353 |
ini: 4.1.3
|
| 3354 |
kind-of: 6.0.3
|
| 3355 |
which: 4.0.0
|
| 3356 |
|
| 3357 |
-
globals@
|
| 3358 |
-
dependencies:
|
| 3359 |
-
type-fest: 0.20.2
|
| 3360 |
|
| 3361 |
globals@15.15.0: {}
|
| 3362 |
|
| 3363 |
-
|
| 3364 |
-
dependencies:
|
| 3365 |
-
array-union: 2.1.0
|
| 3366 |
-
dir-glob: 3.0.1
|
| 3367 |
-
fast-glob: 3.3.3
|
| 3368 |
-
ignore: 5.3.2
|
| 3369 |
-
merge2: 1.4.1
|
| 3370 |
-
slash: 3.0.0
|
| 3371 |
|
| 3372 |
graceful-fs@4.2.11: {}
|
| 3373 |
|
|
@@ -3400,11 +3289,6 @@ snapshots:
|
|
| 3400 |
|
| 3401 |
imurmurhash@0.1.4: {}
|
| 3402 |
|
| 3403 |
-
inflight@1.0.6:
|
| 3404 |
-
dependencies:
|
| 3405 |
-
once: 1.4.0
|
| 3406 |
-
wrappy: 1.0.2
|
| 3407 |
-
|
| 3408 |
inherits@2.0.4: {}
|
| 3409 |
|
| 3410 |
ini@4.1.3: {}
|
|
@@ -3427,10 +3311,6 @@ snapshots:
|
|
| 3427 |
through: 2.3.8
|
| 3428 |
wrap-ansi: 6.2.0
|
| 3429 |
|
| 3430 |
-
is-binary-path@2.1.0:
|
| 3431 |
-
dependencies:
|
| 3432 |
-
binary-extensions: 2.3.0
|
| 3433 |
-
|
| 3434 |
is-core-module@2.16.1:
|
| 3435 |
dependencies:
|
| 3436 |
hasown: 2.0.2
|
|
@@ -3449,8 +3329,6 @@ snapshots:
|
|
| 3449 |
|
| 3450 |
is-number@7.0.0: {}
|
| 3451 |
|
| 3452 |
-
is-path-inside@3.0.3: {}
|
| 3453 |
-
|
| 3454 |
is-reference@1.2.1:
|
| 3455 |
dependencies:
|
| 3456 |
'@types/estree': 1.0.6
|
|
@@ -3465,6 +3343,29 @@ snapshots:
|
|
| 3465 |
|
| 3466 |
isexe@3.1.1: {}
|
| 3467 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3468 |
jiti@2.4.2: {}
|
| 3469 |
|
| 3470 |
js-yaml@4.1.0:
|
|
@@ -3541,9 +3442,6 @@ snapshots:
|
|
| 3541 |
|
| 3542 |
lilconfig@2.1.0: {}
|
| 3543 |
|
| 3544 |
-
lilconfig@3.1.3:
|
| 3545 |
-
optional: true
|
| 3546 |
-
|
| 3547 |
local-pkg@1.1.1:
|
| 3548 |
dependencies:
|
| 3549 |
mlly: 1.7.4
|
|
@@ -3573,7 +3471,13 @@ snapshots:
|
|
| 3573 |
dependencies:
|
| 3574 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3575 |
|
| 3576 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3577 |
|
| 3578 |
merge2@1.4.1: {}
|
| 3579 |
|
|
@@ -3584,22 +3488,16 @@ snapshots:
|
|
| 3584 |
|
| 3585 |
mimic-fn@2.1.0: {}
|
| 3586 |
|
| 3587 |
-
min-indent@1.0.1: {}
|
| 3588 |
-
|
| 3589 |
minimatch@3.1.2:
|
| 3590 |
dependencies:
|
| 3591 |
brace-expansion: 1.1.11
|
| 3592 |
|
| 3593 |
-
minimatch@9.0.
|
| 3594 |
dependencies:
|
| 3595 |
brace-expansion: 2.0.1
|
| 3596 |
|
| 3597 |
minimist@1.2.8: {}
|
| 3598 |
|
| 3599 |
-
mkdirp@0.5.6:
|
| 3600 |
-
dependencies:
|
| 3601 |
-
minimist: 1.2.8
|
| 3602 |
-
|
| 3603 |
mlly@1.7.4:
|
| 3604 |
dependencies:
|
| 3605 |
acorn: 8.14.0
|
|
@@ -3621,12 +3519,6 @@ snapshots:
|
|
| 3621 |
|
| 3622 |
natural-compare@1.4.0: {}
|
| 3623 |
|
| 3624 |
-
normalize-path@3.0.0: {}
|
| 3625 |
-
|
| 3626 |
-
once@1.4.0:
|
| 3627 |
-
dependencies:
|
| 3628 |
-
wrappy: 1.0.2
|
| 3629 |
-
|
| 3630 |
onetime@5.1.2:
|
| 3631 |
dependencies:
|
| 3632 |
mimic-fn: 2.1.0
|
|
@@ -3682,24 +3574,14 @@ snapshots:
|
|
| 3682 |
|
| 3683 |
path-exists@5.0.0: {}
|
| 3684 |
|
| 3685 |
-
path-is-absolute@1.0.1: {}
|
| 3686 |
-
|
| 3687 |
path-key@3.1.1: {}
|
| 3688 |
|
| 3689 |
path-parse@1.0.7: {}
|
| 3690 |
|
| 3691 |
-
path-type@4.0.0: {}
|
| 3692 |
-
|
| 3693 |
pathe@1.1.2: {}
|
| 3694 |
|
| 3695 |
pathe@2.0.3: {}
|
| 3696 |
|
| 3697 |
-
periscopic@3.1.0:
|
| 3698 |
-
dependencies:
|
| 3699 |
-
'@types/estree': 1.0.6
|
| 3700 |
-
estree-walker: 3.0.3
|
| 3701 |
-
is-reference: 3.0.3
|
| 3702 |
-
|
| 3703 |
picocolors@1.1.1: {}
|
| 3704 |
|
| 3705 |
picomatch@2.3.1: {}
|
|
@@ -3729,15 +3611,7 @@ snapshots:
|
|
| 3729 |
optionalDependencies:
|
| 3730 |
postcss: 8.5.3
|
| 3731 |
|
| 3732 |
-
postcss-
|
| 3733 |
-
dependencies:
|
| 3734 |
-
lilconfig: 3.1.3
|
| 3735 |
-
yaml: 2.7.0
|
| 3736 |
-
optionalDependencies:
|
| 3737 |
-
postcss: 8.5.3
|
| 3738 |
-
optional: true
|
| 3739 |
-
|
| 3740 |
-
postcss-safe-parser@6.0.0(postcss@8.5.3):
|
| 3741 |
dependencies:
|
| 3742 |
postcss: 8.5.3
|
| 3743 |
|
|
@@ -3745,7 +3619,7 @@ snapshots:
|
|
| 3745 |
dependencies:
|
| 3746 |
postcss: 8.5.3
|
| 3747 |
|
| 3748 |
-
postcss-selector-parser@
|
| 3749 |
dependencies:
|
| 3750 |
cssesc: 3.0.0
|
| 3751 |
util-deprecate: 1.0.2
|
|
@@ -3758,19 +3632,29 @@ snapshots:
|
|
| 3758 |
|
| 3759 |
prelude-ls@1.2.1: {}
|
| 3760 |
|
| 3761 |
-
prettier-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3762 |
dependencies:
|
| 3763 |
prettier: 3.5.3
|
| 3764 |
-
svelte:
|
| 3765 |
|
| 3766 |
-
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@
|
| 3767 |
dependencies:
|
| 3768 |
prettier: 3.5.3
|
| 3769 |
optionalDependencies:
|
| 3770 |
-
prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@
|
| 3771 |
|
| 3772 |
prettier@3.5.3: {}
|
| 3773 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3774 |
punycode@2.3.1: {}
|
| 3775 |
|
| 3776 |
quansync@0.2.8: {}
|
|
@@ -3782,15 +3666,15 @@ snapshots:
|
|
| 3782 |
drange: 1.1.1
|
| 3783 |
ret: 0.2.2
|
| 3784 |
|
|
|
|
|
|
|
| 3785 |
readable-stream@3.6.2:
|
| 3786 |
dependencies:
|
| 3787 |
inherits: 2.0.4
|
| 3788 |
string_decoder: 1.3.0
|
| 3789 |
util-deprecate: 1.0.2
|
| 3790 |
|
| 3791 |
-
readdirp@
|
| 3792 |
-
dependencies:
|
| 3793 |
-
picomatch: 2.3.1
|
| 3794 |
|
| 3795 |
repeat-string@1.6.1: {}
|
| 3796 |
|
|
@@ -3811,14 +3695,6 @@ snapshots:
|
|
| 3811 |
|
| 3812 |
reusify@1.1.0: {}
|
| 3813 |
|
| 3814 |
-
rimraf@2.7.1:
|
| 3815 |
-
dependencies:
|
| 3816 |
-
glob: 7.2.3
|
| 3817 |
-
|
| 3818 |
-
rimraf@3.0.2:
|
| 3819 |
-
dependencies:
|
| 3820 |
-
glob: 7.2.3
|
| 3821 |
-
|
| 3822 |
rollup@4.34.9:
|
| 3823 |
dependencies:
|
| 3824 |
'@types/estree': 1.0.6
|
|
@@ -3850,6 +3726,16 @@ snapshots:
|
|
| 3850 |
dependencies:
|
| 3851 |
queue-microtask: 1.2.3
|
| 3852 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3853 |
rxjs@7.8.2:
|
| 3854 |
dependencies:
|
| 3855 |
tslib: 2.8.1
|
|
@@ -3862,13 +3748,6 @@ snapshots:
|
|
| 3862 |
|
| 3863 |
safer-buffer@2.1.2: {}
|
| 3864 |
|
| 3865 |
-
sander@0.5.1:
|
| 3866 |
-
dependencies:
|
| 3867 |
-
es6-promise: 3.3.1
|
| 3868 |
-
graceful-fs: 4.2.11
|
| 3869 |
-
mkdirp: 0.5.6
|
| 3870 |
-
rimraf: 2.7.1
|
| 3871 |
-
|
| 3872 |
semver@7.7.1: {}
|
| 3873 |
|
| 3874 |
set-cookie-parser@2.7.1: {}
|
|
@@ -3887,15 +3766,6 @@ snapshots:
|
|
| 3887 |
mrmime: 2.0.1
|
| 3888 |
totalist: 3.0.1
|
| 3889 |
|
| 3890 |
-
slash@3.0.0: {}
|
| 3891 |
-
|
| 3892 |
-
sorcery@0.11.1:
|
| 3893 |
-
dependencies:
|
| 3894 |
-
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3895 |
-
buffer-crc32: 1.0.0
|
| 3896 |
-
minimist: 1.2.8
|
| 3897 |
-
sander: 0.5.1
|
| 3898 |
-
|
| 3899 |
source-map-js@1.2.1: {}
|
| 3900 |
|
| 3901 |
string-width@4.2.3:
|
|
@@ -3912,10 +3782,6 @@ snapshots:
|
|
| 3912 |
dependencies:
|
| 3913 |
ansi-regex: 5.0.1
|
| 3914 |
|
| 3915 |
-
strip-indent@3.0.0:
|
| 3916 |
-
dependencies:
|
| 3917 |
-
min-indent: 1.0.1
|
| 3918 |
-
|
| 3919 |
strip-json-comments@3.1.1: {}
|
| 3920 |
|
| 3921 |
supports-color@7.2.0:
|
|
@@ -3924,71 +3790,50 @@ snapshots:
|
|
| 3924 |
|
| 3925 |
supports-preserve-symlinks-flag@1.0.0: {}
|
| 3926 |
|
| 3927 |
-
svelte-check@
|
| 3928 |
dependencies:
|
| 3929 |
'@jridgewell/trace-mapping': 0.3.25
|
| 3930 |
-
chokidar:
|
|
|
|
| 3931 |
picocolors: 1.1.1
|
| 3932 |
sade: 1.8.1
|
| 3933 |
-
svelte:
|
| 3934 |
-
svelte-preprocess: 5.1.4(postcss-load-config@4.0.2(postcss@8.5.3))(postcss@8.5.3)(svelte@4.2.19)(typescript@5.8.2)
|
| 3935 |
typescript: 5.8.2
|
| 3936 |
transitivePeerDependencies:
|
| 3937 |
-
-
|
| 3938 |
-
- coffeescript
|
| 3939 |
-
- less
|
| 3940 |
-
- postcss
|
| 3941 |
-
- postcss-load-config
|
| 3942 |
-
- pug
|
| 3943 |
-
- sass
|
| 3944 |
-
- stylus
|
| 3945 |
-
- sugarss
|
| 3946 |
|
| 3947 |
-
svelte-eslint-parser@
|
| 3948 |
dependencies:
|
| 3949 |
-
eslint-scope:
|
| 3950 |
-
eslint-visitor-keys:
|
| 3951 |
-
espree:
|
| 3952 |
postcss: 8.5.3
|
| 3953 |
postcss-scss: 4.0.9(postcss@8.5.3)
|
|
|
|
| 3954 |
optionalDependencies:
|
| 3955 |
-
svelte:
|
| 3956 |
-
|
| 3957 |
-
svelte-hmr@0.16.0(svelte@4.2.19):
|
| 3958 |
-
dependencies:
|
| 3959 |
-
svelte: 4.2.19
|
| 3960 |
-
|
| 3961 |
-
svelte-preprocess@5.1.4(postcss-load-config@4.0.2(postcss@8.5.3))(postcss@8.5.3)(svelte@4.2.19)(typescript@5.8.2):
|
| 3962 |
-
dependencies:
|
| 3963 |
-
'@types/pug': 2.0.10
|
| 3964 |
-
detect-indent: 6.1.0
|
| 3965 |
-
magic-string: 0.30.17
|
| 3966 |
-
sorcery: 0.11.1
|
| 3967 |
-
strip-indent: 3.0.0
|
| 3968 |
-
svelte: 4.2.19
|
| 3969 |
-
optionalDependencies:
|
| 3970 |
-
postcss: 8.5.3
|
| 3971 |
-
postcss-load-config: 4.0.2(postcss@8.5.3)
|
| 3972 |
-
typescript: 5.8.2
|
| 3973 |
|
| 3974 |
-
svelte@
|
| 3975 |
dependencies:
|
| 3976 |
'@ampproject/remapping': 2.3.0
|
| 3977 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3978 |
-
'@
|
| 3979 |
'@types/estree': 1.0.6
|
| 3980 |
acorn: 8.14.0
|
| 3981 |
aria-query: 5.3.2
|
| 3982 |
axobject-query: 4.1.0
|
| 3983 |
-
|
| 3984 |
-
|
| 3985 |
-
|
| 3986 |
is-reference: 3.0.3
|
| 3987 |
locate-character: 3.0.0
|
| 3988 |
magic-string: 0.30.17
|
| 3989 |
-
|
| 3990 |
|
| 3991 |
-
|
|
|
|
|
|
|
|
|
|
| 3992 |
|
| 3993 |
tailwind-merge@3.0.2: {}
|
| 3994 |
|
|
@@ -3996,8 +3841,6 @@ snapshots:
|
|
| 3996 |
|
| 3997 |
tapable@2.2.1: {}
|
| 3998 |
|
| 3999 |
-
text-table@0.2.0: {}
|
| 4000 |
-
|
| 4001 |
through@2.3.8: {}
|
| 4002 |
|
| 4003 |
tinyexec@0.3.2: {}
|
|
@@ -4012,7 +3855,7 @@ snapshots:
|
|
| 4012 |
|
| 4013 |
totalist@3.0.1: {}
|
| 4014 |
|
| 4015 |
-
ts-api-utils@
|
| 4016 |
dependencies:
|
| 4017 |
typescript: 5.8.2
|
| 4018 |
|
|
@@ -4031,12 +3874,20 @@ snapshots:
|
|
| 4031 |
dependencies:
|
| 4032 |
prelude-ls: 1.2.1
|
| 4033 |
|
| 4034 |
-
type-fest@0.20.2: {}
|
| 4035 |
-
|
| 4036 |
type-fest@0.21.3: {}
|
| 4037 |
|
| 4038 |
type-fest@4.37.0: {}
|
| 4039 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4040 |
typescript@5.6.3: {}
|
| 4041 |
|
| 4042 |
typescript@5.8.2: {}
|
|
@@ -4063,7 +3914,7 @@ snapshots:
|
|
| 4063 |
|
| 4064 |
ufo@1.5.4: {}
|
| 4065 |
|
| 4066 |
-
unplugin-icons@22.1.0(svelte@
|
| 4067 |
dependencies:
|
| 4068 |
'@antfu/install-pkg': 1.0.0
|
| 4069 |
'@iconify/utils': 2.3.0
|
|
@@ -4071,7 +3922,7 @@ snapshots:
|
|
| 4071 |
local-pkg: 1.1.1
|
| 4072 |
unplugin: 2.2.0
|
| 4073 |
optionalDependencies:
|
| 4074 |
-
svelte:
|
| 4075 |
transitivePeerDependencies:
|
| 4076 |
- supports-color
|
| 4077 |
|
|
@@ -4111,7 +3962,7 @@ snapshots:
|
|
| 4111 |
lightningcss: 1.29.1
|
| 4112 |
yaml: 2.7.0
|
| 4113 |
|
| 4114 |
-
vitefu@0.
|
| 4115 |
optionalDependencies:
|
| 4116 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 4117 |
|
|
@@ -4137,8 +3988,6 @@ snapshots:
|
|
| 4137 |
string-width: 4.2.3
|
| 4138 |
strip-ansi: 6.0.1
|
| 4139 |
|
| 4140 |
-
wrappy@1.0.2: {}
|
| 4141 |
-
|
| 4142 |
yaml@1.10.2: {}
|
| 4143 |
|
| 4144 |
yaml@2.7.0:
|
|
@@ -4147,3 +3996,5 @@ snapshots:
|
|
| 4147 |
yocto-queue@0.1.0: {}
|
| 4148 |
|
| 4149 |
yocto-queue@1.2.0: {}
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
.:
|
| 10 |
dependencies:
|
| 11 |
+
eslint-plugin-svelte:
|
| 12 |
+
specifier: ^3.3.1
|
| 13 |
+
version: 3.3.1(eslint@9.22.0(jiti@2.4.2))(svelte@5.23.0)
|
| 14 |
+
typia:
|
| 15 |
+
specifier: ^8.0.0
|
| 16 |
+
version: 8.0.0(@samchon/openapi@3.0.0)(typescript@5.8.2)
|
| 17 |
+
devDependencies:
|
| 18 |
+
'@eslint/eslintrc':
|
| 19 |
+
specifier: ^3.3.0
|
| 20 |
+
version: 3.3.0
|
| 21 |
+
'@eslint/js':
|
| 22 |
+
specifier: ^9.22.0
|
| 23 |
+
version: 9.22.0
|
| 24 |
'@huggingface/hub':
|
| 25 |
specifier: ^1.0.1
|
| 26 |
version: 1.0.1
|
|
|
|
| 30 |
'@huggingface/tasks':
|
| 31 |
specifier: ^0.17.1
|
| 32 |
version: 0.17.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 33 |
'@iconify-json/carbon':
|
| 34 |
specifier: ^1.2.8
|
| 35 |
version: 1.2.8
|
| 36 |
+
'@iconify-json/material-symbols':
|
| 37 |
+
specifier: ^1.2.15
|
| 38 |
+
version: 1.2.15
|
| 39 |
'@ryoppippi/unplugin-typia':
|
| 40 |
specifier: ^1.0.0
|
| 41 |
version: 1.2.0(@samchon/openapi@3.0.0)(jiti@2.4.2)(lightningcss@1.29.1)(rollup@4.34.9)(yaml@2.7.0)
|
|
|
|
| 44 |
version: 3.0.0
|
| 45 |
'@sveltejs/adapter-auto':
|
| 46 |
specifier: ^3.2.2
|
| 47 |
+
version: 3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))
|
| 48 |
'@sveltejs/adapter-node':
|
| 49 |
specifier: ^5.2.0
|
| 50 |
+
version: 5.2.12(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))
|
| 51 |
'@sveltejs/kit':
|
| 52 |
+
specifier: ^2.5.27
|
| 53 |
+
version: 2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 54 |
'@sveltejs/vite-plugin-svelte':
|
| 55 |
+
specifier: ^4.0.0
|
| 56 |
+
version: 4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 57 |
+
'@tailwindcss/container-queries':
|
| 58 |
+
specifier: ^0.1.1
|
| 59 |
+
version: 0.1.1(tailwindcss@4.0.9)
|
| 60 |
'@tailwindcss/postcss':
|
| 61 |
specifier: ^4.0.9
|
| 62 |
version: 4.0.9
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 63 |
clsx:
|
| 64 |
specifier: ^2.1.1
|
| 65 |
version: 2.1.1
|
| 66 |
eslint:
|
| 67 |
+
specifier: ^9.22.0
|
| 68 |
+
version: 9.22.0(jiti@2.4.2)
|
| 69 |
eslint-config-prettier:
|
| 70 |
+
specifier: ^10.1.1
|
| 71 |
+
version: 10.1.1(eslint@9.22.0(jiti@2.4.2))
|
| 72 |
+
eslint-plugin-prettier:
|
| 73 |
+
specifier: ^5.2.3
|
| 74 |
+
version: 5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3)
|
| 75 |
+
globals:
|
| 76 |
+
specifier: ^16.0.0
|
| 77 |
+
version: 16.0.0
|
| 78 |
highlight.js:
|
| 79 |
specifier: ^11.10.0
|
| 80 |
version: 11.11.1
|
| 81 |
+
jiti:
|
| 82 |
+
specifier: ^2.4.2
|
| 83 |
+
version: 2.4.2
|
| 84 |
+
melt:
|
| 85 |
+
specifier: ^0.18.4
|
| 86 |
+
version: 0.18.4(@floating-ui/dom@1.6.13)(svelte@5.23.0)
|
| 87 |
postcss:
|
| 88 |
specifier: ^8.4.38
|
| 89 |
version: 8.5.3
|
|
|
|
| 91 |
specifier: ^3.1.1
|
| 92 |
version: 3.5.3
|
| 93 |
prettier-plugin-svelte:
|
| 94 |
+
specifier: ^3.2.6
|
| 95 |
+
version: 3.3.3(prettier@3.5.3)(svelte@5.23.0)
|
| 96 |
prettier-plugin-tailwindcss:
|
| 97 |
specifier: ^0.6.11
|
| 98 |
+
version: 0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.23.0))(prettier@3.5.3)
|
| 99 |
+
runed:
|
| 100 |
+
specifier: ^0.24.0
|
| 101 |
+
version: 0.24.0(svelte@5.23.0)
|
| 102 |
svelte:
|
| 103 |
+
specifier: ^5.20.4
|
| 104 |
+
version: 5.23.0
|
| 105 |
svelte-check:
|
| 106 |
+
specifier: ^4.0.0
|
| 107 |
+
version: 4.1.5(picomatch@4.0.2)(svelte@5.23.0)(typescript@5.8.2)
|
| 108 |
tailwind-merge:
|
| 109 |
specifier: ^3.0.2
|
| 110 |
version: 3.0.2
|
|
|
|
| 120 |
typescript:
|
| 121 |
specifier: ^5.8.2
|
| 122 |
version: 5.8.2
|
| 123 |
+
typescript-eslint:
|
| 124 |
+
specifier: ^8.26.1
|
| 125 |
+
version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 126 |
unplugin-icons:
|
| 127 |
specifier: ^22.1.0
|
| 128 |
+
version: 22.1.0(svelte@5.23.0)
|
| 129 |
vite:
|
| 130 |
+
specifier: ^5.4.4
|
| 131 |
version: 5.4.14(lightningcss@1.29.1)
|
| 132 |
|
| 133 |
packages:
|
|
|
|
| 444 |
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
|
| 445 |
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
|
| 446 |
|
| 447 |
+
'@eslint/config-array@0.19.2':
|
| 448 |
+
resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
|
| 449 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 450 |
|
| 451 |
+
'@eslint/config-helpers@0.1.0':
|
| 452 |
+
resolution: {integrity: sha512-kLrdPDJE1ckPo94kmPPf9Hfd0DU0Jw6oKYrhe+pwSC0iTUInmTa+w6fw8sGgcfkFJGNdWOUeOaDM4quW4a7OkA==}
|
| 453 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 454 |
+
|
| 455 |
+
'@eslint/core@0.12.0':
|
| 456 |
+
resolution: {integrity: sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==}
|
| 457 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 458 |
+
|
| 459 |
+
'@eslint/eslintrc@3.3.0':
|
| 460 |
+
resolution: {integrity: sha512-yaVPAiNAalnCZedKLdR21GOGILMLKPyqSLWaAjQFvYA2i/ciDi8ArYVr69Anohb6cH2Ukhqti4aFnYyPm8wdwQ==}
|
| 461 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 462 |
+
|
| 463 |
+
'@eslint/js@9.22.0':
|
| 464 |
+
resolution: {integrity: sha512-vLFajx9o8d1/oL2ZkpMYbkLv8nDB6yaIwFNt7nI4+I80U/z03SxmfOMsLbvWr3p7C+Wnoh//aOu2pQW8cS0HCQ==}
|
| 465 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 466 |
+
|
| 467 |
+
'@eslint/object-schema@2.1.6':
|
| 468 |
+
resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
|
| 469 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 470 |
+
|
| 471 |
+
'@eslint/plugin-kit@0.2.7':
|
| 472 |
+
resolution: {integrity: sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==}
|
| 473 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 474 |
|
| 475 |
'@floating-ui/core@1.6.9':
|
| 476 |
resolution: {integrity: sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==}
|
|
|
|
| 495 |
'@huggingface/tasks@0.17.1':
|
| 496 |
resolution: {integrity: sha512-kN5F/pzwxtmdZ0jORumNyegNKOX/ciU5G/DMZcqK3SJShod4C6yfvBRCMn5sEDzanxtU8VjX+7TaInQFmmU8Nw==}
|
| 497 |
|
| 498 |
+
'@humanfs/core@0.19.1':
|
| 499 |
+
resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
|
| 500 |
+
engines: {node: '>=18.18.0'}
|
| 501 |
+
|
| 502 |
+
'@humanfs/node@0.16.6':
|
| 503 |
+
resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==}
|
| 504 |
+
engines: {node: '>=18.18.0'}
|
| 505 |
|
| 506 |
'@humanwhocodes/module-importer@1.0.1':
|
| 507 |
resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
|
| 508 |
engines: {node: '>=12.22'}
|
| 509 |
|
| 510 |
+
'@humanwhocodes/retry@0.3.1':
|
| 511 |
+
resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==}
|
| 512 |
+
engines: {node: '>=18.18'}
|
| 513 |
+
|
| 514 |
+
'@humanwhocodes/retry@0.4.2':
|
| 515 |
+
resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==}
|
| 516 |
+
engines: {node: '>=18.18'}
|
| 517 |
|
| 518 |
'@iconify-json/carbon@1.2.8':
|
| 519 |
resolution: {integrity: sha512-6xh4YiFBz6qoSnB3XMe23WvjTJroDFXB17J1MbiT7nATFe+70+em1acRXr8hgP/gYpwFMHFc4IvjA/IPTPnTzg==}
|
| 520 |
|
| 521 |
+
'@iconify-json/material-symbols@1.2.15':
|
| 522 |
+
resolution: {integrity: sha512-KkHRnMh1s08N1Olf3xk+z3ZIrke/7Ys3uUIMfKuSkZPbNssG4IApKkJOV5po6mg6oxMooXdNpab4PS0S5LMSOA==}
|
| 523 |
+
|
| 524 |
'@iconify/types@2.0.0':
|
| 525 |
resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==}
|
| 526 |
|
| 527 |
'@iconify/utils@2.3.0':
|
| 528 |
resolution: {integrity: sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==}
|
| 529 |
|
| 530 |
+
'@jest/schemas@29.6.3':
|
| 531 |
+
resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
|
| 532 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 533 |
|
| 534 |
'@jridgewell/gen-mapping@0.3.8':
|
| 535 |
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
|
|
|
|
| 549 |
'@jridgewell/trace-mapping@0.3.25':
|
| 550 |
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
| 551 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 552 |
'@nodelib/fs.scandir@2.1.5':
|
| 553 |
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
| 554 |
engines: {node: '>= 8'}
|
|
|
|
| 561 |
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
|
| 562 |
engines: {node: '>= 8'}
|
| 563 |
|
| 564 |
+
'@pkgr/core@0.1.1':
|
| 565 |
+
resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==}
|
| 566 |
+
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
|
| 567 |
+
|
| 568 |
'@polka/url@1.0.0-next.28':
|
| 569 |
resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==}
|
| 570 |
|
|
|
|
| 705 |
'@samchon/openapi@3.0.0':
|
| 706 |
resolution: {integrity: sha512-eVQlyKRYv1/C2Mikc1xZr7c0jMjg1vjPkeY/gheKB4c5WOOWyTNZ1uvnXR+ETpPHwaQ54I9NrQZhoNk6BEGuuw==}
|
| 707 |
|
| 708 |
+
'@sinclair/typebox@0.27.8':
|
| 709 |
+
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
|
| 710 |
+
|
| 711 |
+
'@sveltejs/acorn-typescript@1.0.5':
|
| 712 |
+
resolution: {integrity: sha512-IwQk4yfwLdibDlrXVE04jTZYlLnwsTT2PIOQQGNLWfjavGifnk1JD1LcZjZaBTRcxZu2FfPfNLOE04DSu9lqtQ==}
|
| 713 |
+
peerDependencies:
|
| 714 |
+
acorn: ^8.9.0
|
| 715 |
+
|
| 716 |
'@sveltejs/adapter-auto@3.3.1':
|
| 717 |
resolution: {integrity: sha512-5Sc7WAxYdL6q9j/+D0jJKjGREGlfIevDyHSQ2eNETHcB1TKlQWHcAo8AS8H1QdjNvSXpvOwNjykDUHPEAyGgdQ==}
|
| 718 |
peerDependencies:
|
|
|
|
| 732 |
svelte: ^4.0.0 || ^5.0.0-next.0
|
| 733 |
vite: ^5.0.3 || ^6.0.0
|
| 734 |
|
| 735 |
+
'@sveltejs/vite-plugin-svelte-inspector@3.0.1':
|
| 736 |
+
resolution: {integrity: sha512-2CKypmj1sM4GE7HjllT7UKmo4Q6L5xFRd7VMGEWhYnZ+wc6AUVU01IBd7yUi6WnFndEwWoMNOd6e8UjoN0nbvQ==}
|
| 737 |
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22}
|
| 738 |
peerDependencies:
|
| 739 |
+
'@sveltejs/vite-plugin-svelte': ^4.0.0-next.0||^4.0.0
|
| 740 |
+
svelte: ^5.0.0-next.96 || ^5.0.0
|
| 741 |
vite: ^5.0.0
|
| 742 |
|
| 743 |
+
'@sveltejs/vite-plugin-svelte@4.0.4':
|
| 744 |
+
resolution: {integrity: sha512-0ba1RQ/PHen5FGpdSrW7Y3fAMQjrXantECALeOiOdBdzR5+5vPP6HVZRLmZaQL+W8m++o+haIAKq5qT+MiZ7VA==}
|
| 745 |
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22}
|
| 746 |
peerDependencies:
|
| 747 |
+
svelte: ^5.0.0-next.96 || ^5.0.0
|
| 748 |
vite: ^5.0.0
|
| 749 |
|
|
|
|
|
|
|
|
|
|
| 750 |
'@tailwindcss/container-queries@0.1.1':
|
| 751 |
resolution: {integrity: sha512-p18dswChx6WnTSaJCSGx6lTmrGzNNvm2FtXmiO6AuA1V4U5REyoqwmT6kgAsIMdjo07QdAfYXHJ4hnMtfHzWgA==}
|
| 752 |
peerDependencies:
|
|
|
|
| 837 |
'@types/json-schema@7.0.15':
|
| 838 |
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
|
| 839 |
|
|
|
|
|
|
|
|
|
|
| 840 |
'@types/resolve@1.20.2':
|
| 841 |
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
|
| 842 |
|
| 843 |
+
'@typescript-eslint/eslint-plugin@8.26.1':
|
| 844 |
+
resolution: {integrity: sha512-2X3mwqsj9Bd3Ciz508ZUtoQQYpOhU/kWoUqIf49H8Z0+Vbh6UF/y0OEYp0Q0axOGzaBGs7QxRwq0knSQ8khQNA==}
|
| 845 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
|
|
|
|
|
|
|
|
|
| 846 |
peerDependencies:
|
| 847 |
+
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
|
| 848 |
+
eslint: ^8.57.0 || ^9.0.0
|
| 849 |
+
typescript: '>=4.8.4 <5.9.0'
|
|
|
|
|
|
|
|
|
|
| 850 |
|
| 851 |
+
'@typescript-eslint/parser@8.26.1':
|
| 852 |
+
resolution: {integrity: sha512-w6HZUV4NWxqd8BdeFf81t07d7/YV9s7TCWrQQbG5uhuvGUAW+fq1usZ1Hmz9UPNLniFnD8GLSsDpjP0hm1S4lQ==}
|
| 853 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 854 |
peerDependencies:
|
| 855 |
+
eslint: ^8.57.0 || ^9.0.0
|
| 856 |
+
typescript: '>=4.8.4 <5.9.0'
|
|
|
|
|
|
|
|
|
|
| 857 |
|
| 858 |
+
'@typescript-eslint/scope-manager@8.26.1':
|
| 859 |
+
resolution: {integrity: sha512-6EIvbE5cNER8sqBu6V7+KeMZIC1664d2Yjt+B9EWUXrsyWpxx4lEZrmvxgSKRC6gX+efDL/UY9OpPZ267io3mg==}
|
| 860 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 861 |
|
| 862 |
+
'@typescript-eslint/type-utils@8.26.1':
|
| 863 |
+
resolution: {integrity: sha512-Kcj/TagJLwoY/5w9JGEFV0dclQdyqw9+VMndxOJKtoFSjfZhLXhYjzsQEeyza03rwHx2vFEGvrJWJBXKleRvZg==}
|
| 864 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 865 |
peerDependencies:
|
| 866 |
+
eslint: ^8.57.0 || ^9.0.0
|
| 867 |
+
typescript: '>=4.8.4 <5.9.0'
|
|
|
|
|
|
|
|
|
|
| 868 |
|
| 869 |
+
'@typescript-eslint/types@8.26.1':
|
| 870 |
+
resolution: {integrity: sha512-n4THUQW27VmQMx+3P+B0Yptl7ydfceUj4ON/AQILAASwgYdZ/2dhfymRMh5egRUrvK5lSmaOm77Ry+lmXPOgBQ==}
|
| 871 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 872 |
|
| 873 |
+
'@typescript-eslint/typescript-estree@8.26.1':
|
| 874 |
+
resolution: {integrity: sha512-yUwPpUHDgdrv1QJ7YQal3cMVBGWfnuCdKbXw1yyjArax3353rEJP1ZA+4F8nOlQ3RfS2hUN/wze3nlY+ZOhvoA==}
|
| 875 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 876 |
peerDependencies:
|
| 877 |
+
typescript: '>=4.8.4 <5.9.0'
|
|
|
|
|
|
|
|
|
|
| 878 |
|
| 879 |
+
'@typescript-eslint/utils@8.26.1':
|
| 880 |
+
resolution: {integrity: sha512-V4Urxa/XtSUroUrnI7q6yUTD3hDtfJ2jzVfeT3VK0ciizfK2q/zGC0iDh1lFMUZR8cImRrep6/q0xd/1ZGPQpg==}
|
| 881 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 882 |
peerDependencies:
|
| 883 |
+
eslint: ^8.57.0 || ^9.0.0
|
| 884 |
+
typescript: '>=4.8.4 <5.9.0'
|
|
|
|
|
|
|
|
|
|
| 885 |
|
| 886 |
+
'@typescript-eslint/visitor-keys@8.26.1':
|
| 887 |
+
resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==}
|
| 888 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 889 |
|
| 890 |
acorn-jsx@5.3.2:
|
| 891 |
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
|
|
|
|
| 912 |
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
|
| 913 |
engines: {node: '>=8'}
|
| 914 |
|
| 915 |
+
ansi-styles@5.2.0:
|
| 916 |
+
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
|
| 917 |
+
engines: {node: '>=10'}
|
| 918 |
|
| 919 |
argparse@2.0.1:
|
| 920 |
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
|
|
|
| 926 |
array-timsort@1.0.3:
|
| 927 |
resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
|
| 928 |
|
| 929 |
+
axe-core@4.9.1:
|
| 930 |
+
resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==}
|
| 931 |
+
engines: {node: '>=4'}
|
| 932 |
|
| 933 |
axobject-query@4.1.0:
|
| 934 |
resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
|
|
|
|
| 940 |
base64-js@1.5.1:
|
| 941 |
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
|
| 942 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 943 |
bl@4.1.0:
|
| 944 |
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
|
| 945 |
|
|
|
|
| 953 |
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
|
| 954 |
engines: {node: '>=8'}
|
| 955 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 956 |
buffer@5.7.1:
|
| 957 |
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
|
| 958 |
|
|
|
|
| 967 |
chardet@0.7.0:
|
| 968 |
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
|
| 969 |
|
| 970 |
+
chokidar@4.0.3:
|
| 971 |
+
resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
|
| 972 |
+
engines: {node: '>= 14.16.0'}
|
| 973 |
|
| 974 |
cli-cursor@3.1.0:
|
| 975 |
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
|
|
|
|
| 991 |
resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==}
|
| 992 |
engines: {node: '>=6'}
|
| 993 |
|
|
|
|
|
|
|
|
|
|
| 994 |
color-convert@2.0.1:
|
| 995 |
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
|
| 996 |
engines: {node: '>=7.0.0'}
|
|
|
|
| 1036 |
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
|
| 1037 |
engines: {node: '>= 8'}
|
| 1038 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1039 |
cssesc@3.0.0:
|
| 1040 |
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
|
| 1041 |
engines: {node: '>=4'}
|
|
|
|
| 1063 |
defu@6.1.4:
|
| 1064 |
resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==}
|
| 1065 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1066 |
detect-libc@1.0.3:
|
| 1067 |
resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==}
|
| 1068 |
engines: {node: '>=0.10'}
|
|
|
|
| 1074 |
diff-match-patch@1.0.5:
|
| 1075 |
resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==}
|
| 1076 |
|
| 1077 |
+
diff-sequences@29.6.3:
|
| 1078 |
+
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
|
| 1079 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1080 |
|
| 1081 |
drange@1.1.1:
|
| 1082 |
resolution: {integrity: sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==}
|
|
|
|
| 1089 |
resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==}
|
| 1090 |
engines: {node: '>=10.13.0'}
|
| 1091 |
|
|
|
|
|
|
|
|
|
|
| 1092 |
esbuild@0.21.5:
|
| 1093 |
resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==}
|
| 1094 |
engines: {node: '>=12'}
|
|
|
|
| 1107 |
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
|
| 1108 |
engines: {node: '>=10'}
|
| 1109 |
|
| 1110 |
+
eslint-compat-utils@0.6.4:
|
| 1111 |
+
resolution: {integrity: sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==}
|
| 1112 |
engines: {node: '>=12'}
|
| 1113 |
peerDependencies:
|
| 1114 |
eslint: '>=6.0.0'
|
| 1115 |
|
| 1116 |
+
eslint-config-prettier@10.1.1:
|
| 1117 |
+
resolution: {integrity: sha512-4EQQr6wXwS+ZJSzaR5ZCrYgLxqvUjdXctaEtBqHcbkW944B1NQyO4qpdHQbXBONfwxXdkAY81HH4+LUfrg+zPw==}
|
| 1118 |
hasBin: true
|
| 1119 |
peerDependencies:
|
| 1120 |
eslint: '>=7.0.0'
|
| 1121 |
|
| 1122 |
+
eslint-plugin-prettier@5.2.3:
|
| 1123 |
+
resolution: {integrity: sha512-qJ+y0FfCp/mQYQ/vWQ3s7eUlFEL4PyKfAJxsnYTJ4YT73nsJBWqmEpFryxV9OeUiqmsTsYJ5Y+KDNaeP31wrRw==}
|
| 1124 |
+
engines: {node: ^14.18.0 || >=16.0.0}
|
| 1125 |
+
peerDependencies:
|
| 1126 |
+
'@types/eslint': '>=8.0.0'
|
| 1127 |
+
eslint: '>=8.0.0'
|
| 1128 |
+
eslint-config-prettier: '*'
|
| 1129 |
+
prettier: '>=3.0.0'
|
| 1130 |
+
peerDependenciesMeta:
|
| 1131 |
+
'@types/eslint':
|
| 1132 |
+
optional: true
|
| 1133 |
+
eslint-config-prettier:
|
| 1134 |
+
optional: true
|
| 1135 |
+
|
| 1136 |
+
eslint-plugin-svelte@3.3.1:
|
| 1137 |
+
resolution: {integrity: sha512-5p3JGBMautDKtQdNmHkp33akcssAqZObV955UREa8v1thDDRG6sCj8gQMztQRRDFJiGsBdWgLWEB5HrdKg5B2w==}
|
| 1138 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1139 |
peerDependencies:
|
| 1140 |
+
eslint: ^8.57.1 || ^9.0.0
|
| 1141 |
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
|
| 1142 |
peerDependenciesMeta:
|
| 1143 |
svelte:
|
| 1144 |
optional: true
|
| 1145 |
|
| 1146 |
+
eslint-scope@8.3.0:
|
| 1147 |
+
resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==}
|
| 1148 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1149 |
|
| 1150 |
eslint-visitor-keys@3.4.3:
|
| 1151 |
resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
|
| 1152 |
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
|
| 1153 |
|
| 1154 |
+
eslint-visitor-keys@4.2.0:
|
| 1155 |
+
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
|
| 1156 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1157 |
+
|
| 1158 |
+
eslint@9.22.0:
|
| 1159 |
+
resolution: {integrity: sha512-9V/QURhsRN40xuHXWjV64yvrzMjcz7ZyNoF2jJFmy9j/SLk0u1OLSZgXi28MrXjymnjEGSR80WCdab3RGMDveQ==}
|
| 1160 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1161 |
hasBin: true
|
| 1162 |
+
peerDependencies:
|
| 1163 |
+
jiti: '*'
|
| 1164 |
+
peerDependenciesMeta:
|
| 1165 |
+
jiti:
|
| 1166 |
+
optional: true
|
| 1167 |
|
| 1168 |
esm-env@1.2.2:
|
| 1169 |
resolution: {integrity: sha512-Epxrv+Nr/CaL4ZcFGPJIYLWFom+YeV1DqMLHJoEd9SYRxNbaFruBwfEX/kkHUJf55j2+TUbmDcmuilbP1TmXHA==}
|
| 1170 |
|
| 1171 |
+
espree@10.3.0:
|
| 1172 |
+
resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==}
|
| 1173 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1174 |
|
| 1175 |
esprima@4.0.1:
|
| 1176 |
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
|
|
|
|
| 1181 |
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
|
| 1182 |
engines: {node: '>=0.10'}
|
| 1183 |
|
| 1184 |
+
esrap@1.4.5:
|
| 1185 |
+
resolution: {integrity: sha512-CjNMjkBWWZeHn+VX+gS8YvFwJ5+NDhg8aWZBSFJPR8qQduDNjbJodA2WcwCm7uQa5Rjqj+nZvVmceg1RbHFB9g==}
|
| 1186 |
+
|
| 1187 |
esrecurse@4.3.0:
|
| 1188 |
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
|
| 1189 |
engines: {node: '>=4.0'}
|
|
|
|
| 1195 |
estree-walker@2.0.2:
|
| 1196 |
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
|
| 1197 |
|
|
|
|
|
|
|
|
|
|
| 1198 |
esutils@2.0.3:
|
| 1199 |
resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
|
| 1200 |
engines: {node: '>=0.10.0'}
|
|
|
|
| 1209 |
fast-deep-equal@3.1.3:
|
| 1210 |
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
| 1211 |
|
| 1212 |
+
fast-diff@1.3.0:
|
| 1213 |
+
resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
|
| 1214 |
+
|
| 1215 |
fast-glob@3.3.3:
|
| 1216 |
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
|
| 1217 |
engines: {node: '>=8.6.0'}
|
|
|
|
| 1237 |
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
|
| 1238 |
engines: {node: '>=8'}
|
| 1239 |
|
| 1240 |
+
file-entry-cache@8.0.0:
|
| 1241 |
+
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
|
| 1242 |
+
engines: {node: '>=16.0.0'}
|
| 1243 |
|
| 1244 |
fill-range@7.1.1:
|
| 1245 |
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
|
|
|
|
| 1257 |
resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==}
|
| 1258 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 1259 |
|
| 1260 |
+
flat-cache@4.0.1:
|
| 1261 |
+
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
|
| 1262 |
+
engines: {node: '>=16'}
|
| 1263 |
|
| 1264 |
flatted@3.3.3:
|
| 1265 |
resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
|
| 1266 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1267 |
fsevents@2.3.3:
|
| 1268 |
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
|
| 1269 |
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
|
|
|
|
| 1280 |
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
|
| 1281 |
engines: {node: '>=10.13.0'}
|
| 1282 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1283 |
global-prefix@4.0.0:
|
| 1284 |
resolution: {integrity: sha512-w0Uf9Y9/nyHinEk5vMJKRie+wa4kR5hmDbEhGGds/kG1PwGLLHKRoNMeJOyCQjjBkANlnScqgzcFwGHgmgLkVA==}
|
| 1285 |
engines: {node: '>=16'}
|
| 1286 |
|
| 1287 |
+
globals@14.0.0:
|
| 1288 |
+
resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
|
| 1289 |
+
engines: {node: '>=18'}
|
| 1290 |
|
| 1291 |
globals@15.15.0:
|
| 1292 |
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
|
| 1293 |
engines: {node: '>=18'}
|
| 1294 |
|
| 1295 |
+
globals@16.0.0:
|
| 1296 |
+
resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==}
|
| 1297 |
+
engines: {node: '>=18'}
|
| 1298 |
|
| 1299 |
graceful-fs@4.2.11:
|
| 1300 |
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
|
|
|
|
| 1340 |
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
| 1341 |
engines: {node: '>=0.8.19'}
|
| 1342 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1343 |
inherits@2.0.4:
|
| 1344 |
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
|
| 1345 |
|
|
|
|
| 1351 |
resolution: {integrity: sha512-M1WuAmb7pn9zdFRtQYk26ZBoY043Sse0wVDdk4Bppr+JOXyQYybdtvK+l9wUibhtjdjvtoiNy8tk+EgsYIUqKg==}
|
| 1352 |
engines: {node: '>=12.0.0'}
|
| 1353 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1354 |
is-core-module@2.16.1:
|
| 1355 |
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
|
| 1356 |
engines: {node: '>= 0.4'}
|
|
|
|
| 1378 |
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
|
| 1379 |
engines: {node: '>=0.12.0'}
|
| 1380 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1381 |
is-reference@1.2.1:
|
| 1382 |
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
|
| 1383 |
|
|
|
|
| 1395 |
resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==}
|
| 1396 |
engines: {node: '>=16'}
|
| 1397 |
|
| 1398 |
+
jest-axe@9.0.0:
|
| 1399 |
+
resolution: {integrity: sha512-Xt7O0+wIpW31lv0SO1wQZUTyJE7DEmnDEZeTt9/S9L5WUywxrv8BrgvTuQEqujtfaQOcJ70p4wg7UUgK1E2F5g==}
|
| 1400 |
+
engines: {node: '>= 16.0.0'}
|
| 1401 |
+
|
| 1402 |
+
jest-diff@29.7.0:
|
| 1403 |
+
resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==}
|
| 1404 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 1405 |
+
|
| 1406 |
+
jest-get-type@29.6.3:
|
| 1407 |
+
resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==}
|
| 1408 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 1409 |
+
|
| 1410 |
+
jest-matcher-utils@29.2.2:
|
| 1411 |
+
resolution: {integrity: sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==}
|
| 1412 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 1413 |
+
|
| 1414 |
jiti@2.4.2:
|
| 1415 |
resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==}
|
| 1416 |
hasBin: true
|
|
|
|
| 1517 |
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
|
| 1518 |
engines: {node: '>=10'}
|
| 1519 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1520 |
local-pkg@1.1.1:
|
| 1521 |
resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==}
|
| 1522 |
engines: {node: '>=14'}
|
|
|
|
| 1545 |
magic-string@0.30.17:
|
| 1546 |
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
|
| 1547 |
|
| 1548 |
+
melt@0.18.4:
|
| 1549 |
+
resolution: {integrity: sha512-AH7im4MEmHS/8MFhGDnfiuF4ibdm0guFWiBvBaF93YIzA0hhuWMcGxD8HdEsQ8q1Q6xIIRm9FdGd0WICc7Nk2A==}
|
| 1550 |
+
peerDependencies:
|
| 1551 |
+
'@floating-ui/dom': ^1.6.0
|
| 1552 |
+
svelte: ^5.0.0
|
| 1553 |
|
| 1554 |
merge2@1.4.1:
|
| 1555 |
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
|
|
|
|
| 1563 |
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
|
| 1564 |
engines: {node: '>=6'}
|
| 1565 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1566 |
minimatch@3.1.2:
|
| 1567 |
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
|
| 1568 |
|
| 1569 |
+
minimatch@9.0.5:
|
| 1570 |
+
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
|
| 1571 |
engines: {node: '>=16 || 14 >=14.17'}
|
| 1572 |
|
| 1573 |
minimist@1.2.8:
|
| 1574 |
resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
|
| 1575 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1576 |
mlly@1.7.4:
|
| 1577 |
resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==}
|
| 1578 |
|
|
|
|
| 1603 |
natural-compare@1.4.0:
|
| 1604 |
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
| 1605 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1606 |
onetime@5.1.2:
|
| 1607 |
resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
|
| 1608 |
engines: {node: '>=6'}
|
|
|
|
| 1650 |
resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==}
|
| 1651 |
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
|
| 1652 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1653 |
path-key@3.1.1:
|
| 1654 |
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
|
| 1655 |
engines: {node: '>=8'}
|
|
|
|
| 1657 |
path-parse@1.0.7:
|
| 1658 |
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
|
| 1659 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1660 |
pathe@1.1.2:
|
| 1661 |
resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
|
| 1662 |
|
| 1663 |
pathe@2.0.3:
|
| 1664 |
resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
|
| 1665 |
|
|
|
|
|
|
|
|
|
|
| 1666 |
picocolors@1.1.1:
|
| 1667 |
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
|
| 1668 |
|
|
|
|
| 1696 |
ts-node:
|
| 1697 |
optional: true
|
| 1698 |
|
| 1699 |
+
postcss-safe-parser@7.0.1:
|
| 1700 |
+
resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==}
|
| 1701 |
+
engines: {node: '>=18.0'}
|
| 1702 |
peerDependencies:
|
| 1703 |
+
postcss: ^8.4.31
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1704 |
|
| 1705 |
postcss-scss@4.0.9:
|
| 1706 |
resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==}
|
|
|
|
| 1708 |
peerDependencies:
|
| 1709 |
postcss: ^8.4.29
|
| 1710 |
|
| 1711 |
+
postcss-selector-parser@7.1.0:
|
| 1712 |
+
resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
|
| 1713 |
engines: {node: '>=4'}
|
| 1714 |
|
| 1715 |
postcss@8.5.3:
|
|
|
|
| 1720 |
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
|
| 1721 |
engines: {node: '>= 0.8.0'}
|
| 1722 |
|
| 1723 |
+
prettier-linter-helpers@1.0.0:
|
| 1724 |
+
resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==}
|
| 1725 |
+
engines: {node: '>=6.0.0'}
|
| 1726 |
+
|
| 1727 |
prettier-plugin-svelte@3.3.3:
|
| 1728 |
resolution: {integrity: sha512-yViK9zqQ+H2qZD1w/bH7W8i+bVfKrD8GIFjkFe4Thl6kCT9SlAsXVNmt3jCvQOCsnOhcvYgsoVlRV/Eu6x5nNw==}
|
| 1729 |
peerDependencies:
|
|
|
|
| 1790 |
engines: {node: '>=14'}
|
| 1791 |
hasBin: true
|
| 1792 |
|
| 1793 |
+
pretty-format@29.7.0:
|
| 1794 |
+
resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
|
| 1795 |
+
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
|
| 1796 |
+
|
| 1797 |
punycode@2.3.1:
|
| 1798 |
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
|
| 1799 |
engines: {node: '>=6'}
|
|
|
|
| 1808 |
resolution: {integrity: sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==}
|
| 1809 |
engines: {node: '>=4'}
|
| 1810 |
|
| 1811 |
+
react-is@18.3.1:
|
| 1812 |
+
resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
|
| 1813 |
+
|
| 1814 |
readable-stream@3.6.2:
|
| 1815 |
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
|
| 1816 |
engines: {node: '>= 6'}
|
| 1817 |
|
| 1818 |
+
readdirp@4.1.2:
|
| 1819 |
+
resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
|
| 1820 |
+
engines: {node: '>= 14.18.0'}
|
| 1821 |
|
| 1822 |
repeat-string@1.6.1:
|
| 1823 |
resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==}
|
|
|
|
| 1844 |
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
|
| 1845 |
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
|
| 1846 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1847 |
rollup@4.34.9:
|
| 1848 |
resolution: {integrity: sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==}
|
| 1849 |
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
|
|
|
|
| 1856 |
run-parallel@1.2.0:
|
| 1857 |
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
|
| 1858 |
|
| 1859 |
+
runed@0.23.4:
|
| 1860 |
+
resolution: {integrity: sha512-9q8oUiBYeXIDLWNK5DfCWlkL0EW3oGbk845VdKlPeia28l751VpfesaB/+7pI6rnbx1I6rqoZ2fZxptOJLxILA==}
|
| 1861 |
+
peerDependencies:
|
| 1862 |
+
svelte: ^5.7.0
|
| 1863 |
+
|
| 1864 |
+
runed@0.24.0:
|
| 1865 |
+
resolution: {integrity: sha512-kLp0qUdiwEn1Q9zrQlToN7g1PQ+F0XI7J3eABPi/hSwMMy0vEQAdmZQkCvy1BtynAmGiD8CwNSy06KH7iUsCNg==}
|
| 1866 |
+
peerDependencies:
|
| 1867 |
+
svelte: ^5.7.0
|
| 1868 |
+
|
| 1869 |
rxjs@7.8.2:
|
| 1870 |
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
|
| 1871 |
|
|
|
|
| 1879 |
safer-buffer@2.1.2:
|
| 1880 |
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
|
| 1881 |
|
|
|
|
|
|
|
|
|
|
| 1882 |
semver@7.7.1:
|
| 1883 |
resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
|
| 1884 |
engines: {node: '>=10'}
|
|
|
|
| 1902 |
resolution: {integrity: sha512-FoqMu0NCGBLCcAkS1qA+XJIQTR6/JHfQXl+uGteNCQ76T91DMUjPa9xfmeqMY3z80nLSg9yQmNjK0Px6RWsH/A==}
|
| 1903 |
engines: {node: '>=18'}
|
| 1904 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1905 |
source-map-js@1.2.1:
|
| 1906 |
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
|
| 1907 |
engines: {node: '>=0.10.0'}
|
|
|
|
| 1917 |
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
|
| 1918 |
engines: {node: '>=8'}
|
| 1919 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1920 |
strip-json-comments@3.1.1:
|
| 1921 |
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
| 1922 |
engines: {node: '>=8'}
|
|
|
|
| 1929 |
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
|
| 1930 |
engines: {node: '>= 0.4'}
|
| 1931 |
|
| 1932 |
+
svelte-check@4.1.5:
|
| 1933 |
+
resolution: {integrity: sha512-Gb0T2IqBNe1tLB9EB1Qh+LOe+JB8wt2/rNBDGvkxQVvk8vNeAoG+vZgFB/3P5+zC7RWlyBlzm9dVjZFph/maIg==}
|
| 1934 |
+
engines: {node: '>= 18.0.0'}
|
| 1935 |
hasBin: true
|
| 1936 |
peerDependencies:
|
| 1937 |
+
svelte: ^4.0.0 || ^5.0.0-next.0
|
| 1938 |
+
typescript: '>=5.0.0'
|
| 1939 |
|
| 1940 |
+
svelte-eslint-parser@1.1.0:
|
| 1941 |
+
resolution: {integrity: sha512-JP0v/wzDXWxza6c8K9ZjKKHYfgt0KidlbWx1e9n9UV4q+o28GTkk71fR0IDZDmLUDYs3vSq0+Tm9fofDqzGe1w==}
|
| 1942 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 1943 |
peerDependencies:
|
| 1944 |
svelte: ^3.37.0 || ^4.0.0 || ^5.0.0
|
| 1945 |
peerDependenciesMeta:
|
| 1946 |
svelte:
|
| 1947 |
optional: true
|
| 1948 |
|
| 1949 |
+
svelte@5.23.0:
|
| 1950 |
+
resolution: {integrity: sha512-v0lL3NuKontiCxholEiAXCB+BYbndlKbwlDMK0DS86WgGELMJSpyqCSbJeMEMBDwOglnS7Ar2Rq0wwa/z2L8Vg==}
|
| 1951 |
+
engines: {node: '>=18'}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1952 |
|
| 1953 |
+
synckit@0.9.2:
|
| 1954 |
+
resolution: {integrity: sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==}
|
| 1955 |
+
engines: {node: ^14.18.0 || >=16.0.0}
|
| 1956 |
|
| 1957 |
tailwind-merge@3.0.2:
|
| 1958 |
resolution: {integrity: sha512-l7z+OYZ7mu3DTqrL88RiKrKIqO3NcpEO8V/Od04bNpvk0kiIFndGEoqfuzvj4yuhRkHKjRkII2z+KS2HfPcSxw==}
|
|
|
|
| 1964 |
resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
|
| 1965 |
engines: {node: '>=6'}
|
| 1966 |
|
|
|
|
|
|
|
|
|
|
| 1967 |
through@2.3.8:
|
| 1968 |
resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
|
| 1969 |
|
|
|
|
| 1982 |
resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
|
| 1983 |
engines: {node: '>=6'}
|
| 1984 |
|
| 1985 |
+
ts-api-utils@2.0.1:
|
| 1986 |
+
resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
|
| 1987 |
+
engines: {node: '>=18.12'}
|
| 1988 |
peerDependencies:
|
| 1989 |
+
typescript: '>=4.8.4'
|
| 1990 |
|
| 1991 |
ts-patch@3.3.0:
|
| 1992 |
resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
|
|
|
|
| 1999 |
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
|
| 2000 |
engines: {node: '>= 0.8.0'}
|
| 2001 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2002 |
type-fest@0.21.3:
|
| 2003 |
resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
|
| 2004 |
engines: {node: '>=10'}
|
|
|
|
| 2007 |
resolution: {integrity: sha512-S/5/0kFftkq27FPNye0XM1e2NsnoD/3FS+pBmbjmmtLT6I+i344KoOf7pvXreaFsDamWeaJX55nczA1m5PsBDg==}
|
| 2008 |
engines: {node: '>=16'}
|
| 2009 |
|
| 2010 |
+
typescript-eslint@8.26.1:
|
| 2011 |
+
resolution: {integrity: sha512-t/oIs9mYyrwZGRpDv3g+3K6nZ5uhKEMt2oNmAPwaY4/ye0+EH4nXIPYNtkYFS6QHm+1DFg34DbglYBz5P9Xysg==}
|
| 2012 |
+
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
|
| 2013 |
+
peerDependencies:
|
| 2014 |
+
eslint: ^8.57.0 || ^9.0.0
|
| 2015 |
+
typescript: '>=4.8.4 <5.9.0'
|
| 2016 |
+
|
| 2017 |
typescript@5.6.3:
|
| 2018 |
resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==}
|
| 2019 |
engines: {node: '>=14.17'}
|
|
|
|
| 2149 |
yaml:
|
| 2150 |
optional: true
|
| 2151 |
|
| 2152 |
+
vitefu@1.0.6:
|
| 2153 |
+
resolution: {integrity: sha512-+Rex1GlappUyNN6UfwbVZne/9cYC4+R2XDk9xkNXBKMw6HQagdX9PgZ8V2v1WUSK1wfBLp7qbI1+XSNIlB1xmA==}
|
| 2154 |
peerDependencies:
|
| 2155 |
+
vite: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0
|
| 2156 |
peerDependenciesMeta:
|
| 2157 |
vite:
|
| 2158 |
optional: true
|
|
|
|
| 2181 |
resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
|
| 2182 |
engines: {node: '>=8'}
|
| 2183 |
|
|
|
|
|
|
|
|
|
|
| 2184 |
yaml@1.10.2:
|
| 2185 |
resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==}
|
| 2186 |
engines: {node: '>= 6'}
|
|
|
|
| 2198 |
resolution: {integrity: sha512-KHBC7z61OJeaMGnF3wqNZj+GGNXOyypZviiKpQeiHirG5Ib1ImwcLBH70rbMSkKfSmUNBsdf2PwaEJtKvgmkNw==}
|
| 2199 |
engines: {node: '>=12.20'}
|
| 2200 |
|
| 2201 |
+
zimmerframe@1.1.2:
|
| 2202 |
+
resolution: {integrity: sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==}
|
| 2203 |
+
|
| 2204 |
snapshots:
|
| 2205 |
|
| 2206 |
'@alloc/quick-lru@5.2.0': {}
|
|
|
|
| 2361 |
'@esbuild/win32-x64@0.25.1':
|
| 2362 |
optional: true
|
| 2363 |
|
| 2364 |
+
'@eslint-community/eslint-utils@4.4.1(eslint@9.22.0(jiti@2.4.2))':
|
| 2365 |
dependencies:
|
| 2366 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 2367 |
eslint-visitor-keys: 3.4.3
|
| 2368 |
|
| 2369 |
'@eslint-community/regexpp@4.12.1': {}
|
| 2370 |
|
| 2371 |
+
'@eslint/config-array@0.19.2':
|
| 2372 |
+
dependencies:
|
| 2373 |
+
'@eslint/object-schema': 2.1.6
|
| 2374 |
+
debug: 4.4.0
|
| 2375 |
+
minimatch: 3.1.2
|
| 2376 |
+
transitivePeerDependencies:
|
| 2377 |
+
- supports-color
|
| 2378 |
+
|
| 2379 |
+
'@eslint/config-helpers@0.1.0': {}
|
| 2380 |
+
|
| 2381 |
+
'@eslint/core@0.12.0':
|
| 2382 |
+
dependencies:
|
| 2383 |
+
'@types/json-schema': 7.0.15
|
| 2384 |
+
|
| 2385 |
+
'@eslint/eslintrc@3.3.0':
|
| 2386 |
dependencies:
|
| 2387 |
ajv: 6.12.6
|
| 2388 |
debug: 4.4.0
|
| 2389 |
+
espree: 10.3.0
|
| 2390 |
+
globals: 14.0.0
|
| 2391 |
ignore: 5.3.2
|
| 2392 |
import-fresh: 3.3.1
|
| 2393 |
js-yaml: 4.1.0
|
|
|
|
| 2396 |
transitivePeerDependencies:
|
| 2397 |
- supports-color
|
| 2398 |
|
| 2399 |
+
'@eslint/js@9.22.0': {}
|
| 2400 |
+
|
| 2401 |
+
'@eslint/object-schema@2.1.6': {}
|
| 2402 |
+
|
| 2403 |
+
'@eslint/plugin-kit@0.2.7':
|
| 2404 |
+
dependencies:
|
| 2405 |
+
'@eslint/core': 0.12.0
|
| 2406 |
+
levn: 0.4.1
|
| 2407 |
|
| 2408 |
'@floating-ui/core@1.6.9':
|
| 2409 |
dependencies:
|
|
|
|
| 2428 |
|
| 2429 |
'@huggingface/tasks@0.17.1': {}
|
| 2430 |
|
| 2431 |
+
'@humanfs/core@0.19.1': {}
|
| 2432 |
+
|
| 2433 |
+
'@humanfs/node@0.16.6':
|
| 2434 |
dependencies:
|
| 2435 |
+
'@humanfs/core': 0.19.1
|
| 2436 |
+
'@humanwhocodes/retry': 0.3.1
|
|
|
|
|
|
|
|
|
|
| 2437 |
|
| 2438 |
'@humanwhocodes/module-importer@1.0.1': {}
|
| 2439 |
|
| 2440 |
+
'@humanwhocodes/retry@0.3.1': {}
|
| 2441 |
+
|
| 2442 |
+
'@humanwhocodes/retry@0.4.2': {}
|
| 2443 |
|
| 2444 |
'@iconify-json/carbon@1.2.8':
|
| 2445 |
dependencies:
|
| 2446 |
'@iconify/types': 2.0.0
|
| 2447 |
|
| 2448 |
+
'@iconify-json/material-symbols@1.2.15':
|
| 2449 |
+
dependencies:
|
| 2450 |
+
'@iconify/types': 2.0.0
|
| 2451 |
+
|
| 2452 |
'@iconify/types@2.0.0': {}
|
| 2453 |
|
| 2454 |
'@iconify/utils@2.3.0':
|
|
|
|
| 2464 |
transitivePeerDependencies:
|
| 2465 |
- supports-color
|
| 2466 |
|
| 2467 |
+
'@jest/schemas@29.6.3':
|
| 2468 |
dependencies:
|
| 2469 |
+
'@sinclair/typebox': 0.27.8
|
| 2470 |
|
| 2471 |
'@jridgewell/gen-mapping@0.3.8':
|
| 2472 |
dependencies:
|
|
|
|
| 2485 |
'@jridgewell/resolve-uri': 3.1.2
|
| 2486 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 2487 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2488 |
'@nodelib/fs.scandir@2.1.5':
|
| 2489 |
dependencies:
|
| 2490 |
'@nodelib/fs.stat': 2.0.5
|
|
|
|
| 2497 |
'@nodelib/fs.scandir': 2.1.5
|
| 2498 |
fastq: 1.19.1
|
| 2499 |
|
| 2500 |
+
'@pkgr/core@0.1.1': {}
|
| 2501 |
+
|
| 2502 |
'@polka/url@1.0.0-next.28': {}
|
| 2503 |
|
| 2504 |
'@rollup/plugin-commonjs@28.0.2(rollup@4.34.9)':
|
|
|
|
| 2626 |
|
| 2627 |
'@samchon/openapi@3.0.0': {}
|
| 2628 |
|
| 2629 |
+
'@sinclair/typebox@0.27.8': {}
|
| 2630 |
+
|
| 2631 |
+
'@sveltejs/acorn-typescript@1.0.5(acorn@8.14.0)':
|
| 2632 |
+
dependencies:
|
| 2633 |
+
acorn: 8.14.0
|
| 2634 |
+
|
| 2635 |
+
'@sveltejs/adapter-auto@3.3.1(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))':
|
| 2636 |
dependencies:
|
| 2637 |
+
'@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 2638 |
import-meta-resolve: 4.1.0
|
| 2639 |
|
| 2640 |
+
'@sveltejs/adapter-node@5.2.12(@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))':
|
| 2641 |
dependencies:
|
| 2642 |
'@rollup/plugin-commonjs': 28.0.2(rollup@4.34.9)
|
| 2643 |
'@rollup/plugin-json': 6.1.0(rollup@4.34.9)
|
| 2644 |
'@rollup/plugin-node-resolve': 16.0.0(rollup@4.34.9)
|
| 2645 |
+
'@sveltejs/kit': 2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 2646 |
rollup: 4.34.9
|
| 2647 |
|
| 2648 |
+
'@sveltejs/kit@2.18.0(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))':
|
| 2649 |
dependencies:
|
| 2650 |
+
'@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 2651 |
'@types/cookie': 0.6.0
|
| 2652 |
cookie: 0.6.0
|
| 2653 |
devalue: 5.1.1
|
|
|
|
| 2659 |
sade: 1.8.1
|
| 2660 |
set-cookie-parser: 2.7.1
|
| 2661 |
sirv: 3.0.1
|
| 2662 |
+
svelte: 5.23.0
|
| 2663 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2664 |
|
| 2665 |
+
'@sveltejs/vite-plugin-svelte-inspector@3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))':
|
| 2666 |
dependencies:
|
| 2667 |
+
'@sveltejs/vite-plugin-svelte': 4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 2668 |
debug: 4.4.0
|
| 2669 |
+
svelte: 5.23.0
|
| 2670 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2671 |
transitivePeerDependencies:
|
| 2672 |
- supports-color
|
| 2673 |
|
| 2674 |
+
'@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))':
|
| 2675 |
dependencies:
|
| 2676 |
+
'@sveltejs/vite-plugin-svelte-inspector': 3.0.1(@sveltejs/vite-plugin-svelte@4.0.4(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1)))(svelte@5.23.0)(vite@5.4.14(lightningcss@1.29.1))
|
| 2677 |
debug: 4.4.0
|
| 2678 |
deepmerge: 4.3.1
|
| 2679 |
kleur: 4.1.5
|
| 2680 |
magic-string: 0.30.17
|
| 2681 |
+
svelte: 5.23.0
|
|
|
|
| 2682 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 2683 |
+
vitefu: 1.0.6(vite@5.4.14(lightningcss@1.29.1))
|
| 2684 |
transitivePeerDependencies:
|
| 2685 |
- supports-color
|
| 2686 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2687 |
'@tailwindcss/container-queries@0.1.1(tailwindcss@4.0.9)':
|
| 2688 |
dependencies:
|
| 2689 |
tailwindcss: 4.0.9
|
|
|
|
| 2756 |
|
| 2757 |
'@types/json-schema@7.0.15': {}
|
| 2758 |
|
|
|
|
|
|
|
| 2759 |
'@types/resolve@1.20.2': {}
|
| 2760 |
|
| 2761 |
+
'@typescript-eslint/eslint-plugin@8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)':
|
|
|
|
|
|
|
| 2762 |
dependencies:
|
| 2763 |
'@eslint-community/regexpp': 4.12.1
|
| 2764 |
+
'@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 2765 |
+
'@typescript-eslint/scope-manager': 8.26.1
|
| 2766 |
+
'@typescript-eslint/type-utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 2767 |
+
'@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 2768 |
+
'@typescript-eslint/visitor-keys': 8.26.1
|
| 2769 |
+
eslint: 9.22.0(jiti@2.4.2)
|
|
|
|
| 2770 |
graphemer: 1.4.0
|
| 2771 |
ignore: 5.3.2
|
| 2772 |
natural-compare: 1.4.0
|
| 2773 |
+
ts-api-utils: 2.0.1(typescript@5.8.2)
|
|
|
|
|
|
|
| 2774 |
typescript: 5.8.2
|
| 2775 |
transitivePeerDependencies:
|
| 2776 |
- supports-color
|
| 2777 |
|
| 2778 |
+
'@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)':
|
| 2779 |
dependencies:
|
| 2780 |
+
'@typescript-eslint/scope-manager': 8.26.1
|
| 2781 |
+
'@typescript-eslint/types': 8.26.1
|
| 2782 |
+
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2)
|
| 2783 |
+
'@typescript-eslint/visitor-keys': 8.26.1
|
| 2784 |
debug: 4.4.0
|
| 2785 |
+
eslint: 9.22.0(jiti@2.4.2)
|
|
|
|
| 2786 |
typescript: 5.8.2
|
| 2787 |
transitivePeerDependencies:
|
| 2788 |
- supports-color
|
| 2789 |
|
| 2790 |
+
'@typescript-eslint/scope-manager@8.26.1':
|
| 2791 |
dependencies:
|
| 2792 |
+
'@typescript-eslint/types': 8.26.1
|
| 2793 |
+
'@typescript-eslint/visitor-keys': 8.26.1
|
| 2794 |
|
| 2795 |
+
'@typescript-eslint/type-utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)':
|
| 2796 |
dependencies:
|
| 2797 |
+
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2)
|
| 2798 |
+
'@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 2799 |
debug: 4.4.0
|
| 2800 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 2801 |
+
ts-api-utils: 2.0.1(typescript@5.8.2)
|
|
|
|
| 2802 |
typescript: 5.8.2
|
| 2803 |
transitivePeerDependencies:
|
| 2804 |
- supports-color
|
| 2805 |
|
| 2806 |
+
'@typescript-eslint/types@8.26.1': {}
|
| 2807 |
|
| 2808 |
+
'@typescript-eslint/typescript-estree@8.26.1(typescript@5.8.2)':
|
| 2809 |
dependencies:
|
| 2810 |
+
'@typescript-eslint/types': 8.26.1
|
| 2811 |
+
'@typescript-eslint/visitor-keys': 8.26.1
|
| 2812 |
debug: 4.4.0
|
| 2813 |
+
fast-glob: 3.3.3
|
| 2814 |
is-glob: 4.0.3
|
| 2815 |
+
minimatch: 9.0.5
|
| 2816 |
semver: 7.7.1
|
| 2817 |
+
ts-api-utils: 2.0.1(typescript@5.8.2)
|
|
|
|
| 2818 |
typescript: 5.8.2
|
| 2819 |
transitivePeerDependencies:
|
| 2820 |
- supports-color
|
| 2821 |
|
| 2822 |
+
'@typescript-eslint/utils@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)':
|
| 2823 |
dependencies:
|
| 2824 |
+
'@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2))
|
| 2825 |
+
'@typescript-eslint/scope-manager': 8.26.1
|
| 2826 |
+
'@typescript-eslint/types': 8.26.1
|
| 2827 |
+
'@typescript-eslint/typescript-estree': 8.26.1(typescript@5.8.2)
|
| 2828 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 2829 |
+
typescript: 5.8.2
|
|
|
|
|
|
|
| 2830 |
transitivePeerDependencies:
|
| 2831 |
- supports-color
|
|
|
|
| 2832 |
|
| 2833 |
+
'@typescript-eslint/visitor-keys@8.26.1':
|
| 2834 |
dependencies:
|
| 2835 |
+
'@typescript-eslint/types': 8.26.1
|
| 2836 |
+
eslint-visitor-keys: 4.2.0
|
|
|
|
|
|
|
| 2837 |
|
| 2838 |
acorn-jsx@5.3.2(acorn@8.14.0):
|
| 2839 |
dependencies:
|
|
|
|
| 2858 |
dependencies:
|
| 2859 |
color-convert: 2.0.1
|
| 2860 |
|
| 2861 |
+
ansi-styles@5.2.0: {}
|
|
|
|
|
|
|
|
|
|
| 2862 |
|
| 2863 |
argparse@2.0.1: {}
|
| 2864 |
|
|
|
|
| 2866 |
|
| 2867 |
array-timsort@1.0.3: {}
|
| 2868 |
|
| 2869 |
+
axe-core@4.9.1: {}
|
| 2870 |
|
| 2871 |
axobject-query@4.1.0: {}
|
| 2872 |
|
|
|
|
| 2874 |
|
| 2875 |
base64-js@1.5.1: {}
|
| 2876 |
|
|
|
|
|
|
|
| 2877 |
bl@4.1.0:
|
| 2878 |
dependencies:
|
| 2879 |
buffer: 5.7.1
|
|
|
|
| 2893 |
dependencies:
|
| 2894 |
fill-range: 7.1.1
|
| 2895 |
|
|
|
|
|
|
|
| 2896 |
buffer@5.7.1:
|
| 2897 |
dependencies:
|
| 2898 |
base64-js: 1.5.1
|
|
|
|
| 2907 |
|
| 2908 |
chardet@0.7.0: {}
|
| 2909 |
|
| 2910 |
+
chokidar@4.0.3:
|
| 2911 |
dependencies:
|
| 2912 |
+
readdirp: 4.1.2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2913 |
|
| 2914 |
cli-cursor@3.1.0:
|
| 2915 |
dependencies:
|
|
|
|
| 2923 |
|
| 2924 |
clsx@2.1.1: {}
|
| 2925 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2926 |
color-convert@2.0.1:
|
| 2927 |
dependencies:
|
| 2928 |
color-name: 1.1.4
|
|
|
|
| 2961 |
shebang-command: 2.0.0
|
| 2962 |
which: 2.0.2
|
| 2963 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2964 |
cssesc@3.0.0: {}
|
| 2965 |
|
| 2966 |
debug@4.4.0:
|
|
|
|
| 2977 |
|
| 2978 |
defu@6.1.4: {}
|
| 2979 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2980 |
detect-libc@1.0.3: {}
|
| 2981 |
|
| 2982 |
devalue@5.1.1: {}
|
| 2983 |
|
| 2984 |
diff-match-patch@1.0.5: {}
|
| 2985 |
|
| 2986 |
+
diff-sequences@29.6.3: {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 2987 |
|
| 2988 |
drange@1.1.1: {}
|
| 2989 |
|
|
|
|
| 2994 |
graceful-fs: 4.2.11
|
| 2995 |
tapable: 2.2.1
|
| 2996 |
|
|
|
|
|
|
|
| 2997 |
esbuild@0.21.5:
|
| 2998 |
optionalDependencies:
|
| 2999 |
'@esbuild/aix-ppc64': 0.21.5
|
|
|
|
| 3052 |
|
| 3053 |
escape-string-regexp@4.0.0: {}
|
| 3054 |
|
| 3055 |
+
eslint-compat-utils@0.6.4(eslint@9.22.0(jiti@2.4.2)):
|
| 3056 |
dependencies:
|
| 3057 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 3058 |
semver: 7.7.1
|
| 3059 |
|
| 3060 |
+
eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)):
|
| 3061 |
+
dependencies:
|
| 3062 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 3063 |
+
|
| 3064 |
+
eslint-plugin-prettier@5.2.3(eslint-config-prettier@10.1.1(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2))(prettier@3.5.3):
|
| 3065 |
dependencies:
|
| 3066 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 3067 |
+
prettier: 3.5.3
|
| 3068 |
+
prettier-linter-helpers: 1.0.0
|
| 3069 |
+
synckit: 0.9.2
|
| 3070 |
+
optionalDependencies:
|
| 3071 |
+
eslint-config-prettier: 10.1.1(eslint@9.22.0(jiti@2.4.2))
|
| 3072 |
|
| 3073 |
+
eslint-plugin-svelte@3.3.1(eslint@9.22.0(jiti@2.4.2))(svelte@5.23.0):
|
| 3074 |
dependencies:
|
| 3075 |
+
'@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2))
|
| 3076 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3077 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 3078 |
+
eslint-compat-utils: 0.6.4(eslint@9.22.0(jiti@2.4.2))
|
| 3079 |
esutils: 2.0.3
|
| 3080 |
known-css-properties: 0.35.0
|
| 3081 |
postcss: 8.5.3
|
| 3082 |
postcss-load-config: 3.1.4(postcss@8.5.3)
|
| 3083 |
+
postcss-safe-parser: 7.0.1(postcss@8.5.3)
|
|
|
|
| 3084 |
semver: 7.7.1
|
| 3085 |
+
svelte-eslint-parser: 1.1.0(svelte@5.23.0)
|
| 3086 |
optionalDependencies:
|
| 3087 |
+
svelte: 5.23.0
|
| 3088 |
transitivePeerDependencies:
|
| 3089 |
- ts-node
|
| 3090 |
|
| 3091 |
+
eslint-scope@8.3.0:
|
| 3092 |
dependencies:
|
| 3093 |
esrecurse: 4.3.0
|
| 3094 |
estraverse: 5.3.0
|
| 3095 |
|
| 3096 |
eslint-visitor-keys@3.4.3: {}
|
| 3097 |
|
| 3098 |
+
eslint-visitor-keys@4.2.0: {}
|
| 3099 |
+
|
| 3100 |
+
eslint@9.22.0(jiti@2.4.2):
|
| 3101 |
dependencies:
|
| 3102 |
+
'@eslint-community/eslint-utils': 4.4.1(eslint@9.22.0(jiti@2.4.2))
|
| 3103 |
'@eslint-community/regexpp': 4.12.1
|
| 3104 |
+
'@eslint/config-array': 0.19.2
|
| 3105 |
+
'@eslint/config-helpers': 0.1.0
|
| 3106 |
+
'@eslint/core': 0.12.0
|
| 3107 |
+
'@eslint/eslintrc': 3.3.0
|
| 3108 |
+
'@eslint/js': 9.22.0
|
| 3109 |
+
'@eslint/plugin-kit': 0.2.7
|
| 3110 |
+
'@humanfs/node': 0.16.6
|
| 3111 |
'@humanwhocodes/module-importer': 1.0.1
|
| 3112 |
+
'@humanwhocodes/retry': 0.4.2
|
| 3113 |
+
'@types/estree': 1.0.6
|
| 3114 |
+
'@types/json-schema': 7.0.15
|
| 3115 |
ajv: 6.12.6
|
| 3116 |
chalk: 4.1.2
|
| 3117 |
cross-spawn: 7.0.6
|
| 3118 |
debug: 4.4.0
|
|
|
|
| 3119 |
escape-string-regexp: 4.0.0
|
| 3120 |
+
eslint-scope: 8.3.0
|
| 3121 |
+
eslint-visitor-keys: 4.2.0
|
| 3122 |
+
espree: 10.3.0
|
| 3123 |
esquery: 1.6.0
|
| 3124 |
esutils: 2.0.3
|
| 3125 |
fast-deep-equal: 3.1.3
|
| 3126 |
+
file-entry-cache: 8.0.0
|
| 3127 |
find-up: 5.0.0
|
| 3128 |
glob-parent: 6.0.2
|
|
|
|
|
|
|
| 3129 |
ignore: 5.3.2
|
| 3130 |
imurmurhash: 0.1.4
|
| 3131 |
is-glob: 4.0.3
|
|
|
|
|
|
|
| 3132 |
json-stable-stringify-without-jsonify: 1.0.1
|
|
|
|
| 3133 |
lodash.merge: 4.6.2
|
| 3134 |
minimatch: 3.1.2
|
| 3135 |
natural-compare: 1.4.0
|
| 3136 |
optionator: 0.9.4
|
| 3137 |
+
optionalDependencies:
|
| 3138 |
+
jiti: 2.4.2
|
| 3139 |
transitivePeerDependencies:
|
| 3140 |
- supports-color
|
| 3141 |
|
| 3142 |
esm-env@1.2.2: {}
|
| 3143 |
|
| 3144 |
+
espree@10.3.0:
|
| 3145 |
dependencies:
|
| 3146 |
acorn: 8.14.0
|
| 3147 |
acorn-jsx: 5.3.2(acorn@8.14.0)
|
| 3148 |
+
eslint-visitor-keys: 4.2.0
|
| 3149 |
|
| 3150 |
esprima@4.0.1: {}
|
| 3151 |
|
|
|
|
| 3153 |
dependencies:
|
| 3154 |
estraverse: 5.3.0
|
| 3155 |
|
| 3156 |
+
esrap@1.4.5:
|
| 3157 |
+
dependencies:
|
| 3158 |
+
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3159 |
+
|
| 3160 |
esrecurse@4.3.0:
|
| 3161 |
dependencies:
|
| 3162 |
estraverse: 5.3.0
|
|
|
|
| 3165 |
|
| 3166 |
estree-walker@2.0.2: {}
|
| 3167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3168 |
esutils@2.0.3: {}
|
| 3169 |
|
| 3170 |
exsolve@1.0.4: {}
|
|
|
|
| 3177 |
|
| 3178 |
fast-deep-equal@3.1.3: {}
|
| 3179 |
|
| 3180 |
+
fast-diff@1.3.0: {}
|
| 3181 |
+
|
| 3182 |
fast-glob@3.3.3:
|
| 3183 |
dependencies:
|
| 3184 |
'@nodelib/fs.stat': 2.0.5
|
|
|
|
| 3203 |
dependencies:
|
| 3204 |
escape-string-regexp: 1.0.5
|
| 3205 |
|
| 3206 |
+
file-entry-cache@8.0.0:
|
| 3207 |
dependencies:
|
| 3208 |
+
flat-cache: 4.0.1
|
| 3209 |
|
| 3210 |
fill-range@7.1.1:
|
| 3211 |
dependencies:
|
|
|
|
| 3226 |
locate-path: 7.2.0
|
| 3227 |
path-exists: 5.0.0
|
| 3228 |
|
| 3229 |
+
flat-cache@4.0.1:
|
| 3230 |
dependencies:
|
| 3231 |
flatted: 3.3.3
|
| 3232 |
keyv: 4.5.4
|
|
|
|
| 3233 |
|
| 3234 |
flatted@3.3.3: {}
|
| 3235 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3236 |
fsevents@2.3.3:
|
| 3237 |
optional: true
|
| 3238 |
|
|
|
|
| 3246 |
dependencies:
|
| 3247 |
is-glob: 4.0.3
|
| 3248 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3249 |
global-prefix@4.0.0:
|
| 3250 |
dependencies:
|
| 3251 |
ini: 4.1.3
|
| 3252 |
kind-of: 6.0.3
|
| 3253 |
which: 4.0.0
|
| 3254 |
|
| 3255 |
+
globals@14.0.0: {}
|
|
|
|
|
|
|
| 3256 |
|
| 3257 |
globals@15.15.0: {}
|
| 3258 |
|
| 3259 |
+
globals@16.0.0: {}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3260 |
|
| 3261 |
graceful-fs@4.2.11: {}
|
| 3262 |
|
|
|
|
| 3289 |
|
| 3290 |
imurmurhash@0.1.4: {}
|
| 3291 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3292 |
inherits@2.0.4: {}
|
| 3293 |
|
| 3294 |
ini@4.1.3: {}
|
|
|
|
| 3311 |
through: 2.3.8
|
| 3312 |
wrap-ansi: 6.2.0
|
| 3313 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3314 |
is-core-module@2.16.1:
|
| 3315 |
dependencies:
|
| 3316 |
hasown: 2.0.2
|
|
|
|
| 3329 |
|
| 3330 |
is-number@7.0.0: {}
|
| 3331 |
|
|
|
|
|
|
|
| 3332 |
is-reference@1.2.1:
|
| 3333 |
dependencies:
|
| 3334 |
'@types/estree': 1.0.6
|
|
|
|
| 3343 |
|
| 3344 |
isexe@3.1.1: {}
|
| 3345 |
|
| 3346 |
+
jest-axe@9.0.0:
|
| 3347 |
+
dependencies:
|
| 3348 |
+
axe-core: 4.9.1
|
| 3349 |
+
chalk: 4.1.2
|
| 3350 |
+
jest-matcher-utils: 29.2.2
|
| 3351 |
+
lodash.merge: 4.6.2
|
| 3352 |
+
|
| 3353 |
+
jest-diff@29.7.0:
|
| 3354 |
+
dependencies:
|
| 3355 |
+
chalk: 4.1.2
|
| 3356 |
+
diff-sequences: 29.6.3
|
| 3357 |
+
jest-get-type: 29.6.3
|
| 3358 |
+
pretty-format: 29.7.0
|
| 3359 |
+
|
| 3360 |
+
jest-get-type@29.6.3: {}
|
| 3361 |
+
|
| 3362 |
+
jest-matcher-utils@29.2.2:
|
| 3363 |
+
dependencies:
|
| 3364 |
+
chalk: 4.1.2
|
| 3365 |
+
jest-diff: 29.7.0
|
| 3366 |
+
jest-get-type: 29.6.3
|
| 3367 |
+
pretty-format: 29.7.0
|
| 3368 |
+
|
| 3369 |
jiti@2.4.2: {}
|
| 3370 |
|
| 3371 |
js-yaml@4.1.0:
|
|
|
|
| 3442 |
|
| 3443 |
lilconfig@2.1.0: {}
|
| 3444 |
|
|
|
|
|
|
|
|
|
|
| 3445 |
local-pkg@1.1.1:
|
| 3446 |
dependencies:
|
| 3447 |
mlly: 1.7.4
|
|
|
|
| 3471 |
dependencies:
|
| 3472 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3473 |
|
| 3474 |
+
melt@0.18.4(@floating-ui/dom@1.6.13)(svelte@5.23.0):
|
| 3475 |
+
dependencies:
|
| 3476 |
+
'@floating-ui/dom': 1.6.13
|
| 3477 |
+
jest-axe: 9.0.0
|
| 3478 |
+
nanoid: 5.1.2
|
| 3479 |
+
runed: 0.23.4(svelte@5.23.0)
|
| 3480 |
+
svelte: 5.23.0
|
| 3481 |
|
| 3482 |
merge2@1.4.1: {}
|
| 3483 |
|
|
|
|
| 3488 |
|
| 3489 |
mimic-fn@2.1.0: {}
|
| 3490 |
|
|
|
|
|
|
|
| 3491 |
minimatch@3.1.2:
|
| 3492 |
dependencies:
|
| 3493 |
brace-expansion: 1.1.11
|
| 3494 |
|
| 3495 |
+
minimatch@9.0.5:
|
| 3496 |
dependencies:
|
| 3497 |
brace-expansion: 2.0.1
|
| 3498 |
|
| 3499 |
minimist@1.2.8: {}
|
| 3500 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3501 |
mlly@1.7.4:
|
| 3502 |
dependencies:
|
| 3503 |
acorn: 8.14.0
|
|
|
|
| 3519 |
|
| 3520 |
natural-compare@1.4.0: {}
|
| 3521 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3522 |
onetime@5.1.2:
|
| 3523 |
dependencies:
|
| 3524 |
mimic-fn: 2.1.0
|
|
|
|
| 3574 |
|
| 3575 |
path-exists@5.0.0: {}
|
| 3576 |
|
|
|
|
|
|
|
| 3577 |
path-key@3.1.1: {}
|
| 3578 |
|
| 3579 |
path-parse@1.0.7: {}
|
| 3580 |
|
|
|
|
|
|
|
| 3581 |
pathe@1.1.2: {}
|
| 3582 |
|
| 3583 |
pathe@2.0.3: {}
|
| 3584 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3585 |
picocolors@1.1.1: {}
|
| 3586 |
|
| 3587 |
picomatch@2.3.1: {}
|
|
|
|
| 3611 |
optionalDependencies:
|
| 3612 |
postcss: 8.5.3
|
| 3613 |
|
| 3614 |
+
postcss-safe-parser@7.0.1(postcss@8.5.3):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3615 |
dependencies:
|
| 3616 |
postcss: 8.5.3
|
| 3617 |
|
|
|
|
| 3619 |
dependencies:
|
| 3620 |
postcss: 8.5.3
|
| 3621 |
|
| 3622 |
+
postcss-selector-parser@7.1.0:
|
| 3623 |
dependencies:
|
| 3624 |
cssesc: 3.0.0
|
| 3625 |
util-deprecate: 1.0.2
|
|
|
|
| 3632 |
|
| 3633 |
prelude-ls@1.2.1: {}
|
| 3634 |
|
| 3635 |
+
prettier-linter-helpers@1.0.0:
|
| 3636 |
+
dependencies:
|
| 3637 |
+
fast-diff: 1.3.0
|
| 3638 |
+
|
| 3639 |
+
prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.23.0):
|
| 3640 |
dependencies:
|
| 3641 |
prettier: 3.5.3
|
| 3642 |
+
svelte: 5.23.0
|
| 3643 |
|
| 3644 |
+
prettier-plugin-tailwindcss@0.6.11(prettier-plugin-svelte@3.3.3(prettier@3.5.3)(svelte@5.23.0))(prettier@3.5.3):
|
| 3645 |
dependencies:
|
| 3646 |
prettier: 3.5.3
|
| 3647 |
optionalDependencies:
|
| 3648 |
+
prettier-plugin-svelte: 3.3.3(prettier@3.5.3)(svelte@5.23.0)
|
| 3649 |
|
| 3650 |
prettier@3.5.3: {}
|
| 3651 |
|
| 3652 |
+
pretty-format@29.7.0:
|
| 3653 |
+
dependencies:
|
| 3654 |
+
'@jest/schemas': 29.6.3
|
| 3655 |
+
ansi-styles: 5.2.0
|
| 3656 |
+
react-is: 18.3.1
|
| 3657 |
+
|
| 3658 |
punycode@2.3.1: {}
|
| 3659 |
|
| 3660 |
quansync@0.2.8: {}
|
|
|
|
| 3666 |
drange: 1.1.1
|
| 3667 |
ret: 0.2.2
|
| 3668 |
|
| 3669 |
+
react-is@18.3.1: {}
|
| 3670 |
+
|
| 3671 |
readable-stream@3.6.2:
|
| 3672 |
dependencies:
|
| 3673 |
inherits: 2.0.4
|
| 3674 |
string_decoder: 1.3.0
|
| 3675 |
util-deprecate: 1.0.2
|
| 3676 |
|
| 3677 |
+
readdirp@4.1.2: {}
|
|
|
|
|
|
|
| 3678 |
|
| 3679 |
repeat-string@1.6.1: {}
|
| 3680 |
|
|
|
|
| 3695 |
|
| 3696 |
reusify@1.1.0: {}
|
| 3697 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3698 |
rollup@4.34.9:
|
| 3699 |
dependencies:
|
| 3700 |
'@types/estree': 1.0.6
|
|
|
|
| 3726 |
dependencies:
|
| 3727 |
queue-microtask: 1.2.3
|
| 3728 |
|
| 3729 |
+
runed@0.23.4(svelte@5.23.0):
|
| 3730 |
+
dependencies:
|
| 3731 |
+
esm-env: 1.2.2
|
| 3732 |
+
svelte: 5.23.0
|
| 3733 |
+
|
| 3734 |
+
runed@0.24.0(svelte@5.23.0):
|
| 3735 |
+
dependencies:
|
| 3736 |
+
esm-env: 1.2.2
|
| 3737 |
+
svelte: 5.23.0
|
| 3738 |
+
|
| 3739 |
rxjs@7.8.2:
|
| 3740 |
dependencies:
|
| 3741 |
tslib: 2.8.1
|
|
|
|
| 3748 |
|
| 3749 |
safer-buffer@2.1.2: {}
|
| 3750 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3751 |
semver@7.7.1: {}
|
| 3752 |
|
| 3753 |
set-cookie-parser@2.7.1: {}
|
|
|
|
| 3766 |
mrmime: 2.0.1
|
| 3767 |
totalist: 3.0.1
|
| 3768 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3769 |
source-map-js@1.2.1: {}
|
| 3770 |
|
| 3771 |
string-width@4.2.3:
|
|
|
|
| 3782 |
dependencies:
|
| 3783 |
ansi-regex: 5.0.1
|
| 3784 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3785 |
strip-json-comments@3.1.1: {}
|
| 3786 |
|
| 3787 |
supports-color@7.2.0:
|
|
|
|
| 3790 |
|
| 3791 |
supports-preserve-symlinks-flag@1.0.0: {}
|
| 3792 |
|
| 3793 |
+
svelte-check@4.1.5(picomatch@4.0.2)(svelte@5.23.0)(typescript@5.8.2):
|
| 3794 |
dependencies:
|
| 3795 |
'@jridgewell/trace-mapping': 0.3.25
|
| 3796 |
+
chokidar: 4.0.3
|
| 3797 |
+
fdir: 6.4.3(picomatch@4.0.2)
|
| 3798 |
picocolors: 1.1.1
|
| 3799 |
sade: 1.8.1
|
| 3800 |
+
svelte: 5.23.0
|
|
|
|
| 3801 |
typescript: 5.8.2
|
| 3802 |
transitivePeerDependencies:
|
| 3803 |
+
- picomatch
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3804 |
|
| 3805 |
+
svelte-eslint-parser@1.1.0(svelte@5.23.0):
|
| 3806 |
dependencies:
|
| 3807 |
+
eslint-scope: 8.3.0
|
| 3808 |
+
eslint-visitor-keys: 4.2.0
|
| 3809 |
+
espree: 10.3.0
|
| 3810 |
postcss: 8.5.3
|
| 3811 |
postcss-scss: 4.0.9(postcss@8.5.3)
|
| 3812 |
+
postcss-selector-parser: 7.1.0
|
| 3813 |
optionalDependencies:
|
| 3814 |
+
svelte: 5.23.0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3815 |
|
| 3816 |
+
svelte@5.23.0:
|
| 3817 |
dependencies:
|
| 3818 |
'@ampproject/remapping': 2.3.0
|
| 3819 |
'@jridgewell/sourcemap-codec': 1.5.0
|
| 3820 |
+
'@sveltejs/acorn-typescript': 1.0.5(acorn@8.14.0)
|
| 3821 |
'@types/estree': 1.0.6
|
| 3822 |
acorn: 8.14.0
|
| 3823 |
aria-query: 5.3.2
|
| 3824 |
axobject-query: 4.1.0
|
| 3825 |
+
clsx: 2.1.1
|
| 3826 |
+
esm-env: 1.2.2
|
| 3827 |
+
esrap: 1.4.5
|
| 3828 |
is-reference: 3.0.3
|
| 3829 |
locate-character: 3.0.0
|
| 3830 |
magic-string: 0.30.17
|
| 3831 |
+
zimmerframe: 1.1.2
|
| 3832 |
|
| 3833 |
+
synckit@0.9.2:
|
| 3834 |
+
dependencies:
|
| 3835 |
+
'@pkgr/core': 0.1.1
|
| 3836 |
+
tslib: 2.8.1
|
| 3837 |
|
| 3838 |
tailwind-merge@3.0.2: {}
|
| 3839 |
|
|
|
|
| 3841 |
|
| 3842 |
tapable@2.2.1: {}
|
| 3843 |
|
|
|
|
|
|
|
| 3844 |
through@2.3.8: {}
|
| 3845 |
|
| 3846 |
tinyexec@0.3.2: {}
|
|
|
|
| 3855 |
|
| 3856 |
totalist@3.0.1: {}
|
| 3857 |
|
| 3858 |
+
ts-api-utils@2.0.1(typescript@5.8.2):
|
| 3859 |
dependencies:
|
| 3860 |
typescript: 5.8.2
|
| 3861 |
|
|
|
|
| 3874 |
dependencies:
|
| 3875 |
prelude-ls: 1.2.1
|
| 3876 |
|
|
|
|
|
|
|
| 3877 |
type-fest@0.21.3: {}
|
| 3878 |
|
| 3879 |
type-fest@4.37.0: {}
|
| 3880 |
|
| 3881 |
+
typescript-eslint@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2):
|
| 3882 |
+
dependencies:
|
| 3883 |
+
'@typescript-eslint/eslint-plugin': 8.26.1(@typescript-eslint/parser@8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 3884 |
+
'@typescript-eslint/parser': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 3885 |
+
'@typescript-eslint/utils': 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
|
| 3886 |
+
eslint: 9.22.0(jiti@2.4.2)
|
| 3887 |
+
typescript: 5.8.2
|
| 3888 |
+
transitivePeerDependencies:
|
| 3889 |
+
- supports-color
|
| 3890 |
+
|
| 3891 |
typescript@5.6.3: {}
|
| 3892 |
|
| 3893 |
typescript@5.8.2: {}
|
|
|
|
| 3914 |
|
| 3915 |
ufo@1.5.4: {}
|
| 3916 |
|
| 3917 |
+
unplugin-icons@22.1.0(svelte@5.23.0):
|
| 3918 |
dependencies:
|
| 3919 |
'@antfu/install-pkg': 1.0.0
|
| 3920 |
'@iconify/utils': 2.3.0
|
|
|
|
| 3922 |
local-pkg: 1.1.1
|
| 3923 |
unplugin: 2.2.0
|
| 3924 |
optionalDependencies:
|
| 3925 |
+
svelte: 5.23.0
|
| 3926 |
transitivePeerDependencies:
|
| 3927 |
- supports-color
|
| 3928 |
|
|
|
|
| 3962 |
lightningcss: 1.29.1
|
| 3963 |
yaml: 2.7.0
|
| 3964 |
|
| 3965 |
+
vitefu@1.0.6(vite@5.4.14(lightningcss@1.29.1)):
|
| 3966 |
optionalDependencies:
|
| 3967 |
vite: 5.4.14(lightningcss@1.29.1)
|
| 3968 |
|
|
|
|
| 3988 |
string-width: 4.2.3
|
| 3989 |
strip-ansi: 6.0.1
|
| 3990 |
|
|
|
|
|
|
|
| 3991 |
yaml@1.10.2: {}
|
| 3992 |
|
| 3993 |
yaml@2.7.0:
|
|
|
|
| 3996 |
yocto-queue@0.1.0: {}
|
| 3997 |
|
| 3998 |
yocto-queue@1.2.0: {}
|
| 3999 |
+
|
| 4000 |
+
zimmerframe@1.1.2: {}
|
src/lib/actions/autofocus.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { tick } from "svelte";
|
| 2 |
+
|
| 3 |
+
export function autofocus(node: HTMLElement) {
|
| 4 |
+
tick().then(() => {
|
| 5 |
+
node.focus();
|
| 6 |
+
});
|
| 7 |
+
}
|
src/lib/components/DebugMenu.svelte
DELETED
|
@@ -1,81 +0,0 @@
|
|
| 1 |
-
<script lang="ts">
|
| 2 |
-
import { dev } from "$app/environment";
|
| 3 |
-
import { session } from "$lib/stores/session";
|
| 4 |
-
import { createPopover } from "@melt-ui/svelte";
|
| 5 |
-
import { prompt } from "./Prompts.svelte";
|
| 6 |
-
import { token } from "$lib/stores/token";
|
| 7 |
-
|
| 8 |
-
let innerWidth: number;
|
| 9 |
-
let innerHeight: number;
|
| 10 |
-
|
| 11 |
-
function toggleTheme() {
|
| 12 |
-
document.body.classList.toggle("dark");
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
const {
|
| 16 |
-
elements: { trigger, content },
|
| 17 |
-
} = createPopover();
|
| 18 |
-
</script>
|
| 19 |
-
|
| 20 |
-
<svelte:window bind:innerWidth bind:innerHeight />
|
| 21 |
-
|
| 22 |
-
{#if dev}
|
| 23 |
-
<div class="abs-x-center fixed bottom-0 z-50">
|
| 24 |
-
<button class="rounded-t-md bg-gray-500 px-3 py-1 text-xs text-white hover:bg-gray-600" {...$trigger} use:trigger>
|
| 25 |
-
Debug
|
| 26 |
-
</button>
|
| 27 |
-
|
| 28 |
-
<div
|
| 29 |
-
class="mb-2 w-64 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
|
| 30 |
-
{...$content}
|
| 31 |
-
use:content
|
| 32 |
-
>
|
| 33 |
-
<h3 class="mb-3 text-lg font-semibold dark:text-white">Debug Menu</h3>
|
| 34 |
-
|
| 35 |
-
<div class="space-y-3">
|
| 36 |
-
<div class="text-sm dark:text-gray-300">
|
| 37 |
-
<p>Viewport: {innerWidth}x{innerHeight}</p>
|
| 38 |
-
<p>Environment: {import.meta.env.MODE}</p>
|
| 39 |
-
</div>
|
| 40 |
-
|
| 41 |
-
<div class="flex flex-col gap-2">
|
| 42 |
-
<button
|
| 43 |
-
class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
|
| 44 |
-
on:click={toggleTheme}
|
| 45 |
-
>
|
| 46 |
-
Toggle Theme
|
| 47 |
-
</button>
|
| 48 |
-
<button
|
| 49 |
-
class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
|
| 50 |
-
on:click={() => {
|
| 51 |
-
console.log($session);
|
| 52 |
-
}}
|
| 53 |
-
>
|
| 54 |
-
Log session to console
|
| 55 |
-
</button>
|
| 56 |
-
<button
|
| 57 |
-
class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
|
| 58 |
-
on:click={async () => {
|
| 59 |
-
console.log(await prompt("Test prompt"));
|
| 60 |
-
}}
|
| 61 |
-
>
|
| 62 |
-
Test prompt
|
| 63 |
-
</button>
|
| 64 |
-
|
| 65 |
-
<button
|
| 66 |
-
class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
|
| 67 |
-
on:click={async () => {
|
| 68 |
-
$token.showModal = true;
|
| 69 |
-
}}
|
| 70 |
-
>
|
| 71 |
-
Show token modal
|
| 72 |
-
</button>
|
| 73 |
-
</div>
|
| 74 |
-
</div>
|
| 75 |
-
</div>
|
| 76 |
-
</div>
|
| 77 |
-
{/if}
|
| 78 |
-
|
| 79 |
-
<style>
|
| 80 |
-
/* Add any additional styles here */
|
| 81 |
-
</style>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/components/InferencePlayground/InferencePlaygroundModelSelectorModal.svelte
DELETED
|
@@ -1,175 +0,0 @@
|
|
| 1 |
-
<script lang="ts">
|
| 2 |
-
import type { Conversation } from "$lib/types";
|
| 3 |
-
|
| 4 |
-
import { createEventDispatcher, onMount, tick } from "svelte";
|
| 5 |
-
|
| 6 |
-
import { models } from "$lib/stores/models";
|
| 7 |
-
import IconSearch from "~icons/carbon/search";
|
| 8 |
-
import IconStar from "~icons/carbon/star";
|
| 9 |
-
import { getTrending } from "$lib/utils/model";
|
| 10 |
-
import fuzzysearch from "$lib/utils/search";
|
| 11 |
-
|
| 12 |
-
export let conversation: Conversation;
|
| 13 |
-
|
| 14 |
-
let backdropEl: HTMLDivElement;
|
| 15 |
-
let highlightIdx = 0;
|
| 16 |
-
let ignoreCursorHighlight = false;
|
| 17 |
-
let containerEl: HTMLDivElement;
|
| 18 |
-
let query = "";
|
| 19 |
-
|
| 20 |
-
const dispatch = createEventDispatcher<{ modelSelected: string; close: void }>();
|
| 21 |
-
|
| 22 |
-
$: trendingModels = getTrending($models);
|
| 23 |
-
|
| 24 |
-
$: featuredModels = fuzzysearch({ needle: query, haystack: trendingModels, property: "id" });
|
| 25 |
-
$: otherModels = fuzzysearch({ needle: query, haystack: $models, property: "id" });
|
| 26 |
-
|
| 27 |
-
onMount(() => {
|
| 28 |
-
if (featuredModels.findIndex(model => model.id === conversation.model.id) !== -1) {
|
| 29 |
-
highlightIdx = featuredModels.findIndex(model => model.id === conversation.model.id);
|
| 30 |
-
} else {
|
| 31 |
-
highlightIdx = featuredModels.length + otherModels.findIndex(model => model.id === conversation.model.id);
|
| 32 |
-
}
|
| 33 |
-
});
|
| 34 |
-
|
| 35 |
-
function handleKeydown(event: KeyboardEvent) {
|
| 36 |
-
const { key } = event;
|
| 37 |
-
let scrollLogicalPosition: ScrollLogicalPosition = "end";
|
| 38 |
-
if (key === "Escape") {
|
| 39 |
-
event.preventDefault();
|
| 40 |
-
dispatch("close");
|
| 41 |
-
} else if (key === "Enter") {
|
| 42 |
-
event.preventDefault();
|
| 43 |
-
const highlightedEl = document.querySelector(".highlighted");
|
| 44 |
-
if (highlightedEl) {
|
| 45 |
-
(highlightedEl as HTMLButtonElement).click();
|
| 46 |
-
}
|
| 47 |
-
} else if (key === "ArrowUp") {
|
| 48 |
-
event.preventDefault();
|
| 49 |
-
highlightIdx--;
|
| 50 |
-
scrollLogicalPosition = "start";
|
| 51 |
-
ignoreCursorHighlight = true;
|
| 52 |
-
} else if (key === "ArrowDown") {
|
| 53 |
-
event.preventDefault();
|
| 54 |
-
highlightIdx++;
|
| 55 |
-
ignoreCursorHighlight = true;
|
| 56 |
-
}
|
| 57 |
-
const n = featuredModels.length + otherModels.length;
|
| 58 |
-
highlightIdx = ((highlightIdx % n) + n) % n;
|
| 59 |
-
scrollToResult(scrollLogicalPosition);
|
| 60 |
-
}
|
| 61 |
-
|
| 62 |
-
async function scrollToResult(block: ScrollLogicalPosition) {
|
| 63 |
-
await tick();
|
| 64 |
-
const highlightedEl = document.querySelector(".highlighted");
|
| 65 |
-
if (containerEl && highlightedEl) {
|
| 66 |
-
const { bottom: containerBottom, top: containerTop } = containerEl.getBoundingClientRect();
|
| 67 |
-
const { bottom: highlightedBottom, top: highlightedTop } = highlightedEl.getBoundingClientRect();
|
| 68 |
-
if (highlightedBottom > containerBottom || containerTop > highlightedTop) {
|
| 69 |
-
highlightedEl.scrollIntoView({ block });
|
| 70 |
-
}
|
| 71 |
-
}
|
| 72 |
-
}
|
| 73 |
-
|
| 74 |
-
function highlightRow(idx: number) {
|
| 75 |
-
if (!ignoreCursorHighlight) {
|
| 76 |
-
highlightIdx = idx;
|
| 77 |
-
}
|
| 78 |
-
}
|
| 79 |
-
|
| 80 |
-
function handleBackdropClick(event: MouseEvent) {
|
| 81 |
-
if (window?.getSelection()?.toString()) {
|
| 82 |
-
return;
|
| 83 |
-
}
|
| 84 |
-
if (event.target === backdropEl) {
|
| 85 |
-
dispatch("close");
|
| 86 |
-
}
|
| 87 |
-
}
|
| 88 |
-
</script>
|
| 89 |
-
|
| 90 |
-
<svelte:window on:keydown={handleKeydown} on:mousemove={() => (ignoreCursorHighlight = false)} />
|
| 91 |
-
|
| 92 |
-
<!-- svelte-ignore a11y-no-static-element-interactions a11y-click-events-have-key-events -->
|
| 93 |
-
<div
|
| 94 |
-
class="fixed inset-0 z-10 flex h-screen items-start justify-center bg-black/85 pt-32"
|
| 95 |
-
bind:this={backdropEl}
|
| 96 |
-
on:click|stopPropagation={handleBackdropClick}
|
| 97 |
-
>
|
| 98 |
-
<div class="flex w-full max-w-[600px] items-start justify-center overflow-hidden p-10 text-left whitespace-nowrap">
|
| 99 |
-
<div
|
| 100 |
-
class="flex h-full w-full flex-col overflow-hidden rounded-lg border bg-white text-gray-900 shadow-md dark:border-gray-800 dark:bg-gray-900 dark:text-gray-300"
|
| 101 |
-
bind:this={containerEl}
|
| 102 |
-
>
|
| 103 |
-
<div class="flex items-center border-b px-3 dark:border-gray-800">
|
| 104 |
-
<div class="mr-2 text-sm">
|
| 105 |
-
<IconSearch />
|
| 106 |
-
</div>
|
| 107 |
-
<!-- svelte-ignore a11y-autofocus -->
|
| 108 |
-
<input
|
| 109 |
-
autofocus
|
| 110 |
-
class="flex h-10 w-full rounded-md bg-transparent py-3 text-sm placeholder-gray-400 outline-hidden"
|
| 111 |
-
placeholder="Search models ..."
|
| 112 |
-
bind:value={query}
|
| 113 |
-
/>
|
| 114 |
-
</div>
|
| 115 |
-
<div class="max-h-[300px] overflow-x-hidden overflow-y-auto">
|
| 116 |
-
{#if featuredModels.length}
|
| 117 |
-
<div>
|
| 118 |
-
<div class="px-2 py-1.5 text-xs font-medium text-gray-500">Trending</div>
|
| 119 |
-
<div>
|
| 120 |
-
{#each featuredModels as model, idx}
|
| 121 |
-
{@const [nameSpace, modelName] = model.id.split("/")}
|
| 122 |
-
<button
|
| 123 |
-
class="flex w-full cursor-pointer items-center px-2 py-1.5 text-sm {highlightIdx === idx
|
| 124 |
-
? 'highlighted bg-gray-100 dark:bg-gray-800'
|
| 125 |
-
: ''}"
|
| 126 |
-
on:mouseenter={() => highlightRow(idx)}
|
| 127 |
-
on:click={() => {
|
| 128 |
-
dispatch("modelSelected", model.id);
|
| 129 |
-
dispatch("close");
|
| 130 |
-
}}
|
| 131 |
-
>
|
| 132 |
-
<div class="lucide lucide-star mr-1.5 size-4 text-yellow-400">
|
| 133 |
-
<IconStar />
|
| 134 |
-
</div>
|
| 135 |
-
<span class="inline-flex items-center"
|
| 136 |
-
><span class="text-gray-500 dark:text-gray-400">{nameSpace}</span><span
|
| 137 |
-
class="mx-1 text-gray-300 dark:text-gray-700">/</span
|
| 138 |
-
><span class="text-black dark:text-white">{modelName}</span></span
|
| 139 |
-
>
|
| 140 |
-
</button>
|
| 141 |
-
{/each}
|
| 142 |
-
</div>
|
| 143 |
-
</div>
|
| 144 |
-
{/if}
|
| 145 |
-
{#if otherModels.length}
|
| 146 |
-
<div>
|
| 147 |
-
<div class="px-2 py-1.5 text-xs font-medium text-gray-500">Other Models</div>
|
| 148 |
-
<div>
|
| 149 |
-
{#each otherModels as model, _idx}
|
| 150 |
-
{@const [nameSpace, modelName] = model.id.split("/")}
|
| 151 |
-
{@const idx = featuredModels.length + _idx}
|
| 152 |
-
<button
|
| 153 |
-
class="flex w-full cursor-pointer items-center px-2 py-1.5 text-sm {highlightIdx === idx
|
| 154 |
-
? 'highlighted bg-gray-100 dark:bg-gray-800'
|
| 155 |
-
: ''}"
|
| 156 |
-
on:mouseenter={() => highlightRow(idx)}
|
| 157 |
-
on:click={() => {
|
| 158 |
-
dispatch("modelSelected", model.id);
|
| 159 |
-
dispatch("close");
|
| 160 |
-
}}
|
| 161 |
-
>
|
| 162 |
-
<span class="inline-flex items-center"
|
| 163 |
-
><span class="text-gray-500 dark:text-gray-400">{nameSpace}</span><span
|
| 164 |
-
class="mx-1 text-gray-300 dark:text-gray-700">/</span
|
| 165 |
-
><span class="text-black dark:text-white">{modelName}</span></span
|
| 166 |
-
>
|
| 167 |
-
</button>
|
| 168 |
-
{/each}
|
| 169 |
-
</div>
|
| 170 |
-
</div>
|
| 171 |
-
{/if}
|
| 172 |
-
</div>
|
| 173 |
-
</div>
|
| 174 |
-
</div>
|
| 175 |
-
</div>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/components/{Avatar.svelte β avatar.svelte}
RENAMED
|
@@ -1,8 +1,12 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
|
| 3 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 4 |
|
| 5 |
-
|
| 6 |
|
| 7 |
async function getAvatarUrl(orgName?: string) {
|
| 8 |
if (!orgName) return;
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
interface Props {
|
| 3 |
+
orgName: string | undefined;
|
| 4 |
+
size?: "sm" | "md";
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
let { orgName, size = "md" }: Props = $props();
|
| 8 |
|
| 9 |
+
let sizeClass = $derived(size === "sm" ? "size-3" : "size-4");
|
| 10 |
|
| 11 |
async function getAvatarUrl(orgName?: string) {
|
| 12 |
if (!orgName) return;
|
src/lib/components/debug-menu.svelte
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { dev } from "$app/environment";
|
| 3 |
+
import { session } from "$lib/state/session.svelte.js";
|
| 4 |
+
import { token } from "$lib/state/token.svelte.js";
|
| 5 |
+
import { compareStr } from "$lib/utils/compare.js";
|
| 6 |
+
import { Popover } from "melt/builders";
|
| 7 |
+
import { prompt } from "./prompts.svelte";
|
| 8 |
+
import { showQuotaModal } from "./quota-modal.svelte";
|
| 9 |
+
import type { ToastData } from "./toaster.svelte.js";
|
| 10 |
+
import { addToast } from "./toaster.svelte.js";
|
| 11 |
+
|
| 12 |
+
let innerWidth = $state<number>();
|
| 13 |
+
let innerHeight = $state<number>();
|
| 14 |
+
|
| 15 |
+
function toggleTheme() {
|
| 16 |
+
document.body.classList.toggle("dark");
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
const popover = new Popover();
|
| 20 |
+
|
| 21 |
+
type Action = {
|
| 22 |
+
label: string;
|
| 23 |
+
cb: () => void;
|
| 24 |
+
};
|
| 25 |
+
|
| 26 |
+
const actions: Action[] = [
|
| 27 |
+
{ label: "Toggle Theme", cb: toggleTheme },
|
| 28 |
+
{
|
| 29 |
+
label: "Log session to console",
|
| 30 |
+
cb: () => {
|
| 31 |
+
console.log(session.$);
|
| 32 |
+
},
|
| 33 |
+
},
|
| 34 |
+
{
|
| 35 |
+
label: "Test prompt",
|
| 36 |
+
cb: async () => {
|
| 37 |
+
console.log(await prompt("Test prompt"));
|
| 38 |
+
},
|
| 39 |
+
},
|
| 40 |
+
{
|
| 41 |
+
label: "Show quota modal",
|
| 42 |
+
cb: () => {
|
| 43 |
+
showQuotaModal();
|
| 44 |
+
},
|
| 45 |
+
},
|
| 46 |
+
{
|
| 47 |
+
label: "Show token modal",
|
| 48 |
+
cb: () => {
|
| 49 |
+
token.showModal = true;
|
| 50 |
+
},
|
| 51 |
+
},
|
| 52 |
+
{
|
| 53 |
+
label: "Test toast",
|
| 54 |
+
cb: () => {
|
| 55 |
+
const toastData: ToastData[] = [
|
| 56 |
+
{
|
| 57 |
+
title: "Success",
|
| 58 |
+
description: "Congratulations! It worked!",
|
| 59 |
+
variant: "success",
|
| 60 |
+
},
|
| 61 |
+
{
|
| 62 |
+
title: "Warning",
|
| 63 |
+
description: "Please check again.",
|
| 64 |
+
variant: "warning",
|
| 65 |
+
},
|
| 66 |
+
{
|
| 67 |
+
title: "Error",
|
| 68 |
+
description: "Something did not work!",
|
| 69 |
+
variant: "error",
|
| 70 |
+
},
|
| 71 |
+
|
| 72 |
+
{
|
| 73 |
+
title: "Big one",
|
| 74 |
+
description:
|
| 75 |
+
"This one has a lot of text. like seriously. its a lot. so this toast should be really big! and we see how that affects the other ones. ",
|
| 76 |
+
variant: "success",
|
| 77 |
+
},
|
| 78 |
+
];
|
| 79 |
+
|
| 80 |
+
addToast(toastData[Math.floor(Math.random() * toastData.length)]!);
|
| 81 |
+
},
|
| 82 |
+
},
|
| 83 |
+
].toSorted((a, b) => compareStr(a.label, b.label));
|
| 84 |
+
</script>
|
| 85 |
+
|
| 86 |
+
<svelte:window bind:innerWidth bind:innerHeight />
|
| 87 |
+
|
| 88 |
+
{#if dev}
|
| 89 |
+
<div class="abs-x-center fixed bottom-0 z-50">
|
| 90 |
+
<button class="rounded-t-md bg-gray-500 px-3 py-1 text-xs text-white hover:bg-gray-600" {...popover.trigger}>
|
| 91 |
+
Debug
|
| 92 |
+
</button>
|
| 93 |
+
|
| 94 |
+
<div
|
| 95 |
+
class="mb-2 w-128 rounded-lg border border-gray-200 bg-white p-4 shadow-lg dark:border-gray-700 dark:bg-gray-800"
|
| 96 |
+
{...popover.content}
|
| 97 |
+
>
|
| 98 |
+
<h3 class="mb-3 text-lg font-semibold dark:text-white">Debug Menu</h3>
|
| 99 |
+
|
| 100 |
+
<div class="space-y-3">
|
| 101 |
+
<div class="text-sm dark:text-gray-300">
|
| 102 |
+
<p>Viewport: {innerWidth}x{innerHeight}</p>
|
| 103 |
+
<p>Environment: {import.meta.env.MODE}</p>
|
| 104 |
+
</div>
|
| 105 |
+
|
| 106 |
+
<div class="grid grid-cols-2 gap-2">
|
| 107 |
+
{#each actions as { label, cb }}
|
| 108 |
+
<button
|
| 109 |
+
class="rounded-md bg-gray-200 px-3 py-1 text-sm hover:bg-gray-300 dark:bg-gray-700 dark:text-white dark:hover:bg-gray-600"
|
| 110 |
+
onclick={cb}
|
| 111 |
+
>
|
| 112 |
+
{label}
|
| 113 |
+
</button>
|
| 114 |
+
{/each}
|
| 115 |
+
</div>
|
| 116 |
+
</div>
|
| 117 |
+
</div>
|
| 118 |
+
</div>
|
| 119 |
+
{/if}
|
| 120 |
+
|
| 121 |
+
<style>
|
| 122 |
+
/* Add any additional styles here */
|
| 123 |
+
</style>
|
src/lib/components/{Icons/IconProvider.svelte β icon-provider.svelte}
RENAMED
|
@@ -1,5 +1,10 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3 |
</script>
|
| 4 |
|
| 5 |
{#if provider === "sambanova"}
|
|
@@ -293,8 +298,6 @@
|
|
| 293 |
fill="#814D00"
|
| 294 |
></path></svg
|
| 295 |
>
|
| 296 |
-
{:else}
|
| 297 |
-
<
|
| 298 |
-
<div class="size-4 flex-none rounded-sm bg-gray-200"></div>
|
| 299 |
-
</slot>
|
| 300 |
{/if}
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
interface Props {
|
| 3 |
+
provider: string | undefined;
|
| 4 |
+
children?: import("svelte").Snippet;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
let { provider, children }: Props = $props();
|
| 8 |
</script>
|
| 9 |
|
| 10 |
{#if provider === "sambanova"}
|
|
|
|
| 298 |
fill="#814D00"
|
| 299 |
></path></svg
|
| 300 |
>
|
| 301 |
+
{:else if children}{@render children()}{:else}
|
| 302 |
+
<div class="size-4 flex-none rounded-sm bg-gray-200"></div>
|
|
|
|
|
|
|
| 303 |
{/if}
|
src/lib/components/{InferencePlayground/InferencePlaygroundCodeSnippets.svelte β inference-playground/code-snippets.svelte}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import type { Conversation } from "$lib/types";
|
| 3 |
|
| 4 |
import hljs from "highlight.js/lib/core";
|
| 5 |
import http from "highlight.js/lib/languages/http";
|
|
@@ -7,22 +7,22 @@
|
|
| 7 |
import python from "highlight.js/lib/languages/python";
|
| 8 |
import { createEventDispatcher } from "svelte";
|
| 9 |
|
| 10 |
-
import { token } from "$lib/
|
| 11 |
-
import { entries, fromEntries, keys } from "$lib/utils/object";
|
| 12 |
import type { InferenceProvider } from "@huggingface/inference";
|
| 13 |
-
import IconCopyCode from "~icons/carbon/copy";
|
| 14 |
import IconExternal from "~icons/carbon/arrow-up-right";
|
| 15 |
-
import
|
| 16 |
-
|
| 17 |
-
type GetInferenceSnippetReturn,
|
| 18 |
-
type InferenceSnippetLanguage,
|
| 19 |
-
} from "./inferencePlaygroundUtils";
|
| 20 |
|
| 21 |
hljs.registerLanguage("javascript", javascript);
|
| 22 |
hljs.registerLanguage("python", python);
|
| 23 |
hljs.registerLanguage("http", http);
|
| 24 |
|
| 25 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
const dispatch = createEventDispatcher<{ closeCode: void }>();
|
| 28 |
|
|
@@ -33,10 +33,8 @@
|
|
| 33 |
} as const satisfies Record<string, string>;
|
| 34 |
type Language = keyof typeof labelsByLanguage;
|
| 35 |
|
| 36 |
-
let lang: Language = "javascript";
|
| 37 |
-
let showToken = false;
|
| 38 |
-
|
| 39 |
-
$: tokenStr = getTokenStr(showToken);
|
| 40 |
|
| 41 |
type GetSnippetArgs = {
|
| 42 |
tokenStr: string;
|
|
@@ -53,54 +51,24 @@
|
|
| 53 |
});
|
| 54 |
}
|
| 55 |
|
| 56 |
-
$: snippetsByLang = {
|
| 57 |
-
javascript: getSnippet({ lang: "js", tokenStr, conversation }),
|
| 58 |
-
python: getSnippet({ lang: "python", tokenStr, conversation }),
|
| 59 |
-
http: getSnippet({ lang: "curl", tokenStr, conversation }),
|
| 60 |
-
} as Record<Language, GetInferenceSnippetReturn>;
|
| 61 |
-
|
| 62 |
// { javascript: 0, python: 0, http: 0 } at first
|
| 63 |
-
const selectedSnippetIdxByLang: Record<Language, number> =
|
| 64 |
-
|
| 65 |
-
|
| 66 |
-
|
|
|
|
|
|
|
| 67 |
);
|
| 68 |
-
$: selectedSnippet = snippetsByLang[lang][selectedSnippetIdxByLang[lang]];
|
| 69 |
|
| 70 |
type InstallInstructions = {
|
| 71 |
title: string;
|
| 72 |
content: string;
|
| 73 |
docs: string;
|
| 74 |
};
|
| 75 |
-
$: installInstructions = (function getInstallInstructions(): InstallInstructions | undefined {
|
| 76 |
-
if (lang === "javascript") {
|
| 77 |
-
const isHugging = selectedSnippet?.client.includes("hugging");
|
| 78 |
-
const toInstall = isHugging ? "@huggingface/inference" : "openai";
|
| 79 |
-
const docs = isHugging
|
| 80 |
-
? "https://huggingface.co/docs/huggingface.js/inference/README"
|
| 81 |
-
: "https://platform.openai.com/docs/libraries";
|
| 82 |
-
return {
|
| 83 |
-
title: `Install ${toInstall}`,
|
| 84 |
-
content: `npm install --save ${toInstall}`,
|
| 85 |
-
docs,
|
| 86 |
-
};
|
| 87 |
-
} else if (lang === "python") {
|
| 88 |
-
const isHugging = selectedSnippet?.client.includes("hugging");
|
| 89 |
-
const toInstall = isHugging ? "huggingface_hub" : "openai";
|
| 90 |
-
const docs = isHugging
|
| 91 |
-
? "https://huggingface.co/docs/huggingface_hub/guides/inference"
|
| 92 |
-
: "https://platform.openai.com/docs/libraries";
|
| 93 |
-
return {
|
| 94 |
-
title: `Install the latest`,
|
| 95 |
-
content: `pip install --upgrade ${toInstall}`,
|
| 96 |
-
docs,
|
| 97 |
-
};
|
| 98 |
-
}
|
| 99 |
-
})();
|
| 100 |
|
| 101 |
function getTokenStr(showToken: boolean) {
|
| 102 |
-
if (
|
| 103 |
-
return
|
| 104 |
}
|
| 105 |
return "YOUR_HF_TOKEN";
|
| 106 |
}
|
|
@@ -136,6 +104,40 @@
|
|
| 136 |
},
|
| 137 |
};
|
| 138 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 139 |
</script>
|
| 140 |
|
| 141 |
<div class="px-2 pt-2">
|
|
@@ -146,7 +148,7 @@
|
|
| 146 |
{#each entries(labelsByLanguage) as [language, label]}
|
| 147 |
<li>
|
| 148 |
<button
|
| 149 |
-
|
| 150 |
class="inline-block rounded-t-lg border-b-2 p-4 {lang === language
|
| 151 |
? 'border-black text-black dark:border-blue-500 dark:text-blue-500'
|
| 152 |
: 'border-transparent hover:border-gray-300 hover:text-gray-600 dark:hover:text-gray-300'}"
|
|
@@ -156,7 +158,7 @@
|
|
| 156 |
{/each}
|
| 157 |
<li class="ml-auto self-center max-sm:hidden">
|
| 158 |
<button
|
| 159 |
-
|
| 160 |
dispatch("closeCode");
|
| 161 |
}}
|
| 162 |
class="flex size-7 items-center justify-center rounded-lg px-3 py-2.5 text-xs font-medium text-gray-900 focus:ring-4 focus:ring-gray-100 focus:outline-hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
|
@@ -176,7 +178,7 @@
|
|
| 176 |
{isActive
|
| 177 |
? 'bg-black text-gray-100 dark:border-gray-500 dark:bg-gray-700 dark:text-white'
|
| 178 |
: 'text-gray-500 hover:text-gray-600 dark:border-gray-600 dark:hover:text-gray-400'}"
|
| 179 |
-
|
| 180 |
>
|
| 181 |
{/each}
|
| 182 |
</div>
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import type { Conversation } from "$lib/types.js";
|
| 3 |
|
| 4 |
import hljs from "highlight.js/lib/core";
|
| 5 |
import http from "highlight.js/lib/languages/http";
|
|
|
|
| 7 |
import python from "highlight.js/lib/languages/python";
|
| 8 |
import { createEventDispatcher } from "svelte";
|
| 9 |
|
| 10 |
+
import { token } from "$lib/state/token.svelte.js";
|
| 11 |
+
import { entries, fromEntries, keys } from "$lib/utils/object.js";
|
| 12 |
import type { InferenceProvider } from "@huggingface/inference";
|
|
|
|
| 13 |
import IconExternal from "~icons/carbon/arrow-up-right";
|
| 14 |
+
import IconCopyCode from "~icons/carbon/copy";
|
| 15 |
+
import { getInferenceSnippet, type GetInferenceSnippetReturn, type InferenceSnippetLanguage } from "./utils.js";
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
hljs.registerLanguage("javascript", javascript);
|
| 18 |
hljs.registerLanguage("python", python);
|
| 19 |
hljs.registerLanguage("http", http);
|
| 20 |
|
| 21 |
+
interface Props {
|
| 22 |
+
conversation: Conversation;
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
let { conversation }: Props = $props();
|
| 26 |
|
| 27 |
const dispatch = createEventDispatcher<{ closeCode: void }>();
|
| 28 |
|
|
|
|
| 33 |
} as const satisfies Record<string, string>;
|
| 34 |
type Language = keyof typeof labelsByLanguage;
|
| 35 |
|
| 36 |
+
let lang: Language = $state("javascript");
|
| 37 |
+
let showToken = $state(false);
|
|
|
|
|
|
|
| 38 |
|
| 39 |
type GetSnippetArgs = {
|
| 40 |
tokenStr: string;
|
|
|
|
| 51 |
});
|
| 52 |
}
|
| 53 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54 |
// { javascript: 0, python: 0, http: 0 } at first
|
| 55 |
+
const selectedSnippetIdxByLang: Record<Language, number> = $state(
|
| 56 |
+
fromEntries(
|
| 57 |
+
keys(labelsByLanguage).map(lang => {
|
| 58 |
+
return [lang, 0];
|
| 59 |
+
})
|
| 60 |
+
)
|
| 61 |
);
|
|
|
|
| 62 |
|
| 63 |
type InstallInstructions = {
|
| 64 |
title: string;
|
| 65 |
content: string;
|
| 66 |
docs: string;
|
| 67 |
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 68 |
|
| 69 |
function getTokenStr(showToken: boolean) {
|
| 70 |
+
if (token.value && showToken) {
|
| 71 |
+
return token.value;
|
| 72 |
}
|
| 73 |
return "YOUR_HF_TOKEN";
|
| 74 |
}
|
|
|
|
| 104 |
},
|
| 105 |
};
|
| 106 |
}
|
| 107 |
+
let tokenStr = $derived(getTokenStr(showToken));
|
| 108 |
+
let snippetsByLang = $derived({
|
| 109 |
+
javascript: getSnippet({ lang: "js", tokenStr, conversation }),
|
| 110 |
+
python: getSnippet({ lang: "python", tokenStr, conversation }),
|
| 111 |
+
http: getSnippet({ lang: "curl", tokenStr, conversation }),
|
| 112 |
+
} as Record<Language, GetInferenceSnippetReturn>);
|
| 113 |
+
let selectedSnippet = $derived(snippetsByLang[lang][selectedSnippetIdxByLang[lang]]);
|
| 114 |
+
let installInstructions = $derived(
|
| 115 |
+
(function getInstallInstructions(): InstallInstructions | undefined {
|
| 116 |
+
if (lang === "javascript") {
|
| 117 |
+
const isHugging = selectedSnippet?.client.includes("hugging");
|
| 118 |
+
const toInstall = isHugging ? "@huggingface/inference" : "openai";
|
| 119 |
+
const docs = isHugging
|
| 120 |
+
? "https://huggingface.co/docs/huggingface.js/inference/README"
|
| 121 |
+
: "https://platform.openai.com/docs/libraries";
|
| 122 |
+
return {
|
| 123 |
+
title: `Install ${toInstall}`,
|
| 124 |
+
content: `npm install --save ${toInstall}`,
|
| 125 |
+
docs,
|
| 126 |
+
};
|
| 127 |
+
} else if (lang === "python") {
|
| 128 |
+
const isHugging = selectedSnippet?.client.includes("hugging");
|
| 129 |
+
const toInstall = isHugging ? "huggingface_hub" : "openai";
|
| 130 |
+
const docs = isHugging
|
| 131 |
+
? "https://huggingface.co/docs/huggingface_hub/guides/inference"
|
| 132 |
+
: "https://platform.openai.com/docs/libraries";
|
| 133 |
+
return {
|
| 134 |
+
title: `Install the latest`,
|
| 135 |
+
content: `pip install --upgrade ${toInstall}`,
|
| 136 |
+
docs,
|
| 137 |
+
};
|
| 138 |
+
}
|
| 139 |
+
})()
|
| 140 |
+
);
|
| 141 |
</script>
|
| 142 |
|
| 143 |
<div class="px-2 pt-2">
|
|
|
|
| 148 |
{#each entries(labelsByLanguage) as [language, label]}
|
| 149 |
<li>
|
| 150 |
<button
|
| 151 |
+
onclick={() => (lang = language)}
|
| 152 |
class="inline-block rounded-t-lg border-b-2 p-4 {lang === language
|
| 153 |
? 'border-black text-black dark:border-blue-500 dark:text-blue-500'
|
| 154 |
: 'border-transparent hover:border-gray-300 hover:text-gray-600 dark:hover:text-gray-300'}"
|
|
|
|
| 158 |
{/each}
|
| 159 |
<li class="ml-auto self-center max-sm:hidden">
|
| 160 |
<button
|
| 161 |
+
onclick={() => {
|
| 162 |
dispatch("closeCode");
|
| 163 |
}}
|
| 164 |
class="flex size-7 items-center justify-center rounded-lg px-3 py-2.5 text-xs font-medium text-gray-900 focus:ring-4 focus:ring-gray-100 focus:outline-hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
|
|
|
| 178 |
{isActive
|
| 179 |
? 'bg-black text-gray-100 dark:border-gray-500 dark:bg-gray-700 dark:text-white'
|
| 180 |
: 'text-gray-500 hover:text-gray-600 dark:border-gray-600 dark:hover:text-gray-400'}"
|
| 181 |
+
onclick={() => (selectedSnippetIdxByLang[lang] = idx)}>{client}</button
|
| 182 |
>
|
| 183 |
{/each}
|
| 184 |
</div>
|
src/lib/components/{InferencePlayground/InferencePlaygroundConversationHeader.svelte β inference-playground/conversation-header.svelte}
RENAMED
|
@@ -1,24 +1,28 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import type { Conversation, ModelWithTokenizer } from "$lib/types";
|
| 3 |
|
| 4 |
import { createEventDispatcher } from "svelte";
|
| 5 |
|
| 6 |
-
import { models } from "$lib/
|
| 7 |
-
import Avatar from "../Avatar.svelte";
|
| 8 |
import IconCog from "~icons/carbon/settings";
|
| 9 |
-
import
|
| 10 |
-
import
|
| 11 |
-
import
|
|
|
|
| 12 |
|
| 13 |
-
|
| 14 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 15 |
|
| 16 |
const dispatch = createEventDispatcher<{ close: string }>();
|
| 17 |
|
| 18 |
-
let modelSelectorOpen = false;
|
| 19 |
|
| 20 |
function changeModel(newModelId: ModelWithTokenizer["id"]) {
|
| 21 |
-
const model =
|
| 22 |
if (!model) {
|
| 23 |
return;
|
| 24 |
}
|
|
@@ -26,15 +30,11 @@
|
|
| 26 |
conversation.provider = undefined;
|
| 27 |
}
|
| 28 |
|
| 29 |
-
|
| 30 |
</script>
|
| 31 |
|
| 32 |
{#if modelSelectorOpen}
|
| 33 |
-
<ModelSelectorModal
|
| 34 |
-
{conversation}
|
| 35 |
-
on:modelSelected={e => changeModel(e.detail)}
|
| 36 |
-
on:close={() => (modelSelectorOpen = false)}
|
| 37 |
-
/>
|
| 38 |
{/if}
|
| 39 |
|
| 40 |
<div
|
|
@@ -43,12 +43,12 @@
|
|
| 43 |
: 'mx-4'} flex h-11 flex-none items-center gap-2 rounded-lg border border-gray-200/80 bg-white pr-2 pl-3 text-sm leading-none whitespace-nowrap shadow-xs *:flex-none max-sm:mt-4 dark:border-white/5 dark:bg-gray-800/70 dark:hover:bg-gray-800"
|
| 44 |
>
|
| 45 |
<Avatar orgName={nameSpace} size="md" />
|
| 46 |
-
<button class="flex-1! self-stretch text-left hover:underline"
|
| 47 |
>{conversation.model.id}</button
|
| 48 |
>
|
| 49 |
<button
|
| 50 |
class="borderdark:border-white/5 flex size-6 items-center justify-center rounded-sm bg-gray-50 text-xs hover:bg-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600"
|
| 51 |
-
|
| 52 |
>
|
| 53 |
β
|
| 54 |
</button>
|
|
@@ -68,7 +68,7 @@
|
|
| 68 |
? 'mr-4 max-sm:ml-4'
|
| 69 |
: 'mx-4'} mt-2 h-11 text-sm leading-none whitespace-nowrap max-sm:mt-4"
|
| 70 |
>
|
| 71 |
-
<
|
| 72 |
bind:conversation
|
| 73 |
class="rounded-lg border border-gray-200/80 bg-white dark:border-white/5 dark:bg-gray-800/70 dark:hover:bg-gray-800"
|
| 74 |
/>
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import type { Conversation, ModelWithTokenizer } from "$lib/types.js";
|
| 3 |
|
| 4 |
import { createEventDispatcher } from "svelte";
|
| 5 |
|
| 6 |
+
import { models } from "$lib/state/models.svelte.js";
|
|
|
|
| 7 |
import IconCog from "~icons/carbon/settings";
|
| 8 |
+
import Avatar from "../avatar.svelte";
|
| 9 |
+
import GenerationConfig from "./generation-config.svelte";
|
| 10 |
+
import ModelSelectorModal from "./model-selector-modal.svelte";
|
| 11 |
+
import ProviderSelect from "./provider-select.svelte";
|
| 12 |
|
| 13 |
+
interface Props {
|
| 14 |
+
conversation: Conversation;
|
| 15 |
+
conversationIdx: number;
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
let { conversation = $bindable(), conversationIdx }: Props = $props();
|
| 19 |
|
| 20 |
const dispatch = createEventDispatcher<{ close: string }>();
|
| 21 |
|
| 22 |
+
let modelSelectorOpen = $state(false);
|
| 23 |
|
| 24 |
function changeModel(newModelId: ModelWithTokenizer["id"]) {
|
| 25 |
+
const model = models.all.find(m => m.id === newModelId);
|
| 26 |
if (!model) {
|
| 27 |
return;
|
| 28 |
}
|
|
|
|
| 30 |
conversation.provider = undefined;
|
| 31 |
}
|
| 32 |
|
| 33 |
+
let nameSpace = $derived(conversation.model.id.split("/")[0] ?? "");
|
| 34 |
</script>
|
| 35 |
|
| 36 |
{#if modelSelectorOpen}
|
| 37 |
+
<ModelSelectorModal {conversation} onModelSelect={changeModel} onClose={() => (modelSelectorOpen = false)} />
|
|
|
|
|
|
|
|
|
|
|
|
|
| 38 |
{/if}
|
| 39 |
|
| 40 |
<div
|
|
|
|
| 43 |
: 'mx-4'} flex h-11 flex-none items-center gap-2 rounded-lg border border-gray-200/80 bg-white pr-2 pl-3 text-sm leading-none whitespace-nowrap shadow-xs *:flex-none max-sm:mt-4 dark:border-white/5 dark:bg-gray-800/70 dark:hover:bg-gray-800"
|
| 44 |
>
|
| 45 |
<Avatar orgName={nameSpace} size="md" />
|
| 46 |
+
<button class="flex-1! self-stretch text-left hover:underline" onclick={() => (modelSelectorOpen = true)}
|
| 47 |
>{conversation.model.id}</button
|
| 48 |
>
|
| 49 |
<button
|
| 50 |
class="borderdark:border-white/5 flex size-6 items-center justify-center rounded-sm bg-gray-50 text-xs hover:bg-gray-100 dark:bg-gray-700 dark:hover:bg-gray-600"
|
| 51 |
+
onclick={() => dispatch("close", conversation.model.id)}
|
| 52 |
>
|
| 53 |
β
|
| 54 |
</button>
|
|
|
|
| 68 |
? 'mr-4 max-sm:ml-4'
|
| 69 |
: 'mx-4'} mt-2 h-11 text-sm leading-none whitespace-nowrap max-sm:mt-4"
|
| 70 |
>
|
| 71 |
+
<ProviderSelect
|
| 72 |
bind:conversation
|
| 73 |
class="rounded-lg border border-gray-200/80 bg-white dark:border-white/5 dark:bg-gray-800/70 dark:hover:bg-gray-800"
|
| 74 |
/>
|
src/lib/components/{InferencePlayground/InferencePlaygroundConversation.svelte β inference-playground/conversation.svelte}
RENAMED
|
@@ -1,36 +1,26 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import
|
| 3 |
|
| 4 |
-
import {
|
| 5 |
|
| 6 |
import IconPlus from "~icons/carbon/add";
|
| 7 |
-
import CodeSnippets from "./
|
| 8 |
-
import Message from "./
|
| 9 |
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
let
|
| 16 |
-
let isProgrammaticScroll = true;
|
| 17 |
-
let conversationLength = conversation.messages.length;
|
| 18 |
|
| 19 |
-
let
|
|
|
|
|
|
|
| 20 |
|
| 21 |
-
|
| 22 |
-
// ideally we would use CSS "field-sizing:content". However, it is currently only supported on Chrome.
|
| 23 |
-
await tick();
|
| 24 |
-
if (messageContainer) {
|
| 25 |
-
const containerScrollTop = messageContainer.scrollTop;
|
| 26 |
-
const textareaEls = messageContainer.querySelectorAll("textarea");
|
| 27 |
-
for (const textarea of textareaEls) {
|
| 28 |
-
textarea.style.height = "0px";
|
| 29 |
-
textarea.style.height = textarea.scrollHeight + "px";
|
| 30 |
-
}
|
| 31 |
-
messageContainer.scrollTop = containerScrollTop;
|
| 32 |
-
}
|
| 33 |
-
}
|
| 34 |
|
| 35 |
function scrollToBottom() {
|
| 36 |
if (messageContainer) {
|
|
@@ -39,22 +29,21 @@
|
|
| 39 |
}
|
| 40 |
}
|
| 41 |
|
| 42 |
-
|
| 43 |
if (conversation.messages.at(-1)) {
|
| 44 |
-
resizeMessageTextAreas();
|
| 45 |
if (shouldScrollToBottom) {
|
| 46 |
scrollToBottom();
|
| 47 |
}
|
| 48 |
}
|
| 49 |
-
}
|
| 50 |
|
| 51 |
-
|
| 52 |
-
|
| 53 |
-
|
| 54 |
-
|
| 55 |
-
|
| 56 |
-
|
| 57 |
-
|
| 58 |
|
| 59 |
function addMessage() {
|
| 60 |
const msgs = conversation.messages.slice();
|
|
@@ -69,20 +58,17 @@
|
|
| 69 |
}
|
| 70 |
|
| 71 |
function deleteMessage(idx: number) {
|
| 72 |
-
conversation.messages.
|
| 73 |
-
conversation = conversation;
|
| 74 |
}
|
| 75 |
</script>
|
| 76 |
|
| 77 |
-
<svelte:window on:resize={resizeMessageTextAreas} />
|
| 78 |
-
|
| 79 |
<div
|
| 80 |
class="@container flex flex-col overflow-x-hidden overflow-y-auto {compareActive
|
| 81 |
? 'max-h-[calc(100dvh-5.8rem-2.5rem-75px)] md:max-h-[calc(100dvh-5.8rem-2.5rem)]'
|
| 82 |
: 'max-h-[calc(100dvh-5.8rem-2.5rem-75px)] md:max-h-[calc(100dvh-5.8rem)]'}"
|
| 83 |
class:animate-pulse={loading && !conversation.streaming}
|
| 84 |
bind:this={messageContainer}
|
| 85 |
-
|
| 86 |
// disable automatic scrolling is user initiates scroll
|
| 87 |
if (!isProgrammaticScroll) {
|
| 88 |
shouldScrollToBottom = false;
|
|
@@ -91,20 +77,19 @@
|
|
| 91 |
}}
|
| 92 |
>
|
| 93 |
{#if !viewCode}
|
| 94 |
-
{#each conversation.messages as
|
| 95 |
<Message
|
| 96 |
-
|
| 97 |
-
|
|
|
|
| 98 |
{loading}
|
| 99 |
-
|
| 100 |
-
on:delete={() => deleteMessage(messageIdx)}
|
| 101 |
-
autofocus={!loading && messageIdx === conversation.messages.length - 1}
|
| 102 |
/>
|
| 103 |
{/each}
|
| 104 |
|
| 105 |
<button
|
| 106 |
class="flex px-3.5 py-6 hover:bg-gray-50 md:px-6 dark:hover:bg-gray-800/50"
|
| 107 |
-
|
| 108 |
disabled={loading}
|
| 109 |
>
|
| 110 |
<div class="flex items-center gap-2 p-0! text-sm font-semibold">
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { run } from "svelte/legacy";
|
| 3 |
|
| 4 |
+
import type { Conversation } from "$lib/types.js";
|
| 5 |
|
| 6 |
import IconPlus from "~icons/carbon/add";
|
| 7 |
+
import CodeSnippets from "./code-snippets.svelte";
|
| 8 |
+
import Message from "./message.svelte";
|
| 9 |
|
| 10 |
+
interface Props {
|
| 11 |
+
conversation: Conversation;
|
| 12 |
+
loading: boolean;
|
| 13 |
+
viewCode: boolean;
|
| 14 |
+
compareActive: boolean;
|
| 15 |
+
}
|
| 16 |
|
| 17 |
+
let { conversation = $bindable(), loading, viewCode, compareActive }: Props = $props();
|
|
|
|
|
|
|
| 18 |
|
| 19 |
+
let shouldScrollToBottom = $state(true);
|
| 20 |
+
let isProgrammaticScroll = $state(true);
|
| 21 |
+
let conversationLength = $state(conversation.messages.length);
|
| 22 |
|
| 23 |
+
let messageContainer: HTMLDivElement | null = $state(null);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 24 |
|
| 25 |
function scrollToBottom() {
|
| 26 |
if (messageContainer) {
|
|
|
|
| 29 |
}
|
| 30 |
}
|
| 31 |
|
| 32 |
+
run(() => {
|
| 33 |
if (conversation.messages.at(-1)) {
|
|
|
|
| 34 |
if (shouldScrollToBottom) {
|
| 35 |
scrollToBottom();
|
| 36 |
}
|
| 37 |
}
|
| 38 |
+
});
|
| 39 |
|
| 40 |
+
run(() => {
|
| 41 |
+
if (conversation.messages.length !== conversationLength) {
|
| 42 |
+
// enable automatic scrolling when new message was added
|
| 43 |
+
conversationLength = conversation.messages.length;
|
| 44 |
+
shouldScrollToBottom = true;
|
| 45 |
+
}
|
| 46 |
+
});
|
| 47 |
|
| 48 |
function addMessage() {
|
| 49 |
const msgs = conversation.messages.slice();
|
|
|
|
| 58 |
}
|
| 59 |
|
| 60 |
function deleteMessage(idx: number) {
|
| 61 |
+
conversation.messages = conversation.messages.slice(0, idx);
|
|
|
|
| 62 |
}
|
| 63 |
</script>
|
| 64 |
|
|
|
|
|
|
|
| 65 |
<div
|
| 66 |
class="@container flex flex-col overflow-x-hidden overflow-y-auto {compareActive
|
| 67 |
? 'max-h-[calc(100dvh-5.8rem-2.5rem-75px)] md:max-h-[calc(100dvh-5.8rem-2.5rem)]'
|
| 68 |
: 'max-h-[calc(100dvh-5.8rem-2.5rem-75px)] md:max-h-[calc(100dvh-5.8rem)]'}"
|
| 69 |
class:animate-pulse={loading && !conversation.streaming}
|
| 70 |
bind:this={messageContainer}
|
| 71 |
+
onscroll={() => {
|
| 72 |
// disable automatic scrolling is user initiates scroll
|
| 73 |
if (!isProgrammaticScroll) {
|
| 74 |
shouldScrollToBottom = false;
|
|
|
|
| 77 |
}}
|
| 78 |
>
|
| 79 |
{#if !viewCode}
|
| 80 |
+
{#each conversation.messages as _msg, idx}
|
| 81 |
<Message
|
| 82 |
+
bind:content={conversation.messages[idx]!.content}
|
| 83 |
+
role={conversation.messages[idx]!.role}
|
| 84 |
+
autofocus={idx === conversation.messages.length - 1}
|
| 85 |
{loading}
|
| 86 |
+
onDelete={() => deleteMessage(idx)}
|
|
|
|
|
|
|
| 87 |
/>
|
| 88 |
{/each}
|
| 89 |
|
| 90 |
<button
|
| 91 |
class="flex px-3.5 py-6 hover:bg-gray-50 md:px-6 dark:hover:bg-gray-800/50"
|
| 92 |
+
onclick={addMessage}
|
| 93 |
disabled={loading}
|
| 94 |
>
|
| 95 |
<div class="flex items-center gap-2 p-0! text-sm font-semibold">
|
src/lib/components/{InferencePlayground/generationConfigSettings.ts β inference-playground/generation-config-settings.ts}
RENAMED
|
File without changes
|
src/lib/components/{InferencePlayground/InferencePlaygroundGenerationConfig.svelte β inference-playground/generation-config.svelte}
RENAMED
|
@@ -1,14 +1,20 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import type { Conversation } from "$lib/types";
|
| 3 |
|
| 4 |
-
import { GENERATION_CONFIG_KEYS, GENERATION_CONFIG_SETTINGS } from "./
|
| 5 |
-
import { customMaxTokens } from "./
|
| 6 |
|
| 7 |
-
|
| 8 |
-
|
|
|
|
|
|
|
| 9 |
|
| 10 |
-
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
</script>
|
| 13 |
|
| 14 |
<div class="flex flex-col gap-y-7 {classNames}">
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import type { Conversation } from "$lib/types.js";
|
| 3 |
|
| 4 |
+
import { GENERATION_CONFIG_KEYS, GENERATION_CONFIG_SETTINGS } from "./generation-config-settings.js";
|
| 5 |
+
import { customMaxTokens } from "./utils.js";
|
| 6 |
|
| 7 |
+
interface Props {
|
| 8 |
+
conversation: Conversation;
|
| 9 |
+
classNames?: string;
|
| 10 |
+
}
|
| 11 |
|
| 12 |
+
let { conversation = $bindable(), classNames = "" }: Props = $props();
|
| 13 |
+
|
| 14 |
+
let modelMaxLength = $derived(
|
| 15 |
+
customMaxTokens[conversation.model.id] ?? conversation.model.tokenizerConfig.model_max_length
|
| 16 |
+
);
|
| 17 |
+
let maxTokens = $derived(Math.min(modelMaxLength ?? GENERATION_CONFIG_SETTINGS["max_tokens"].max, 64_000));
|
| 18 |
</script>
|
| 19 |
|
| 20 |
<div class="flex flex-col gap-y-7 {classNames}">
|
src/lib/components/{InferencePlayground/InferencePlaygroundHFTokenModal.svelte β inference-playground/hf-token-modal.svelte}
RENAMED
|
@@ -1,13 +1,21 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import {
|
|
|
|
|
|
|
|
|
|
| 3 |
import { createEventDispatcher, onDestroy, onMount } from "svelte";
|
| 4 |
|
| 5 |
import IconCross from "~icons/carbon/close";
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
-
|
| 8 |
|
| 9 |
-
let backdropEl
|
| 10 |
-
let modalEl
|
| 11 |
|
| 12 |
const dispatch = createEventDispatcher<{ close: void }>();
|
| 13 |
|
|
@@ -21,7 +29,6 @@
|
|
| 21 |
|
| 22 |
onMount(() => {
|
| 23 |
document.getElementById("app")?.setAttribute("inert", "true");
|
| 24 |
-
modalEl.focus();
|
| 25 |
});
|
| 26 |
|
| 27 |
onDestroy(() => {
|
|
@@ -32,7 +39,6 @@
|
|
| 32 |
});
|
| 33 |
</script>
|
| 34 |
|
| 35 |
-
<!-- svelte-ignore a11y-no-noninteractive-element-interactions -->
|
| 36 |
<div
|
| 37 |
id="default-modal"
|
| 38 |
aria-hidden="true"
|
|
@@ -44,10 +50,10 @@
|
|
| 44 |
tabindex="-1"
|
| 45 |
class="relative max-h-full w-full max-w-xl p-4 outline-hidden"
|
| 46 |
bind:this={modalEl}
|
| 47 |
-
|
| 48 |
use:clickOutside={() => dispatch("close")}
|
| 49 |
>
|
| 50 |
-
<form
|
| 51 |
<div class="flex items-center justify-between rounded-t border-b p-4 md:px-5 md:py-4 dark:border-gray-800">
|
| 52 |
<h3 class="flex items-center gap-2.5 text-lg font-semibold text-gray-900 dark:text-white">
|
| 53 |
<img
|
|
@@ -58,7 +64,7 @@
|
|
| 58 |
</h3>
|
| 59 |
<button
|
| 60 |
type="button"
|
| 61 |
-
|
| 62 |
class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
|
| 63 |
>
|
| 64 |
<div class="text-xl">
|
|
@@ -79,6 +85,7 @@
|
|
| 79 |
>Hugging Face Token</label
|
| 80 |
>
|
| 81 |
<input
|
|
|
|
| 82 |
required
|
| 83 |
placeholder="Enter HF Token"
|
| 84 |
type="text"
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { createBubbler, preventDefault } from "svelte/legacy";
|
| 3 |
+
|
| 4 |
+
const bubble = createBubbler();
|
| 5 |
+
import { clickOutside } from "$lib/actions/click-outside.js";
|
| 6 |
import { createEventDispatcher, onDestroy, onMount } from "svelte";
|
| 7 |
|
| 8 |
import IconCross from "~icons/carbon/close";
|
| 9 |
+
import { autofocus } from "$lib/actions/autofocus.js";
|
| 10 |
+
|
| 11 |
+
interface Props {
|
| 12 |
+
storeLocallyHfToken?: boolean;
|
| 13 |
+
}
|
| 14 |
|
| 15 |
+
let { storeLocallyHfToken = $bindable(false) }: Props = $props();
|
| 16 |
|
| 17 |
+
let backdropEl = $state<HTMLDivElement>();
|
| 18 |
+
let modalEl = $state<HTMLDivElement>();
|
| 19 |
|
| 20 |
const dispatch = createEventDispatcher<{ close: void }>();
|
| 21 |
|
|
|
|
| 29 |
|
| 30 |
onMount(() => {
|
| 31 |
document.getElementById("app")?.setAttribute("inert", "true");
|
|
|
|
| 32 |
});
|
| 33 |
|
| 34 |
onDestroy(() => {
|
|
|
|
| 39 |
});
|
| 40 |
</script>
|
| 41 |
|
|
|
|
| 42 |
<div
|
| 43 |
id="default-modal"
|
| 44 |
aria-hidden="true"
|
|
|
|
| 50 |
tabindex="-1"
|
| 51 |
class="relative max-h-full w-full max-w-xl p-4 outline-hidden"
|
| 52 |
bind:this={modalEl}
|
| 53 |
+
onkeydown={handleKeydown}
|
| 54 |
use:clickOutside={() => dispatch("close")}
|
| 55 |
>
|
| 56 |
+
<form onsubmit={preventDefault(bubble("submit"))} class="relative rounded-lg bg-white shadow-sm dark:bg-gray-900">
|
| 57 |
<div class="flex items-center justify-between rounded-t border-b p-4 md:px-5 md:py-4 dark:border-gray-800">
|
| 58 |
<h3 class="flex items-center gap-2.5 text-lg font-semibold text-gray-900 dark:text-white">
|
| 59 |
<img
|
|
|
|
| 64 |
</h3>
|
| 65 |
<button
|
| 66 |
type="button"
|
| 67 |
+
onclick={() => dispatch("close")}
|
| 68 |
class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
|
| 69 |
>
|
| 70 |
<div class="text-xl">
|
|
|
|
| 85 |
>Hugging Face Token</label
|
| 86 |
>
|
| 87 |
<input
|
| 88 |
+
use:autofocus
|
| 89 |
required
|
| 90 |
placeholder="Enter HF Token"
|
| 91 |
type="text"
|
src/lib/components/{InferencePlayground/InferencePlaygroundMessage.svelte β inference-playground/message.svelte}
RENAMED
|
@@ -1,39 +1,46 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import {
|
| 3 |
-
import type { ConversationMessage } from "$lib/types";
|
| 4 |
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 8 |
|
| 9 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 10 |
</script>
|
| 11 |
|
| 12 |
<div
|
| 13 |
-
class="group/message group grid grid-cols-[1fr_2.5rem] items-start gap-2 px-3.5 pt-4 pb-6 hover:bg-gray-100/70 @-2xl:grid-cols-[130px_1fr_2.5rem] @2xl:grid-rows-1 @2xl:gap-4 @2xl:px-6 dark:border-gray-800 dark:hover:bg-gray-800/30
|
| 14 |
class:pointer-events-none={loading}
|
| 15 |
>
|
| 16 |
<div class="col-span-2 pt-3 pb-1 text-sm font-semibold uppercase @2xl:col-span-1 @2xl:pb-2">
|
| 17 |
-
{
|
| 18 |
</div>
|
| 19 |
-
<!-- svelte-ignore
|
| 20 |
-
<!-- svelte-ignore
|
| 21 |
<textarea
|
|
|
|
| 22 |
{autofocus}
|
| 23 |
-
bind:value={
|
| 24 |
-
placeholder="Enter {
|
| 25 |
class="resize-none overflow-hidden rounded-sm bg-transparent px-2 py-2.5 ring-gray-100 outline-none group-hover/message:ring-3 hover:resize-y hover:bg-white focus:resize-y focus:bg-white focus:ring-3 @2xl:px-3 dark:ring-gray-600 dark:hover:bg-gray-900 dark:focus:bg-gray-900"
|
| 26 |
rows="1"
|
| 27 |
tabindex="2"
|
| 28 |
-
on:input={() => {
|
| 29 |
-
dispatch("input");
|
| 30 |
-
}}
|
| 31 |
></textarea>
|
| 32 |
<button
|
| 33 |
tabindex="0"
|
| 34 |
-
|
| 35 |
-
dispatch("delete");
|
| 36 |
-
}}
|
| 37 |
type="button"
|
| 38 |
class="mt-1.5 size-8 rounded-lg border border-gray-200 bg-white text-xs font-medium text-gray-900 group-hover/message:block hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden sm:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
| 39 |
>β</button
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { TextareaAutosize } from "$lib/spells/textarea-autosize.svelte.js";
|
| 3 |
+
import type { ConversationMessage } from "$lib/types.js";
|
| 4 |
|
| 5 |
+
type Props = {
|
| 6 |
+
content: ConversationMessage["content"];
|
| 7 |
+
role: ConversationMessage["role"];
|
| 8 |
+
loading?: boolean;
|
| 9 |
+
autofocus?: boolean;
|
| 10 |
+
onDelete?: () => void;
|
| 11 |
+
};
|
| 12 |
|
| 13 |
+
let { content = $bindable(""), role, loading, autofocus, onDelete }: Props = $props();
|
| 14 |
+
|
| 15 |
+
let element = $state<HTMLTextAreaElement>();
|
| 16 |
+
new TextareaAutosize({
|
| 17 |
+
styleProp: "minHeight",
|
| 18 |
+
element: () => element,
|
| 19 |
+
input: () => content,
|
| 20 |
+
});
|
| 21 |
</script>
|
| 22 |
|
| 23 |
<div
|
| 24 |
+
class=" group/message group grid grid-cols-[1fr_2.5rem] items-start gap-2 border-b px-3.5 pt-4 pb-6 hover:bg-gray-100/70 @-2xl:grid-cols-[130px_1fr_2.5rem] @2xl:grid-rows-1 @2xl:gap-4 @2xl:px-6 dark:border-gray-800 dark:hover:bg-gray-800/30"
|
| 25 |
class:pointer-events-none={loading}
|
| 26 |
>
|
| 27 |
<div class="col-span-2 pt-3 pb-1 text-sm font-semibold uppercase @2xl:col-span-1 @2xl:pb-2">
|
| 28 |
+
{role}
|
| 29 |
</div>
|
| 30 |
+
<!-- svelte-ignore a11y_autofocus -->
|
| 31 |
+
<!-- svelte-ignore a11y_positive_tabindex -->
|
| 32 |
<textarea
|
| 33 |
+
bind:this={element}
|
| 34 |
{autofocus}
|
| 35 |
+
bind:value={content}
|
| 36 |
+
placeholder="Enter {role} message"
|
| 37 |
class="resize-none overflow-hidden rounded-sm bg-transparent px-2 py-2.5 ring-gray-100 outline-none group-hover/message:ring-3 hover:resize-y hover:bg-white focus:resize-y focus:bg-white focus:ring-3 @2xl:px-3 dark:ring-gray-600 dark:hover:bg-gray-900 dark:focus:bg-gray-900"
|
| 38 |
rows="1"
|
| 39 |
tabindex="2"
|
|
|
|
|
|
|
|
|
|
| 40 |
></textarea>
|
| 41 |
<button
|
| 42 |
tabindex="0"
|
| 43 |
+
onclick={onDelete}
|
|
|
|
|
|
|
| 44 |
type="button"
|
| 45 |
class="mt-1.5 size-8 rounded-lg border border-gray-200 bg-white text-xs font-medium text-gray-900 group-hover/message:block hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden sm:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
| 46 |
>β</button
|
src/lib/components/inference-playground/model-selector-modal.svelte
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import type { Conversation, ModelWithTokenizer } from "$lib/types.js";
|
| 3 |
+
|
| 4 |
+
import { tick } from "svelte";
|
| 5 |
+
|
| 6 |
+
import { autofocus } from "$lib/actions/autofocus.js";
|
| 7 |
+
import { models } from "$lib/state/models.svelte.js";
|
| 8 |
+
import fuzzysearch from "$lib/utils/search.js";
|
| 9 |
+
import { watch } from "runed";
|
| 10 |
+
import IconSearch from "~icons/carbon/search";
|
| 11 |
+
import IconStar from "~icons/carbon/star";
|
| 12 |
+
|
| 13 |
+
interface Props {
|
| 14 |
+
onModelSelect?: (model: string) => void;
|
| 15 |
+
onClose?: () => void;
|
| 16 |
+
conversation: Conversation;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
let { onModelSelect, onClose, conversation }: Props = $props();
|
| 20 |
+
|
| 21 |
+
let backdropEl = $state<HTMLDivElement>();
|
| 22 |
+
let highlightIdx = $state(-1);
|
| 23 |
+
let ignoreCursorHighlight = $state(false);
|
| 24 |
+
let containerEl = $state<HTMLDivElement>();
|
| 25 |
+
let query = $state("");
|
| 26 |
+
|
| 27 |
+
const trending = $derived(fuzzysearch({ needle: query, haystack: models.trending, property: "id" }));
|
| 28 |
+
const other = $derived(fuzzysearch({ needle: query, haystack: models.nonTrending, property: "id" }));
|
| 29 |
+
const queried = $derived(trending.concat(other));
|
| 30 |
+
function getModelIdx(model: ModelWithTokenizer) {
|
| 31 |
+
return queried.findIndex(m => m.id === model.id);
|
| 32 |
+
}
|
| 33 |
+
const highlighted = $derived(queried[highlightIdx]);
|
| 34 |
+
|
| 35 |
+
watch(
|
| 36 |
+
() => queried,
|
| 37 |
+
(curr, prev) => {
|
| 38 |
+
const prevModel = prev?.[highlightIdx];
|
| 39 |
+
if (prevModel) {
|
| 40 |
+
// maintain model selection
|
| 41 |
+
highlightIdx = Math.max(
|
| 42 |
+
0,
|
| 43 |
+
curr.findIndex(model => model.id === prevModel?.id)
|
| 44 |
+
);
|
| 45 |
+
} else {
|
| 46 |
+
highlightIdx = curr.findIndex(model => model.id === conversation.model.id);
|
| 47 |
+
}
|
| 48 |
+
scrollToResult();
|
| 49 |
+
}
|
| 50 |
+
);
|
| 51 |
+
|
| 52 |
+
function selectModel(model: ModelWithTokenizer) {
|
| 53 |
+
onModelSelect?.(model.id);
|
| 54 |
+
onClose?.();
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
function handleKeydown(e: KeyboardEvent) {
|
| 58 |
+
if (e.key === "Escape") {
|
| 59 |
+
onClose?.();
|
| 60 |
+
} else if (e.key === "Enter") {
|
| 61 |
+
if (highlighted) selectModel(highlighted);
|
| 62 |
+
} else if (e.key === "ArrowUp") {
|
| 63 |
+
if (highlightIdx > 0) highlightIdx--;
|
| 64 |
+
ignoreCursorHighlight = true;
|
| 65 |
+
} else if (e.key === "ArrowDown") {
|
| 66 |
+
if (highlightIdx < queried.length - 1) highlightIdx++;
|
| 67 |
+
ignoreCursorHighlight = true;
|
| 68 |
+
} else {
|
| 69 |
+
return;
|
| 70 |
+
}
|
| 71 |
+
e.preventDefault();
|
| 72 |
+
|
| 73 |
+
scrollToResult();
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
async function scrollToResult() {
|
| 77 |
+
await tick();
|
| 78 |
+
const highlightedEl = document.querySelector("[data-model][data-highlighted]");
|
| 79 |
+
highlightedEl?.scrollIntoView({ block: "nearest" });
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
function highlightRow(idx: number) {
|
| 83 |
+
if (ignoreCursorHighlight) return;
|
| 84 |
+
highlightIdx = idx;
|
| 85 |
+
}
|
| 86 |
+
|
| 87 |
+
function handleBackdropClick(event: MouseEvent) {
|
| 88 |
+
event.stopPropagation();
|
| 89 |
+
if (window?.getSelection()?.toString()) {
|
| 90 |
+
return;
|
| 91 |
+
}
|
| 92 |
+
if (event.target === backdropEl) {
|
| 93 |
+
onClose?.();
|
| 94 |
+
}
|
| 95 |
+
}
|
| 96 |
+
</script>
|
| 97 |
+
|
| 98 |
+
<svelte:window onkeydown={handleKeydown} onmousemove={() => (ignoreCursorHighlight = false)} />
|
| 99 |
+
|
| 100 |
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
| 101 |
+
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
| 102 |
+
<div
|
| 103 |
+
class="fixed inset-0 z-10 flex h-screen items-start justify-center bg-black/85 pt-32"
|
| 104 |
+
bind:this={backdropEl}
|
| 105 |
+
onclick={handleBackdropClick}
|
| 106 |
+
>
|
| 107 |
+
<div class="flex w-full max-w-[600px] items-start justify-center overflow-hidden p-10 text-left whitespace-nowrap">
|
| 108 |
+
<div
|
| 109 |
+
class="flex h-full w-full flex-col overflow-hidden rounded-lg border bg-white text-gray-900 shadow-md dark:border-gray-800 dark:bg-gray-900 dark:text-gray-300"
|
| 110 |
+
bind:this={containerEl}
|
| 111 |
+
>
|
| 112 |
+
<div class="flex items-center border-b px-3 dark:border-gray-800">
|
| 113 |
+
<div class="mr-2 text-sm">
|
| 114 |
+
<IconSearch />
|
| 115 |
+
</div>
|
| 116 |
+
<input
|
| 117 |
+
use:autofocus
|
| 118 |
+
class="flex h-10 w-full rounded-md bg-transparent py-3 text-sm placeholder-gray-400 outline-hidden"
|
| 119 |
+
placeholder="Search models ..."
|
| 120 |
+
bind:value={query}
|
| 121 |
+
/>
|
| 122 |
+
</div>
|
| 123 |
+
<div class="max-h-[300px] overflow-x-hidden overflow-y-auto">
|
| 124 |
+
{#snippet modelEntry(model: ModelWithTokenizer, trending?: boolean)}
|
| 125 |
+
{@const idx = getModelIdx(model)}
|
| 126 |
+
{@const [nameSpace, modelName] = model.id.split("/")}
|
| 127 |
+
<button
|
| 128 |
+
class="flex w-full cursor-pointer items-center px-2 py-1.5 text-sm
|
| 129 |
+
data-[highlighted]:bg-gray-100 data-[highlighted]:dark:bg-gray-800"
|
| 130 |
+
data-highlighted={highlightIdx === idx ? true : undefined}
|
| 131 |
+
data-model
|
| 132 |
+
onmouseenter={() => highlightRow(idx)}
|
| 133 |
+
onclick={() => {
|
| 134 |
+
onModelSelect?.(model.id);
|
| 135 |
+
onClose?.();
|
| 136 |
+
}}
|
| 137 |
+
>
|
| 138 |
+
{#if trending}
|
| 139 |
+
<div class="lucide lucide-star mr-1.5 size-4 text-yellow-400">
|
| 140 |
+
<IconStar />
|
| 141 |
+
</div>
|
| 142 |
+
{/if}
|
| 143 |
+
<span class="inline-flex items-center"
|
| 144 |
+
><span class="text-gray-500 dark:text-gray-400">{nameSpace}</span><span
|
| 145 |
+
class="mx-1 text-gray-300 dark:text-gray-700">/</span
|
| 146 |
+
><span class="text-black dark:text-white">{modelName}</span></span
|
| 147 |
+
>
|
| 148 |
+
</button>
|
| 149 |
+
{/snippet}
|
| 150 |
+
{#if trending.length > 0}
|
| 151 |
+
<div class="px-2 py-1.5 text-xs font-medium text-gray-500">Trending</div>
|
| 152 |
+
{#each trending as model}
|
| 153 |
+
{@render modelEntry(model, true)}
|
| 154 |
+
{/each}
|
| 155 |
+
{/if}
|
| 156 |
+
{#if other.length > 0}
|
| 157 |
+
<div class="px-2 py-1.5 text-xs font-medium text-gray-500">Other models</div>
|
| 158 |
+
{#each other as model}
|
| 159 |
+
{@render modelEntry(model, false)}
|
| 160 |
+
{/each}
|
| 161 |
+
{/if}
|
| 162 |
+
</div>
|
| 163 |
+
</div>
|
| 164 |
+
</div>
|
| 165 |
+
</div>
|
src/lib/components/{InferencePlayground/InferencePlaygroundModelSelector.svelte β inference-playground/model-selector.svelte}
RENAMED
|
@@ -1,20 +1,24 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import type { Conversation, ModelWithTokenizer } from "$lib/types";
|
| 3 |
|
| 4 |
-
import { models } from "$lib/
|
| 5 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 6 |
-
import Avatar from "../
|
| 7 |
-
import ModelSelectorModal from "./
|
| 8 |
-
import ProviderSelect from "./
|
| 9 |
-
import { defaultSystemMessage } from "./
|
| 10 |
|
| 11 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 12 |
|
| 13 |
-
let showModelPickerModal = false;
|
| 14 |
|
| 15 |
// Model
|
| 16 |
function changeModel(modelId: ModelWithTokenizer["id"]) {
|
| 17 |
-
const model =
|
| 18 |
if (!model) {
|
| 19 |
return;
|
| 20 |
}
|
|
@@ -23,20 +27,20 @@
|
|
| 23 |
conversation.provider = undefined;
|
| 24 |
}
|
| 25 |
|
| 26 |
-
|
| 27 |
-
|
| 28 |
const id = crypto.randomUUID();
|
| 29 |
</script>
|
| 30 |
|
| 31 |
<div class="flex flex-col gap-2">
|
| 32 |
<label for={id} class="flex items-baseline gap-2 text-sm font-medium text-gray-900 dark:text-white">
|
| 33 |
-
Models<span class="text-xs font-normal text-gray-400">{
|
| 34 |
</label>
|
| 35 |
|
| 36 |
<button
|
| 37 |
{id}
|
| 38 |
class="relative flex items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110"
|
| 39 |
-
|
| 40 |
>
|
| 41 |
<div class="flex flex-col items-start">
|
| 42 |
<div class="flex items-center gap-1 text-sm text-gray-500 dark:text-gray-300">
|
|
@@ -54,11 +58,7 @@
|
|
| 54 |
</div>
|
| 55 |
|
| 56 |
{#if showModelPickerModal}
|
| 57 |
-
<ModelSelectorModal
|
| 58 |
-
{conversation}
|
| 59 |
-
on:modelSelected={e => changeModel(e.detail)}
|
| 60 |
-
on:close={() => (showModelPickerModal = false)}
|
| 61 |
-
/>
|
| 62 |
{/if}
|
| 63 |
|
| 64 |
<ProviderSelect bind:conversation />
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import type { Conversation, ModelWithTokenizer } from "$lib/types.js";
|
| 3 |
|
| 4 |
+
import { models } from "$lib/state/models.svelte.js";
|
| 5 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 6 |
+
import Avatar from "../avatar.svelte";
|
| 7 |
+
import ModelSelectorModal from "./model-selector-modal.svelte";
|
| 8 |
+
import ProviderSelect from "./provider-select.svelte";
|
| 9 |
+
import { defaultSystemMessage } from "./utils.js";
|
| 10 |
|
| 11 |
+
interface Props {
|
| 12 |
+
conversation: Conversation;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
let { conversation = $bindable() }: Props = $props();
|
| 16 |
|
| 17 |
+
let showModelPickerModal = $state(false);
|
| 18 |
|
| 19 |
// Model
|
| 20 |
function changeModel(modelId: ModelWithTokenizer["id"]) {
|
| 21 |
+
const model = models.all.find(m => m.id === modelId);
|
| 22 |
if (!model) {
|
| 23 |
return;
|
| 24 |
}
|
|
|
|
| 27 |
conversation.provider = undefined;
|
| 28 |
}
|
| 29 |
|
| 30 |
+
let nameSpace = $derived(conversation.model.id.split("/")[0] ?? "");
|
| 31 |
+
let modelName = $derived(conversation.model.id.split("/")[1] ?? "");
|
| 32 |
const id = crypto.randomUUID();
|
| 33 |
</script>
|
| 34 |
|
| 35 |
<div class="flex flex-col gap-2">
|
| 36 |
<label for={id} class="flex items-baseline gap-2 text-sm font-medium text-gray-900 dark:text-white">
|
| 37 |
+
Models<span class="text-xs font-normal text-gray-400">{models.all.length}</span>
|
| 38 |
</label>
|
| 39 |
|
| 40 |
<button
|
| 41 |
{id}
|
| 42 |
class="relative flex items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110"
|
| 43 |
+
onclick={() => (showModelPickerModal = true)}
|
| 44 |
>
|
| 45 |
<div class="flex flex-col items-start">
|
| 46 |
<div class="flex items-center gap-1 text-sm text-gray-500 dark:text-gray-300">
|
|
|
|
| 58 |
</div>
|
| 59 |
|
| 60 |
{#if showModelPickerModal}
|
| 61 |
+
<ModelSelectorModal {conversation} onModelSelect={changeModel} onClose={() => (showModelPickerModal = false)} />
|
|
|
|
|
|
|
|
|
|
|
|
|
| 62 |
{/if}
|
| 63 |
|
| 64 |
<ProviderSelect bind:conversation />
|
src/lib/components/{InferencePlayground/InferencePlayground.svelte β inference-playground/playground.svelte}
RENAMED
|
@@ -1,109 +1,99 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import type {
|
| 3 |
-
|
| 4 |
-
import {
|
| 5 |
-
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
} from "
|
| 9 |
-
|
| 10 |
-
import {
|
| 11 |
-
import { project, session } from "$lib/stores/session";
|
| 12 |
-
import { token } from "$lib/stores/token";
|
| 13 |
-
import { isMac } from "$lib/utils/platform";
|
| 14 |
import { HfInference } from "@huggingface/inference";
|
| 15 |
-
import { onDestroy } from "svelte";
|
| 16 |
import IconExternal from "~icons/carbon/arrow-up-right";
|
| 17 |
import IconCode from "~icons/carbon/code";
|
| 18 |
import IconCompare from "~icons/carbon/compare";
|
| 19 |
import IconInfo from "~icons/carbon/information";
|
| 20 |
import { default as IconDelete, default as IconThrashcan } from "~icons/carbon/trash-can";
|
| 21 |
-
import
|
| 22 |
-
import PlaygroundConversationHeader from "./
|
| 23 |
-
import
|
| 24 |
-
import
|
| 25 |
-
import
|
| 26 |
-
import ModelSelectorModal from "./
|
| 27 |
-
import
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
const startMessageUser: ConversationMessage = { role: "user", content: "" };
|
| 30 |
|
| 31 |
-
let viewCode = false;
|
| 32 |
-
let viewSettings = false;
|
| 33 |
-
let loading = false;
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
let selectCompareModelOpen = false;
|
| 37 |
|
| 38 |
interface GenerationStatistics {
|
| 39 |
latency: number;
|
| 40 |
generatedTokensCount: number;
|
| 41 |
}
|
| 42 |
-
let generationStats = $
|
| 43 |
-
|
| 44 |
-
|
|
|
|
|
|
|
| 45 |
|
| 46 |
-
|
| 47 |
-
|
|
|
|
|
|
|
| 48 |
|
| 49 |
function reset() {
|
| 50 |
-
|
| 51 |
-
|
| 52 |
-
|
|
|
|
|
|
|
|
|
|
| 53 |
});
|
| 54 |
-
$session = $session;
|
| 55 |
}
|
| 56 |
|
| 57 |
-
function
|
| 58 |
-
|
| 59 |
-
|
| 60 |
-
abortController.abort();
|
| 61 |
-
}
|
| 62 |
-
abortControllers = [];
|
| 63 |
-
}
|
| 64 |
-
loading = false;
|
| 65 |
-
waitForNonStreaming = false;
|
| 66 |
-
}
|
| 67 |
|
| 68 |
-
async function runInference(conversation: Conversation, conversationIdx: number) {
|
| 69 |
const startTime = performance.now();
|
| 70 |
-
const hf = new HfInference(
|
| 71 |
|
| 72 |
if (conversation.streaming) {
|
| 73 |
-
let
|
| 74 |
-
|
| 75 |
-
const abortController = new AbortController();
|
| 76 |
-
abortControllers.push(abortController);
|
| 77 |
|
| 78 |
await handleStreamingResponse(
|
| 79 |
hf,
|
| 80 |
conversation,
|
| 81 |
content => {
|
| 82 |
-
if (streamingMessage)
|
| 83 |
-
|
| 84 |
-
|
| 85 |
-
|
| 86 |
-
|
| 87 |
-
}
|
| 88 |
-
$session = $session;
|
| 89 |
-
const c = generationStats[conversationIdx];
|
| 90 |
-
if (c) c.generatedTokensCount += 1;
|
| 91 |
}
|
|
|
|
|
|
|
|
|
|
| 92 |
},
|
| 93 |
-
|
| 94 |
);
|
| 95 |
} else {
|
| 96 |
-
waitForNonStreaming = true;
|
| 97 |
const { message: newMessage, completion_tokens: newTokensCount } = await handleNonStreamingResponse(
|
| 98 |
hf,
|
| 99 |
conversation
|
| 100 |
);
|
| 101 |
-
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
const c = generationStats[conversationIdx];
|
| 105 |
-
if (c) c.generatedTokensCount += newTokensCount;
|
| 106 |
-
}
|
| 107 |
}
|
| 108 |
|
| 109 |
const endTime = performance.now();
|
|
@@ -112,48 +102,58 @@
|
|
| 112 |
}
|
| 113 |
|
| 114 |
async function submit() {
|
| 115 |
-
if (
|
| 116 |
-
|
| 117 |
return;
|
| 118 |
}
|
| 119 |
|
| 120 |
-
for (const [idx, conversation] of
|
| 121 |
-
if (conversation.messages.at(-1)?.role
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
}
|
| 126 |
-
return alert(`${prefix}Messages must alternate between user/assistant roles.`);
|
| 127 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 128 |
}
|
| 129 |
|
| 130 |
(document.activeElement as HTMLElement).blur();
|
| 131 |
loading = true;
|
| 132 |
|
| 133 |
try {
|
| 134 |
-
const promises =
|
| 135 |
await Promise.all(promises);
|
| 136 |
} catch (error) {
|
| 137 |
-
for (const conversation of
|
| 138 |
if (conversation.messages.at(-1)?.role === "assistant" && !conversation.messages.at(-1)?.content?.trim()) {
|
| 139 |
conversation.messages.pop();
|
| 140 |
conversation.messages = [...conversation.messages];
|
| 141 |
}
|
| 142 |
-
|
| 143 |
}
|
|
|
|
| 144 |
if (error instanceof Error) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 145 |
if (error.message.includes("token seems invalid")) {
|
| 146 |
token.reset();
|
| 147 |
}
|
|
|
|
| 148 |
if (error.name !== "AbortError") {
|
| 149 |
-
|
| 150 |
}
|
| 151 |
} else {
|
| 152 |
-
|
| 153 |
}
|
| 154 |
} finally {
|
| 155 |
loading = false;
|
| 156 |
-
|
| 157 |
}
|
| 158 |
}
|
| 159 |
|
|
@@ -169,7 +169,7 @@
|
|
| 169 |
const submittedHfToken = (formData.get("hf-token") as string).trim() ?? "";
|
| 170 |
const RE_HF_TOKEN = /\bhf_[a-zA-Z0-9]{34}\b/;
|
| 171 |
if (RE_HF_TOKEN.test(submittedHfToken)) {
|
| 172 |
-
token.
|
| 173 |
submit();
|
| 174 |
} else {
|
| 175 |
alert("Please provide a valid HF token.");
|
|
@@ -177,46 +177,41 @@
|
|
| 177 |
}
|
| 178 |
|
| 179 |
function addCompareModel(modelId: ModelWithTokenizer["id"]) {
|
| 180 |
-
const model =
|
| 181 |
-
if (!model ||
|
| 182 |
return;
|
| 183 |
}
|
| 184 |
-
const newConversation = { ...JSON.parse(JSON.stringify(
|
| 185 |
-
|
| 186 |
generationStats = [generationStats[0], { latency: 0, generatedTokensCount: 0 }];
|
| 187 |
}
|
| 188 |
|
| 189 |
function removeCompareModal(conversationIdx: number) {
|
| 190 |
-
|
| 191 |
-
|
| 192 |
generationStats.splice(conversationIdx, 1)[0];
|
| 193 |
generationStats = generationStats;
|
| 194 |
}
|
| 195 |
-
|
| 196 |
-
onDestroy(() => {
|
| 197 |
-
for (const abortController of abortControllers) {
|
| 198 |
-
abortController.abort();
|
| 199 |
-
}
|
| 200 |
-
});
|
| 201 |
</script>
|
| 202 |
|
| 203 |
-
{#if
|
| 204 |
<HFTokenModal
|
| 205 |
-
bind:storeLocallyHfToken={
|
| 206 |
-
on:close={() => (
|
| 207 |
on:submit={handleTokenSubmit}
|
| 208 |
/>
|
| 209 |
{/if}
|
| 210 |
|
| 211 |
-
<!-- svelte-ignore
|
| 212 |
<div
|
| 213 |
class="motion-safe:animate-fade-in grid h-dvh divide-gray-200 overflow-hidden bg-gray-100/50 max-md:grid-rows-[120px_1fr] max-md:divide-y dark:divide-gray-800 dark:bg-gray-900 dark:text-gray-300 dark:[color-scheme:dark] {compareActive
|
| 214 |
? 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)]'
|
| 215 |
: 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)_clamp(270px,25%,300px)]'}"
|
| 216 |
>
|
|
|
|
| 217 |
<div class="flex flex-col gap-2 overflow-y-auto py-3 pr-3 max-md:pl-3">
|
| 218 |
<div class="pl-2">
|
| 219 |
-
<
|
| 220 |
</div>
|
| 221 |
<div
|
| 222 |
class="relative flex flex-1 flex-col gap-6 overflow-y-hidden rounded-r-xl border-x border-y border-gray-200/80 bg-linear-to-b from-white via-white p-3 shadow-xs max-md:rounded-xl dark:border-white/5 dark:from-gray-800/40 dark:via-gray-800/40"
|
|
@@ -230,33 +225,39 @@
|
|
| 230 |
placeholder={systemPromptSupported
|
| 231 |
? "Enter a custom prompt"
|
| 232 |
: "System prompt is not supported with the chosen model."}
|
| 233 |
-
value={systemPromptSupported ?
|
| 234 |
-
|
| 235 |
-
for (const conversation of
|
| 236 |
conversation.systemMessage.content = e.currentTarget.value;
|
| 237 |
}
|
| 238 |
-
|
| 239 |
}}
|
| 240 |
class="absolute inset-x-0 bottom-0 h-full resize-none bg-transparent px-3 pt-10 text-sm outline-hidden"
|
| 241 |
></textarea>
|
| 242 |
</div>
|
| 243 |
</div>
|
| 244 |
-
|
|
|
|
|
|
|
|
|
|
| 245 |
<div
|
| 246 |
class="flex h-[calc(100dvh-5rem-120px)] divide-x divide-gray-200 overflow-x-auto overflow-y-hidden *:w-full max-sm:w-dvw md:h-[calc(100dvh-5rem)] md:pt-3 dark:divide-gray-800"
|
| 247 |
>
|
| 248 |
-
{#each
|
| 249 |
<div class="max-sm:min-w-full">
|
| 250 |
{#if compareActive}
|
| 251 |
<PlaygroundConversationHeader
|
| 252 |
{conversationIdx}
|
| 253 |
-
bind:conversation
|
| 254 |
on:close={() => removeCompareModal(conversationIdx)}
|
| 255 |
/>
|
| 256 |
{/if}
|
| 257 |
<PlaygroundConversation
|
| 258 |
{loading}
|
| 259 |
-
bind:conversation
|
|
|
|
|
|
|
|
|
|
| 260 |
{viewCode}
|
| 261 |
{compareActive}
|
| 262 |
on:closeCode={() => (viewCode = false)}
|
|
@@ -271,7 +272,7 @@
|
|
| 271 |
{#if !compareActive}
|
| 272 |
<button
|
| 273 |
type="button"
|
| 274 |
-
|
| 275 |
class="flex h-[39px] items-center gap-1 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden md:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
| 276 |
>
|
| 277 |
<div class="text-black dark:text-white">
|
|
@@ -280,7 +281,7 @@
|
|
| 280 |
{!viewSettings ? "Settings" : "Hide Settings"}
|
| 281 |
</button>
|
| 282 |
{/if}
|
| 283 |
-
<button type="button"
|
| 284 |
<IconDelete />
|
| 285 |
</button>
|
| 286 |
</div>
|
|
@@ -290,14 +291,14 @@
|
|
| 290 |
{/each}
|
| 291 |
</div>
|
| 292 |
<div class="flex flex-1 justify-end gap-x-2">
|
| 293 |
-
<button type="button"
|
| 294 |
<IconCode />
|
| 295 |
{!viewCode ? "View Code" : "Hide Code"}</button
|
| 296 |
>
|
| 297 |
<button
|
| 298 |
-
|
| 299 |
viewCode = false;
|
| 300 |
-
loading ?
|
| 301 |
}}
|
| 302 |
type="button"
|
| 303 |
class="flex h-[39px] w-24 items-center justify-center gap-2 rounded-lg px-5 py-2.5 text-sm font-medium text-white focus:ring-4 focus:ring-gray-300 focus:outline-hidden dark:border-gray-700 dark:focus:ring-gray-700 {loading
|
|
@@ -307,24 +308,18 @@
|
|
| 307 |
{#if loading}
|
| 308 |
<div class="flex flex-none items-center gap-[3px]">
|
| 309 |
<span class="mr-2">
|
| 310 |
-
{#if
|
| 311 |
Stop
|
| 312 |
{:else}
|
| 313 |
Cancel
|
| 314 |
{/if}
|
| 315 |
</span>
|
| 316 |
-
|
| 317 |
-
|
| 318 |
-
|
| 319 |
-
|
| 320 |
-
|
| 321 |
-
|
| 322 |
-
style="animation-delay: 0.5s;"
|
| 323 |
-
/>
|
| 324 |
-
<div
|
| 325 |
-
class="h-1 w-1 flex-none animate-bounce rounded-full bg-gray-500 dark:bg-gray-100"
|
| 326 |
-
style="animation-delay: 0.75s;"
|
| 327 |
-
/>
|
| 328 |
</div>
|
| 329 |
{:else}
|
| 330 |
Run <span
|
|
@@ -336,24 +331,26 @@
|
|
| 336 |
</div>
|
| 337 |
</div>
|
| 338 |
</div>
|
|
|
|
|
|
|
| 339 |
{#if !compareActive}
|
| 340 |
<div class="flex flex-col p-3 {viewSettings ? 'max-md:fixed' : 'max-md:hidden'} max-md:inset-x-0 max-md:bottom-20">
|
| 341 |
<div
|
| 342 |
class="flex flex-1 flex-col gap-6 overflow-y-hidden rounded-xl border border-gray-200/80 bg-white bg-linear-to-b from-white via-white p-3 shadow-xs dark:border-white/5 dark:bg-gray-900 dark:from-gray-800/40 dark:via-gray-800/40"
|
| 343 |
>
|
| 344 |
<div class="flex flex-col gap-2">
|
| 345 |
-
<ModelSelector bind:conversation={
|
| 346 |
<div class="flex items-center gap-2 self-end px-2 text-xs whitespace-nowrap">
|
| 347 |
<button
|
| 348 |
class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 349 |
-
|
| 350 |
>
|
| 351 |
<IconCompare />
|
| 352 |
Compare
|
| 353 |
</button>
|
| 354 |
<a
|
| 355 |
-
href="https://huggingface.co/{
|
| 356 |
-
.conversations[0]
|
| 357 |
target="_blank"
|
| 358 |
class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 359 |
>
|
|
@@ -363,10 +360,10 @@
|
|
| 363 |
</div>
|
| 364 |
</div>
|
| 365 |
|
| 366 |
-
<GenerationConfig bind:conversation={
|
| 367 |
-
{#if
|
| 368 |
<button
|
| 369 |
-
|
| 370 |
class="mt-auto flex items-center gap-1 self-end text-sm text-gray-500 underline decoration-gray-300 hover:text-gray-800 dark:text-gray-400 dark:decoration-gray-600 dark:hover:text-gray-200"
|
| 371 |
><svg xmlns="http://www.w3.org/2000/svg" class="text-xs" width="1em" height="1em" viewBox="0 0 32 32"
|
| 372 |
><path
|
|
@@ -422,8 +419,8 @@
|
|
| 422 |
|
| 423 |
{#if selectCompareModelOpen}
|
| 424 |
<ModelSelectorModal
|
| 425 |
-
conversation={
|
| 426 |
-
|
| 427 |
-
|
| 428 |
/>
|
| 429 |
{/if}
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import type { ConversationMessage, ModelWithTokenizer } from "$lib/types.js";
|
| 3 |
+
|
| 4 |
+
import { handleNonStreamingResponse, handleStreamingResponse, isSystemPromptSupported } from "./utils.js";
|
| 5 |
+
|
| 6 |
+
import { AbortManager } from "$lib/spells/abort-manager.svelte.js";
|
| 7 |
+
import { models } from "$lib/state/models.svelte.js";
|
| 8 |
+
import { session } from "$lib/state/session.svelte.js";
|
| 9 |
+
import { token } from "$lib/state/token.svelte.js";
|
| 10 |
+
import { isMac } from "$lib/utils/platform.js";
|
|
|
|
|
|
|
|
|
|
| 11 |
import { HfInference } from "@huggingface/inference";
|
|
|
|
| 12 |
import IconExternal from "~icons/carbon/arrow-up-right";
|
| 13 |
import IconCode from "~icons/carbon/code";
|
| 14 |
import IconCompare from "~icons/carbon/compare";
|
| 15 |
import IconInfo from "~icons/carbon/information";
|
| 16 |
import { default as IconDelete, default as IconThrashcan } from "~icons/carbon/trash-can";
|
| 17 |
+
import { addToast } from "../toaster.svelte.js";
|
| 18 |
+
import PlaygroundConversationHeader from "./conversation-header.svelte";
|
| 19 |
+
import PlaygroundConversation from "./conversation.svelte";
|
| 20 |
+
import GenerationConfig from "./generation-config.svelte";
|
| 21 |
+
import HFTokenModal from "./hf-token-modal.svelte";
|
| 22 |
+
import ModelSelectorModal from "./model-selector-modal.svelte";
|
| 23 |
+
import ModelSelector from "./model-selector.svelte";
|
| 24 |
+
import ProjectSelect from "./project-select.svelte";
|
| 25 |
+
import { showQuotaModal } from "../quota-modal.svelte";
|
| 26 |
+
import Toaster from "../toaster.svelte";
|
| 27 |
|
| 28 |
const startMessageUser: ConversationMessage = { role: "user", content: "" };
|
| 29 |
|
| 30 |
+
let viewCode = $state(false);
|
| 31 |
+
let viewSettings = $state(false);
|
| 32 |
+
let loading = $state(false);
|
| 33 |
+
|
| 34 |
+
const abortManager = new AbortManager();
|
| 35 |
+
let selectCompareModelOpen = $state(false);
|
| 36 |
|
| 37 |
interface GenerationStatistics {
|
| 38 |
latency: number;
|
| 39 |
generatedTokensCount: number;
|
| 40 |
}
|
| 41 |
+
let generationStats = $state(
|
| 42 |
+
session.project.conversations.map(_ => ({ latency: 0, generatedTokensCount: 0 })) as
|
| 43 |
+
| [GenerationStatistics]
|
| 44 |
+
| [GenerationStatistics, GenerationStatistics]
|
| 45 |
+
);
|
| 46 |
|
| 47 |
+
const systemPromptSupported = $derived(
|
| 48 |
+
session.project.conversations.some(conversation => isSystemPromptSupported(conversation.model))
|
| 49 |
+
);
|
| 50 |
+
const compareActive = $derived(session.project.conversations.length === 2);
|
| 51 |
|
| 52 |
function reset() {
|
| 53 |
+
session.project.conversations = session.project.conversations.map(conversation => {
|
| 54 |
+
return {
|
| 55 |
+
...conversation,
|
| 56 |
+
systemMessage: { role: "system", content: "" },
|
| 57 |
+
messages: [{ ...startMessageUser }],
|
| 58 |
+
};
|
| 59 |
});
|
|
|
|
| 60 |
}
|
| 61 |
|
| 62 |
+
async function runInference(conversationIdx: number) {
|
| 63 |
+
const conversation = session.project.conversations[conversationIdx];
|
| 64 |
+
if (!conversation) return;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 65 |
|
|
|
|
| 66 |
const startTime = performance.now();
|
| 67 |
+
const hf = new HfInference(token.value);
|
| 68 |
|
| 69 |
if (conversation.streaming) {
|
| 70 |
+
let addedMessage = false;
|
| 71 |
+
let streamingMessage = $state({ role: "assistant", content: "" });
|
|
|
|
|
|
|
| 72 |
|
| 73 |
await handleStreamingResponse(
|
| 74 |
hf,
|
| 75 |
conversation,
|
| 76 |
content => {
|
| 77 |
+
if (!streamingMessage) return;
|
| 78 |
+
streamingMessage.content = content;
|
| 79 |
+
if (!addedMessage) {
|
| 80 |
+
conversation.messages = [...conversation.messages, streamingMessage];
|
| 81 |
+
addedMessage = true;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 82 |
}
|
| 83 |
+
// session.project.conversations[conversationIdx] = conversation;
|
| 84 |
+
const c = generationStats[conversationIdx];
|
| 85 |
+
if (c) c.generatedTokensCount += 1;
|
| 86 |
},
|
| 87 |
+
abortManager.createController()
|
| 88 |
);
|
| 89 |
} else {
|
|
|
|
| 90 |
const { message: newMessage, completion_tokens: newTokensCount } = await handleNonStreamingResponse(
|
| 91 |
hf,
|
| 92 |
conversation
|
| 93 |
);
|
| 94 |
+
conversation.messages = [...conversation.messages, newMessage];
|
| 95 |
+
const c = generationStats[conversationIdx];
|
| 96 |
+
if (c) c.generatedTokensCount += newTokensCount;
|
|
|
|
|
|
|
|
|
|
| 97 |
}
|
| 98 |
|
| 99 |
const endTime = performance.now();
|
|
|
|
| 102 |
}
|
| 103 |
|
| 104 |
async function submit() {
|
| 105 |
+
if (!token.value) {
|
| 106 |
+
token.showModal = true;
|
| 107 |
return;
|
| 108 |
}
|
| 109 |
|
| 110 |
+
for (const [idx, conversation] of session.project.conversations.entries()) {
|
| 111 |
+
if (conversation.messages.at(-1)?.role !== "assistant") continue;
|
| 112 |
+
let prefix = "";
|
| 113 |
+
if (session.project.conversations.length === 2) {
|
| 114 |
+
prefix = `Error on ${idx === 0 ? "left" : "right"} conversation. `;
|
|
|
|
|
|
|
| 115 |
}
|
| 116 |
+
return addToast({
|
| 117 |
+
title: "Failed to run inference",
|
| 118 |
+
description: `${prefix}Messages must alternate between user/assistant roles.`,
|
| 119 |
+
variant: "error",
|
| 120 |
+
});
|
| 121 |
}
|
| 122 |
|
| 123 |
(document.activeElement as HTMLElement).blur();
|
| 124 |
loading = true;
|
| 125 |
|
| 126 |
try {
|
| 127 |
+
const promises = session.project.conversations.map((_, idx) => runInference(idx));
|
| 128 |
await Promise.all(promises);
|
| 129 |
} catch (error) {
|
| 130 |
+
for (const conversation of session.project.conversations) {
|
| 131 |
if (conversation.messages.at(-1)?.role === "assistant" && !conversation.messages.at(-1)?.content?.trim()) {
|
| 132 |
conversation.messages.pop();
|
| 133 |
conversation.messages = [...conversation.messages];
|
| 134 |
}
|
| 135 |
+
session.$ = session.$;
|
| 136 |
}
|
| 137 |
+
|
| 138 |
if (error instanceof Error) {
|
| 139 |
+
const msg = error.message;
|
| 140 |
+
if (msg.toLowerCase().includes("montly") || msg.toLowerCase().includes("pro")) {
|
| 141 |
+
showQuotaModal();
|
| 142 |
+
}
|
| 143 |
+
|
| 144 |
if (error.message.includes("token seems invalid")) {
|
| 145 |
token.reset();
|
| 146 |
}
|
| 147 |
+
|
| 148 |
if (error.name !== "AbortError") {
|
| 149 |
+
addToast({ title: "Error", description: error.message, variant: "error" });
|
| 150 |
}
|
| 151 |
} else {
|
| 152 |
+
addToast({ title: "Error", description: "An unknown error occurred", variant: "error" });
|
| 153 |
}
|
| 154 |
} finally {
|
| 155 |
loading = false;
|
| 156 |
+
abortManager.clear();
|
| 157 |
}
|
| 158 |
}
|
| 159 |
|
|
|
|
| 169 |
const submittedHfToken = (formData.get("hf-token") as string).trim() ?? "";
|
| 170 |
const RE_HF_TOKEN = /\bhf_[a-zA-Z0-9]{34}\b/;
|
| 171 |
if (RE_HF_TOKEN.test(submittedHfToken)) {
|
| 172 |
+
token.value = submittedHfToken;
|
| 173 |
submit();
|
| 174 |
} else {
|
| 175 |
alert("Please provide a valid HF token.");
|
|
|
|
| 177 |
}
|
| 178 |
|
| 179 |
function addCompareModel(modelId: ModelWithTokenizer["id"]) {
|
| 180 |
+
const model = models.all.find(m => m.id === modelId);
|
| 181 |
+
if (!model || session.project.conversations.length === 2) {
|
| 182 |
return;
|
| 183 |
}
|
| 184 |
+
const newConversation = { ...JSON.parse(JSON.stringify(session.project.conversations[0])), model };
|
| 185 |
+
session.project.conversations = [...session.project.conversations, newConversation];
|
| 186 |
generationStats = [generationStats[0], { latency: 0, generatedTokensCount: 0 }];
|
| 187 |
}
|
| 188 |
|
| 189 |
function removeCompareModal(conversationIdx: number) {
|
| 190 |
+
session.project.conversations.splice(conversationIdx, 1)[0];
|
| 191 |
+
session.$ = session.$;
|
| 192 |
generationStats.splice(conversationIdx, 1)[0];
|
| 193 |
generationStats = generationStats;
|
| 194 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 195 |
</script>
|
| 196 |
|
| 197 |
+
{#if token.showModal}
|
| 198 |
<HFTokenModal
|
| 199 |
+
bind:storeLocallyHfToken={token.writeToLocalStorage}
|
| 200 |
+
on:close={() => (token.showModal = false)}
|
| 201 |
on:submit={handleTokenSubmit}
|
| 202 |
/>
|
| 203 |
{/if}
|
| 204 |
|
| 205 |
+
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
| 206 |
<div
|
| 207 |
class="motion-safe:animate-fade-in grid h-dvh divide-gray-200 overflow-hidden bg-gray-100/50 max-md:grid-rows-[120px_1fr] max-md:divide-y dark:divide-gray-800 dark:bg-gray-900 dark:text-gray-300 dark:[color-scheme:dark] {compareActive
|
| 208 |
? 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)]'
|
| 209 |
: 'md:grid-cols-[clamp(220px,20%,350px)_minmax(0,1fr)_clamp(270px,25%,300px)]'}"
|
| 210 |
>
|
| 211 |
+
<!-- First column -->
|
| 212 |
<div class="flex flex-col gap-2 overflow-y-auto py-3 pr-3 max-md:pl-3">
|
| 213 |
<div class="pl-2">
|
| 214 |
+
<ProjectSelect />
|
| 215 |
</div>
|
| 216 |
<div
|
| 217 |
class="relative flex flex-1 flex-col gap-6 overflow-y-hidden rounded-r-xl border-x border-y border-gray-200/80 bg-linear-to-b from-white via-white p-3 shadow-xs max-md:rounded-xl dark:border-white/5 dark:from-gray-800/40 dark:via-gray-800/40"
|
|
|
|
| 225 |
placeholder={systemPromptSupported
|
| 226 |
? "Enter a custom prompt"
|
| 227 |
: "System prompt is not supported with the chosen model."}
|
| 228 |
+
value={systemPromptSupported ? session.project.conversations[0]?.systemMessage.content : ""}
|
| 229 |
+
oninput={e => {
|
| 230 |
+
for (const conversation of session.project.conversations) {
|
| 231 |
conversation.systemMessage.content = e.currentTarget.value;
|
| 232 |
}
|
| 233 |
+
session.$ = session.$;
|
| 234 |
}}
|
| 235 |
class="absolute inset-x-0 bottom-0 h-full resize-none bg-transparent px-3 pt-10 text-sm outline-hidden"
|
| 236 |
></textarea>
|
| 237 |
</div>
|
| 238 |
</div>
|
| 239 |
+
|
| 240 |
+
<!-- Center column -->
|
| 241 |
+
<div class="relative divide-y divide-gray-200 dark:divide-gray-800" onkeydown={onKeydown}>
|
| 242 |
+
<Toaster />
|
| 243 |
<div
|
| 244 |
class="flex h-[calc(100dvh-5rem-120px)] divide-x divide-gray-200 overflow-x-auto overflow-y-hidden *:w-full max-sm:w-dvw md:h-[calc(100dvh-5rem)] md:pt-3 dark:divide-gray-800"
|
| 245 |
>
|
| 246 |
+
{#each session.project.conversations as conversation, conversationIdx (conversation)}
|
| 247 |
<div class="max-sm:min-w-full">
|
| 248 |
{#if compareActive}
|
| 249 |
<PlaygroundConversationHeader
|
| 250 |
{conversationIdx}
|
| 251 |
+
bind:conversation={session.project.conversations[conversationIdx]!}
|
| 252 |
on:close={() => removeCompareModal(conversationIdx)}
|
| 253 |
/>
|
| 254 |
{/if}
|
| 255 |
<PlaygroundConversation
|
| 256 |
{loading}
|
| 257 |
+
bind:conversation={
|
| 258 |
+
() => session.project.conversations[conversationIdx]!,
|
| 259 |
+
v => (session.project.conversations[conversationIdx] = v)
|
| 260 |
+
}
|
| 261 |
{viewCode}
|
| 262 |
{compareActive}
|
| 263 |
on:closeCode={() => (viewCode = false)}
|
|
|
|
| 272 |
{#if !compareActive}
|
| 273 |
<button
|
| 274 |
type="button"
|
| 275 |
+
onclick={() => (viewSettings = !viewSettings)}
|
| 276 |
class="flex h-[39px] items-center gap-1 rounded-lg border border-gray-200 bg-white px-3 py-2.5 text-sm font-medium text-gray-900 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 focus:outline-hidden md:hidden dark:border-gray-600 dark:bg-gray-800 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white dark:focus:ring-gray-700"
|
| 277 |
>
|
| 278 |
<div class="text-black dark:text-white">
|
|
|
|
| 281 |
{!viewSettings ? "Settings" : "Hide Settings"}
|
| 282 |
</button>
|
| 283 |
{/if}
|
| 284 |
+
<button type="button" onclick={reset} class="btn size-[39px]">
|
| 285 |
<IconDelete />
|
| 286 |
</button>
|
| 287 |
</div>
|
|
|
|
| 291 |
{/each}
|
| 292 |
</div>
|
| 293 |
<div class="flex flex-1 justify-end gap-x-2">
|
| 294 |
+
<button type="button" onclick={() => (viewCode = !viewCode)} class="btn">
|
| 295 |
<IconCode />
|
| 296 |
{!viewCode ? "View Code" : "Hide Code"}</button
|
| 297 |
>
|
| 298 |
<button
|
| 299 |
+
onclick={() => {
|
| 300 |
viewCode = false;
|
| 301 |
+
loading ? abortManager.abortAll() : submit();
|
| 302 |
}}
|
| 303 |
type="button"
|
| 304 |
class="flex h-[39px] w-24 items-center justify-center gap-2 rounded-lg px-5 py-2.5 text-sm font-medium text-white focus:ring-4 focus:ring-gray-300 focus:outline-hidden dark:border-gray-700 dark:focus:ring-gray-700 {loading
|
|
|
|
| 308 |
{#if loading}
|
| 309 |
<div class="flex flex-none items-center gap-[3px]">
|
| 310 |
<span class="mr-2">
|
| 311 |
+
{#if session.project.conversations[0]?.streaming || session.project.conversations[1]?.streaming}
|
| 312 |
Stop
|
| 313 |
{:else}
|
| 314 |
Cancel
|
| 315 |
{/if}
|
| 316 |
</span>
|
| 317 |
+
{#each { length: 3 } as _, i}
|
| 318 |
+
<div
|
| 319 |
+
class="h-1 w-1 flex-none animate-bounce rounded-full bg-gray-500 dark:bg-gray-100"
|
| 320 |
+
style="animation-delay: {(i + 1) * 0.25}s;"
|
| 321 |
+
></div>
|
| 322 |
+
{/each}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 323 |
</div>
|
| 324 |
{:else}
|
| 325 |
Run <span
|
|
|
|
| 331 |
</div>
|
| 332 |
</div>
|
| 333 |
</div>
|
| 334 |
+
|
| 335 |
+
<!-- Last column -->
|
| 336 |
{#if !compareActive}
|
| 337 |
<div class="flex flex-col p-3 {viewSettings ? 'max-md:fixed' : 'max-md:hidden'} max-md:inset-x-0 max-md:bottom-20">
|
| 338 |
<div
|
| 339 |
class="flex flex-1 flex-col gap-6 overflow-y-hidden rounded-xl border border-gray-200/80 bg-white bg-linear-to-b from-white via-white p-3 shadow-xs dark:border-white/5 dark:bg-gray-900 dark:from-gray-800/40 dark:via-gray-800/40"
|
| 340 |
>
|
| 341 |
<div class="flex flex-col gap-2">
|
| 342 |
+
<ModelSelector bind:conversation={session.project.conversations[0]!} />
|
| 343 |
<div class="flex items-center gap-2 self-end px-2 text-xs whitespace-nowrap">
|
| 344 |
<button
|
| 345 |
class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 346 |
+
onclick={() => (selectCompareModelOpen = true)}
|
| 347 |
>
|
| 348 |
<IconCompare />
|
| 349 |
Compare
|
| 350 |
</button>
|
| 351 |
<a
|
| 352 |
+
href="https://huggingface.co/{session.project.conversations[0]?.model.id}?inference_provider={session
|
| 353 |
+
.project.conversations[0]?.provider}"
|
| 354 |
target="_blank"
|
| 355 |
class="flex items-center gap-0.5 text-gray-500 hover:text-gray-700 dark:text-gray-400 dark:hover:text-gray-300"
|
| 356 |
>
|
|
|
|
| 360 |
</div>
|
| 361 |
</div>
|
| 362 |
|
| 363 |
+
<GenerationConfig bind:conversation={session.project.conversations[0]!} />
|
| 364 |
+
{#if token.value}
|
| 365 |
<button
|
| 366 |
+
onclick={token.reset}
|
| 367 |
class="mt-auto flex items-center gap-1 self-end text-sm text-gray-500 underline decoration-gray-300 hover:text-gray-800 dark:text-gray-400 dark:decoration-gray-600 dark:hover:text-gray-200"
|
| 368 |
><svg xmlns="http://www.w3.org/2000/svg" class="text-xs" width="1em" height="1em" viewBox="0 0 32 32"
|
| 369 |
><path
|
|
|
|
| 419 |
|
| 420 |
{#if selectCompareModelOpen}
|
| 421 |
<ModelSelectorModal
|
| 422 |
+
conversation={session.project.conversations[0]!}
|
| 423 |
+
onModelSelect={addCompareModel}
|
| 424 |
+
onClose={() => (selectCompareModelOpen = false)}
|
| 425 |
/>
|
| 426 |
{/if}
|
src/lib/components/{InferencePlayground/InferencePlaygroundProjectSelect.svelte β inference-playground/project-select.svelte}
RENAMED
|
@@ -1,45 +1,45 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import {
|
| 3 |
-
import { cn } from "$lib/utils/cn";
|
| 4 |
-
import {
|
| 5 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 6 |
import IconCross from "~icons/carbon/close";
|
| 7 |
import IconEdit from "~icons/carbon/edit";
|
| 8 |
import IconSave from "~icons/carbon/save";
|
| 9 |
import IconDelete from "~icons/carbon/trash-can";
|
| 10 |
-
import { prompt } from "../
|
| 11 |
|
| 12 |
-
|
| 13 |
-
|
|
|
|
|
|
|
|
|
|
| 14 |
|
| 15 |
-
|
| 16 |
|
| 17 |
-
const {
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
if (!p) return;
|
| 24 |
-
$session.activeProjectId = p?.value;
|
| 25 |
});
|
| 26 |
|
| 27 |
async function saveProject() {
|
| 28 |
-
session.saveProject((await prompt("Set project name")) || "Project #" + (
|
| 29 |
}
|
| 30 |
</script>
|
| 31 |
|
| 32 |
<div class={cn("flex w-full items-stretch gap-2 ", classNames)}>
|
| 33 |
<button
|
| 34 |
-
{
|
| 35 |
-
use:trigger
|
| 36 |
class={cn(
|
| 37 |
"relative flex grow items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm",
|
| 38 |
"hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110"
|
| 39 |
)}
|
| 40 |
>
|
| 41 |
<div class="flex items-center gap-1 text-sm">
|
| 42 |
-
{
|
| 43 |
</div>
|
| 44 |
<div
|
| 45 |
class="absolute right-2 grid size-4 flex-none place-items-center rounded-sm bg-gray-100 text-xs dark:bg-gray-600"
|
|
@@ -48,19 +48,20 @@
|
|
| 48 |
</div>
|
| 49 |
</button>
|
| 50 |
{#if isDefault}
|
| 51 |
-
<button class="btn size-[32px] p-0"
|
| 52 |
<IconSave />
|
| 53 |
</button>
|
| 54 |
{:else}
|
| 55 |
-
<button class="btn size-[32px] p-0"
|
| 56 |
<IconCross />
|
| 57 |
</button>
|
| 58 |
{/if}
|
| 59 |
</div>
|
| 60 |
|
| 61 |
-
<div {
|
| 62 |
-
{#each
|
| 63 |
-
|
|
|
|
| 64 |
<div
|
| 65 |
class="flex items-center gap-2 rounded-md py-1.5 pr-1 pl-2 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
|
| 66 |
>
|
|
@@ -69,7 +70,7 @@
|
|
| 69 |
<div class="ml-auto flex items-center gap-1">
|
| 70 |
<button
|
| 71 |
class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
|
| 72 |
-
|
| 73 |
e.stopPropagation();
|
| 74 |
session.updateProject(id, { name: (await prompt("Edit project name", name)) || name });
|
| 75 |
}}
|
|
@@ -78,7 +79,7 @@
|
|
| 78 |
</button>
|
| 79 |
<button
|
| 80 |
class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
|
| 81 |
-
|
| 82 |
e.stopPropagation();
|
| 83 |
session.deleteProject(id);
|
| 84 |
}}
|
|
@@ -88,6 +89,6 @@
|
|
| 88 |
</div>
|
| 89 |
{/if}
|
| 90 |
</div>
|
| 91 |
-
</
|
| 92 |
{/each}
|
| 93 |
</div>
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { session } from "$lib/state/session.svelte.js";
|
| 3 |
+
import { cn } from "$lib/utils/cn.js";
|
| 4 |
+
import { Select } from "melt/builders";
|
| 5 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 6 |
import IconCross from "~icons/carbon/close";
|
| 7 |
import IconEdit from "~icons/carbon/edit";
|
| 8 |
import IconSave from "~icons/carbon/save";
|
| 9 |
import IconDelete from "~icons/carbon/trash-can";
|
| 10 |
+
import { prompt } from "../prompts.svelte";
|
| 11 |
|
| 12 |
+
interface Props {
|
| 13 |
+
class?: string;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
let { class: classNames = "" }: Props = $props();
|
| 17 |
|
| 18 |
+
const isDefault = $derived(session.$.activeProjectId === "default");
|
| 19 |
|
| 20 |
+
const select = new Select({
|
| 21 |
+
value: () => session.$.activeProjectId,
|
| 22 |
+
onValueChange(v) {
|
| 23 |
+
if (v) session.$.activeProjectId = v;
|
| 24 |
+
},
|
| 25 |
+
sameWidth: true,
|
|
|
|
|
|
|
| 26 |
});
|
| 27 |
|
| 28 |
async function saveProject() {
|
| 29 |
+
session.saveProject((await prompt("Set project name")) || "Project #" + (session.$.projects.length + 1));
|
| 30 |
}
|
| 31 |
</script>
|
| 32 |
|
| 33 |
<div class={cn("flex w-full items-stretch gap-2 ", classNames)}>
|
| 34 |
<button
|
| 35 |
+
{...select.trigger}
|
|
|
|
| 36 |
class={cn(
|
| 37 |
"relative flex grow items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm",
|
| 38 |
"hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110"
|
| 39 |
)}
|
| 40 |
>
|
| 41 |
<div class="flex items-center gap-1 text-sm">
|
| 42 |
+
{session.project.name}
|
| 43 |
</div>
|
| 44 |
<div
|
| 45 |
class="absolute right-2 grid size-4 flex-none place-items-center rounded-sm bg-gray-100 text-xs dark:bg-gray-600"
|
|
|
|
| 48 |
</div>
|
| 49 |
</button>
|
| 50 |
{#if isDefault}
|
| 51 |
+
<button class="btn size-[32px] p-0" onclick={saveProject}>
|
| 52 |
<IconSave />
|
| 53 |
</button>
|
| 54 |
{:else}
|
| 55 |
+
<button class="btn size-[32px] p-0" onclick={() => (session.$.activeProjectId = "default")}>
|
| 56 |
<IconCross />
|
| 57 |
</button>
|
| 58 |
{/if}
|
| 59 |
</div>
|
| 60 |
|
| 61 |
+
<div {...select.content} class="rounded-lg border bg-gray-100 dark:border-gray-700 dark:bg-gray-800">
|
| 62 |
+
{#each session.$.projects as { name, id } (id)}
|
| 63 |
+
{@const option = select.getOption(id)}
|
| 64 |
+
<div {...option} class="group block w-full p-1 text-sm dark:text-white">
|
| 65 |
<div
|
| 66 |
class="flex items-center gap-2 rounded-md py-1.5 pr-1 pl-2 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
|
| 67 |
>
|
|
|
|
| 70 |
<div class="ml-auto flex items-center gap-1">
|
| 71 |
<button
|
| 72 |
class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
|
| 73 |
+
onclick={async e => {
|
| 74 |
e.stopPropagation();
|
| 75 |
session.updateProject(id, { name: (await prompt("Edit project name", name)) || name });
|
| 76 |
}}
|
|
|
|
| 79 |
</button>
|
| 80 |
<button
|
| 81 |
class="grid place-items-center rounded-md p-1 text-xs hover:bg-gray-300 dark:hover:bg-gray-600"
|
| 82 |
+
onclick={e => {
|
| 83 |
e.stopPropagation();
|
| 84 |
session.deleteProject(id);
|
| 85 |
}}
|
|
|
|
| 89 |
</div>
|
| 90 |
{/if}
|
| 91 |
</div>
|
| 92 |
+
</div>
|
| 93 |
{/each}
|
| 94 |
</div>
|
src/lib/components/{InferencePlayground/InferencePlaygroundProviderSelect.svelte β inference-playground/provider-select.svelte}
RENAMED
|
@@ -1,15 +1,20 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import
|
| 3 |
|
| 4 |
-
import {
|
| 5 |
-
|
| 6 |
-
import {
|
|
|
|
|
|
|
| 7 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 8 |
-
import IconProvider from "../
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
-
|
| 11 |
-
let classes: string | undefined = undefined;
|
| 12 |
-
export { classes as class };
|
| 13 |
|
| 14 |
function reset(providers: typeof conversation.model.inferenceProviderMapping) {
|
| 15 |
const validProvider = providers.find(p => p.provider === conversation.provider);
|
|
@@ -17,18 +22,17 @@
|
|
| 17 |
conversation.provider = randomPick(providers)?.provider;
|
| 18 |
}
|
| 19 |
|
| 20 |
-
|
| 21 |
-
|
|
|
|
|
|
|
| 22 |
|
| 23 |
-
const {
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
conversation.provider ? { value: conversation.provider } : undefined,
|
| 30 |
-
p => (conversation.provider = p?.value)
|
| 31 |
-
);
|
| 32 |
|
| 33 |
const nameMap: Record<string, string> = {
|
| 34 |
"sambanova": "SambaNova",
|
|
@@ -72,8 +76,7 @@
|
|
| 72 |
-->
|
| 73 |
|
| 74 |
<button
|
| 75 |
-
{
|
| 76 |
-
use:trigger
|
| 77 |
class={cn(
|
| 78 |
"relative flex items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm",
|
| 79 |
"hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110",
|
|
@@ -91,9 +94,9 @@
|
|
| 91 |
</div>
|
| 92 |
</button>
|
| 93 |
|
| 94 |
-
<div {
|
| 95 |
{#each conversation.model.inferenceProviderMapping as { provider, providerId } (provider + providerId)}
|
| 96 |
-
<button {
|
| 97 |
<div
|
| 98 |
class="flex items-center gap-2 rounded-md px-2 py-1.5 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
|
| 99 |
>
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import { run } from "svelte/legacy";
|
| 3 |
|
| 4 |
+
import type { Conversation } from "$lib/types.js";
|
| 5 |
+
|
| 6 |
+
import { randomPick } from "$lib/utils/array.js";
|
| 7 |
+
import { cn } from "$lib/utils/cn.js";
|
| 8 |
+
import { Select } from "melt/builders";
|
| 9 |
import IconCaret from "~icons/carbon/chevron-down";
|
| 10 |
+
import IconProvider from "../icon-provider.svelte";
|
| 11 |
+
|
| 12 |
+
interface Props {
|
| 13 |
+
conversation: Conversation;
|
| 14 |
+
class?: string | undefined;
|
| 15 |
+
}
|
| 16 |
|
| 17 |
+
let { conversation = $bindable(), class: classes = undefined }: Props = $props();
|
|
|
|
|
|
|
| 18 |
|
| 19 |
function reset(providers: typeof conversation.model.inferenceProviderMapping) {
|
| 20 |
const validProvider = providers.find(p => p.provider === conversation.provider);
|
|
|
|
| 22 |
conversation.provider = randomPick(providers)?.provider;
|
| 23 |
}
|
| 24 |
|
| 25 |
+
let providers = $derived(conversation.model.inferenceProviderMapping);
|
| 26 |
+
run(() => {
|
| 27 |
+
reset(providers);
|
| 28 |
+
});
|
| 29 |
|
| 30 |
+
const select = new Select<string, false>({
|
| 31 |
+
value: () => conversation.provider,
|
| 32 |
+
onValueChange(v) {
|
| 33 |
+
conversation.provider = v;
|
| 34 |
+
},
|
| 35 |
+
});
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
const nameMap: Record<string, string> = {
|
| 38 |
"sambanova": "SambaNova",
|
|
|
|
| 76 |
-->
|
| 77 |
|
| 78 |
<button
|
| 79 |
+
{...select.trigger}
|
|
|
|
| 80 |
class={cn(
|
| 81 |
"relative flex items-center justify-between gap-6 overflow-hidden rounded-lg border bg-gray-100/80 px-3 py-1.5 leading-tight whitespace-nowrap shadow-sm",
|
| 82 |
"hover:brightness-95 dark:border-gray-700 dark:bg-gray-800 dark:hover:brightness-110",
|
|
|
|
| 94 |
</div>
|
| 95 |
</button>
|
| 96 |
|
| 97 |
+
<div {...select.content} class="rounded-lg border bg-gray-100 dark:border-gray-700 dark:bg-gray-800">
|
| 98 |
{#each conversation.model.inferenceProviderMapping as { provider, providerId } (provider + providerId)}
|
| 99 |
+
<button {...select.getOption(provider)} class="group block w-full p-1 text-sm dark:text-white">
|
| 100 |
<div
|
| 101 |
class="flex items-center gap-2 rounded-md px-2 py-1.5 group-data-[highlighted]:bg-gray-200 dark:group-data-[highlighted]:bg-gray-700"
|
| 102 |
>
|
src/lib/components/{InferencePlayground/inferencePlaygroundUtils.ts β inference-playground/utils.ts}
RENAMED
|
@@ -1,4 +1,4 @@
|
|
| 1 |
-
import type { Conversation, ModelWithTokenizer } from "$lib/types";
|
| 2 |
import type { InferenceSnippet } from "@huggingface/tasks";
|
| 3 |
import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
|
| 4 |
|
|
@@ -50,7 +50,6 @@ export async function handleNonStreamingResponse(
|
|
| 50 |
});
|
| 51 |
|
| 52 |
if (response.choices && response.choices.length > 0) {
|
| 53 |
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
| 54 |
const { message } = response.choices[0]!;
|
| 55 |
const { completion_tokens } = response.usage;
|
| 56 |
return { message, completion_tokens };
|
|
|
|
| 1 |
+
import type { Conversation, ModelWithTokenizer } from "$lib/types.js";
|
| 2 |
import type { InferenceSnippet } from "@huggingface/tasks";
|
| 3 |
import { type ChatCompletionOutputMessage } from "@huggingface/tasks";
|
| 4 |
|
|
|
|
| 50 |
});
|
| 51 |
|
| 52 |
if (response.choices && response.choices.length > 0) {
|
|
|
|
| 53 |
const { message } = response.choices[0]!;
|
| 54 |
const { completion_tokens } = response.usage;
|
| 55 |
return { message, completion_tokens };
|
src/lib/components/label-pro.svelte
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
interface Props {
|
| 3 |
+
class?: string;
|
| 4 |
+
size?: "xs" | "sm" | "md";
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
let { class: classNames = "", size = "md" }: Props = $props();
|
| 8 |
+
|
| 9 |
+
const sizeClasses: Record<string, string> = {
|
| 10 |
+
xs: "rounded-md px-1 py-0",
|
| 11 |
+
sm: "rounded-md px-1.5 py-0",
|
| 12 |
+
md: "rounded-lg px-2.5 py-0.5",
|
| 13 |
+
};
|
| 14 |
+
</script>
|
| 15 |
+
|
| 16 |
+
<span
|
| 17 |
+
class="inline-block -skew-x-12 border border-gray-200 bg-linear-to-br from-pink-300 via-emerald-200 to-yellow-200
|
| 18 |
+
text-sm font-bold text-black shadow-lg shadow-emerald-500/10 dark:border-gray-800
|
| 19 |
+
dark:from-pink-500 dark:via-emerald-500 dark:to-yellow-500 dark:text-black dark:shadow-emerald-500/20
|
| 20 |
+
{sizeClasses[size]} {classNames}"
|
| 21 |
+
>
|
| 22 |
+
PRO
|
| 23 |
+
</span>
|
src/lib/components/{Prompts.svelte β prompts.svelte}
RENAMED
|
@@ -1,6 +1,6 @@
|
|
| 1 |
-
<script lang="ts"
|
| 2 |
-
import {
|
| 3 |
-
import {
|
| 4 |
import IconCross from "~icons/carbon/close";
|
| 5 |
|
| 6 |
type Prompt = {
|
|
@@ -10,32 +10,32 @@
|
|
| 10 |
callback: (value: string) => void;
|
| 11 |
};
|
| 12 |
|
| 13 |
-
|
|
|
|
| 14 |
|
| 15 |
export function resolvePrompt() {
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
});
|
| 20 |
}
|
| 21 |
|
| 22 |
-
export async function prompt(label: string,
|
| 23 |
return new Promise(res => {
|
| 24 |
-
prompts.
|
| 25 |
});
|
| 26 |
}
|
| 27 |
</script>
|
| 28 |
|
| 29 |
<script lang="ts">
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
let dialog: HTMLDialogElement | undefined;
|
| 33 |
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
|
|
|
|
|
|
| 39 |
|
| 40 |
function onSubmit(e: Event) {
|
| 41 |
e.preventDefault();
|
|
@@ -43,11 +43,11 @@
|
|
| 43 |
}
|
| 44 |
</script>
|
| 45 |
|
| 46 |
-
<dialog bind:this={dialog}
|
| 47 |
{#if current}
|
| 48 |
<div class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/85">
|
| 49 |
<form
|
| 50 |
-
|
| 51 |
class="relative w-xl rounded-lg bg-white shadow-sm dark:bg-gray-900"
|
| 52 |
use:clickOutside={resolvePrompt}
|
| 53 |
>
|
|
@@ -58,7 +58,7 @@
|
|
| 58 |
<button
|
| 59 |
type="button"
|
| 60 |
class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
|
| 61 |
-
|
| 62 |
>
|
| 63 |
<div class="text-xl">
|
| 64 |
<IconCross />
|
|
@@ -69,13 +69,11 @@
|
|
| 69 |
<!-- Modal body -->
|
| 70 |
<div class="p-4 md:p-5">
|
| 71 |
<label class="flex flex-col gap-2 font-medium text-gray-900 dark:text-white">
|
| 72 |
-
<!-- This is fine in dialogs -->
|
| 73 |
-
<!-- svelte-ignore a11y-autofocus -->
|
| 74 |
<input
|
| 75 |
bind:value={current.value}
|
| 76 |
placeholder={current.placeholder}
|
| 77 |
-
autofocus
|
| 78 |
required
|
|
|
|
| 79 |
type="text"
|
| 80 |
class="block w-full rounded-lg border border-gray-300 bg-gray-50 p-2.5 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-500 dark:focus:ring-blue-500"
|
| 81 |
/>
|
|
|
|
| 1 |
+
<script lang="ts" module>
|
| 2 |
+
import { autofocus } from "$lib/actions/autofocus.js";
|
| 3 |
+
import { clickOutside } from "$lib/actions/click-outside.js";
|
| 4 |
import IconCross from "~icons/carbon/close";
|
| 5 |
|
| 6 |
type Prompt = {
|
|
|
|
| 10 |
callback: (value: string) => void;
|
| 11 |
};
|
| 12 |
|
| 13 |
+
let prompts = $state<Prompt[]>([]);
|
| 14 |
+
const current = $derived(prompts[0]);
|
| 15 |
|
| 16 |
export function resolvePrompt() {
|
| 17 |
+
if (!current) return;
|
| 18 |
+
current.callback(current.value ?? "");
|
| 19 |
+
prompts.splice(0, 1);
|
|
|
|
| 20 |
}
|
| 21 |
|
| 22 |
+
export async function prompt(label: string, defaultValue?: string): Promise<string> {
|
| 23 |
return new Promise(res => {
|
| 24 |
+
prompts.push({ label, value: defaultValue, callback: res });
|
| 25 |
});
|
| 26 |
}
|
| 27 |
</script>
|
| 28 |
|
| 29 |
<script lang="ts">
|
| 30 |
+
let dialog: HTMLDialogElement | undefined = $state();
|
|
|
|
|
|
|
| 31 |
|
| 32 |
+
$effect(() => {
|
| 33 |
+
if (current) {
|
| 34 |
+
dialog?.showModal();
|
| 35 |
+
} else {
|
| 36 |
+
dialog?.close();
|
| 37 |
+
}
|
| 38 |
+
});
|
| 39 |
|
| 40 |
function onSubmit(e: Event) {
|
| 41 |
e.preventDefault();
|
|
|
|
| 43 |
}
|
| 44 |
</script>
|
| 45 |
|
| 46 |
+
<dialog bind:this={dialog} onclose={resolvePrompt}>
|
| 47 |
{#if current}
|
| 48 |
<div class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/85">
|
| 49 |
<form
|
| 50 |
+
onsubmit={onSubmit}
|
| 51 |
class="relative w-xl rounded-lg bg-white shadow-sm dark:bg-gray-900"
|
| 52 |
use:clickOutside={resolvePrompt}
|
| 53 |
>
|
|
|
|
| 58 |
<button
|
| 59 |
type="button"
|
| 60 |
class="ms-auto inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
|
| 61 |
+
onclick={resolvePrompt}
|
| 62 |
>
|
| 63 |
<div class="text-xl">
|
| 64 |
<IconCross />
|
|
|
|
| 69 |
<!-- Modal body -->
|
| 70 |
<div class="p-4 md:p-5">
|
| 71 |
<label class="flex flex-col gap-2 font-medium text-gray-900 dark:text-white">
|
|
|
|
|
|
|
| 72 |
<input
|
| 73 |
bind:value={current.value}
|
| 74 |
placeholder={current.placeholder}
|
|
|
|
| 75 |
required
|
| 76 |
+
use:autofocus
|
| 77 |
type="text"
|
| 78 |
class="block w-full rounded-lg border border-gray-300 bg-gray-50 p-2.5 text-sm text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-500 dark:focus:ring-blue-500"
|
| 79 |
/>
|
src/lib/components/quota-modal.svelte
ADDED
|
@@ -0,0 +1,106 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts" module>
|
| 2 |
+
let open = $state(false);
|
| 3 |
+
|
| 4 |
+
export function showQuotaModal() {
|
| 5 |
+
open = true;
|
| 6 |
+
}
|
| 7 |
+
</script>
|
| 8 |
+
|
| 9 |
+
<script lang="ts">
|
| 10 |
+
import { clickOutside } from "$lib/actions/click-outside.js";
|
| 11 |
+
import IconCross from "~icons/carbon/close";
|
| 12 |
+
import IconCheck from "~icons/carbon/checkmark";
|
| 13 |
+
import IconExternal from "~icons/carbon/arrow-up-right";
|
| 14 |
+
import { fade, scale } from "svelte/transition";
|
| 15 |
+
import LabelPro from "./label-pro.svelte";
|
| 16 |
+
let dialog: HTMLDialogElement | undefined = $state();
|
| 17 |
+
|
| 18 |
+
$effect(() => {
|
| 19 |
+
if (open) {
|
| 20 |
+
dialog?.showModal();
|
| 21 |
+
} else {
|
| 22 |
+
setTimeout(() => dialog?.close(), 250);
|
| 23 |
+
}
|
| 24 |
+
});
|
| 25 |
+
|
| 26 |
+
const actions: string[] = [
|
| 27 |
+
"Exchange a million words with leading models",
|
| 28 |
+
"Use the fastest inference providers",
|
| 29 |
+
"Compare 80+ conversational models",
|
| 30 |
+
"Process hundreds of images",
|
| 31 |
+
];
|
| 32 |
+
</script>
|
| 33 |
+
|
| 34 |
+
<dialog class="backdrop:bg-transparent" bind:this={dialog} onclose={() => (open = false)}>
|
| 35 |
+
{#if open}
|
| 36 |
+
<!-- Backdrop -->
|
| 37 |
+
<div
|
| 38 |
+
class="fixed inset-0 z-50 flex items-center justify-center overflow-hidden bg-black/50 backdrop-blur-sm"
|
| 39 |
+
transition:fade={{ duration: 150 }}
|
| 40 |
+
>
|
| 41 |
+
<!-- Content -->
|
| 42 |
+
<div
|
| 43 |
+
class="relative w-lg rounded-xl bg-white shadow-sm dark:bg-gray-900"
|
| 44 |
+
use:clickOutside={() => (open = false)}
|
| 45 |
+
transition:scale={{ start: 0.975, duration: 250 }}
|
| 46 |
+
>
|
| 47 |
+
<h2 class="mt-8 text-center text-2xl font-semibold text-balance sm:text-3xl dark:text-white">
|
| 48 |
+
Upgrade Your AI Experience with a <LabelPro
|
| 49 |
+
class="mx-0.5 -translate-y-px align-middle leading-6 max-sm:py-0! sm:text-xl"
|
| 50 |
+
/> Account
|
| 51 |
+
</h2>
|
| 52 |
+
<button
|
| 53 |
+
type="button"
|
| 54 |
+
class="absolute top-3 right-3 inline-flex h-8 w-8 items-center justify-center rounded-lg bg-transparent text-sm text-gray-400 hover:bg-gray-200 hover:text-gray-900 dark:hover:bg-gray-600 dark:hover:text-white"
|
| 55 |
+
onclick={() => (open = false)}
|
| 56 |
+
aria-label="Close modal"
|
| 57 |
+
>
|
| 58 |
+
<div class="text-xl">
|
| 59 |
+
<IconCross />
|
| 60 |
+
</div>
|
| 61 |
+
</button>
|
| 62 |
+
|
| 63 |
+
<!-- Modal body -->
|
| 64 |
+
<div class="p-4 md:p-5 dark:text-white">
|
| 65 |
+
<p
|
| 66 |
+
class="rounded-xl border border-amber-900 bg-amber-700/25 p-4 font-medium text-amber-800 dark:bg-amber-800/25 dark:text-amber-200"
|
| 67 |
+
>
|
| 68 |
+
You have reached your usage limits. To continue using the playground, please consider creating a PRO
|
| 69 |
+
account!
|
| 70 |
+
</p>
|
| 71 |
+
<p class="mt-4 text-gray-600 dark:text-gray-400">
|
| 72 |
+
By subscribing to PRO, you get <span class="text-black dark:text-white"
|
| 73 |
+
>$2 worth of Inference credits every month.</span
|
| 74 |
+
> Meaning you could:
|
| 75 |
+
</p>
|
| 76 |
+
<ul class="mt-4 flex flex-col gap-2">
|
| 77 |
+
{#each actions as action}
|
| 78 |
+
<li class="flex items-center justify-start gap-2.5">
|
| 79 |
+
<div
|
| 80 |
+
class="flex size-5 items-center justify-center rounded-full border border-green-500/15 bg-green-500/10 dark:bg-green-500/20"
|
| 81 |
+
>
|
| 82 |
+
<IconCheck class="text-xs text-green-600 dark:text-green-300" />
|
| 83 |
+
</div>
|
| 84 |
+
{action}
|
| 85 |
+
</li>
|
| 86 |
+
{/each}
|
| 87 |
+
</ul>
|
| 88 |
+
</div>
|
| 89 |
+
|
| 90 |
+
<!-- Modal footer -->
|
| 91 |
+
<div class="flex rounded-b p-4 !pb-8 md:p-5 dark:border-gray-800">
|
| 92 |
+
<a
|
| 93 |
+
href="https://huggingface.co/settings/billing/subscription#subscribe"
|
| 94 |
+
class="mx-auto mt-1 flex w-fit items-center justify-between gap-6 rounded-full bg-black py-2.5 pr-4 pl-5 text-white hover:bg-gray-900 dark:bg-white/85 dark:text-black dark:hover:bg-white"
|
| 95 |
+
>
|
| 96 |
+
<p>
|
| 97 |
+
Subscribe to PRO
|
| 98 |
+
<span class="text-gray-400 dark:text-gray-500">($9/month)</span>
|
| 99 |
+
</p>
|
| 100 |
+
<IconExternal />
|
| 101 |
+
</a>
|
| 102 |
+
</div>
|
| 103 |
+
</div>
|
| 104 |
+
</div>
|
| 105 |
+
{/if}
|
| 106 |
+
</dialog>
|
src/lib/components/toaster.svelte
ADDED
|
@@ -0,0 +1,171 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<script lang="ts">
|
| 2 |
+
import { fly } from "svelte/transition";
|
| 3 |
+
import { toaster } from "./toaster.svelte.js";
|
| 4 |
+
import { Progress } from "melt/components";
|
| 5 |
+
import Close from "~icons/carbon/close";
|
| 6 |
+
import { omit } from "$lib/utils/object.js";
|
| 7 |
+
import { session } from "$lib/state/session.svelte.js";
|
| 8 |
+
import { AnimationFrames } from "runed";
|
| 9 |
+
|
| 10 |
+
let toastHeights = $state<number[]>([]);
|
| 11 |
+
new AnimationFrames(() => {
|
| 12 |
+
const rootEl = document.getElementById(toaster.root.id);
|
| 13 |
+
if (!rootEl) return;
|
| 14 |
+
|
| 15 |
+
const toastEls = Array.from(rootEl.querySelectorAll("[data-melt-toaster-toast-content]"));
|
| 16 |
+
toastHeights = toastEls.map(el => el.clientHeight);
|
| 17 |
+
// console.log(toastHeights);
|
| 18 |
+
});
|
| 19 |
+
|
| 20 |
+
const isComparing = $derived(session.project.conversations.length > 1);
|
| 21 |
+
|
| 22 |
+
const GAP = 8;
|
| 23 |
+
|
| 24 |
+
function getToastStyle(i: number) {
|
| 25 |
+
// Remember, the order is reversed! Meaning i=0 was the first toast, so its the last
|
| 26 |
+
// we want to show.
|
| 27 |
+
const n = toaster.toasts.length - i - 1;
|
| 28 |
+
if (n === 0) return "";
|
| 29 |
+
const reversedHeights = toastHeights.toReversed();
|
| 30 |
+
const yHover = -1 * reversedHeights.slice(0, n).reduce((a, b) => a + b + GAP, 0);
|
| 31 |
+
|
| 32 |
+
const y = -n * 10;
|
| 33 |
+
|
| 34 |
+
return `
|
| 35 |
+
--y-hover: ${yHover}px;
|
| 36 |
+
--y: ${y}px;
|
| 37 |
+
`;
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
function getRootStyle() {
|
| 41 |
+
const heightHover = toastHeights.reduce((a, b) => a + b + GAP, 0);
|
| 42 |
+
return `
|
| 43 |
+
--h-hover: ${heightHover}px;
|
| 44 |
+
`;
|
| 45 |
+
}
|
| 46 |
+
</script>
|
| 47 |
+
|
| 48 |
+
<div
|
| 49 |
+
{...omit(toaster.root, "popover")}
|
| 50 |
+
class={["absolute right-2 bottom-23 flex w-[300px] flex-col ", !isComparing && "md:right-0"]}
|
| 51 |
+
style:--toasts={toaster.toasts.length}
|
| 52 |
+
style={getRootStyle()}
|
| 53 |
+
>
|
| 54 |
+
{#each toaster.toasts as toast, i (toast.id)}
|
| 55 |
+
<div
|
| 56 |
+
class="flex w-full flex-col justify-center rounded-xl bg-white px-4 py-4 text-left transition dark:bg-gray-800"
|
| 57 |
+
{...toast.content}
|
| 58 |
+
style:--n={toaster.toasts.length - i}
|
| 59 |
+
in:fly={{ y: 20, opacity: 0 }}
|
| 60 |
+
out:fly={{ y: 20 }}
|
| 61 |
+
style={getToastStyle(i)}
|
| 62 |
+
>
|
| 63 |
+
<h3 {...toast.title} class="text-sm font-semibold whitespace-nowrap text-gray-700 dark:text-gray-300">
|
| 64 |
+
{toast.data.title}
|
| 65 |
+
</h3>
|
| 66 |
+
|
| 67 |
+
{#if toast.data.description}
|
| 68 |
+
<p {...toast.description} class="max-w-[200px] text-xs text-gray-700 dark:text-gray-300">
|
| 69 |
+
{toast.data.description}
|
| 70 |
+
</p>
|
| 71 |
+
{/if}
|
| 72 |
+
|
| 73 |
+
<button
|
| 74 |
+
{...toast.close}
|
| 75 |
+
aria-label="dismiss toast"
|
| 76 |
+
class="absolute top-2 right-2 bg-transparent text-gray-300 hover:text-gray-400 dark:hover:text-gray-100"
|
| 77 |
+
>
|
| 78 |
+
<Close class="size-4" />
|
| 79 |
+
</button>
|
| 80 |
+
|
| 81 |
+
{#if toast.closeDelay !== 0}
|
| 82 |
+
<div class="absolute right-4 bottom-4 h-[4px] w-[30px] overflow-hidden rounded-full">
|
| 83 |
+
<Progress value={toast.percentage}>
|
| 84 |
+
{#snippet children(progress)}
|
| 85 |
+
<div {...progress.root} class="relative h-full w-full overflow-hidden bg-gray-200 dark:bg-gray-950">
|
| 86 |
+
<div
|
| 87 |
+
{...progress.progress}
|
| 88 |
+
class="h-full w-full -translate-x-(--progress)"
|
| 89 |
+
class:bg-green-400={toast.data.variant === "success"}
|
| 90 |
+
class:bg-orange-400={toast.data.variant === "warning"}
|
| 91 |
+
class:bg-red-500={toast.data.variant === "error"}
|
| 92 |
+
></div>
|
| 93 |
+
</div>
|
| 94 |
+
{/snippet}
|
| 95 |
+
</Progress>
|
| 96 |
+
</div>
|
| 97 |
+
{/if}
|
| 98 |
+
</div>
|
| 99 |
+
{/each}
|
| 100 |
+
</div>
|
| 101 |
+
|
| 102 |
+
<style>
|
| 103 |
+
:global([popover]) {
|
| 104 |
+
inset: unset;
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
[data-melt-toaster-root] {
|
| 108 |
+
--gap: 0.75rem;
|
| 109 |
+
--hover-offset: 0rem;
|
| 110 |
+
/* --toast-height: 4.5rem; */
|
| 111 |
+
--hidden-offset: 0.75rem;
|
| 112 |
+
|
| 113 |
+
--hidden-toasts: calc(var(--toasts) - 1);
|
| 114 |
+
|
| 115 |
+
overflow: visible;
|
| 116 |
+
gap: 0;
|
| 117 |
+
background: unset;
|
| 118 |
+
padding: 0;
|
| 119 |
+
|
| 120 |
+
border: none;
|
| 121 |
+
height: var(--h);
|
| 122 |
+
}
|
| 123 |
+
|
| 124 |
+
[data-melt-toaster-root]:hover {
|
| 125 |
+
height: var(--h-hover);
|
| 126 |
+
}
|
| 127 |
+
|
| 128 |
+
[data-melt-toaster-toast-content] {
|
| 129 |
+
position: absolute;
|
| 130 |
+
pointer-events: auto;
|
| 131 |
+
bottom: 0;
|
| 132 |
+
left: 0;
|
| 133 |
+
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.1);
|
| 134 |
+
|
| 135 |
+
transform-origin: 50% 0%;
|
| 136 |
+
transition: all 350ms ease;
|
| 137 |
+
|
| 138 |
+
translate: 0 var(--y);
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
:global(.dark [data-melt-toaster-toast-content]) {
|
| 142 |
+
box-shadow: 0 -2px 10px rgba(0, 0, 0, 0.25);
|
| 143 |
+
}
|
| 144 |
+
|
| 145 |
+
[data-melt-toaster-toast-content]:nth-last-child(n + 4) {
|
| 146 |
+
z-index: 1;
|
| 147 |
+
scale: 0.925;
|
| 148 |
+
opacity: 0;
|
| 149 |
+
}
|
| 150 |
+
|
| 151 |
+
[data-melt-toaster-toast-content]:nth-last-child(-n + 3) {
|
| 152 |
+
z-index: 2;
|
| 153 |
+
scale: 0.95;
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
[data-melt-toaster-toast-content]:nth-last-child(-n + 2) {
|
| 157 |
+
z-index: 3;
|
| 158 |
+
scale: 0.975;
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
[data-melt-toaster-toast-content]:nth-last-child(-n + 1) {
|
| 162 |
+
z-index: 4;
|
| 163 |
+
scale: 1;
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
[data-melt-toaster-root]:hover [data-melt-toaster-toast-content] {
|
| 167 |
+
scale: 1;
|
| 168 |
+
opacity: 1;
|
| 169 |
+
translate: 0 var(--y-hover);
|
| 170 |
+
}
|
| 171 |
+
</style>
|
src/lib/components/toaster.svelte.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { Toaster } from "melt/builders";
|
| 2 |
+
|
| 3 |
+
export type ToastData = {
|
| 4 |
+
title: string;
|
| 5 |
+
description: string;
|
| 6 |
+
variant: "success" | "warning" | "error";
|
| 7 |
+
};
|
| 8 |
+
|
| 9 |
+
export const toaster = new Toaster<ToastData>({
|
| 10 |
+
hover: "pause-all",
|
| 11 |
+
// closeDelay: 0,
|
| 12 |
+
});
|
| 13 |
+
|
| 14 |
+
export function addToast(data: ToastData) {
|
| 15 |
+
toaster.addToast({ data });
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
export function removeToast(id: string) {
|
| 19 |
+
toaster.removeToast(id);
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
// Debugging
|
| 23 |
+
// addToast({
|
| 24 |
+
// title: "Hello World 1",
|
| 25 |
+
// description: "hey",
|
| 26 |
+
// variant: "success",
|
| 27 |
+
// });
|
| 28 |
+
//
|
| 29 |
+
// addToast({
|
| 30 |
+
// title: "Hello World 2",
|
| 31 |
+
// description: "hey",
|
| 32 |
+
// variant: "success",
|
| 33 |
+
// });
|
| 34 |
+
//
|
| 35 |
+
// addToast({
|
| 36 |
+
// title: "Hello World 3",
|
| 37 |
+
// description: "hi",
|
| 38 |
+
// variant: "success",
|
| 39 |
+
// });
|
src/lib/spells/README.md
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Spells
|
| 2 |
+
|
| 3 |
+
Spells are special functions that use Runes under the hood, akin to Vue's composables or React hooks. They are only meant to be used inside other Spells, or within Svelte components.
|
src/lib/spells/abort-manager.svelte.ts
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { onDestroy } from "svelte";
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* Manages abort controllers, and aborts them when the component unmounts.
|
| 5 |
+
*/
|
| 6 |
+
export class AbortManager {
|
| 7 |
+
private controllers: AbortController[] = [];
|
| 8 |
+
|
| 9 |
+
constructor() {
|
| 10 |
+
onDestroy(() => this.abortAll());
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
/**
|
| 14 |
+
* Creates a new abort controller and adds it to the manager.
|
| 15 |
+
*/
|
| 16 |
+
public createController(): AbortController {
|
| 17 |
+
const controller = new AbortController();
|
| 18 |
+
this.controllers.push(controller);
|
| 19 |
+
return controller;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Aborts all controllers and clears the manager.
|
| 24 |
+
*/
|
| 25 |
+
public abortAll(): void {
|
| 26 |
+
this.controllers.forEach(controller => controller.abort());
|
| 27 |
+
this.controllers = [];
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
/** Clears the manager without aborting the controllers. */
|
| 31 |
+
public clear(): void {
|
| 32 |
+
this.controllers = [];
|
| 33 |
+
}
|
| 34 |
+
}
|
src/lib/spells/create-init.svelte.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export function createInit(cb: () => void) {
|
| 2 |
+
let called = $state(false);
|
| 3 |
+
|
| 4 |
+
return {
|
| 5 |
+
fn: () => {
|
| 6 |
+
if (called) return;
|
| 7 |
+
called = true;
|
| 8 |
+
cb();
|
| 9 |
+
},
|
| 10 |
+
get called() {
|
| 11 |
+
return called;
|
| 12 |
+
},
|
| 13 |
+
};
|
| 14 |
+
}
|
src/lib/spells/extract.svelte.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { isFunction } from "$lib/utils/is.js";
|
| 2 |
+
import type { MaybeGetter } from "$lib/types.js";
|
| 3 |
+
|
| 4 |
+
/**
|
| 5 |
+
* Extracts the value from a getter or a value.
|
| 6 |
+
* Optionally, a default value can be provided.
|
| 7 |
+
*/
|
| 8 |
+
export function extract<T, D extends T>(
|
| 9 |
+
value: MaybeGetter<T>,
|
| 10 |
+
defaultValue?: D
|
| 11 |
+
): D extends undefined | null ? T : Exclude<T, undefined | null> | D {
|
| 12 |
+
if (isFunction(value)) {
|
| 13 |
+
const getter = value;
|
| 14 |
+
const gotten = getter();
|
| 15 |
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 16 |
+
return (gotten ?? defaultValue ?? gotten) as any;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
| 20 |
+
return (value ?? defaultValue ?? value) as any;
|
| 21 |
+
}
|
src/lib/spells/textarea-autosize.svelte.ts
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { Getter } from "melt";
|
| 2 |
+
import { extract } from "./extract.svelte.js";
|
| 3 |
+
import { useResizeObserver, watch } from "runed";
|
| 4 |
+
import { tick } from "svelte";
|
| 5 |
+
|
| 6 |
+
export interface TextareaAutosizeOptions {
|
| 7 |
+
/** Textarea element to autosize. */
|
| 8 |
+
element: Getter<HTMLElement | undefined>;
|
| 9 |
+
/** Textarea content. */
|
| 10 |
+
input: Getter<string>;
|
| 11 |
+
/** Function called when the textarea size changes. */
|
| 12 |
+
onResize?: () => void;
|
| 13 |
+
/**
|
| 14 |
+
* Specify the style property that will be used to manipulate height. Can be `height | minHeight`.
|
| 15 |
+
* @default `height`
|
| 16 |
+
**/
|
| 17 |
+
styleProp?: "height" | "minHeight";
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
export class TextareaAutosize {
|
| 21 |
+
#options: TextareaAutosizeOptions;
|
| 22 |
+
element = $derived.by(() => extract(this.#options.element));
|
| 23 |
+
input = $derived.by(() => extract(this.#options.input));
|
| 24 |
+
styleProp = $derived.by(() => extract(this.#options.styleProp, "height"));
|
| 25 |
+
|
| 26 |
+
textareaScrollHeight = $state(1);
|
| 27 |
+
textareaOldWidth = $state(0);
|
| 28 |
+
|
| 29 |
+
constructor(options: TextareaAutosizeOptions) {
|
| 30 |
+
this.#options = options;
|
| 31 |
+
|
| 32 |
+
watch([() => this.input, () => this.element], () => {
|
| 33 |
+
tick().then(() => this.triggerResize());
|
| 34 |
+
});
|
| 35 |
+
|
| 36 |
+
watch(
|
| 37 |
+
() => this.textareaScrollHeight,
|
| 38 |
+
() => options?.onResize?.()
|
| 39 |
+
);
|
| 40 |
+
|
| 41 |
+
useResizeObserver(
|
| 42 |
+
() => this.element,
|
| 43 |
+
([entry]) => {
|
| 44 |
+
if (!entry) return;
|
| 45 |
+
const { contentRect } = entry;
|
| 46 |
+
if (this.textareaOldWidth === contentRect.width) return;
|
| 47 |
+
|
| 48 |
+
requestAnimationFrame(() => {
|
| 49 |
+
this.textareaOldWidth = contentRect.width;
|
| 50 |
+
this.triggerResize();
|
| 51 |
+
});
|
| 52 |
+
}
|
| 53 |
+
);
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
triggerResize = () => {
|
| 57 |
+
if (!this.element) return;
|
| 58 |
+
|
| 59 |
+
let height = "";
|
| 60 |
+
|
| 61 |
+
this.element.style[this.styleProp] = "1px";
|
| 62 |
+
this.textareaScrollHeight = this.element?.scrollHeight;
|
| 63 |
+
height = `${this.textareaScrollHeight}px`;
|
| 64 |
+
|
| 65 |
+
this.element.style[this.styleProp] = height;
|
| 66 |
+
};
|
| 67 |
+
}
|
src/lib/state/models.svelte.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { page } from "$app/state";
|
| 2 |
+
import type { ModelWithTokenizer } from "$lib/types.js";
|
| 3 |
+
|
| 4 |
+
class Models {
|
| 5 |
+
all = $derived(page.data.models as ModelWithTokenizer[]);
|
| 6 |
+
trending = $derived(this.all.toSorted((a, b) => b.trendingScore - a.trendingScore).slice(0, 5));
|
| 7 |
+
nonTrending = $derived(this.all.filter(m => !this.trending.includes(m)));
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
export const models = new Models();
|
src/lib/{stores/session.ts β state/session.svelte.ts}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
-
import { defaultGenerationConfig } from "$lib/components/
|
| 2 |
-
import {
|
| 3 |
import {
|
| 4 |
PipelineTag,
|
| 5 |
type Conversation,
|
|
@@ -8,11 +8,10 @@ import {
|
|
| 8 |
type ModelWithTokenizer,
|
| 9 |
type Project,
|
| 10 |
type Session,
|
| 11 |
-
} from "$lib/types";
|
| 12 |
-
import { safeParse } from "$lib/utils/json";
|
| 13 |
-
import { getTrending } from "$lib/utils/model";
|
| 14 |
-
import { get, writable } from "svelte/store";
|
| 15 |
import typia from "typia";
|
|
|
|
| 16 |
|
| 17 |
const LOCAL_STORAGE_KEY = "hf_inference_playground_session";
|
| 18 |
|
|
@@ -38,9 +37,7 @@ const emptyModel: ModelWithTokenizer = {
|
|
| 38 |
};
|
| 39 |
|
| 40 |
function getDefaults() {
|
| 41 |
-
const
|
| 42 |
-
const featured = getTrending($models);
|
| 43 |
-
const defaultModel = featured[0] ?? $models[0] ?? emptyModel;
|
| 44 |
|
| 45 |
const defaultConversation: Conversation = {
|
| 46 |
model: defaultModel,
|
|
@@ -59,8 +56,11 @@ function getDefaults() {
|
|
| 59 |
return { defaultProject, defaultConversation };
|
| 60 |
}
|
| 61 |
|
| 62 |
-
|
| 63 |
-
|
|
|
|
|
|
|
|
|
|
| 64 |
const { defaultConversation, defaultProject } = getDefaults();
|
| 65 |
|
| 66 |
// Get saved session from localStorage if available
|
|
@@ -86,12 +86,11 @@ function createSessionStore() {
|
|
| 86 |
// is the maximum between the two.
|
| 87 |
const dp = savedSession.projects.find(p => p.id === "default");
|
| 88 |
if (typia.is<DefaultProject>(dp)) {
|
| 89 |
-
const $models = get(models);
|
| 90 |
// Parse URL query parameters
|
| 91 |
const searchParams = new URLSearchParams(window.location.search);
|
| 92 |
const searchProviders = searchParams.getAll("provider");
|
| 93 |
const searchModelIds = searchParams.getAll("modelId");
|
| 94 |
-
const modelsFromSearch = searchModelIds.map(id =>
|
| 95 |
if (modelsFromSearch.length > 0) savedSession.activeProjectId = "default";
|
| 96 |
|
| 97 |
const max = Math.max(dp.conversations.length, modelsFromSearch.length, searchProviders.length);
|
|
@@ -105,110 +104,78 @@ function createSessionStore() {
|
|
| 105 |
}
|
| 106 |
}
|
| 107 |
|
| 108 |
-
|
| 109 |
});
|
| 110 |
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
|
| 118 |
-
|
| 119 |
-
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
return s;
|
| 123 |
});
|
| 124 |
-
};
|
| 125 |
-
|
| 126 |
-
const set: typeof store.set = (...args) => {
|
| 127 |
-
update(_ => args[0]);
|
| 128 |
-
};
|
| 129 |
-
|
| 130 |
-
// Add a method to clear localStorage
|
| 131 |
-
function clearSavedSession() {
|
| 132 |
-
localStorage.removeItem(LOCAL_STORAGE_KEY);
|
| 133 |
}
|
| 134 |
|
| 135 |
-
|
| 136 |
-
|
| 137 |
-
|
| 138 |
-
function saveProject(name: string) {
|
| 139 |
-
update(s => {
|
| 140 |
-
const defaultProject = s.projects.find(p => p.id === "default");
|
| 141 |
-
if (!defaultProject) return s;
|
| 142 |
-
|
| 143 |
-
const project: Project = {
|
| 144 |
-
...defaultProject,
|
| 145 |
-
name,
|
| 146 |
-
id: crypto.randomUUID(),
|
| 147 |
-
};
|
| 148 |
-
|
| 149 |
-
defaultProject.conversations = [getDefaults().defaultConversation];
|
| 150 |
-
|
| 151 |
-
return { ...s, projects: [...s.projects, project], activeProjectId: project.id };
|
| 152 |
-
});
|
| 153 |
}
|
| 154 |
|
| 155 |
-
|
| 156 |
-
|
| 157 |
-
if (id === "default") return;
|
| 158 |
-
|
| 159 |
-
update(s => {
|
| 160 |
-
const projects = s.projects.filter(p => p.id !== id);
|
| 161 |
-
if (projects.length === 0) {
|
| 162 |
-
const { defaultProject } = getDefaults();
|
| 163 |
-
const newSession = { ...s, projects: [defaultProject], activeProjectId: defaultProject.id };
|
| 164 |
-
return typia.is<Session>(newSession) ? newSession : s;
|
| 165 |
-
}
|
| 166 |
-
|
| 167 |
-
const currProject = projects.find(p => p.id === s.activeProjectId);
|
| 168 |
-
const newSession = { ...s, projects, activeProjectId: currProject?.id ?? projects[0]?.id };
|
| 169 |
-
return typia.is<Session>(newSession) ? newSession : s;
|
| 170 |
-
});
|
| 171 |
}
|
| 172 |
|
| 173 |
-
|
| 174 |
-
|
| 175 |
-
const projects = s.projects.map(p => (p.id === id ? { ...p, ...data } : p));
|
| 176 |
-
const newSession = { ...s, projects };
|
| 177 |
-
return typia.is<Session>(newSession) ? newSession : s;
|
| 178 |
-
});
|
| 179 |
}
|
| 180 |
|
| 181 |
-
|
| 182 |
-
|
|
|
|
| 183 |
|
| 184 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
|
| 186 |
-
|
| 187 |
-
return s.projects.find(p => p.id === s.activeProjectId) ?? s.projects[0];
|
| 188 |
-
}
|
| 189 |
|
| 190 |
-
|
| 191 |
-
|
| 192 |
-
return session.subscribe(s => {
|
| 193 |
-
set(getActiveProject(s));
|
| 194 |
-
});
|
| 195 |
-
});
|
| 196 |
|
| 197 |
-
|
| 198 |
-
|
| 199 |
-
|
| 200 |
-
|
| 201 |
-
|
| 202 |
-
|
| 203 |
-
|
| 204 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 205 |
};
|
| 206 |
|
| 207 |
-
|
| 208 |
-
|
|
|
|
| 209 |
};
|
| 210 |
|
| 211 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
}
|
| 213 |
|
| 214 |
-
export const
|
|
|
|
| 1 |
+
import { defaultGenerationConfig } from "$lib/components/inference-playground/generation-config-settings.js";
|
| 2 |
+
import { createInit } from "$lib/spells/create-init.svelte.js";
|
| 3 |
import {
|
| 4 |
PipelineTag,
|
| 5 |
type Conversation,
|
|
|
|
| 8 |
type ModelWithTokenizer,
|
| 9 |
type Project,
|
| 10 |
type Session,
|
| 11 |
+
} from "$lib/types.js";
|
| 12 |
+
import { safeParse } from "$lib/utils/json.js";
|
|
|
|
|
|
|
| 13 |
import typia from "typia";
|
| 14 |
+
import { models } from "./models.svelte";
|
| 15 |
|
| 16 |
const LOCAL_STORAGE_KEY = "hf_inference_playground_session";
|
| 17 |
|
|
|
|
| 37 |
};
|
| 38 |
|
| 39 |
function getDefaults() {
|
| 40 |
+
const defaultModel = models.trending[0] ?? models.all[0] ?? emptyModel;
|
|
|
|
|
|
|
| 41 |
|
| 42 |
const defaultConversation: Conversation = {
|
| 43 |
model: defaultModel,
|
|
|
|
| 56 |
return { defaultProject, defaultConversation };
|
| 57 |
}
|
| 58 |
|
| 59 |
+
class SessionState {
|
| 60 |
+
#value = $state<Session>({} as Session);
|
| 61 |
+
// Call this only when the value is read, otherwise some values may have not
|
| 62 |
+
// been loaded yet (page.data, for example)
|
| 63 |
+
#init = createInit(() => {
|
| 64 |
const { defaultConversation, defaultProject } = getDefaults();
|
| 65 |
|
| 66 |
// Get saved session from localStorage if available
|
|
|
|
| 86 |
// is the maximum between the two.
|
| 87 |
const dp = savedSession.projects.find(p => p.id === "default");
|
| 88 |
if (typia.is<DefaultProject>(dp)) {
|
|
|
|
| 89 |
// Parse URL query parameters
|
| 90 |
const searchParams = new URLSearchParams(window.location.search);
|
| 91 |
const searchProviders = searchParams.getAll("provider");
|
| 92 |
const searchModelIds = searchParams.getAll("modelId");
|
| 93 |
+
const modelsFromSearch = searchModelIds.map(id => models.all.find(model => model.id === id)).filter(Boolean);
|
| 94 |
if (modelsFromSearch.length > 0) savedSession.activeProjectId = "default";
|
| 95 |
|
| 96 |
const max = Math.max(dp.conversations.length, modelsFromSearch.length, searchProviders.length);
|
|
|
|
| 104 |
}
|
| 105 |
}
|
| 106 |
|
| 107 |
+
this.$ = savedSession;
|
| 108 |
});
|
| 109 |
|
| 110 |
+
constructor() {
|
| 111 |
+
$effect.root(() => {
|
| 112 |
+
$effect(() => {
|
| 113 |
+
if (!this.#init.called) return;
|
| 114 |
+
const v = $state.snapshot(this.#value);
|
| 115 |
+
try {
|
| 116 |
+
localStorage.setItem(LOCAL_STORAGE_KEY, JSON.stringify(v));
|
| 117 |
+
} catch (e) {
|
| 118 |
+
console.error("Failed to save session to localStorage:", e);
|
| 119 |
+
}
|
| 120 |
+
});
|
|
|
|
| 121 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
}
|
| 123 |
|
| 124 |
+
get $() {
|
| 125 |
+
this.#init.fn();
|
| 126 |
+
return this.#value;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
}
|
| 128 |
|
| 129 |
+
set $(v: Session) {
|
| 130 |
+
this.#value = v;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 131 |
}
|
| 132 |
|
| 133 |
+
#setAnySession(s: unknown) {
|
| 134 |
+
if (typia.is<Session>(s)) this.$ = s;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 135 |
}
|
| 136 |
|
| 137 |
+
saveProject = (name: string) => {
|
| 138 |
+
const defaultProject = this.$.projects.find(p => p.id === "default");
|
| 139 |
+
if (!defaultProject) return;
|
| 140 |
|
| 141 |
+
const project: Project = {
|
| 142 |
+
...defaultProject,
|
| 143 |
+
name,
|
| 144 |
+
id: crypto.randomUUID(),
|
| 145 |
+
};
|
| 146 |
|
| 147 |
+
defaultProject.conversations = [getDefaults().defaultConversation];
|
|
|
|
|
|
|
| 148 |
|
| 149 |
+
this.$ = { ...this.$, projects: [...this.$.projects, project], activeProjectId: project.id };
|
| 150 |
+
};
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
|
| 152 |
+
deleteProject = (id: string) => {
|
| 153 |
+
// Can't delete default project!
|
| 154 |
+
if (id === "default") return;
|
| 155 |
+
|
| 156 |
+
const projects = this.$.projects.filter(p => p.id !== id);
|
| 157 |
+
if (projects.length === 0) {
|
| 158 |
+
const { defaultProject } = getDefaults();
|
| 159 |
+
this.#setAnySession({ ...this.$, projects: [defaultProject], activeProjectId: defaultProject.id });
|
| 160 |
+
}
|
| 161 |
+
|
| 162 |
+
const currProject = projects.find(p => p.id === this.$.activeProjectId);
|
| 163 |
+
this.#setAnySession({ ...this.$, projects, activeProjectId: currProject?.id ?? projects[0]?.id });
|
| 164 |
};
|
| 165 |
|
| 166 |
+
updateProject = (id: string, data: Partial<Project>) => {
|
| 167 |
+
const projects = this.$.projects.map(p => (p.id === id ? { ...p, ...data } : p));
|
| 168 |
+
this.#setAnySession({ ...this.$, projects });
|
| 169 |
};
|
| 170 |
|
| 171 |
+
get project() {
|
| 172 |
+
return this.$.projects.find(p => p.id === this.$.activeProjectId) ?? this.$.projects[0];
|
| 173 |
+
}
|
| 174 |
+
|
| 175 |
+
set project(np: Project) {
|
| 176 |
+
const projects = this.$.projects.map(p => (p.id === np.id ? np : p));
|
| 177 |
+
this.#setAnySession({ ...this.$, projects });
|
| 178 |
+
}
|
| 179 |
}
|
| 180 |
|
| 181 |
+
export const session = new SessionState();
|
src/lib/state/token.svelte.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { safeParse } from "$lib/utils/json.js";
|
| 2 |
+
import typia from "typia";
|
| 3 |
+
|
| 4 |
+
const key = "hf_token";
|
| 5 |
+
|
| 6 |
+
class Token {
|
| 7 |
+
#value = $state("");
|
| 8 |
+
writeToLocalStorage = $state(true);
|
| 9 |
+
showModal = $state(false);
|
| 10 |
+
|
| 11 |
+
constructor() {
|
| 12 |
+
const storedHfToken = localStorage.getItem(key);
|
| 13 |
+
const parsed = safeParse(storedHfToken ?? "");
|
| 14 |
+
this.value = typia.is<string>(parsed) ? parsed : "";
|
| 15 |
+
}
|
| 16 |
+
|
| 17 |
+
get value() {
|
| 18 |
+
return this.#value;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
set value(token: string) {
|
| 22 |
+
if (this.writeToLocalStorage) {
|
| 23 |
+
localStorage.setItem(key, JSON.stringify(token));
|
| 24 |
+
}
|
| 25 |
+
this.#value = token;
|
| 26 |
+
this.showModal = !token.length;
|
| 27 |
+
}
|
| 28 |
+
|
| 29 |
+
reset = () => {
|
| 30 |
+
this.value = "";
|
| 31 |
+
localStorage.removeItem(key);
|
| 32 |
+
};
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
export const token = new Token();
|
src/lib/stores/models.ts
DELETED
|
@@ -1,8 +0,0 @@
|
|
| 1 |
-
import { page } from "$app/stores";
|
| 2 |
-
import type { ModelWithTokenizer } from "$lib/types";
|
| 3 |
-
import { readable } from "svelte/store";
|
| 4 |
-
|
| 5 |
-
export const models = readable<ModelWithTokenizer[]>(undefined, set => {
|
| 6 |
-
const unsub = page.subscribe($p => set($p.data?.models));
|
| 7 |
-
return unsub;
|
| 8 |
-
});
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/stores/mounted.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
| 1 |
-
import { onMount } from "svelte";
|
| 2 |
-
import { readonly, writable } from "svelte/store";
|
| 3 |
-
|
| 4 |
-
export function isMounted() {
|
| 5 |
-
const store = writable(false);
|
| 6 |
-
onMount(() => store.set(true));
|
| 7 |
-
|
| 8 |
-
return readonly(store);
|
| 9 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/stores/token.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
| 1 |
-
import { writable } from "svelte/store";
|
| 2 |
-
|
| 3 |
-
const key = "hf_token";
|
| 4 |
-
|
| 5 |
-
function createTokenStore() {
|
| 6 |
-
const store = writable({ value: "", writeToLocalStorage: true, showModal: false });
|
| 7 |
-
|
| 8 |
-
function setValue(token: string) {
|
| 9 |
-
store.update(s => {
|
| 10 |
-
if (s.writeToLocalStorage) localStorage.setItem(key, JSON.stringify(token));
|
| 11 |
-
return { ...s, value: token, showModal: !token.length };
|
| 12 |
-
});
|
| 13 |
-
}
|
| 14 |
-
|
| 15 |
-
const storedHfToken = localStorage.getItem(key);
|
| 16 |
-
if (storedHfToken !== null) {
|
| 17 |
-
setValue(JSON.parse(storedHfToken));
|
| 18 |
-
}
|
| 19 |
-
|
| 20 |
-
return {
|
| 21 |
-
...store,
|
| 22 |
-
setValue,
|
| 23 |
-
reset() {
|
| 24 |
-
setValue("");
|
| 25 |
-
localStorage.removeItem(key);
|
| 26 |
-
store.update(s => ({ ...s, showModal: true }));
|
| 27 |
-
},
|
| 28 |
-
};
|
| 29 |
-
}
|
| 30 |
-
|
| 31 |
-
export const token = createTokenStore();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/types.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
| 1 |
-
import type { GenerationConfig } from "$lib/components/
|
| 2 |
import type { ChatCompletionInputMessage } from "@huggingface/tasks";
|
| 3 |
|
| 4 |
-
export type ConversationMessage =
|
|
|
|
|
|
|
| 5 |
|
| 6 |
export type Conversation = {
|
| 7 |
model: ModelWithTokenizer;
|
|
@@ -13,7 +15,7 @@ export type Conversation = {
|
|
| 13 |
};
|
| 14 |
|
| 15 |
export type Project = {
|
| 16 |
-
conversations:
|
| 17 |
id: string;
|
| 18 |
name: string;
|
| 19 |
};
|
|
@@ -168,3 +170,7 @@ export enum LibraryName {
|
|
| 168 |
export enum PipelineTag {
|
| 169 |
TextGeneration = "text-generation",
|
| 170 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { GenerationConfig } from "$lib/components/inference-playground/generation-config-settings.js";
|
| 2 |
import type { ChatCompletionInputMessage } from "@huggingface/tasks";
|
| 3 |
|
| 4 |
+
export type ConversationMessage = Pick<ChatCompletionInputMessage, "name" | "role" | "tool_calls"> & {
|
| 5 |
+
content?: string;
|
| 6 |
+
};
|
| 7 |
|
| 8 |
export type Conversation = {
|
| 9 |
model: ModelWithTokenizer;
|
|
|
|
| 15 |
};
|
| 16 |
|
| 17 |
export type Project = {
|
| 18 |
+
conversations: Conversation[];
|
| 19 |
id: string;
|
| 20 |
name: string;
|
| 21 |
};
|
|
|
|
| 170 |
export enum PipelineTag {
|
| 171 |
TextGeneration = "text-generation",
|
| 172 |
}
|
| 173 |
+
|
| 174 |
+
export type MaybeGetter<T> = T | (() => T);
|
| 175 |
+
|
| 176 |
+
export type ValueOf<T> = T[keyof T];
|
src/lib/utils/compare.ts
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
export function compareStr(a: string, b: string) {
|
| 2 |
+
return a.toLowerCase().localeCompare(b.toLowerCase());
|
| 3 |
+
}
|
src/lib/utils/effect.ts
DELETED
|
@@ -1,51 +0,0 @@
|
|
| 1 |
-
import type { Stores, StoresValues } from "svelte/store";
|
| 2 |
-
import { derived } from "svelte/store";
|
| 3 |
-
import { safeOnDestroy } from "./lifecycle";
|
| 4 |
-
import { noop } from "./noop";
|
| 5 |
-
|
| 6 |
-
type EffectOptions = {
|
| 7 |
-
/**
|
| 8 |
-
* Whether to skip the first run
|
| 9 |
-
* @default undefined
|
| 10 |
-
*/
|
| 11 |
-
skipFirstRun?: boolean;
|
| 12 |
-
};
|
| 13 |
-
|
| 14 |
-
/**
|
| 15 |
-
* A utility function that creates an effect from a set of stores and a function.
|
| 16 |
-
* The effect is automatically cleaned up when the component is destroyed.
|
| 17 |
-
*
|
| 18 |
-
* @template S - The type of the stores object
|
| 19 |
-
* @param stores - The stores object to derive from
|
| 20 |
-
* @param fn - The function to run when the stores change
|
| 21 |
-
* @param opts {@link EffectOptions}
|
| 22 |
-
* @returns A function that can be used to unsubscribe the effect
|
| 23 |
-
*/
|
| 24 |
-
export function effect<S extends Stores>(
|
| 25 |
-
stores: S,
|
| 26 |
-
fn: (values: StoresValues<S>) => (() => void) | void,
|
| 27 |
-
opts: EffectOptions = {}
|
| 28 |
-
): () => void {
|
| 29 |
-
const { skipFirstRun } = opts;
|
| 30 |
-
let isFirstRun = true;
|
| 31 |
-
let cb: (() => void) | void = undefined;
|
| 32 |
-
|
| 33 |
-
// Create a derived store that contains the stores object and an onUnsubscribe function
|
| 34 |
-
const destroy = derived(stores, stores => {
|
| 35 |
-
cb?.();
|
| 36 |
-
if (isFirstRun && skipFirstRun) {
|
| 37 |
-
isFirstRun = false;
|
| 38 |
-
} else {
|
| 39 |
-
cb = fn(stores);
|
| 40 |
-
}
|
| 41 |
-
}).subscribe(noop);
|
| 42 |
-
|
| 43 |
-
const unsub = () => {
|
| 44 |
-
destroy();
|
| 45 |
-
cb?.();
|
| 46 |
-
};
|
| 47 |
-
|
| 48 |
-
// Automatically unsubscribe the effect when the component is destroyed
|
| 49 |
-
safeOnDestroy(unsub);
|
| 50 |
-
return unsub;
|
| 51 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/utils/is.ts
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import { SvelteSet } from "svelte/reactivity";
|
| 2 |
+
|
| 3 |
+
export function isHtmlElement(element: unknown): element is HTMLElement {
|
| 4 |
+
return element instanceof HTMLElement;
|
| 5 |
+
}
|
| 6 |
+
|
| 7 |
+
export function isFunction(value: unknown): value is (...args: unknown[]) => unknown {
|
| 8 |
+
return typeof value === "function";
|
| 9 |
+
}
|
| 10 |
+
|
| 11 |
+
export function isSvelteSet(value: unknown): value is SvelteSet<unknown> {
|
| 12 |
+
return value instanceof SvelteSet;
|
| 13 |
+
}
|
| 14 |
+
|
| 15 |
+
export function isIterable(value: unknown): value is Iterable<unknown> {
|
| 16 |
+
return value !== null && typeof value === "object" && Symbol.iterator in value;
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
export function isObject(value: unknown): value is Record<PropertyKey, unknown> {
|
| 20 |
+
return value !== null && typeof value === "object";
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
export function isHtmlInputElement(element: unknown): element is HTMLInputElement {
|
| 24 |
+
return element instanceof HTMLInputElement;
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
export function isString(value: unknown): value is string {
|
| 28 |
+
return typeof value === "string";
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
export function isTouch(event: PointerEvent): boolean {
|
| 32 |
+
return event.pointerType === "touch";
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
export function isPromise(value: unknown): value is Promise<unknown> {
|
| 36 |
+
return value instanceof Promise;
|
| 37 |
+
}
|
src/lib/utils/model.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
| 1 |
-
import type { ModelWithTokenizer } from "$lib/types";
|
| 2 |
-
|
| 3 |
-
export function getTrending(models: ModelWithTokenizer[], limit = 5) {
|
| 4 |
-
return models.toSorted((a, b) => b.trendingScore - a.trendingScore).slice(0, limit);
|
| 5 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/lib/utils/object.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
|
|
|
|
|
| 1 |
// typed Object.keys
|
| 2 |
export function keys<T extends object>(o: T): (keyof T)[] {
|
| 3 |
return Object.keys(o) as (keyof T)[];
|
|
@@ -12,3 +14,21 @@ export function entries<T extends object>(o: T): [keyof T, T[keyof T]][] {
|
|
| 12 |
export function fromEntries<T extends object>(entries: [keyof T, T[keyof T]][]): T {
|
| 13 |
return Object.fromEntries(entries) as T;
|
| 14 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { ValueOf } from "$lib/types.js";
|
| 2 |
+
|
| 3 |
// typed Object.keys
|
| 4 |
export function keys<T extends object>(o: T): (keyof T)[] {
|
| 5 |
return Object.keys(o) as (keyof T)[];
|
|
|
|
| 14 |
export function fromEntries<T extends object>(entries: [keyof T, T[keyof T]][]): T {
|
| 15 |
return Object.fromEntries(entries) as T;
|
| 16 |
}
|
| 17 |
+
|
| 18 |
+
export function omit<T extends Record<string, unknown>, K extends keyof T>(obj: T, ...keys: K[]): Omit<T, K> {
|
| 19 |
+
const result = {} as Omit<T, K>;
|
| 20 |
+
for (const key of Object.keys(obj)) {
|
| 21 |
+
if (!keys.includes(key as unknown as K)) {
|
| 22 |
+
result[key as keyof Omit<T, K>] = obj[key] as ValueOf<Omit<T, K>>;
|
| 23 |
+
}
|
| 24 |
+
}
|
| 25 |
+
return result;
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
export function pick<T extends Record<string, unknown>, K extends keyof T>(obj: T, ...keys: K[]): Pick<T, K> {
|
| 29 |
+
const result = {} as Pick<T, K>;
|
| 30 |
+
for (const key of keys) {
|
| 31 |
+
result[key] = obj[key] as ValueOf<Pick<T, K>>;
|
| 32 |
+
}
|
| 33 |
+
return result;
|
| 34 |
+
}
|
src/routes/+layout.svelte
CHANGED
|
@@ -1,9 +1,16 @@
|
|
| 1 |
<script lang="ts">
|
|
|
|
|
|
|
|
|
|
| 2 |
import "../app.css";
|
| 3 |
-
|
| 4 |
-
|
|
|
|
|
|
|
|
|
|
| 5 |
</script>
|
| 6 |
|
| 7 |
-
|
| 8 |
<DebugMenu />
|
| 9 |
<Prompts />
|
|
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import DebugMenu from "$lib/components/debug-menu.svelte";
|
| 3 |
+
import Prompts from "$lib/components/prompts.svelte";
|
| 4 |
+
import QuotaModal from "$lib/components/quota-modal.svelte";
|
| 5 |
import "../app.css";
|
| 6 |
+
interface Props {
|
| 7 |
+
children?: import("svelte").Snippet;
|
| 8 |
+
}
|
| 9 |
+
|
| 10 |
+
let { children }: Props = $props();
|
| 11 |
</script>
|
| 12 |
|
| 13 |
+
{@render children?.()}
|
| 14 |
<DebugMenu />
|
| 15 |
<Prompts />
|
| 16 |
+
<QuotaModal />
|
src/routes/+page.svelte
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
<script lang="ts">
|
| 2 |
-
import
|
| 3 |
</script>
|
| 4 |
|
| 5 |
-
<
|
|
|
|
| 1 |
<script lang="ts">
|
| 2 |
+
import Playground from "$lib/components/inference-playground/playground.svelte";
|
| 3 |
</script>
|
| 4 |
|
| 5 |
+
<Playground />
|
src/routes/+page.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
-
import type { ModelWithTokenizer } from "$lib/types";
|
| 2 |
-
import type { PageLoad } from "./$types";
|
| 3 |
|
| 4 |
export const load: PageLoad = async ({ fetch }) => {
|
| 5 |
const res = await fetch("/api/models");
|
|
|
|
| 1 |
+
import type { ModelWithTokenizer } from "$lib/types.js";
|
| 2 |
+
import type { PageLoad } from "./$types.js";
|
| 3 |
|
| 4 |
export const load: PageLoad = async ({ fetch }) => {
|
| 5 |
const res = await fetch("/api/models");
|