Compare commits
10 Commits
Author | SHA1 | Date | |
---|---|---|---|
73cf074d6d | |||
3e545d4fb1 | |||
b07364f146 | |||
c9dd6d9061 | |||
06dc437033 | |||
d91c90a5c2 | |||
e6ab5700de | |||
20726c55d5 | |||
95ce559ff3 | |||
bfc1580218 |
6
.gitignore
vendored
6
.gitignore
vendored
@ -1,5 +1,7 @@
|
|||||||
.env
|
.env
|
||||||
/docker-compose.*
|
/docker-compose.*
|
||||||
|
/build/
|
||||||
|
|
||||||
|
# Nix
|
||||||
/result*
|
/result*
|
||||||
/.direnv/
|
/.direnv/
|
||||||
/build/
|
|
@ -6,8 +6,8 @@ updated=false
|
|||||||
echo "updating nix flake"
|
echo "updating nix flake"
|
||||||
cd "${git_root}"
|
cd "${git_root}"
|
||||||
nix flake update
|
nix flake update
|
||||||
if ! git diff --exit-code flake.nix; then
|
if ! git diff --exit-code flake.lock; then
|
||||||
git add flake.nix
|
git add flake.lock
|
||||||
git commit -m "build(nix): updated nix dependencies"
|
git commit -m "build(nix): updated nix dependencies"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@ -28,7 +28,7 @@ go mod tidy
|
|||||||
if ! git diff --exit-code go.mod go.sum; then
|
if ! git diff --exit-code go.mod go.sum; then
|
||||||
git add go.mod
|
git add go.mod
|
||||||
git add go.sum
|
git add go.sum
|
||||||
git commit -m "build(go): updated go dependencies"
|
git commit -m "build(server): updated go dependencies"
|
||||||
updated=true
|
updated=true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ apps:
|
|||||||
- ts
|
- ts
|
||||||
- svelte
|
- svelte
|
||||||
onstart: npx prettier --check .
|
onstart: npx prettier --check .
|
||||||
onchange: npx prettier --check . || npx prettier --write .
|
onchange: npx prettier --check .
|
||||||
|
|
||||||
revive:
|
revive:
|
||||||
color: "#89dceb"
|
color: "#89dceb"
|
||||||
|
9
.vscode/extensions.json
vendored
Normal file
9
.vscode/extensions.json
vendored
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
{
|
||||||
|
"recommendations": [
|
||||||
|
"golang.go",
|
||||||
|
"dorzey.vscode-sqlfluff",
|
||||||
|
"dbaeumer.vscode-eslint",
|
||||||
|
"svelte.svelte-vscode",
|
||||||
|
"esbenp.prettier-vscode"
|
||||||
|
]
|
||||||
|
}
|
42
.vscode/settings.json
vendored
42
.vscode/settings.json
vendored
@ -1,7 +1,37 @@
|
|||||||
{
|
{
|
||||||
"go.lintTool": "revive",
|
"editor.formatOnSave": true,
|
||||||
"go.lintFlags": [
|
|
||||||
"--config=server/revive.toml"
|
// Go
|
||||||
],
|
"go.lintTool": "revive",
|
||||||
"sqlfluff.config": "server/db/.sqlfluff",
|
"go.formatTool": "goimports",
|
||||||
}
|
"go.lintFlags": ["--config=server/revive.toml"],
|
||||||
|
"gopls": { "ui.semanticTokens": true },
|
||||||
|
"[go]": {
|
||||||
|
"editor.defaultFormatter": "golang.go"
|
||||||
|
},
|
||||||
|
|
||||||
|
// SQLFluff
|
||||||
|
"sqlfluff.config": "server/db/.sqlfluff",
|
||||||
|
|
||||||
|
// ESLint
|
||||||
|
"eslint.workingDirectories": ["./client"],
|
||||||
|
"eslint.validate": ["svelte", "javascript", "typescript"],
|
||||||
|
"editor.codeActionsOnSave": {
|
||||||
|
"source.fixAll.eslint": "explicit"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Svelte
|
||||||
|
"svelte.enable-ts-plugin": true,
|
||||||
|
"[svelte]": {
|
||||||
|
"editor.defaultFormatter": "svelte.svelte-vscode"
|
||||||
|
},
|
||||||
|
|
||||||
|
// Prettier
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
||||||
|
"[javascript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
},
|
||||||
|
"[typescript]": {
|
||||||
|
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -3,8 +3,21 @@
|
|||||||
"singleQuote": true,
|
"singleQuote": true,
|
||||||
"trailingComma": "none",
|
"trailingComma": "none",
|
||||||
"printWidth": 100,
|
"printWidth": 100,
|
||||||
"plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"],
|
"plugins": [
|
||||||
|
"prettier-plugin-svelte",
|
||||||
|
"prettier-plugin-tailwindcss",
|
||||||
|
"@ianvs/prettier-plugin-sort-imports"
|
||||||
|
],
|
||||||
"tailwindFunctions": ["tv", "cn", "clsx"],
|
"tailwindFunctions": ["tv", "cn", "clsx"],
|
||||||
|
"importOrder": [
|
||||||
|
"<TYPES>^(node:)",
|
||||||
|
"<TYPES>",
|
||||||
|
"<TYPES>^[.]",
|
||||||
|
"<BUILTIN_MODULES>",
|
||||||
|
"^(\\$lib/ui)(/.*)$",
|
||||||
|
"<THIRD_PARTY_MODULES>",
|
||||||
|
"^[.]"
|
||||||
|
],
|
||||||
"overrides": [
|
"overrides": [
|
||||||
{
|
{
|
||||||
"files": "*.svelte",
|
"files": "*.svelte",
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
import prettier from 'eslint-config-prettier';
|
import { fileURLToPath } from 'node:url';
|
||||||
import js from '@eslint/js';
|
|
||||||
import { includeIgnoreFile } from '@eslint/compat';
|
import { includeIgnoreFile } from '@eslint/compat';
|
||||||
|
import js from '@eslint/js';
|
||||||
|
import prettier from 'eslint-config-prettier';
|
||||||
import svelte from 'eslint-plugin-svelte';
|
import svelte from 'eslint-plugin-svelte';
|
||||||
import globals from 'globals';
|
import globals from 'globals';
|
||||||
import { fileURLToPath } from 'node:url';
|
|
||||||
import ts from 'typescript-eslint';
|
import ts from 'typescript-eslint';
|
||||||
import svelteConfig from './svelte.config.js';
|
import svelteConfig from './svelte.config.js';
|
||||||
|
|
||||||
const gitignorePath = fileURLToPath(new URL('./.prettierignore', import.meta.url));
|
const gitignorePath = fileURLToPath(new URL('./.prettierignore', import.meta.url));
|
||||||
|
|
||||||
export default ts.config(
|
export default ts.config(
|
||||||
|
430
client/package-lock.json
generated
430
client/package-lock.json
generated
@ -1,37 +1,38 @@
|
|||||||
{
|
{
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"version": "0.0.21",
|
"version": "0.0.23",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"version": "0.0.21",
|
"version": "0.0.23",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@bufbuild/protovalidate": "^0.1.1",
|
"@bufbuild/protovalidate": "^0.1.1",
|
||||||
"@connectrpc/connect": "^2.0.2",
|
"@connectrpc/connect": "^2.0.2",
|
||||||
"@connectrpc/connect-web": "^2.0.2",
|
"@connectrpc/connect-web": "^2.0.2",
|
||||||
"@eslint/compat": "^1.2.9",
|
"@eslint/compat": "^1.2.9",
|
||||||
"@eslint/js": "^9.18.0",
|
"@eslint/js": "^9.18.0",
|
||||||
|
"@ianvs/prettier-plugin-sort-imports": "^4.4.1",
|
||||||
"@lucide/svelte": "^0.479.0",
|
"@lucide/svelte": "^0.479.0",
|
||||||
"@scalar/api-reference": "^1.28.32",
|
"@scalar/api-reference": "^1.28.33",
|
||||||
"@simplewebauthn/browser": "^13.1.0",
|
"@simplewebauthn/browser": "^13.1.0",
|
||||||
"@sveltejs/adapter-static": "^3.0.8",
|
"@sveltejs/adapter-static": "^3.0.8",
|
||||||
"@sveltejs/kit": "^2.20.8",
|
"@sveltejs/kit": "^2.21.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||||
"@tailwindcss/vite": "^4.1.6",
|
"@tailwindcss/vite": "^4.1.6",
|
||||||
"bits-ui": "^1.4.8",
|
"bits-ui": "^1.4.8",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"eslint": "^9.26.0",
|
"eslint": "^9.26.0",
|
||||||
"eslint-config-prettier": "^10.1.5",
|
"eslint-config-prettier": "^10.1.5",
|
||||||
"eslint-plugin-svelte": "^3.5.1",
|
"eslint-plugin-svelte": "^3.6.0",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
"globals": "^16.1.0",
|
"globals": "^16.1.0",
|
||||||
"mode-watcher": "^1.0.7",
|
"mode-watcher": "^1.0.7",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"prettier-plugin-svelte": "^3.3.3",
|
"prettier-plugin-svelte": "^3.3.3",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||||
"svelte": "^5.28.2",
|
"svelte": "^5.28.6",
|
||||||
"svelte-check": "^4.1.7",
|
"svelte-check": "^4.1.7",
|
||||||
"svelte-sonner": "^0.3.28",
|
"svelte-sonner": "^0.3.28",
|
||||||
"tailwind-merge": "^3.3.0",
|
"tailwind-merge": "^3.3.0",
|
||||||
@ -39,7 +40,7 @@
|
|||||||
"tailwindcss": "^4.0.13",
|
"tailwindcss": "^4.0.13",
|
||||||
"tw-animate-css": "^1.2.9",
|
"tw-animate-css": "^1.2.9",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.32.0",
|
"typescript-eslint": "^8.32.1",
|
||||||
"vite": "^6.3.5"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -57,6 +58,38 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@babel/code-frame": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/helper-validator-identifier": "^7.27.1",
|
||||||
|
"js-tokens": "^4.0.0",
|
||||||
|
"picocolors": "^1.1.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/generator": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/parser": "^7.27.1",
|
||||||
|
"@babel/types": "^7.27.1",
|
||||||
|
"@jridgewell/gen-mapping": "^0.3.5",
|
||||||
|
"@jridgewell/trace-mapping": "^0.3.25",
|
||||||
|
"jsesc": "^3.0.2"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/helper-string-parser": {
|
"node_modules/@babel/helper-string-parser": {
|
||||||
"version": "7.27.1",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
|
||||||
@ -93,6 +126,50 @@
|
|||||||
"node": ">=6.0.0"
|
"node": ">=6.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@babel/template": {
|
||||||
|
"version": "7.27.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz",
|
||||||
|
"integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/code-frame": "^7.27.1",
|
||||||
|
"@babel/parser": "^7.27.2",
|
||||||
|
"@babel/types": "^7.27.1"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/traverse": {
|
||||||
|
"version": "7.27.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.27.1.tgz",
|
||||||
|
"integrity": "sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/code-frame": "^7.27.1",
|
||||||
|
"@babel/generator": "^7.27.1",
|
||||||
|
"@babel/parser": "^7.27.1",
|
||||||
|
"@babel/template": "^7.27.1",
|
||||||
|
"@babel/types": "^7.27.1",
|
||||||
|
"debug": "^4.3.1",
|
||||||
|
"globals": "^11.1.0"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6.9.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@babel/traverse/node_modules/globals": {
|
||||||
|
"version": "11.12.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
|
||||||
|
"integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">=4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@babel/types": {
|
"node_modules/@babel/types": {
|
||||||
"version": "7.27.1",
|
"version": "7.27.1",
|
||||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
|
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.27.1.tgz",
|
||||||
@ -1205,6 +1282,29 @@
|
|||||||
"url": "https://github.com/sponsors/jdesrosiers"
|
"url": "https://github.com/sponsors/jdesrosiers"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@ianvs/prettier-plugin-sort-imports": {
|
||||||
|
"version": "4.4.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/@ianvs/prettier-plugin-sort-imports/-/prettier-plugin-sort-imports-4.4.1.tgz",
|
||||||
|
"integrity": "sha512-F0/Hrcfpy8WuxlQyAWJTEren/uxKhYonOGY4OyWmwRdeTvkh9mMSCxowZLjNkhwi/2ipqCgtXwwOk7tW0mWXkA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "Apache-2.0",
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/generator": "^7.26.2",
|
||||||
|
"@babel/parser": "^7.26.2",
|
||||||
|
"@babel/traverse": "^7.25.9",
|
||||||
|
"@babel/types": "^7.26.0",
|
||||||
|
"semver": "^7.5.2"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"@vue/compiler-sfc": "2.7.x || 3.x",
|
||||||
|
"prettier": "2 || 3"
|
||||||
|
},
|
||||||
|
"peerDependenciesMeta": {
|
||||||
|
"@vue/compiler-sfc": {
|
||||||
|
"optional": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@internationalized/date": {
|
"node_modules/@internationalized/date": {
|
||||||
"version": "3.8.0",
|
"version": "3.8.0",
|
||||||
"resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.8.0.tgz",
|
||||||
@ -1785,28 +1885,28 @@
|
|||||||
]
|
]
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/api-client": {
|
"node_modules/@scalar/api-client": {
|
||||||
"version": "2.3.32",
|
"version": "2.3.33",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/api-client/-/api-client-2.3.32.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/api-client/-/api-client-2.3.33.tgz",
|
||||||
"integrity": "sha512-N5zhCQs4ktrwme4rgnKM1s22PUGfKq0tkSqR6jQ9gKD7FSraLgQaB8uEb9BNoV5kkNeouhLqXFOJ3KB/wsJ4hw==",
|
"integrity": "sha512-kkdBdXkWmclB+CNpNquoVPjVmyKTStbNMi6K/XS55aA5sg0cHJmkpuwCPUI+N3rjt1kB453BvyI81+ji7kHjcw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@headlessui/tailwindcss": "^0.2.0",
|
"@headlessui/tailwindcss": "^0.2.0",
|
||||||
"@headlessui/vue": "^1.7.20",
|
"@headlessui/vue": "^1.7.20",
|
||||||
"@scalar/components": "0.13.57",
|
"@scalar/components": "0.13.58",
|
||||||
"@scalar/draggable": "0.1.11",
|
"@scalar/draggable": "0.1.11",
|
||||||
"@scalar/icons": "0.3.5",
|
"@scalar/icons": "0.3.6",
|
||||||
"@scalar/import": "0.3.25",
|
"@scalar/import": "0.3.26",
|
||||||
"@scalar/oas-utils": "0.2.142",
|
"@scalar/oas-utils": "0.2.143",
|
||||||
"@scalar/object-utils": "1.1.14",
|
"@scalar/object-utils": "1.1.14",
|
||||||
"@scalar/openapi-parser": "0.10.17",
|
"@scalar/openapi-parser": "0.10.17",
|
||||||
"@scalar/openapi-types": "0.2.2",
|
"@scalar/openapi-types": "0.2.3",
|
||||||
"@scalar/postman-to-openapi": "0.2.15",
|
"@scalar/postman-to-openapi": "0.2.16",
|
||||||
"@scalar/snippetz": "0.2.20",
|
"@scalar/snippetz": "0.2.20",
|
||||||
"@scalar/themes": "0.11.1",
|
"@scalar/themes": "0.11.2",
|
||||||
"@scalar/types": "0.1.14",
|
"@scalar/types": "0.1.15",
|
||||||
"@scalar/use-codemirror": "0.11.102",
|
"@scalar/use-codemirror": "0.11.103",
|
||||||
"@scalar/use-hooks": "0.1.48",
|
"@scalar/use-hooks": "0.1.49",
|
||||||
"@scalar/use-toasts": "0.7.10",
|
"@scalar/use-toasts": "0.7.10",
|
||||||
"@scalar/use-tooltip": "1.0.7",
|
"@scalar/use-tooltip": "1.0.7",
|
||||||
"@vueuse/core": "^10.10.0",
|
"@vueuse/core": "^10.10.0",
|
||||||
@ -1830,25 +1930,25 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/api-reference": {
|
"node_modules/@scalar/api-reference": {
|
||||||
"version": "1.28.32",
|
"version": "1.28.33",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/api-reference/-/api-reference-1.28.32.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/api-reference/-/api-reference-1.28.33.tgz",
|
||||||
"integrity": "sha512-VHU+KrNwM33bzq4O2JHKdWPDzG0eZINxJwwp856Nzpy1LE3lkqz9z+2BNHJ2CoPwsxzkLS7hEyG3qE2HwFFuTg==",
|
"integrity": "sha512-50BNZARDh+fNaUZT4Wm3LNb3/kVUJtpdGEiQ1vulrDKY4F/BWvFFfIUeXBy9Zfee8RyNxtukFO2cllbqzQJzHw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@floating-ui/vue": "^1.0.2",
|
"@floating-ui/vue": "^1.0.2",
|
||||||
"@headlessui/vue": "^1.7.20",
|
"@headlessui/vue": "^1.7.20",
|
||||||
"@scalar/api-client": "2.3.32",
|
"@scalar/api-client": "2.3.33",
|
||||||
"@scalar/code-highlight": "0.0.29",
|
"@scalar/code-highlight": "0.0.29",
|
||||||
"@scalar/components": "0.13.57",
|
"@scalar/components": "0.13.58",
|
||||||
"@scalar/icons": "0.3.5",
|
"@scalar/icons": "0.3.6",
|
||||||
"@scalar/oas-utils": "0.2.142",
|
"@scalar/oas-utils": "0.2.143",
|
||||||
"@scalar/openapi-parser": "0.10.17",
|
"@scalar/openapi-parser": "0.10.17",
|
||||||
"@scalar/openapi-types": "0.2.2",
|
"@scalar/openapi-types": "0.2.3",
|
||||||
"@scalar/snippetz": "0.2.20",
|
"@scalar/snippetz": "0.2.20",
|
||||||
"@scalar/themes": "0.11.1",
|
"@scalar/themes": "0.11.2",
|
||||||
"@scalar/types": "0.1.14",
|
"@scalar/types": "0.1.15",
|
||||||
"@scalar/use-hooks": "0.1.48",
|
"@scalar/use-hooks": "0.1.49",
|
||||||
"@scalar/use-toasts": "0.7.10",
|
"@scalar/use-toasts": "0.7.10",
|
||||||
"@unhead/vue": "^1.11.11",
|
"@unhead/vue": "^1.11.11",
|
||||||
"@vueuse/core": "^10.10.0",
|
"@vueuse/core": "^10.10.0",
|
||||||
@ -1894,9 +1994,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/components": {
|
"node_modules/@scalar/components": {
|
||||||
"version": "0.13.57",
|
"version": "0.13.58",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/components/-/components-0.13.57.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/components/-/components-0.13.58.tgz",
|
||||||
"integrity": "sha512-U4MWHqPe1ARPhvK9xNkYpixHy7iY3HDIi3HeLWtJbrwPam+Ofz9I6LJiWyuhkNSkFVUSrawm0rYbDemPt9lKVw==",
|
"integrity": "sha512-uuL9FV3pc2mEW3+3/XTv3AcnpPvaXzYxIFcgUsTtWyoJ+S4/ismeJYrOCTzRxPrfIpjA0U1rhCaLW4t973rcMA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -1904,9 +2004,9 @@
|
|||||||
"@floating-ui/vue": "^1.0.2",
|
"@floating-ui/vue": "^1.0.2",
|
||||||
"@headlessui/vue": "^1.7.20",
|
"@headlessui/vue": "^1.7.20",
|
||||||
"@scalar/code-highlight": "0.0.29",
|
"@scalar/code-highlight": "0.0.29",
|
||||||
"@scalar/icons": "0.3.5",
|
"@scalar/icons": "0.3.6",
|
||||||
"@scalar/themes": "0.11.1",
|
"@scalar/themes": "0.11.2",
|
||||||
"@scalar/use-hooks": "0.1.48",
|
"@scalar/use-hooks": "0.1.49",
|
||||||
"@scalar/use-toasts": "0.7.10",
|
"@scalar/use-toasts": "0.7.10",
|
||||||
"@vueuse/core": "^10.10.0",
|
"@vueuse/core": "^10.10.0",
|
||||||
"cva": "1.0.0-beta.2",
|
"cva": "1.0.0-beta.2",
|
||||||
@ -1933,14 +2033,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/icons": {
|
"node_modules/@scalar/icons": {
|
||||||
"version": "0.3.5",
|
"version": "0.3.6",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/icons/-/icons-0.3.5.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/icons/-/icons-0.3.6.tgz",
|
||||||
"integrity": "sha512-exzLWScBVopIBqI64+kMOpuoVzDYFplciW+rizl4Fv5XwagV3oErQySRgPLKgWlgr59USge2ogBpwsc/4e6Bmw==",
|
"integrity": "sha512-Er3zt/0+i8rbS0mPTe/N39uBC7stISE9DSZPIdgDl4onG9eFb4sodCyInA7mAxF7NQftHXGuK6VKjry9iAP0OA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@phosphor-icons/core": "^2.1.1",
|
"@phosphor-icons/core": "^2.1.1",
|
||||||
"@scalar/use-hooks": "0.1.48",
|
"@scalar/use-hooks": "0.1.49",
|
||||||
"@types/node": "^20.17.10",
|
"@types/node": "^20.17.10",
|
||||||
"chalk": "^5.4.1",
|
"chalk": "^5.4.1",
|
||||||
"vue": "^3.5.12"
|
"vue": "^3.5.12"
|
||||||
@ -1950,13 +2050,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/import": {
|
"node_modules/@scalar/import": {
|
||||||
"version": "0.3.25",
|
"version": "0.3.26",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/import/-/import-0.3.25.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/import/-/import-0.3.26.tgz",
|
||||||
"integrity": "sha512-hZj+wQHg65prYorzYJGxrslnL/xavGFKIUpWqk6w+JsmXxYhkrS6ob64GjCKfaGIype42mG+Ef1ylqZpqL5NCw==",
|
"integrity": "sha512-UIOPduLhpJCHmQ8bCzlY/btnJ0qWOLVMRX0ZtVVd2gEC4qyKnaiWB1fHweQW5rrWtO7CK90X8Z28n5wY5f365w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scalar/oas-utils": "0.2.142",
|
"@scalar/oas-utils": "0.2.143",
|
||||||
"@scalar/openapi-parser": "0.10.17",
|
"@scalar/openapi-parser": "0.10.17",
|
||||||
"yaml": "^2.4.5"
|
"yaml": "^2.4.5"
|
||||||
},
|
},
|
||||||
@ -1965,18 +2065,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/oas-utils": {
|
"node_modules/@scalar/oas-utils": {
|
||||||
"version": "0.2.142",
|
"version": "0.2.143",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/oas-utils/-/oas-utils-0.2.142.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/oas-utils/-/oas-utils-0.2.143.tgz",
|
||||||
"integrity": "sha512-n9aTk9oD2BOv43brFIIvkT8OSnT+wqOiT0HO9lO4/JjihT8Zkh12b2+Dc4lXZfgDwhAb3FcUnjVw8BGgOzmkFQ==",
|
"integrity": "sha512-6waFLR2Nhz/+YUXAHmiupi1r32jHsdIXpEszqjzbGuKjyEmYJwR5rT638Il1CfHVrfIZnmMy60EAw/jmzQtm2A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@hyperjump/browser": "^1.1.0",
|
"@hyperjump/browser": "^1.1.0",
|
||||||
"@hyperjump/json-schema": "^1.9.6",
|
"@hyperjump/json-schema": "^1.9.6",
|
||||||
"@scalar/object-utils": "1.1.14",
|
"@scalar/object-utils": "1.1.14",
|
||||||
"@scalar/openapi-types": "0.2.2",
|
"@scalar/openapi-types": "0.2.3",
|
||||||
"@scalar/themes": "0.11.1",
|
"@scalar/themes": "0.11.2",
|
||||||
"@scalar/types": "0.1.14",
|
"@scalar/types": "0.1.15",
|
||||||
"flatted": "^3.3.1",
|
"flatted": "^3.3.1",
|
||||||
"microdiff": "^1.4.0",
|
"microdiff": "^1.4.0",
|
||||||
"nanoid": "^5.1.5",
|
"nanoid": "^5.1.5",
|
||||||
@ -2023,9 +2123,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/openapi-types": {
|
"node_modules/@scalar/openapi-types": {
|
||||||
"version": "0.2.2",
|
"version": "0.2.3",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.2.2.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/openapi-types/-/openapi-types-0.2.3.tgz",
|
||||||
"integrity": "sha512-fwWboUf3W5U4qWU7nj4jrs+KYilnfKyVp0d6LC1ejB2aROgWXIAscRtVaPLPaNLpTZOBsMC8XpiAPm3/SlU+mA==",
|
"integrity": "sha512-O1GwqLpcRc3GKXTbeBZ5E12fXR2ltpqGWk4RfhoN4ebKZsPVknV5at5425G97E1SwMy12BporRvn90k1Z+MruQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -2036,14 +2136,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/postman-to-openapi": {
|
"node_modules/@scalar/postman-to-openapi": {
|
||||||
"version": "0.2.15",
|
"version": "0.2.16",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/postman-to-openapi/-/postman-to-openapi-0.2.15.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/postman-to-openapi/-/postman-to-openapi-0.2.16.tgz",
|
||||||
"integrity": "sha512-pBxuY1kiLkIoDEXGBgnOALRPqDFq7G4z1ngLbIiovql+wa4V9D5hLPQ20r+7p8P6d/Gu6EcRun4OxVJFjHNymQ==",
|
"integrity": "sha512-gcC8VRwltFn+BrvSXi3nguzcu62c5KIOHgogOUVRpeNF2taYL16MJl4s8kkB9V4C3f4lZqozYml8MJJe/1K5pw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scalar/oas-utils": "0.2.142",
|
"@scalar/oas-utils": "0.2.143",
|
||||||
"@scalar/openapi-types": "0.2.2"
|
"@scalar/openapi-types": "0.2.3"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": ">=18"
|
"node": ">=18"
|
||||||
@ -2063,13 +2163,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/themes": {
|
"node_modules/@scalar/themes": {
|
||||||
"version": "0.11.1",
|
"version": "0.11.2",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/themes/-/themes-0.11.1.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/themes/-/themes-0.11.2.tgz",
|
||||||
"integrity": "sha512-bPOO10L2JZQdwoirpTp3CWEsLqapU7x/EwydivY1WtU4/FOObluLdjmCQ7Ijw2fzY5t6I/BvTsZbWZRWrLvuUQ==",
|
"integrity": "sha512-3LOKmOzWzpWZHBqqVP62MDLa9QLmsjvb1DpAevMrMc6mSkSSnKU53+BxOZcrBb8CgB1694Lm9eOf4BRBywufaw==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scalar/types": "0.1.14",
|
"@scalar/types": "0.1.15",
|
||||||
"nanoid": "^5.1.5"
|
"nanoid": "^5.1.5"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -2077,13 +2177,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/types": {
|
"node_modules/@scalar/types": {
|
||||||
"version": "0.1.14",
|
"version": "0.1.15",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/types/-/types-0.1.14.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/types/-/types-0.1.15.tgz",
|
||||||
"integrity": "sha512-N7qZ9qARJfi4Gl5MEsRfwPHFWs68qDXWQ+jGi05LGExDqErAJStc4PPkEmxt44uSO4+TVx4ADxWB6xNoGMG/Zg==",
|
"integrity": "sha512-qb/kYWD7MKthL9flHEH/FPDgE3uWkkq8os9+M3CwyYMo2OpyXLbnzZ47LiCJ+hfdCx/hfIiSEOum2eNsYM8Lfg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scalar/openapi-types": "0.2.2",
|
"@scalar/openapi-types": "0.2.3",
|
||||||
"nanoid": "^5.1.5",
|
"nanoid": "^5.1.5",
|
||||||
"zod": "3.24.1"
|
"zod": "3.24.1"
|
||||||
},
|
},
|
||||||
@ -2092,9 +2192,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/use-codemirror": {
|
"node_modules/@scalar/use-codemirror": {
|
||||||
"version": "0.11.102",
|
"version": "0.11.103",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/use-codemirror/-/use-codemirror-0.11.102.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/use-codemirror/-/use-codemirror-0.11.103.tgz",
|
||||||
"integrity": "sha512-6ya9TMYX8UQ5mV09cOHKOnk8uytR/K0aUzIeLPlIaTEVlmzIcLiZXR34ThK5fN3XgmL1rXRzihgrooZDhTpEOQ==",
|
"integrity": "sha512-rwa2dn2L6R/Q2vdYp4kNx5kV1zZ7TIhoxXoYREqVOlbqypl7ASAyNot2icuAIozSzA4oyL7mhsSsYtaBhJ3C1A==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -2113,7 +2213,7 @@
|
|||||||
"@lezer/highlight": "^1.2.1",
|
"@lezer/highlight": "^1.2.1",
|
||||||
"@lezer/lr": "^1.4.2",
|
"@lezer/lr": "^1.4.2",
|
||||||
"@replit/codemirror-css-color-picker": "^6.3.0",
|
"@replit/codemirror-css-color-picker": "^6.3.0",
|
||||||
"@scalar/components": "0.13.57",
|
"@scalar/components": "0.13.58",
|
||||||
"codemirror": "^6.0.0",
|
"codemirror": "^6.0.0",
|
||||||
"style-mod": "^4.1.2",
|
"style-mod": "^4.1.2",
|
||||||
"vue": "^3.5.12"
|
"vue": "^3.5.12"
|
||||||
@ -2123,13 +2223,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@scalar/use-hooks": {
|
"node_modules/@scalar/use-hooks": {
|
||||||
"version": "0.1.48",
|
"version": "0.1.49",
|
||||||
"resolved": "https://registry.npmjs.org/@scalar/use-hooks/-/use-hooks-0.1.48.tgz",
|
"resolved": "https://registry.npmjs.org/@scalar/use-hooks/-/use-hooks-0.1.49.tgz",
|
||||||
"integrity": "sha512-ueAs0caWTFbrVW9jRuKpj+hZYe3r25dnFBkSSbMIhkx5OQkMmgfq0q3Rao2azyXWsA067K+Nujsu7G6hE1ujiw==",
|
"integrity": "sha512-RV/ks0xBdj2e5MUmdto0dJIL3zviixfmaY87fzVkJwU/ptzi50AyppXGFWsmRyatOwB/KYlUy6D2NoNQA8bdDQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@scalar/themes": "0.11.1",
|
"@scalar/themes": "0.11.2",
|
||||||
"@scalar/use-toasts": "0.7.10",
|
"@scalar/use-toasts": "0.7.10",
|
||||||
"@vueuse/core": "^10.10.0",
|
"@vueuse/core": "^10.10.0",
|
||||||
"cva": "1.0.0-beta.2",
|
"cva": "1.0.0-beta.2",
|
||||||
@ -2209,17 +2309,18 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@sveltejs/kit": {
|
"node_modules/@sveltejs/kit": {
|
||||||
"version": "2.20.8",
|
"version": "2.21.0",
|
||||||
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.20.8.tgz",
|
"resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.21.0.tgz",
|
||||||
"integrity": "sha512-ep9qTxL7WALhfm0kFecL3VHeuNew8IccbYGqv5TqL/KSqWRKzEgDG8blNlIu1CkLTTua/kHjI+f5T8eCmWIxKw==",
|
"integrity": "sha512-kvu4h9qXduiPk1Q1oqFKDLFGu/7mslEYbVaqpbBcBxjlRJnvNCFwEvEwKt0Mx9TtSi8J77xRelvJobrGlst4nQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
"@sveltejs/acorn-typescript": "^1.0.5",
|
||||||
"@types/cookie": "^0.6.0",
|
"@types/cookie": "^0.6.0",
|
||||||
|
"acorn": "^8.14.1",
|
||||||
"cookie": "^0.6.0",
|
"cookie": "^0.6.0",
|
||||||
"devalue": "^5.1.0",
|
"devalue": "^5.1.0",
|
||||||
"esm-env": "^1.2.2",
|
"esm-env": "^1.2.2",
|
||||||
"import-meta-resolve": "^4.1.0",
|
|
||||||
"kleur": "^4.1.5",
|
"kleur": "^4.1.5",
|
||||||
"magic-string": "^0.30.5",
|
"magic-string": "^0.30.5",
|
||||||
"mrmime": "^2.0.0",
|
"mrmime": "^2.0.0",
|
||||||
@ -2677,19 +2778,19 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/eslint-plugin": {
|
"node_modules/@typescript-eslint/eslint-plugin": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.32.1.tgz",
|
||||||
"integrity": "sha512-/jU9ettcntkBFmWUzzGgsClEi2ZFiikMX5eEQsmxIAWMOn4H3D4rvHssstmAHGVvrYnaMqdWWWg0b5M6IN/MTQ==",
|
"integrity": "sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/regexpp": "^4.10.0",
|
"@eslint-community/regexpp": "^4.10.0",
|
||||||
"@typescript-eslint/scope-manager": "8.32.0",
|
"@typescript-eslint/scope-manager": "8.32.1",
|
||||||
"@typescript-eslint/type-utils": "8.32.0",
|
"@typescript-eslint/type-utils": "8.32.1",
|
||||||
"@typescript-eslint/utils": "8.32.0",
|
"@typescript-eslint/utils": "8.32.1",
|
||||||
"@typescript-eslint/visitor-keys": "8.32.0",
|
"@typescript-eslint/visitor-keys": "8.32.1",
|
||||||
"graphemer": "^1.4.0",
|
"graphemer": "^1.4.0",
|
||||||
"ignore": "^5.3.1",
|
"ignore": "^7.0.0",
|
||||||
"natural-compare": "^1.4.0",
|
"natural-compare": "^1.4.0",
|
||||||
"ts-api-utils": "^2.1.0"
|
"ts-api-utils": "^2.1.0"
|
||||||
},
|
},
|
||||||
@ -2706,17 +2807,27 @@
|
|||||||
"typescript": ">=4.8.4 <5.9.0"
|
"typescript": ">=4.8.4 <5.9.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
|
||||||
|
"version": "7.0.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.4.tgz",
|
||||||
|
"integrity": "sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 4"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@typescript-eslint/parser": {
|
"node_modules/@typescript-eslint/parser": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.32.1.tgz",
|
||||||
"integrity": "sha512-B2MdzyWxCE2+SqiZHAjPphft+/2x2FlO9YBx7eKE1BCb+rqBlQdhtAEhzIEdozHd55DXPmxBdpMygFJjfjjA9A==",
|
"integrity": "sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/scope-manager": "8.32.0",
|
"@typescript-eslint/scope-manager": "8.32.1",
|
||||||
"@typescript-eslint/types": "8.32.0",
|
"@typescript-eslint/types": "8.32.1",
|
||||||
"@typescript-eslint/typescript-estree": "8.32.0",
|
"@typescript-eslint/typescript-estree": "8.32.1",
|
||||||
"@typescript-eslint/visitor-keys": "8.32.0",
|
"@typescript-eslint/visitor-keys": "8.32.1",
|
||||||
"debug": "^4.3.4"
|
"debug": "^4.3.4"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -2732,14 +2843,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/scope-manager": {
|
"node_modules/@typescript-eslint/scope-manager": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.32.1.tgz",
|
||||||
"integrity": "sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==",
|
"integrity": "sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.32.0",
|
"@typescript-eslint/types": "8.32.1",
|
||||||
"@typescript-eslint/visitor-keys": "8.32.0"
|
"@typescript-eslint/visitor-keys": "8.32.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@ -2750,14 +2861,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/type-utils": {
|
"node_modules/@typescript-eslint/type-utils": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.32.1.tgz",
|
||||||
"integrity": "sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==",
|
"integrity": "sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/typescript-estree": "8.32.0",
|
"@typescript-eslint/typescript-estree": "8.32.1",
|
||||||
"@typescript-eslint/utils": "8.32.0",
|
"@typescript-eslint/utils": "8.32.1",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"ts-api-utils": "^2.1.0"
|
"ts-api-utils": "^2.1.0"
|
||||||
},
|
},
|
||||||
@ -2774,9 +2885,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/types": {
|
"node_modules/@typescript-eslint/types": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.32.1.tgz",
|
||||||
"integrity": "sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA==",
|
"integrity": "sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -2788,14 +2899,14 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/typescript-estree": {
|
"node_modules/@typescript-eslint/typescript-estree": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.1.tgz",
|
||||||
"integrity": "sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==",
|
"integrity": "sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.32.0",
|
"@typescript-eslint/types": "8.32.1",
|
||||||
"@typescript-eslint/visitor-keys": "8.32.0",
|
"@typescript-eslint/visitor-keys": "8.32.1",
|
||||||
"debug": "^4.3.4",
|
"debug": "^4.3.4",
|
||||||
"fast-glob": "^3.3.2",
|
"fast-glob": "^3.3.2",
|
||||||
"is-glob": "^4.0.3",
|
"is-glob": "^4.0.3",
|
||||||
@ -2841,16 +2952,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/utils": {
|
"node_modules/@typescript-eslint/utils": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.32.1.tgz",
|
||||||
"integrity": "sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==",
|
"integrity": "sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.7.0",
|
"@eslint-community/eslint-utils": "^4.7.0",
|
||||||
"@typescript-eslint/scope-manager": "8.32.0",
|
"@typescript-eslint/scope-manager": "8.32.1",
|
||||||
"@typescript-eslint/types": "8.32.0",
|
"@typescript-eslint/types": "8.32.1",
|
||||||
"@typescript-eslint/typescript-estree": "8.32.0"
|
"@typescript-eslint/typescript-estree": "8.32.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
@ -2865,13 +2976,13 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/@typescript-eslint/visitor-keys": {
|
"node_modules/@typescript-eslint/visitor-keys": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.1.tgz",
|
||||||
"integrity": "sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==",
|
"integrity": "sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/types": "8.32.0",
|
"@typescript-eslint/types": "8.32.1",
|
||||||
"eslint-visitor-keys": "^4.2.0"
|
"eslint-visitor-keys": "^4.2.0"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
@ -3856,9 +3967,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/debug": {
|
"node_modules/debug": {
|
||||||
"version": "4.4.0",
|
"version": "4.4.1",
|
||||||
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz",
|
||||||
"integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
|
"integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -4195,16 +4306,16 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/eslint-plugin-svelte": {
|
"node_modules/eslint-plugin-svelte": {
|
||||||
"version": "3.5.1",
|
"version": "3.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.6.0.tgz",
|
||||||
"integrity": "sha512-Qn1slddZHfqYiDO6IN8/iN3YL+VuHlgYjm30FT+hh0Jf/TX0jeZMTJXQMajFm5f6f6hURi+XO8P+NPYD+T4jkg==",
|
"integrity": "sha512-IIf6Cj6yQuCwL7Qd8bX13BZspz+DQsOkClozMF9EkW20FSxI75Ndd5ZzbviCn32DdXRo9FUWXn+YMIL46qPOOg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@eslint-community/eslint-utils": "^4.4.1",
|
"@eslint-community/eslint-utils": "^4.4.1",
|
||||||
"@jridgewell/sourcemap-codec": "^1.5.0",
|
"@jridgewell/sourcemap-codec": "^1.5.0",
|
||||||
"esutils": "^2.0.3",
|
"esutils": "^2.0.3",
|
||||||
"known-css-properties": "^0.35.0",
|
"known-css-properties": "^0.36.0",
|
||||||
"postcss": "^8.4.49",
|
"postcss": "^8.4.49",
|
||||||
"postcss-load-config": "^3.1.4",
|
"postcss-load-config": "^3.1.4",
|
||||||
"postcss-safe-parser": "^7.0.0",
|
"postcss-safe-parser": "^7.0.0",
|
||||||
@ -5316,17 +5427,6 @@
|
|||||||
"url": "https://github.com/sponsors/sindresorhus"
|
"url": "https://github.com/sponsors/sindresorhus"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/import-meta-resolve": {
|
|
||||||
"version": "4.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
|
|
||||||
"integrity": "sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==",
|
|
||||||
"dev": true,
|
|
||||||
"license": "MIT",
|
|
||||||
"funding": {
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/wooorm"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/imurmurhash": {
|
"node_modules/imurmurhash": {
|
||||||
"version": "0.1.4",
|
"version": "0.1.4",
|
||||||
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
|
||||||
@ -5480,6 +5580,13 @@
|
|||||||
"jiti": "lib/jiti-cli.mjs"
|
"jiti": "lib/jiti-cli.mjs"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/js-tokens": {
|
||||||
|
"version": "4.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
|
||||||
|
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT"
|
||||||
|
},
|
||||||
"node_modules/js-yaml": {
|
"node_modules/js-yaml": {
|
||||||
"version": "4.1.0",
|
"version": "4.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz",
|
||||||
@ -5493,6 +5600,19 @@
|
|||||||
"js-yaml": "bin/js-yaml.js"
|
"js-yaml": "bin/js-yaml.js"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/jsesc": {
|
||||||
|
"version": "3.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz",
|
||||||
|
"integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==",
|
||||||
|
"dev": true,
|
||||||
|
"license": "MIT",
|
||||||
|
"bin": {
|
||||||
|
"jsesc": "bin/jsesc"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=6"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/json-buffer": {
|
"node_modules/json-buffer": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
|
||||||
@ -5569,9 +5689,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/known-css-properties": {
|
"node_modules/known-css-properties": {
|
||||||
"version": "0.35.0",
|
"version": "0.36.0",
|
||||||
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
|
"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.36.0.tgz",
|
||||||
"integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
|
"integrity": "sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
@ -7988,9 +8108,9 @@
|
|||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
"node_modules/semver": {
|
"node_modules/semver": {
|
||||||
"version": "7.7.1",
|
"version": "7.7.2",
|
||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz",
|
||||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
"integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "ISC",
|
"license": "ISC",
|
||||||
"bin": {
|
"bin": {
|
||||||
@ -8288,9 +8408,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/svelte": {
|
"node_modules/svelte": {
|
||||||
"version": "5.28.2",
|
"version": "5.28.6",
|
||||||
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.2.tgz",
|
"resolved": "https://registry.npmjs.org/svelte/-/svelte-5.28.6.tgz",
|
||||||
"integrity": "sha512-FbWBxgWOpQfhKvoGJv/TFwzqb4EhJbwCD17dB0tEpQiw1XyUEKZJtgm4nA4xq3LLsMo7hu5UY/BOFmroAxKTMg==",
|
"integrity": "sha512-9qqr7mw8YR9PAnxGFfzCK6PUlNGtns7wVavrhnxyf3fpB1mP/Ol55Z2UnIapsSzNNl3k9qw7cZ22PdE8+xT/jQ==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
@ -8656,15 +8776,15 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typescript-eslint": {
|
"node_modules/typescript-eslint": {
|
||||||
"version": "8.32.0",
|
"version": "8.32.1",
|
||||||
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.0.tgz",
|
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.32.1.tgz",
|
||||||
"integrity": "sha512-UMq2kxdXCzinFFPsXc9o2ozIpYCCOiEC46MG3yEh5Vipq6BO27otTtEBZA1fQ66DulEUgE97ucQ/3YY66CPg0A==",
|
"integrity": "sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@typescript-eslint/eslint-plugin": "8.32.0",
|
"@typescript-eslint/eslint-plugin": "8.32.1",
|
||||||
"@typescript-eslint/parser": "8.32.0",
|
"@typescript-eslint/parser": "8.32.1",
|
||||||
"@typescript-eslint/utils": "8.32.0"
|
"@typescript-eslint/utils": "8.32.1"
|
||||||
},
|
},
|
||||||
"engines": {
|
"engines": {
|
||||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "trevstack",
|
"name": "trevstack",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "0.0.21",
|
"version": "0.0.23",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"dev": "vite dev",
|
"dev": "vite dev",
|
||||||
@ -19,25 +19,26 @@
|
|||||||
"@connectrpc/connect-web": "^2.0.2",
|
"@connectrpc/connect-web": "^2.0.2",
|
||||||
"@eslint/compat": "^1.2.9",
|
"@eslint/compat": "^1.2.9",
|
||||||
"@eslint/js": "^9.18.0",
|
"@eslint/js": "^9.18.0",
|
||||||
|
"@ianvs/prettier-plugin-sort-imports": "^4.4.1",
|
||||||
"@lucide/svelte": "^0.479.0",
|
"@lucide/svelte": "^0.479.0",
|
||||||
"@scalar/api-reference": "^1.28.32",
|
"@scalar/api-reference": "^1.28.33",
|
||||||
"@simplewebauthn/browser": "^13.1.0",
|
"@simplewebauthn/browser": "^13.1.0",
|
||||||
"@sveltejs/adapter-static": "^3.0.8",
|
"@sveltejs/adapter-static": "^3.0.8",
|
||||||
"@sveltejs/kit": "^2.20.8",
|
"@sveltejs/kit": "^2.21.0",
|
||||||
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
"@sveltejs/vite-plugin-svelte": "^5.0.3",
|
||||||
"@tailwindcss/vite": "^4.1.6",
|
"@tailwindcss/vite": "^4.1.6",
|
||||||
"bits-ui": "^1.4.8",
|
"bits-ui": "^1.4.8",
|
||||||
"clsx": "^2.1.1",
|
"clsx": "^2.1.1",
|
||||||
"eslint": "^9.26.0",
|
"eslint": "^9.26.0",
|
||||||
"eslint-config-prettier": "^10.1.5",
|
"eslint-config-prettier": "^10.1.5",
|
||||||
"eslint-plugin-svelte": "^3.5.1",
|
"eslint-plugin-svelte": "^3.6.0",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
"globals": "^16.1.0",
|
"globals": "^16.1.0",
|
||||||
"mode-watcher": "^1.0.7",
|
"mode-watcher": "^1.0.7",
|
||||||
"prettier": "^3.5.3",
|
"prettier": "^3.5.3",
|
||||||
"prettier-plugin-svelte": "^3.3.3",
|
"prettier-plugin-svelte": "^3.3.3",
|
||||||
"prettier-plugin-tailwindcss": "^0.6.11",
|
"prettier-plugin-tailwindcss": "^0.6.11",
|
||||||
"svelte": "^5.28.2",
|
"svelte": "^5.28.6",
|
||||||
"svelte-check": "^4.1.7",
|
"svelte-check": "^4.1.7",
|
||||||
"svelte-sonner": "^0.3.28",
|
"svelte-sonner": "^0.3.28",
|
||||||
"tailwind-merge": "^3.3.0",
|
"tailwind-merge": "^3.3.0",
|
||||||
@ -45,7 +46,7 @@
|
|||||||
"tailwindcss": "^4.0.13",
|
"tailwindcss": "^4.0.13",
|
||||||
"tw-animate-css": "^1.2.9",
|
"tw-animate-css": "^1.2.9",
|
||||||
"typescript": "^5.8.3",
|
"typescript": "^5.8.3",
|
||||||
"typescript-eslint": "^8.32.0",
|
"typescript-eslint": "^8.32.1",
|
||||||
"vite": "^6.3.5"
|
"vite": "^6.3.5"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,99 +1,99 @@
|
|||||||
@import 'tailwindcss';
|
@import 'tailwindcss';
|
||||||
@import "tw-animate-css";
|
@import 'tw-animate-css';
|
||||||
|
|
||||||
@custom-variant dark (&:where(.dark, .dark *));
|
@custom-variant dark (&:where(.dark, .dark *));
|
||||||
|
|
||||||
@theme inline {
|
@theme inline {
|
||||||
--spacing-body: calc(100vh - 180px);
|
--spacing-body: calc(100vh - 180px);
|
||||||
|
|
||||||
--color-accent: var(--sky);
|
--color-accent: var(--sky);
|
||||||
|
|
||||||
--color-rosewater: var(--rosewater);
|
--color-rosewater: var(--rosewater);
|
||||||
--color-flamingo: var(--flamingo);
|
--color-flamingo: var(--flamingo);
|
||||||
--color-pink: var(--pink);
|
--color-pink: var(--pink);
|
||||||
--color-mauve: var(--mauve);
|
--color-mauve: var(--mauve);
|
||||||
--color-red: var(--red);
|
--color-red: var(--red);
|
||||||
--color-maroon: var(--maroon);
|
--color-maroon: var(--maroon);
|
||||||
--color-peach: var(--peach);
|
--color-peach: var(--peach);
|
||||||
--color-yellow: var(--yellow);
|
--color-yellow: var(--yellow);
|
||||||
--color-green: var(--green);
|
--color-green: var(--green);
|
||||||
--color-teal: var(--teal);
|
--color-teal: var(--teal);
|
||||||
--color-sky: var(--sky);
|
--color-sky: var(--sky);
|
||||||
--color-sapphire: var(--sapphire);
|
--color-sapphire: var(--sapphire);
|
||||||
--color-blue: var(--blue);
|
--color-blue: var(--blue);
|
||||||
--color-lavender: var(--lavender);
|
--color-lavender: var(--lavender);
|
||||||
--color-text: var(--text);
|
--color-text: var(--text);
|
||||||
--color-subtext-1: var(--subtext-1);
|
--color-subtext-1: var(--subtext-1);
|
||||||
--color-subtext: var(--subtext);
|
--color-subtext: var(--subtext);
|
||||||
--color-overlay-2: var(--overlay-2);
|
--color-overlay-2: var(--overlay-2);
|
||||||
--color-overlay-1: var(--overlay-1);
|
--color-overlay-1: var(--overlay-1);
|
||||||
--color-overlay: var(--overlay);
|
--color-overlay: var(--overlay);
|
||||||
--color-surface-2: var(--surface-2);
|
--color-surface-2: var(--surface-2);
|
||||||
--color-surface-1: var(--surface-1);
|
--color-surface-1: var(--surface-1);
|
||||||
--color-surface: var(--surface);
|
--color-surface: var(--surface);
|
||||||
--color-based: var(--based);
|
--color-based: var(--based);
|
||||||
--color-mantle: var(--mantle);
|
--color-mantle: var(--mantle);
|
||||||
--color-crust: var(--crust);
|
--color-crust: var(--crust);
|
||||||
}
|
}
|
||||||
|
|
||||||
@layer base {
|
@layer base {
|
||||||
:root {
|
:root {
|
||||||
--rosewater: hsl(11deg, 59%, 67%);
|
--rosewater: hsl(11deg, 59%, 67%);
|
||||||
--flamingo: hsl(0deg, 60%, 67%);
|
--flamingo: hsl(0deg, 60%, 67%);
|
||||||
--pink: hsl(316deg, 73%, 69%);
|
--pink: hsl(316deg, 73%, 69%);
|
||||||
--mauve: hsl(266deg, 85%, 58%);
|
--mauve: hsl(266deg, 85%, 58%);
|
||||||
--red: hsl(347deg, 87%, 44%);
|
--red: hsl(347deg, 87%, 44%);
|
||||||
--maroon: hsl(355deg, 76%, 59%);
|
--maroon: hsl(355deg, 76%, 59%);
|
||||||
--peach: hsl(22deg, 99%, 52%);
|
--peach: hsl(22deg, 99%, 52%);
|
||||||
--yellow: hsl(35deg, 77%, 49%);
|
--yellow: hsl(35deg, 77%, 49%);
|
||||||
--green: hsl(109deg, 58%, 40%);
|
--green: hsl(109deg, 58%, 40%);
|
||||||
--teal: hsl(183deg, 74%, 35%);
|
--teal: hsl(183deg, 74%, 35%);
|
||||||
--sky: hsl(197deg, 97%, 46%);
|
--sky: hsl(197deg, 97%, 46%);
|
||||||
--sapphire: hsl(189deg, 70%, 42%);
|
--sapphire: hsl(189deg, 70%, 42%);
|
||||||
--blue: hsl(220deg, 91%, 54%);
|
--blue: hsl(220deg, 91%, 54%);
|
||||||
--lavender: hsl(231deg, 97%, 72%);
|
--lavender: hsl(231deg, 97%, 72%);
|
||||||
--text: hsl(234deg, 16%, 35%);
|
--text: hsl(234deg, 16%, 35%);
|
||||||
--subtext-1: hsl(233deg, 13%, 41%);
|
--subtext-1: hsl(233deg, 13%, 41%);
|
||||||
--subtext: hsl(233deg, 10%, 47%);
|
--subtext: hsl(233deg, 10%, 47%);
|
||||||
--overlay-2: hsl(232deg, 10%, 53%);
|
--overlay-2: hsl(232deg, 10%, 53%);
|
||||||
--overlay-1: hsl(231deg, 10%, 59%);
|
--overlay-1: hsl(231deg, 10%, 59%);
|
||||||
--overlay: hsl(228deg, 11%, 65%);
|
--overlay: hsl(228deg, 11%, 65%);
|
||||||
--surface-2: hsl(227deg, 12%, 71%);
|
--surface-2: hsl(227deg, 12%, 71%);
|
||||||
--surface-1: hsl(225deg, 14%, 77%);
|
--surface-1: hsl(225deg, 14%, 77%);
|
||||||
--surface: hsl(223deg, 16%, 83%);
|
--surface: hsl(223deg, 16%, 83%);
|
||||||
--based: hsl(220deg, 23%, 95%);
|
--based: hsl(220deg, 23%, 95%);
|
||||||
--mantle: hsl(220deg, 22%, 92%);
|
--mantle: hsl(220deg, 22%, 92%);
|
||||||
--crust: hsl(220deg, 21%, 89%);
|
--crust: hsl(220deg, 21%, 89%);
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark {
|
.dark {
|
||||||
--rosewater: hsl(10deg, 56%, 91%);
|
--rosewater: hsl(10deg, 56%, 91%);
|
||||||
--flamingo: hsl(0deg, 59%, 88%);
|
--flamingo: hsl(0deg, 59%, 88%);
|
||||||
--pink: hsl(316deg, 72%, 86%);
|
--pink: hsl(316deg, 72%, 86%);
|
||||||
--mauve: hsl(267deg, 84%, 81%);
|
--mauve: hsl(267deg, 84%, 81%);
|
||||||
--red: hsl(343deg, 81%, 75%);
|
--red: hsl(343deg, 81%, 75%);
|
||||||
--maroon: hsl(350deg, 65%, 77%);
|
--maroon: hsl(350deg, 65%, 77%);
|
||||||
--peach: hsl(23deg, 92%, 75%);
|
--peach: hsl(23deg, 92%, 75%);
|
||||||
--yellow: hsl(41deg, 86%, 83%);
|
--yellow: hsl(41deg, 86%, 83%);
|
||||||
--green: hsl(115deg, 54%, 76%);
|
--green: hsl(115deg, 54%, 76%);
|
||||||
--teal: hsl(170deg, 57%, 73%);
|
--teal: hsl(170deg, 57%, 73%);
|
||||||
--sky: hsl(189deg, 71%, 73%);
|
--sky: hsl(189deg, 71%, 73%);
|
||||||
--sapphire: hsl(199deg, 76%, 69%);
|
--sapphire: hsl(199deg, 76%, 69%);
|
||||||
--blue: hsl(217deg, 92%, 76%);
|
--blue: hsl(217deg, 92%, 76%);
|
||||||
--lavender: hsl(232deg, 97%, 85%);
|
--lavender: hsl(232deg, 97%, 85%);
|
||||||
--text: hsl(226deg, 64%, 88%);
|
--text: hsl(226deg, 64%, 88%);
|
||||||
--subtext-1: hsl(227deg, 35%, 80%);
|
--subtext-1: hsl(227deg, 35%, 80%);
|
||||||
--subtext: hsl(228deg, 24%, 72%);
|
--subtext: hsl(228deg, 24%, 72%);
|
||||||
--overlay-2: hsl(228deg, 17%, 64%);
|
--overlay-2: hsl(228deg, 17%, 64%);
|
||||||
--overlay-1: hsl(230deg, 13%, 55%);
|
--overlay-1: hsl(230deg, 13%, 55%);
|
||||||
--overlay: hsl(231deg, 11%, 47%);
|
--overlay: hsl(231deg, 11%, 47%);
|
||||||
--surface-2: hsl(233deg, 12%, 39%);
|
--surface-2: hsl(233deg, 12%, 39%);
|
||||||
--surface-1: hsl(234deg, 13%, 31%);
|
--surface-1: hsl(234deg, 13%, 31%);
|
||||||
--surface: hsl(237deg, 16%, 23%);
|
--surface: hsl(237deg, 16%, 23%);
|
||||||
--based: hsl(240deg, 21%, 15%);
|
--based: hsl(240deg, 21%, 15%);
|
||||||
--mantle: hsl(240deg, 21%, 12%);
|
--mantle: hsl(240deg, 21%, 12%);
|
||||||
--crust: hsl(240deg, 23%, 9%);
|
--crust: hsl(240deg, 23%, 9%);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -102,4 +102,4 @@
|
|||||||
Focus Outline: blue
|
Focus Outline: blue
|
||||||
Border: surface-1
|
Border: surface-1
|
||||||
Hover: bump color by 2 (eg crust -> based), if accent color drop opacity (eg blue -> blue/90)
|
Hover: bump color by 2 (eg crust -> based), if accent color drop opacity (eg blue -> blue/90)
|
||||||
*/
|
*/
|
||||||
|
@ -8,7 +8,7 @@
|
|||||||
<title>TrevStack</title>
|
<title>TrevStack</title>
|
||||||
%sveltekit.head%
|
%sveltekit.head%
|
||||||
</head>
|
</head>
|
||||||
<body data-sveltekit-preload-data="tap" class="bg-crust text-text min-h-screen">
|
<body data-sveltekit-preload-data="tap" class="bg-crust text-text min-h-dvh">
|
||||||
<div style="display: contents">%sveltekit.body%</div>
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
|
|
||||||
|
|
||||||
export function newState<T>(s: T) {
|
export function newState<T>(s: T) {
|
||||||
const state = $state(s);
|
const state = $state(s);
|
||||||
|
|
||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
@ -1,175 +1,176 @@
|
|||||||
import { create, type DescMessage, type DescService, type MessageShape, type MessageInitShape } from "@bufbuild/protobuf";
|
import type { DescMessage, DescService, MessageInitShape, MessageShape } from '@bufbuild/protobuf';
|
||||||
import { ValidationError, type Violation } from "@bufbuild/protovalidate";
|
import type { Violation } from '@bufbuild/protovalidate';
|
||||||
import { Validator } from "../transport";
|
import type { Client } from '@connectrpc/connect';
|
||||||
import { ConnectError, type Client } from "@connectrpc/connect";
|
import type { Action } from 'svelte/action';
|
||||||
import type { Action } from "svelte/action";
|
import { create } from '@bufbuild/protobuf';
|
||||||
|
import { ValidationError } from '@bufbuild/protovalidate';
|
||||||
|
import { ConnectError } from '@connectrpc/connect';
|
||||||
|
import { Validator } from '../transport';
|
||||||
|
|
||||||
type Options<Input extends DescMessage, Output extends DescMessage> = {
|
type Options<Input extends DescMessage, Output extends DescMessage> = {
|
||||||
init?: MessageInitShape<Input>,
|
init?: MessageInitShape<Input>;
|
||||||
start?: boolean,
|
start?: boolean;
|
||||||
reset?: boolean,
|
reset?: boolean;
|
||||||
onSubmit?: (formData: FormData, input: MessageShape<Input>) => Promise<MessageShape<Input>>,
|
onSubmit?: (formData: FormData, input: MessageShape<Input>) => Promise<MessageShape<Input>>;
|
||||||
onResult?: (result: MessageShape<Output>) => void,
|
onResult?: (result: MessageShape<Output>) => void;
|
||||||
onError?: (err: Violation[] | ConnectError) => void
|
onError?: (err: Violation[] | ConnectError) => void;
|
||||||
}
|
|
||||||
|
|
||||||
type Violations<Field> = {
|
|
||||||
[field in keyof Field]?: Violation[];
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export function coolForm<
|
type Violations<Field> = {
|
||||||
Service extends DescService,
|
[field in keyof Field]?: Violation[];
|
||||||
Method extends Service['methods'][number]
|
};
|
||||||
>(
|
|
||||||
client: Client<Service>,
|
export function coolForm<Service extends DescService, Method extends Service['methods'][number]>(
|
||||||
method: Method,
|
client: Client<Service>,
|
||||||
options?: Options<Method['input'], Method['output']>
|
method: Method,
|
||||||
|
options?: Options<Method['input'], Method['output']>
|
||||||
) {
|
) {
|
||||||
const input = $state(create(method.input as Method['input'], options?.init));
|
const input = $state(create(method.input as Method['input'], options?.init));
|
||||||
const output = $state(create(method.output as Method['output']));
|
const output = $state(create(method.output as Method['output']));
|
||||||
const errors: Violations<Method['input']['field']> & {
|
const errors: Violations<Method['input']['field']> & { form?: ConnectError } = $state({});
|
||||||
form?: ConnectError
|
let loading = $state(false);
|
||||||
} = $state({});
|
|
||||||
let loading = $state(false);
|
|
||||||
|
|
||||||
const validate = () => {
|
const validate = () => {
|
||||||
// Delete existing errors
|
// Delete existing errors
|
||||||
for (const key in errors) {
|
for (const key in errors) {
|
||||||
delete errors[key];
|
delete errors[key];
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Validator.validate(method['input'], input);
|
Validator.validate(method['input'], input);
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
if (!(e instanceof ValidationError)) {
|
if (!(e instanceof ValidationError)) {
|
||||||
throw e;
|
throw e;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Map violation errors to errors rune
|
// Map violation errors to errors rune
|
||||||
for (const violation of e.violations) {
|
for (const violation of e.violations) {
|
||||||
for (const field of violation.field) {
|
for (const field of violation.field) {
|
||||||
if (!("localName" in field)) {
|
if (!('localName' in field)) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Create localName property if it doesn't exist
|
// Create localName property if it doesn't exist
|
||||||
if (!errors[field.localName]) {
|
if (!errors[field.localName]) {
|
||||||
Object.assign(errors, {
|
Object.assign(errors, {
|
||||||
[field.localName]: [violation]
|
[field.localName]: [violation]
|
||||||
})
|
});
|
||||||
} else {
|
} else {
|
||||||
errors[field.localName]?.push(violation);
|
errors[field.localName]?.push(violation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return e.violations;
|
return e.violations;
|
||||||
}
|
}
|
||||||
|
|
||||||
return [];
|
return [];
|
||||||
};
|
};
|
||||||
|
|
||||||
// When a request is successful
|
// When a request is successful
|
||||||
const success = (response: MessageShape<Method['output']>) => {
|
const success = (response: MessageShape<Method['output']>) => {
|
||||||
loading = false;
|
loading = false;
|
||||||
|
|
||||||
// Send the response up
|
// Send the response up
|
||||||
options?.onResult?.(response);
|
options?.onResult?.(response);
|
||||||
|
|
||||||
// Set the response
|
// Set the response
|
||||||
Object.assign(output, response);
|
Object.assign(output, response);
|
||||||
|
|
||||||
// If we want to reset the input
|
// If we want to reset the input
|
||||||
if (options && (options.reset == undefined || options.reset)) {
|
if (options && (options.reset == undefined || options.reset)) {
|
||||||
const cleared = create(method.input as Method['input'], options?.init)
|
const cleared = create(method.input as Method['input'], options?.init);
|
||||||
Object.assign(input, cleared);
|
Object.assign(input, cleared);
|
||||||
}
|
}
|
||||||
}
|
};
|
||||||
|
|
||||||
// When a request fails
|
// When a request fails
|
||||||
const fail = (err: Violation[] | ConnectError | any) => {
|
const fail = (err: Violation[] | ConnectError | Error) => {
|
||||||
loading = false;
|
loading = false;
|
||||||
|
|
||||||
// It's a Violation[]
|
// It's a Violation[]
|
||||||
if (Array.isArray(err)) {
|
if (Array.isArray(err)) {
|
||||||
// Send the error up
|
// Send the error up
|
||||||
options?.onError?.(err);
|
options?.onError?.(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// It's a ConnectError
|
// It's a ConnectError
|
||||||
if (err instanceof ConnectError) {
|
if (err instanceof ConnectError) {
|
||||||
// Assign it to the form
|
// Assign it to the form
|
||||||
errors.form = err;
|
errors.form = err;
|
||||||
|
|
||||||
// Send the error up
|
// Send the error up
|
||||||
options?.onError?.(err);
|
options?.onError?.(err);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
throw err;
|
throw err;
|
||||||
}
|
};
|
||||||
|
|
||||||
const submit = () => {
|
const submit = () => {
|
||||||
loading = true;
|
loading = true;
|
||||||
|
|
||||||
// Validate
|
// Validate
|
||||||
const validationErrors = validate();
|
const validationErrors = validate();
|
||||||
if (validationErrors.length > 0) {
|
if (validationErrors.length > 0) {
|
||||||
fail(validationErrors);
|
fail(validationErrors);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send response
|
// Send response
|
||||||
if (method.methodKind == "unary") {
|
if (method.methodKind == 'unary') {
|
||||||
// @ts-ignore I can't figure out how to make this typescript compliant
|
// @ts-expect-error I can't figure out how to make this typescript compliant
|
||||||
const response = client[method.localName]($state.snapshot(input)) as Promise<MessageShape<Method['output']>>
|
const response = client[method.localName]($state.snapshot(input)) as Promise<
|
||||||
|
MessageShape<Method['output']>
|
||||||
|
>;
|
||||||
|
|
||||||
response
|
response
|
||||||
.then((resp) => {
|
.then((resp) => {
|
||||||
success(resp);
|
success(resp);
|
||||||
}).catch(err => {
|
})
|
||||||
fail(err);
|
.catch((err) => {
|
||||||
});
|
fail(err);
|
||||||
}
|
});
|
||||||
}
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// A nice action to give to forms to run submit() on submit
|
// A nice action to give to forms to run submit() on submit
|
||||||
const impair: Action<HTMLFormElement> = (form) => {
|
const impair: Action<HTMLFormElement> = (form) => {
|
||||||
$effect(() => {
|
$effect(() => {
|
||||||
form.onsubmit = (event) => {
|
form.onsubmit = (event) => {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
||||||
if (options?.onSubmit) {
|
if (options?.onSubmit) {
|
||||||
const formData = new FormData(form);
|
const formData = new FormData(form);
|
||||||
options.onSubmit(formData, input).then((i) => {
|
options.onSubmit(formData, input).then((i) => {
|
||||||
Object.assign(input, i);
|
Object.assign(input, i);
|
||||||
submit();
|
submit();
|
||||||
});
|
});
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
submit();
|
submit();
|
||||||
}
|
};
|
||||||
|
|
||||||
return () => {
|
return () => {
|
||||||
form.onsubmit = () => { };
|
form.onsubmit = () => {};
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
if (options?.start) {
|
if (options?.start) {
|
||||||
submit();
|
submit();
|
||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
input,
|
input,
|
||||||
output,
|
output,
|
||||||
errors,
|
errors,
|
||||||
loading: () => loading,
|
loading: () => loading,
|
||||||
submit,
|
submit,
|
||||||
validate,
|
validate,
|
||||||
impair
|
impair
|
||||||
}
|
};
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,4 @@
|
|||||||
import { coolForm } from "./coolforms.svelte";
|
import { newState } from './conststate.svelte';
|
||||||
import { newState } from "./conststate.svelte";
|
import { coolForm } from './coolforms.svelte';
|
||||||
|
|
||||||
export {
|
export { coolForm, newState };
|
||||||
coolForm,
|
|
||||||
newState
|
|
||||||
};
|
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
|
import type { Interceptor } from '@connectrpc/connect';
|
||||||
|
import { createValidator } from '@bufbuild/protovalidate';
|
||||||
|
import { Code, ConnectError, createClient } from '@connectrpc/connect';
|
||||||
import { createConnectTransport } from '@connectrpc/connect-web';
|
import { createConnectTransport } from '@connectrpc/connect-web';
|
||||||
import { createValidator } from "@bufbuild/protovalidate";
|
|
||||||
import { Code, ConnectError, createClient, type Interceptor } from '@connectrpc/connect';
|
|
||||||
import { AuthService } from '$lib/connect/user/v1/auth_pb';
|
|
||||||
import { UserService } from '$lib/connect/user/v1/user_pb';
|
|
||||||
import { ItemService } from '$lib/connect/item/v1/item_pb';
|
|
||||||
import { goto } from '$app/navigation';
|
import { goto } from '$app/navigation';
|
||||||
import { page } from '$app/state';
|
import { page } from '$app/state';
|
||||||
|
import { ItemService } from '$lib/connect/item/v1/item_pb';
|
||||||
|
import { AuthService } from '$lib/connect/user/v1/auth_pb';
|
||||||
|
import { UserService } from '$lib/connect/user/v1/user_pb';
|
||||||
|
|
||||||
const redirector: Interceptor = (next) => async (req) => {
|
const redirector: Interceptor = (next) => async (req) => {
|
||||||
try {
|
try {
|
||||||
@ -15,7 +16,10 @@ const redirector: Interceptor = (next) => async (req) => {
|
|||||||
if (error.code === Code.Unauthenticated) {
|
if (error.code === Code.Unauthenticated) {
|
||||||
const redirectURL = new URL(page.url);
|
const redirectURL = new URL(page.url);
|
||||||
redirectURL.pathname = '/auth';
|
redirectURL.pathname = '/auth';
|
||||||
redirectURL.searchParams.append('redir', encodeURIComponent(page.url.pathname + page.url.search));
|
redirectURL.searchParams.append(
|
||||||
|
'redir',
|
||||||
|
encodeURIComponent(page.url.pathname + page.url.search)
|
||||||
|
);
|
||||||
|
|
||||||
await goto(redirectURL);
|
await goto(redirectURL);
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Avatar as AvatarPrimitive } from 'bits-ui';
|
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Avatar as AvatarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,7 +13,7 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="avatar-fallback"
|
data-slot="avatar-fallback"
|
||||||
class={cn(
|
class={cn(
|
||||||
'bg-surface outline-surface-2 flex size-full select-none items-center justify-center rounded-full text-sm transition-all',
|
'bg-surface flex size-full items-center justify-center rounded-full text-sm transition-all select-none',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Avatar as AvatarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Avatar as AvatarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<AvatarPrimitive.Image
|
<AvatarPrimitive.Image
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="avatar-image"
|
data-slot="avatar-image"
|
||||||
class={cn("aspect-square size-full", className)}
|
class={cn('aspect-square size-full', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Avatar as AvatarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Avatar as AvatarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,10 @@
|
|||||||
<AvatarPrimitive.Root
|
<AvatarPrimitive.Root
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="avatar"
|
data-slot="avatar"
|
||||||
class={cn("relative outline outline-offset-2 outline-surface-1 flex size-9 shrink-0 overflow-hidden rounded-full", className)}
|
class={cn(
|
||||||
|
'outline-surface-1 relative flex size-9 shrink-0 overflow-hidden rounded-full shadow-xs outline outline-offset-2',
|
||||||
|
|
||||||
|
className
|
||||||
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
import Root from "./avatar.svelte";
|
import Fallback from './avatar-fallback.svelte';
|
||||||
import Image from "./avatar-image.svelte";
|
import Image from './avatar-image.svelte';
|
||||||
import Fallback from "./avatar-fallback.svelte";
|
import Root from './avatar.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
@ -9,5 +9,5 @@ export {
|
|||||||
//
|
//
|
||||||
Root as Avatar,
|
Root as Avatar,
|
||||||
Image as AvatarImage,
|
Image as AvatarImage,
|
||||||
Fallback as AvatarFallback,
|
Fallback as AvatarFallback
|
||||||
};
|
};
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<script lang="ts" module>
|
<script lang="ts" module>
|
||||||
import type { WithElementRef } from 'bits-ui';
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
import type { HTMLAnchorAttributes, HTMLButtonAttributes } from 'svelte/elements';
|
||||||
import { type VariantProps, tv } from 'tailwind-variants';
|
import type { VariantProps } from 'tailwind-variants';
|
||||||
import { cn } from '$lib/utils';
|
|
||||||
import { LoaderCircle } from '@lucide/svelte';
|
import { LoaderCircle } from '@lucide/svelte';
|
||||||
|
import { cn } from '$lib/utils';
|
||||||
|
import { tv } from 'tailwind-variants';
|
||||||
|
|
||||||
export const buttonVariants = tv({
|
export const buttonVariants = tv({
|
||||||
base: cn(
|
base: cn(
|
||||||
'shadow-xs inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all',
|
'inline-flex shrink-0 cursor-pointer items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
@ -16,15 +17,15 @@
|
|||||||
'disabled:pointer-events-none disabled:opacity-50',
|
'disabled:pointer-events-none disabled:opacity-50',
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
"[&_svg:not([class*='size-'])]:size-5 [&_svg]:pointer-events-none [&_svg]:shrink-0"
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5"
|
||||||
),
|
),
|
||||||
variants: {
|
variants: {
|
||||||
variant: {
|
variant: {
|
||||||
default: 'text-crust bg-accent hover:bg-accent/90 shadow-xs',
|
default: 'text-crust bg-accent hover:bg-accent/90 shadow-xs',
|
||||||
red: 'text-crust bg-red hover:bg-red/90 shadow-xs',
|
red: 'text-crust bg-red hover:bg-red/90 shadow-xs',
|
||||||
outline: 'text-text border-surface-1 hover:bg-surface shadow-xs border bg-transparent',
|
outline: 'text-text border-surface-1 hover:bg-surface border bg-transparent shadow-xs',
|
||||||
input: 'text-text border-surface-1 hover:border-overlay shadow-xs border bg-transparent',
|
input: 'text-text border-surface-1 hover:border-overlay border bg-transparent shadow-xs',
|
||||||
ghost: 'text-text hover:bg-surface shadow-xs'
|
ghost: 'text-text hover:bg-surface'
|
||||||
},
|
},
|
||||||
size: {
|
size: {
|
||||||
default: 'h-9 px-4 py-2 has-[>svg]:px-3',
|
default: 'h-9 px-4 py-2 has-[>svg]:px-3',
|
||||||
@ -47,7 +48,6 @@
|
|||||||
variant?: ButtonVariant;
|
variant?: ButtonVariant;
|
||||||
size?: ButtonSize;
|
size?: ButtonSize;
|
||||||
loading?: boolean;
|
loading?: boolean;
|
||||||
scan?: boolean;
|
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@ -60,7 +60,6 @@
|
|||||||
href = undefined,
|
href = undefined,
|
||||||
type = 'button',
|
type = 'button',
|
||||||
loading,
|
loading,
|
||||||
scan,
|
|
||||||
children,
|
children,
|
||||||
...restProps
|
...restProps
|
||||||
}: ButtonProps = $props();
|
}: ButtonProps = $props();
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
import Root, {
|
import type { ButtonProps, ButtonSize, ButtonVariant } from './button.svelte';
|
||||||
type ButtonProps,
|
import Root, { buttonVariants } from './button.svelte';
|
||||||
type ButtonSize,
|
|
||||||
type ButtonVariant,
|
|
||||||
buttonVariants,
|
|
||||||
} from "./button.svelte";
|
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
@ -13,5 +9,5 @@ export {
|
|||||||
buttonVariants,
|
buttonVariants,
|
||||||
type ButtonProps,
|
type ButtonProps,
|
||||||
type ButtonSize,
|
type ButtonSize,
|
||||||
type ButtonVariant,
|
type ButtonVariant
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from '$lib/utils';
|
|
||||||
import type { WithElementRef } from 'bits-ui';
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from 'svelte/elements';
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
|
import { cn } from '$lib/utils';
|
||||||
|
|
||||||
type Props = WithElementRef<HTMLAttributes<HTMLDivElement>>;
|
type Props = WithElementRef<HTMLAttributes<HTMLDivElement>>;
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Root from "./card.svelte";
|
import Root from './card.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
//
|
//
|
||||||
Root as Card,
|
Root as Card
|
||||||
};
|
};
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import CalendarIcon from '@lucide/svelte/icons/calendar';
|
import type { DateValue } from '@internationalized/date';
|
||||||
import type { DateRange } from 'bits-ui';
|
import type { DateRange } from 'bits-ui';
|
||||||
import {
|
|
||||||
CalendarDate,
|
|
||||||
DateFormatter,
|
|
||||||
type DateValue,
|
|
||||||
getLocalTimeZone
|
|
||||||
} from '@internationalized/date';
|
|
||||||
import { cn } from '$lib/utils.js';
|
|
||||||
import { buttonVariants } from '$lib/ui/button';
|
import { buttonVariants } from '$lib/ui/button';
|
||||||
import { RangeCalendar } from '$lib/ui/range-calendar';
|
|
||||||
import * as Popover from '$lib/ui/popover';
|
import * as Popover from '$lib/ui/popover';
|
||||||
|
import { RangeCalendar } from '$lib/ui/range-calendar';
|
||||||
|
import { CalendarDate, DateFormatter, getLocalTimeZone } from '@internationalized/date';
|
||||||
|
import CalendarIcon from '@lucide/svelte/icons/calendar';
|
||||||
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
className,
|
className,
|
||||||
@ -41,7 +37,11 @@
|
|||||||
<div class={cn('grid gap-2', className)}>
|
<div class={cn('grid gap-2', className)}>
|
||||||
<Popover.Root>
|
<Popover.Root>
|
||||||
<Popover.Trigger
|
<Popover.Trigger
|
||||||
class={cn(buttonVariants({ variant: 'input' }), 'bg-based', !value && 'text-subtext')}
|
class={cn(
|
||||||
|
buttonVariants({ variant: 'input' }),
|
||||||
|
'bg-based text-md md:text-sm',
|
||||||
|
!value && 'text-subtext'
|
||||||
|
)}
|
||||||
>
|
>
|
||||||
<CalendarIcon class="mr-2 size-4" />
|
<CalendarIcon class="mr-2 size-4" />
|
||||||
{#if value && value.start}
|
{#if value && value.start}
|
||||||
@ -58,7 +58,7 @@
|
|||||||
Pick a date range
|
Pick a date range
|
||||||
{/if}
|
{/if}
|
||||||
</Popover.Trigger>
|
</Popover.Trigger>
|
||||||
<Popover.Content class="w-auto p-0 bg-based" align="start">
|
<Popover.Content class="bg-based w-auto p-0" align="start">
|
||||||
<RangeCalendar
|
<RangeCalendar
|
||||||
bind:value
|
bind:value
|
||||||
onStartValueChange={(v) => {
|
onStartValueChange={(v) => {
|
||||||
|
@ -1,6 +1,3 @@
|
|||||||
import Root from "./daterangepicker.svelte";
|
import Root from './daterangepicker.svelte';
|
||||||
|
|
||||||
export {
|
export { Root, Root as DateRangePicker };
|
||||||
Root,
|
|
||||||
Root as DateRangePicker
|
|
||||||
};
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let { ref = $bindable(null), ...restProps }: DialogPrimitive.CloseProps = $props();
|
let { ref = $bindable(null), ...restProps }: DialogPrimitive.CloseProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive, type WithoutChildrenOrChild } from 'bits-ui';
|
import type { WithoutChildrenOrChild } from 'bits-ui';
|
||||||
import X from '@lucide/svelte/icons/x';
|
|
||||||
import type { Snippet } from 'svelte';
|
import type { Snippet } from 'svelte';
|
||||||
import * as Dialog from './index.js';
|
import X from '@lucide/svelte/icons/x';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
import * as Dialog from './index.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -34,7 +35,7 @@
|
|||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
<DialogPrimitive.Close
|
<DialogPrimitive.Close
|
||||||
class={cn(
|
class={cn(
|
||||||
'text-text absolute top-4 right-4 cursor-pointer p-1 rounded hover:bg-crust transition-all disabled:pointer-events-none',
|
'text-text hover:bg-crust absolute top-4 right-4 cursor-pointer rounded p-1 transition-all disabled:pointer-events-none',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<DialogPrimitive.Description
|
<DialogPrimitive.Description
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dialog-description"
|
data-slot="dialog-description"
|
||||||
class={cn("text-muted-foreground text-sm", className)}
|
class={cn('text-muted-foreground text-sm', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="dialog-footer"
|
data-slot="dialog-footer"
|
||||||
class={cn("flex flex-col-reverse gap-2 sm:flex-row sm:justify-end", className)}
|
class={cn('flex flex-col-reverse gap-2 sm:flex-row sm:justify-end', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="dialog-header"
|
data-slot="dialog-header"
|
||||||
class={cn("flex flex-col gap-2 text-center sm:text-left", className)}
|
class={cn('flex flex-col gap-2 text-center sm:text-left', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,7 +13,7 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dialog-overlay"
|
data-slot="dialog-overlay"
|
||||||
class={cn(
|
class={cn(
|
||||||
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<DialogPrimitive.Title
|
<DialogPrimitive.Title
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dialog-title"
|
data-slot="dialog-title"
|
||||||
class={cn("text-lg font-semibold leading-none", className)}
|
class={cn('text-lg leading-none font-semibold', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let { ref = $bindable(null), ...restProps }: DialogPrimitive.TriggerProps = $props();
|
let { ref = $bindable(null), ...restProps }: DialogPrimitive.TriggerProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,14 +1,13 @@
|
|||||||
import { Dialog as DialogPrimitive } from "bits-ui";
|
import { Dialog as DialogPrimitive } from 'bits-ui';
|
||||||
|
import Close from './dialog-close.svelte';
|
||||||
|
import Content from './dialog-content.svelte';
|
||||||
|
import Description from './dialog-description.svelte';
|
||||||
|
import Footer from './dialog-footer.svelte';
|
||||||
|
import Header from './dialog-header.svelte';
|
||||||
|
import Overlay from './dialog-overlay.svelte';
|
||||||
|
import Title from './dialog-title.svelte';
|
||||||
|
import Trigger from './dialog-trigger.svelte';
|
||||||
import Root from './dialog.svelte';
|
import Root from './dialog.svelte';
|
||||||
import Title from "./dialog-title.svelte";
|
|
||||||
import Footer from "./dialog-footer.svelte";
|
|
||||||
import Header from "./dialog-header.svelte";
|
|
||||||
import Overlay from "./dialog-overlay.svelte";
|
|
||||||
import Content from "./dialog-content.svelte";
|
|
||||||
import Description from "./dialog-description.svelte";
|
|
||||||
import Trigger from "./dialog-trigger.svelte";
|
|
||||||
import Close from "./dialog-close.svelte";
|
|
||||||
|
|
||||||
const Portal = DialogPrimitive.Portal;
|
const Portal = DialogPrimitive.Portal;
|
||||||
|
|
||||||
@ -33,5 +32,5 @@ export {
|
|||||||
Overlay as DialogOverlay,
|
Overlay as DialogOverlay,
|
||||||
Content as DialogContent,
|
Content as DialogContent,
|
||||||
Description as DialogDescription,
|
Description as DialogDescription,
|
||||||
Close as DialogClose,
|
Close as DialogClose
|
||||||
};
|
};
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive, type WithoutChildrenOrChild } from "bits-ui";
|
import type { WithoutChildrenOrChild } from 'bits-ui';
|
||||||
import Check from "@lucide/svelte/icons/check";
|
import type { Snippet } from 'svelte';
|
||||||
import Minus from "@lucide/svelte/icons/minus";
|
import Check from '@lucide/svelte/icons/check';
|
||||||
import { cn } from "$lib/utils.js";
|
import Minus from '@lucide/svelte/icons/minus';
|
||||||
import type { Snippet } from "svelte";
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -23,13 +24,13 @@
|
|||||||
bind:indeterminate
|
bind:indeterminate
|
||||||
data-slot="dropdown-menu-checkbox-item"
|
data-slot="dropdown-menu-checkbox-item"
|
||||||
class={cn(
|
class={cn(
|
||||||
"focus:bg-surface outline-hidden relative flex cursor-pointer select-none items-center gap-2 rounded-sm py-2 pl-8 pr-2 text-sm",
|
'focus:bg-surface relative flex cursor-pointer items-center gap-2 rounded-sm py-2 pr-2 pl-8 text-sm outline-hidden select-none',
|
||||||
|
|
||||||
// Disabled
|
// Disabled
|
||||||
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
"[&_svg:not([class*='size-'])]:size-4 [&_svg]:pointer-events-none [&_svg]:shrink-0",
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
@ -39,7 +40,7 @@
|
|||||||
{#if indeterminate}
|
{#if indeterminate}
|
||||||
<Minus class="size-4" />
|
<Minus class="size-4" />
|
||||||
{:else}
|
{:else}
|
||||||
<Check class={cn("size-4", !checked && "text-transparent")} />
|
<Check class={cn('size-4', !checked && 'text-transparent')} />
|
||||||
{/if}
|
{/if}
|
||||||
</span>
|
</span>
|
||||||
{@render childrenProp?.()}
|
{@render childrenProp?.()}
|
||||||
|
@ -12,6 +12,6 @@
|
|||||||
<DropdownMenuPrimitive.Group
|
<DropdownMenuPrimitive.Group
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dropdown-menu-group"
|
data-slot="dropdown-menu-group"
|
||||||
class={cn('border-b border-surface first:pt-0 last:pb-0 last:border-none', className)}
|
class={cn('border-surface border-b first:pt-0 last:border-none last:pb-0', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from "$lib/utils.js";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { type WithElementRef } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import { type WithElementRef } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -17,7 +17,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="dropdown-menu-label"
|
data-slot="dropdown-menu-label"
|
||||||
class={cn("px-2 py-1.5 text-sm font-semibold", inset && "pl-8", className)}
|
class={cn('px-2 py-1.5 text-sm font-semibold', inset && 'pl-8', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive, type WithoutChild } from 'bits-ui';
|
import type { WithoutChild } from 'bits-ui';
|
||||||
import Circle from '@lucide/svelte/icons/circle';
|
import Circle from '@lucide/svelte/icons/circle';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -15,10 +16,10 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dropdown-menu-radio-item"
|
data-slot="dropdown-menu-radio-item"
|
||||||
class={cn(
|
class={cn(
|
||||||
"focus:bg-surface text-text relative flex cursor-pointer items-center gap-2 py-2 pr-2 pl-8 text-sm select-none",
|
'focus:bg-surface text-text relative flex cursor-pointer items-center gap-2 py-2 pr-2 pl-8 text-sm select-none',
|
||||||
|
|
||||||
// Disabled
|
// Disabled
|
||||||
"data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
|
'data-[disabled]:pointer-events-none data-[disabled]:opacity-50',
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<DropdownMenuPrimitive.Separator
|
<DropdownMenuPrimitive.Separator
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dropdown-menu-separator"
|
data-slot="dropdown-menu-separator"
|
||||||
class={cn("bg-surface-1 -mx-1 my-1 h-px", className)}
|
class={cn('bg-surface-1 -mx-1 my-1 h-px', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { type WithElementRef } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { type WithElementRef } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<span
|
<span
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="dropdown-menu-shortcut"
|
data-slot="dropdown-menu-shortcut"
|
||||||
class={cn("text-text ml-auto text-xs tracking-widest", className)}
|
class={cn('text-text ml-auto text-xs tracking-widest', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,7 +13,7 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dropdown-menu-sub-content"
|
data-slot="dropdown-menu-sub-content"
|
||||||
class={cn(
|
class={cn(
|
||||||
'bg-based text-text origin-(--radix-dropdown-menu-content-transform-origin) z-50 min-w-[8rem] overflow-hidden rounded-md border p-1 shadow-lg',
|
'bg-based text-text z-50 min-w-[8rem] origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',
|
||||||
|
|
||||||
// Animations
|
// Animations
|
||||||
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2',
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
import ChevronRight from '@lucide/svelte/icons/chevron-right';
|
||||||
import ChevronRight from "@lucide/svelte/icons/chevron-right";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -18,8 +18,8 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="dropdown-menu-sub-trigger"
|
data-slot="dropdown-menu-sub-trigger"
|
||||||
class={cn(
|
class={cn(
|
||||||
"focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground outline-hidden flex cursor-default select-none items-center rounded-sm px-2 py-1.5 text-sm",
|
'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-hidden select-none',
|
||||||
inset && "pl-8",
|
inset && 'pl-8',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
data-slot="dropdown-menu-trigger"
|
data-slot="dropdown-menu-trigger"
|
||||||
class={cn(
|
class={cn(
|
||||||
'flex cursor-pointer items-center gap-1 transition-all',
|
'flex cursor-pointer items-center gap-1 transition-all',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
className
|
className
|
||||||
|
@ -1,17 +1,17 @@
|
|||||||
import { DropdownMenu as DropdownMenuPrimitive } from "bits-ui";
|
import { DropdownMenu as DropdownMenuPrimitive } from 'bits-ui';
|
||||||
import CheckboxItem from "./dropdown-menu-checkbox-item.svelte";
|
import CheckboxItem from './dropdown-menu-checkbox-item.svelte';
|
||||||
import Content from "./dropdown-menu-content.svelte";
|
import Content from './dropdown-menu-content.svelte';
|
||||||
import Group from "./dropdown-menu-group.svelte";
|
import Group from './dropdown-menu-group.svelte';
|
||||||
import Item from "./dropdown-menu-item.svelte";
|
import Item from './dropdown-menu-item.svelte';
|
||||||
|
import Label from './dropdown-menu-label.svelte';
|
||||||
import Link from './dropdown-menu-link.svelte';
|
import Link from './dropdown-menu-link.svelte';
|
||||||
import Label from "./dropdown-menu-label.svelte";
|
import RadioGroup from './dropdown-menu-radio-group.svelte';
|
||||||
import RadioGroup from "./dropdown-menu-radio-group.svelte";
|
import RadioItem from './dropdown-menu-radio-item.svelte';
|
||||||
import RadioItem from "./dropdown-menu-radio-item.svelte";
|
import Separator from './dropdown-menu-separator.svelte';
|
||||||
import Separator from "./dropdown-menu-separator.svelte";
|
import Shortcut from './dropdown-menu-shortcut.svelte';
|
||||||
import Shortcut from "./dropdown-menu-shortcut.svelte";
|
import SubContent from './dropdown-menu-sub-content.svelte';
|
||||||
import Trigger from "./dropdown-menu-trigger.svelte";
|
import SubTrigger from './dropdown-menu-sub-trigger.svelte';
|
||||||
import SubContent from "./dropdown-menu-sub-content.svelte";
|
import Trigger from './dropdown-menu-trigger.svelte';
|
||||||
import SubTrigger from "./dropdown-menu-sub-trigger.svelte";
|
|
||||||
|
|
||||||
const Sub = DropdownMenuPrimitive.Sub;
|
const Sub = DropdownMenuPrimitive.Sub;
|
||||||
const Root = DropdownMenuPrimitive.Root;
|
const Root = DropdownMenuPrimitive.Root;
|
||||||
@ -46,5 +46,5 @@ export {
|
|||||||
Sub,
|
Sub,
|
||||||
SubContent,
|
SubContent,
|
||||||
SubTrigger,
|
SubTrigger,
|
||||||
Trigger,
|
Trigger
|
||||||
};
|
};
|
||||||
|
@ -1,31 +1,31 @@
|
|||||||
import { getContext, hasContext, setContext } from 'svelte';
|
import { getContext, hasContext, setContext } from 'svelte';
|
||||||
|
|
||||||
type Item = {
|
type Item = {
|
||||||
id: string;
|
id: string;
|
||||||
name: string;
|
name: string;
|
||||||
}
|
};
|
||||||
|
|
||||||
const key = 'form';
|
const key = 'form';
|
||||||
export function setFormContext(id: string, name: string) {
|
export function setFormContext(id: string, name: string) {
|
||||||
const item = getFormContext();
|
const item = getFormContext();
|
||||||
if (!item) {
|
if (!item) {
|
||||||
const item: Item = $state({
|
const item: Item = $state({
|
||||||
id,
|
id,
|
||||||
name,
|
name
|
||||||
});
|
});
|
||||||
setContext(key, item);
|
setContext(key, item);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
item.id = id;
|
item.id = id;
|
||||||
item.name = name;
|
item.name = name;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getFormContext() {
|
export function getFormContext() {
|
||||||
if (!hasContext(key)) {
|
if (!hasContext(key)) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return getContext(key) as Item;
|
return getContext(key) as Item;
|
||||||
}
|
}
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from '$lib/utils';
|
|
||||||
import { getFormContext } from './context.svelte';
|
|
||||||
import type { WithElementRef, WithoutChildren } from 'bits-ui';
|
|
||||||
import type { HTMLAttributes } from 'svelte/elements';
|
|
||||||
import type { Violation } from '@bufbuild/protovalidate';
|
import type { Violation } from '@bufbuild/protovalidate';
|
||||||
import type { ConnectError } from '@connectrpc/connect';
|
import type { ConnectError } from '@connectrpc/connect';
|
||||||
|
import type { WithElementRef, WithoutChildren } from 'bits-ui';
|
||||||
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
|
import { cn } from '$lib/utils';
|
||||||
|
import { getFormContext } from './context.svelte';
|
||||||
|
|
||||||
type Props = WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> & {
|
type Props = WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> & {
|
||||||
errors?: Violation[] | ConnectError;
|
errors?: Violation[] | ConnectError;
|
||||||
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
<div bind:this={ref} class={cn('text-red text-sm', className)} {...restProps}>
|
<div bind:this={ref} class={cn('text-red text-sm', className)} {...restProps}>
|
||||||
{#if errors && Array.isArray(errors)}
|
{#if errors && Array.isArray(errors)}
|
||||||
{#each errors as error}
|
{#each errors as error (error)}
|
||||||
<label for={item?.id}>{error.message}</label>
|
<label for={item?.id}>{error.message}</label>
|
||||||
{/each}
|
{/each}
|
||||||
{:else if errors}
|
{:else if errors}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from '$lib/utils';
|
|
||||||
import { setFormContext } from './context.svelte';
|
|
||||||
import type { WithElementRef } from 'bits-ui';
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from 'svelte/elements';
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
|
import { cn } from '$lib/utils';
|
||||||
|
import { setFormContext } from './context.svelte';
|
||||||
|
|
||||||
type Props = WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
type Props = WithElementRef<HTMLAttributes<HTMLDivElement>> & {
|
||||||
name?: string;
|
name?: string;
|
||||||
@ -16,6 +16,6 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div bind:this={ref} class={cn('flex flex-col gap-1')} {...restProps}>
|
<div bind:this={ref} class={cn('flex flex-col gap-1', className)} {...restProps}>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,9 +1,5 @@
|
|||||||
import Field from './field.svelte';
|
|
||||||
import Errors from './errors.svelte';
|
import Errors from './errors.svelte';
|
||||||
|
import Field from './field.svelte';
|
||||||
import Label from './label.svelte';
|
import Label from './label.svelte';
|
||||||
|
|
||||||
export {
|
export { Field, Errors, Label };
|
||||||
Field,
|
|
||||||
Errors,
|
|
||||||
Label
|
|
||||||
};
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from '$lib/utils';
|
|
||||||
import { getFormContext } from './context.svelte';
|
|
||||||
import type { WithElementRef } from 'bits-ui';
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from 'svelte/elements';
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
|
import { cn } from '$lib/utils';
|
||||||
|
import { getFormContext } from './context.svelte';
|
||||||
|
|
||||||
type Props = WithElementRef<HTMLAttributes<HTMLLabelElement>>;
|
type Props = WithElementRef<HTMLAttributes<HTMLLabelElement>>;
|
||||||
let { ref = $bindable(null), class: className, children, ...restProps }: Props = $props();
|
let { ref = $bindable(null), class: className, children, ...restProps }: Props = $props();
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Root from "./input.svelte";
|
import Root from './input.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
//
|
//
|
||||||
Root as Input,
|
Root as Input
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLInputAttributes, HTMLInputTypeAttribute } from 'svelte/elements';
|
|
||||||
import type { WithElementRef } from 'bits-ui';
|
import type { WithElementRef } from 'bits-ui';
|
||||||
|
import type { HTMLInputAttributes, HTMLInputTypeAttribute } from 'svelte/elements';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
import { getFormContext } from '../form/context.svelte';
|
import { getFormContext } from '../form/context.svelte';
|
||||||
|
|
||||||
@ -8,9 +8,7 @@
|
|||||||
|
|
||||||
type Props = WithElementRef<
|
type Props = WithElementRef<
|
||||||
Omit<HTMLInputAttributes, 'type'> &
|
Omit<HTMLInputAttributes, 'type'> &
|
||||||
({ type: 'file'; files?: FileList } | { type?: InputType; files?: undefined }) & {
|
({ type: 'file'; files?: FileList } | { type?: InputType; files?: undefined })
|
||||||
scan?: boolean;
|
|
||||||
}
|
|
||||||
>;
|
>;
|
||||||
|
|
||||||
let {
|
let {
|
||||||
@ -19,7 +17,6 @@
|
|||||||
type,
|
type,
|
||||||
files = $bindable(),
|
files = $bindable(),
|
||||||
class: className,
|
class: className,
|
||||||
scan,
|
|
||||||
id,
|
id,
|
||||||
name,
|
name,
|
||||||
...restProps
|
...restProps
|
||||||
@ -40,7 +37,7 @@
|
|||||||
{name}
|
{name}
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
class={cn(
|
class={cn(
|
||||||
'border-surface-1 file:bg-surface hover:border-overlay placeholder:text-subtext text-text shadow-xs flex h-9 w-full min-w-0 cursor-pointer rounded-md border text-sm font-medium transition-all file:mr-2 file:px-3 file:py-2 md:text-sm',
|
'border-surface-1 file:bg-surface hover:border-overlay placeholder:text-subtext text-text flex h-9 w-full min-w-0 cursor-pointer rounded-md border text-sm font-medium shadow-xs transition-all file:mr-2 file:px-3 file:py-2 md:text-sm',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
@ -61,7 +58,7 @@
|
|||||||
{name}
|
{name}
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
class={cn(
|
class={cn(
|
||||||
'border-surface-1 hover:border-overlay placeholder:text-subtext text-text shadow-xs flex h-9 w-full min-w-0 rounded-md border px-3 py-1 transition-all md:text-sm',
|
'border-surface-1 hover:border-overlay placeholder:text-subtext text-text flex h-9 w-full min-w-0 rounded-md border px-3 py-1 shadow-xs transition-all md:text-sm',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Root from "./label.svelte";
|
import Root from './label.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
//
|
//
|
||||||
Root as Label,
|
Root as Label
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Label as LabelPrimitive } from 'bits-ui';
|
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Label as LabelPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,7 +13,7 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="label"
|
data-slot="label"
|
||||||
class={cn(
|
class={cn(
|
||||||
'flex items-center gap-2 text-sm text-text leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
|
'text-text flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
import Pager from './pager.svelte'
|
import Pager from './pager.svelte';
|
||||||
|
|
||||||
export {
|
export { Pager };
|
||||||
Pager
|
|
||||||
}
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
import Root from "./pagination.svelte";
|
import Content from './pagination-content.svelte';
|
||||||
import Content from "./pagination-content.svelte";
|
import Ellipsis from './pagination-ellipsis.svelte';
|
||||||
import Item from "./pagination-item.svelte";
|
import Item from './pagination-item.svelte';
|
||||||
import Link from "./pagination-link.svelte";
|
import Link from './pagination-link.svelte';
|
||||||
import PrevButton from "./pagination-prev-button.svelte";
|
import NextButton from './pagination-next-button.svelte';
|
||||||
import NextButton from "./pagination-next-button.svelte";
|
import PrevButton from './pagination-prev-button.svelte';
|
||||||
import Ellipsis from "./pagination-ellipsis.svelte";
|
import Root from './pagination.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
@ -21,5 +21,5 @@ export {
|
|||||||
Link as PaginationLink,
|
Link as PaginationLink,
|
||||||
PrevButton as PaginationPrevButton,
|
PrevButton as PaginationPrevButton,
|
||||||
NextButton as PaginationNextButton,
|
NextButton as PaginationNextButton,
|
||||||
Ellipsis as PaginationEllipsis,
|
Ellipsis as PaginationEllipsis
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<ul
|
<ul
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="pagination-content"
|
data-slot="pagination-content"
|
||||||
class={cn("flex flex-row items-center gap-1", className)}
|
class={cn('flex flex-row items-center gap-1', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import Ellipsis from "@lucide/svelte/icons/ellipsis";
|
import type { WithElementRef, WithoutChildren } from 'bits-ui';
|
||||||
import type { WithElementRef, WithoutChildren } from "bits-ui";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import Ellipsis from '@lucide/svelte/icons/ellipsis';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -15,7 +15,7 @@
|
|||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
aria-hidden="true"
|
aria-hidden="true"
|
||||||
data-slot="pagination-ellipsis"
|
data-slot="pagination-ellipsis"
|
||||||
class={cn("flex size-9 items-center justify-center text-text", className)}
|
class={cn('text-text flex size-9 items-center justify-center', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
<Ellipsis class="size-4" />
|
<Ellipsis class="size-4" />
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLLiAttributes } from "svelte/elements";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { HTMLLiAttributes } from 'svelte/elements';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
|
@ -1,12 +1,13 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Pagination as PaginationPrimitive } from "bits-ui";
|
import type { Props } from '$lib/ui/button';
|
||||||
import { cn } from "$lib/utils.js";
|
import { buttonVariants } from '$lib/ui/button';
|
||||||
import { type Props, buttonVariants } from "$lib/ui/button";
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
class: className,
|
class: className,
|
||||||
size = "icon",
|
size = 'icon',
|
||||||
isActive = false,
|
isActive = false,
|
||||||
page,
|
page,
|
||||||
children,
|
children,
|
||||||
@ -24,16 +25,16 @@
|
|||||||
<PaginationPrimitive.Page
|
<PaginationPrimitive.Page
|
||||||
bind:ref
|
bind:ref
|
||||||
{page}
|
{page}
|
||||||
aria-current={isActive ? "page" : undefined}
|
aria-current={isActive ? 'page' : undefined}
|
||||||
data-slot="pagination-link"
|
data-slot="pagination-link"
|
||||||
data-active={isActive}
|
data-active={isActive}
|
||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({
|
buttonVariants({
|
||||||
variant: "ghost",
|
variant: 'ghost',
|
||||||
size,
|
size
|
||||||
}),
|
}),
|
||||||
'text-text',
|
'text-text',
|
||||||
isActive && 'bg-surface-1',
|
isActive && 'bg-surface',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
children={children || Fallback}
|
children={children || Fallback}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Pagination as PaginationPrimitive } from "bits-ui";
|
import { buttonVariants } from '$lib/ui/button/index.js';
|
||||||
import ChevronRight from "@lucide/svelte/icons/chevron-right";
|
import ChevronRight from '@lucide/svelte/icons/chevron-right';
|
||||||
import { buttonVariants } from "$lib/ui/button/index.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -23,9 +23,9 @@
|
|||||||
aria-label="Go to next page"
|
aria-label="Go to next page"
|
||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({
|
buttonVariants({
|
||||||
size: "default",
|
size: 'default',
|
||||||
variant: "ghost",
|
variant: 'ghost',
|
||||||
class: "gap-1 px-2.5 sm:pr-2.5",
|
class: 'gap-1 px-2.5 sm:pr-2.5'
|
||||||
}),
|
}),
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Pagination as PaginationPrimitive } from "bits-ui";
|
import { buttonVariants } from '$lib/ui/button/index.js';
|
||||||
import ChevronLeft from "@lucide/svelte/icons/chevron-left";
|
import ChevronLeft from '@lucide/svelte/icons/chevron-left';
|
||||||
import { buttonVariants } from "$lib/ui/button/index.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -22,9 +22,9 @@
|
|||||||
aria-label="Go to previous page"
|
aria-label="Go to previous page"
|
||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({
|
buttonVariants({
|
||||||
size: "default",
|
size: 'default',
|
||||||
variant: "ghost",
|
variant: 'ghost',
|
||||||
class: "gap-1 px-2.5 sm:pl-2.5",
|
class: 'gap-1 px-2.5 sm:pl-2.5'
|
||||||
}),
|
}),
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
|
@ -1,8 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
|
||||||
|
|
||||||
import { cn } from '$lib/utils.js';
|
|
||||||
import { pushState } from '$app/navigation';
|
import { pushState } from '$app/navigation';
|
||||||
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Pagination as PaginationPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -18,7 +17,7 @@
|
|||||||
|
|
||||||
<svelte:window
|
<svelte:window
|
||||||
onpopstate={(state) => {
|
onpopstate={(state) => {
|
||||||
const sks = state.state['sveltekit:states'] as {} | string;
|
const sks = state.state['sveltekit:states'] as object | string;
|
||||||
if (typeof sks === 'string' && sks.includes('#pagination-')) {
|
if (typeof sks === 'string' && sks.includes('#pagination-')) {
|
||||||
page = Number(sks.split('#pagination-')[1]);
|
page = Number(sks.split('#pagination-')[1]);
|
||||||
onPageChange?.(page);
|
onPageChange?.(page);
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
import { Popover as PopoverPrimitive } from "bits-ui";
|
import { Popover as PopoverPrimitive } from 'bits-ui';
|
||||||
import Content from "./popover-content.svelte";
|
import Content from './popover-content.svelte';
|
||||||
import Trigger from "./popover-trigger.svelte";
|
import Trigger from './popover-trigger.svelte';
|
||||||
|
|
||||||
const Root = PopoverPrimitive.Root;
|
const Root = PopoverPrimitive.Root;
|
||||||
const Close = PopoverPrimitive.Close;
|
const Close = PopoverPrimitive.Close;
|
||||||
|
|
||||||
@ -13,5 +14,5 @@ export {
|
|||||||
Root as Popover,
|
Root as Popover,
|
||||||
Content as PopoverContent,
|
Content as PopoverContent,
|
||||||
Trigger as PopoverTrigger,
|
Trigger as PopoverTrigger,
|
||||||
Close as PopoverClose,
|
Close as PopoverClose
|
||||||
};
|
};
|
||||||
|
@ -1,12 +1,12 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { Popover as PopoverPrimitive } from "bits-ui";
|
import { Popover as PopoverPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
class: className,
|
class: className,
|
||||||
sideOffset = 4,
|
sideOffset = 4,
|
||||||
align = "center",
|
align = 'center',
|
||||||
portalProps,
|
portalProps,
|
||||||
...restProps
|
...restProps
|
||||||
}: PopoverPrimitive.ContentProps & {
|
}: PopoverPrimitive.ContentProps & {
|
||||||
@ -21,10 +21,10 @@
|
|||||||
{sideOffset}
|
{sideOffset}
|
||||||
{align}
|
{align}
|
||||||
class={cn(
|
class={cn(
|
||||||
"bg-based text-text outline-hidden z-50 w-72 rounded-md border border-surface-1 p-4 shadow-md",
|
'bg-based text-text border-surface-1 z-50 w-72 rounded-md border p-4 shadow-md outline-hidden',
|
||||||
|
|
||||||
// Animation
|
// Animation
|
||||||
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-(--bits-popover-content-transform-origin)",
|
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-(--bits-popover-content-transform-origin)',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { Popover as PopoverPrimitive } from "bits-ui";
|
import { Popover as PopoverPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<PopoverPrimitive.Trigger
|
<PopoverPrimitive.Trigger
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="popover-trigger"
|
data-slot="popover-trigger"
|
||||||
class={cn("", className)}
|
class={cn('', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
import Root from "./range-calendar.svelte";
|
import Cell from './range-calendar-cell.svelte';
|
||||||
import Cell from "./range-calendar-cell.svelte";
|
import Day from './range-calendar-day.svelte';
|
||||||
import Day from "./range-calendar-day.svelte";
|
import GridRow from './range-calendar-grid-row.svelte';
|
||||||
import Grid from "./range-calendar-grid.svelte";
|
import Grid from './range-calendar-grid.svelte';
|
||||||
import Header from "./range-calendar-header.svelte";
|
import HeadCell from './range-calendar-head-cell.svelte';
|
||||||
import Months from "./range-calendar-months.svelte";
|
import Header from './range-calendar-header.svelte';
|
||||||
import GridRow from "./range-calendar-grid-row.svelte";
|
import Heading from './range-calendar-heading.svelte';
|
||||||
import Heading from "./range-calendar-heading.svelte";
|
import Months from './range-calendar-months.svelte';
|
||||||
import HeadCell from "./range-calendar-head-cell.svelte";
|
import NextButton from './range-calendar-next-button.svelte';
|
||||||
import NextButton from "./range-calendar-next-button.svelte";
|
import PrevButton from './range-calendar-prev-button.svelte';
|
||||||
import PrevButton from "./range-calendar-prev-button.svelte";
|
import Root from './range-calendar.svelte';
|
||||||
|
|
||||||
const GridHead = RangeCalendarPrimitive.GridHead;
|
const GridHead = RangeCalendarPrimitive.GridHead;
|
||||||
const GridBody = RangeCalendarPrimitive.GridBody;
|
const GridBody = RangeCalendarPrimitive.GridBody;
|
||||||
@ -28,5 +28,5 @@ export {
|
|||||||
NextButton,
|
NextButton,
|
||||||
PrevButton,
|
PrevButton,
|
||||||
//
|
//
|
||||||
Root as RangeCalendar,
|
Root as RangeCalendar
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,7 +12,7 @@
|
|||||||
<RangeCalendarPrimitive.Cell
|
<RangeCalendarPrimitive.Cell
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn(
|
class={cn(
|
||||||
"[&:has([data-selected])]:bg-accent [&:has([data-selected][data-outside-month])]:bg-accent/50 relative size-9 p-0 text-center text-sm focus-within:relative focus-within:z-20 first:[&:has([data-selected])]:rounded-l-md last:[&:has([data-selected])]:rounded-r-md [&:has([data-selected][data-selection-end])]:rounded-r-md [&:has([data-selected][data-selection-start])]:rounded-l-md",
|
'[&:has([data-selected])]:bg-accent [&:has([data-selected][data-outside-month])]:bg-accent/50 relative size-9 p-0 text-center text-sm focus-within:relative focus-within:z-20 first:[&:has([data-selected])]:rounded-l-md last:[&:has([data-selected])]:rounded-r-md [&:has([data-selected][data-selection-end])]:rounded-r-md [&:has([data-selected][data-selection-start])]:rounded-l-md',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
|
||||||
import { buttonVariants } from '$lib/ui/button/index.js';
|
import { buttonVariants } from '$lib/ui/button/index.js';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -17,7 +17,7 @@
|
|||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({ variant: 'ghost' }),
|
buttonVariants({ variant: 'ghost' }),
|
||||||
'size-9 p-0 font-normal',
|
'size-9 p-0 font-normal',
|
||||||
'[&[data-today]:not([data-selected])]:bg-blue [&[data-today]:not([data-selected])]:text-crust [&[data-today]:not([data-selected])]:rounded-md',
|
'[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-crust [&[data-today]:not([data-selected])]:rounded-md',
|
||||||
// Selected
|
// Selected
|
||||||
'data-[selected]:bg-surface data-[selected]:hover:bg-surface-1 data-[selected]:rounded-none data-[selected]:opacity-100',
|
'data-[selected]:bg-surface data-[selected]:hover:bg-surface-1 data-[selected]:rounded-none data-[selected]:opacity-100',
|
||||||
// Selection Start
|
// Selection Start
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -9,4 +9,4 @@
|
|||||||
}: RangeCalendarPrimitive.GridRowProps = $props();
|
}: RangeCalendarPrimitive.GridRowProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<RangeCalendarPrimitive.GridRow bind:ref class={cn("flex", className)} {...restProps} />
|
<RangeCalendarPrimitive.GridRow bind:ref class={cn('flex', className)} {...restProps} />
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -11,6 +11,6 @@
|
|||||||
|
|
||||||
<RangeCalendarPrimitive.Grid
|
<RangeCalendarPrimitive.Grid
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn("w-full border-collapse space-y-1", className)}
|
class={cn('w-full border-collapse space-y-1', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -11,6 +11,6 @@
|
|||||||
|
|
||||||
<RangeCalendarPrimitive.HeadCell
|
<RangeCalendarPrimitive.HeadCell
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn("text-muted-foreground w-9 rounded-md text-[0.8rem] font-normal", className)}
|
class={cn('text-muted-foreground w-9 rounded-md text-[0.8rem] font-normal', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -11,6 +11,6 @@
|
|||||||
|
|
||||||
<RangeCalendarPrimitive.Header
|
<RangeCalendarPrimitive.Header
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn("relative flex w-full items-center justify-between pt-1", className)}
|
class={cn('relative flex w-full items-center justify-between pt-1', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -11,6 +11,6 @@
|
|||||||
|
|
||||||
<RangeCalendarPrimitive.Heading
|
<RangeCalendarPrimitive.Heading
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn("text-sm font-medium", className)}
|
class={cn('text-sm font-medium', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
class={cn("mt-4 flex flex-col space-y-4 sm:flex-row sm:space-x-4 sm:space-y-0", className)}
|
class={cn('mt-4 flex flex-col space-y-4 sm:flex-row sm:space-y-0 sm:space-x-4', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { buttonVariants } from '$lib/ui/button/index.js';
|
||||||
import ChevronRight from "@lucide/svelte/icons/chevron-right";
|
import ChevronRight from '@lucide/svelte/icons/chevron-right';
|
||||||
import { buttonVariants } from "$lib/ui/button/index.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -19,8 +19,8 @@
|
|||||||
<RangeCalendarPrimitive.NextButton
|
<RangeCalendarPrimitive.NextButton
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({ variant: "outline" }),
|
buttonVariants({ variant: 'outline' }),
|
||||||
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
children={children || Fallback}
|
children={children || Fallback}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive } from "bits-ui";
|
import { buttonVariants } from '$lib/ui/button/index.js';
|
||||||
import ChevronLeft from "@lucide/svelte/icons/chevron-left";
|
import ChevronLeft from '@lucide/svelte/icons/chevron-left';
|
||||||
import { buttonVariants } from "$lib/ui/button/index.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -19,8 +19,8 @@
|
|||||||
<RangeCalendarPrimitive.PrevButton
|
<RangeCalendarPrimitive.PrevButton
|
||||||
bind:ref
|
bind:ref
|
||||||
class={cn(
|
class={cn(
|
||||||
buttonVariants({ variant: "outline" }),
|
buttonVariants({ variant: 'outline' }),
|
||||||
"size-7 bg-transparent p-0 opacity-50 hover:opacity-100",
|
'size-7 bg-transparent p-0 opacity-50 hover:opacity-100',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
children={children || Fallback}
|
children={children || Fallback}
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { RangeCalendar as RangeCalendarPrimitive, type WithoutChildrenOrChild } from "bits-ui";
|
import type { WithoutChildrenOrChild } from 'bits-ui';
|
||||||
import * as RangeCalendar from "./index.js";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { RangeCalendar as RangeCalendarPrimitive } from 'bits-ui';
|
||||||
|
import * as RangeCalendar from './index.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
value = $bindable(),
|
value = $bindable(),
|
||||||
placeholder = $bindable(),
|
placeholder = $bindable(),
|
||||||
weekdayFormat = "short",
|
weekdayFormat = 'short',
|
||||||
class: className,
|
class: className,
|
||||||
...restProps
|
...restProps
|
||||||
}: WithoutChildrenOrChild<RangeCalendarPrimitive.RootProps> = $props();
|
}: WithoutChildrenOrChild<RangeCalendarPrimitive.RootProps> = $props();
|
||||||
@ -18,7 +19,7 @@
|
|||||||
bind:value
|
bind:value
|
||||||
bind:placeholder
|
bind:placeholder
|
||||||
{weekdayFormat}
|
{weekdayFormat}
|
||||||
class={cn("p-3", className)}
|
class={cn('p-3', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{#snippet children({ months, weekdays })}
|
{#snippet children({ months, weekdays })}
|
||||||
|
@ -1,11 +1,10 @@
|
|||||||
import { Select as SelectPrimitive } from "bits-ui";
|
import { Select as SelectPrimitive } from 'bits-ui';
|
||||||
|
import Content from './select-content.svelte';
|
||||||
import Group from "./select-group.svelte";
|
import Group from './select-group.svelte';
|
||||||
import Label from "./select-label.svelte";
|
import Item from './select-item.svelte';
|
||||||
import Item from "./select-item.svelte";
|
import Label from './select-label.svelte';
|
||||||
import Content from "./select-content.svelte";
|
import Separator from './select-separator.svelte';
|
||||||
import Trigger from "./select-trigger.svelte";
|
import Trigger from './select-trigger.svelte';
|
||||||
import Separator from "./select-separator.svelte";
|
|
||||||
|
|
||||||
const Root = SelectPrimitive.Root;
|
const Root = SelectPrimitive.Root;
|
||||||
|
|
||||||
@ -24,5 +23,5 @@ export {
|
|||||||
Item as SelectItem,
|
Item as SelectItem,
|
||||||
Content as SelectContent,
|
Content as SelectContent,
|
||||||
Trigger as SelectTrigger,
|
Trigger as SelectTrigger,
|
||||||
Separator as SelectSeparator,
|
Separator as SelectSeparator
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Select as SelectPrimitive, type WithoutChild } from 'bits-ui';
|
import type { WithoutChild } from 'bits-ui';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Select as SelectPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Select as SelectPrimitive } from "bits-ui";
|
import { Select as SelectPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let { ref = $bindable(null), ...restProps }: SelectPrimitive.GroupProps = $props();
|
let { ref = $bindable(null), ...restProps }: SelectPrimitive.GroupProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
|
import type { WithoutChild } from 'bits-ui';
|
||||||
import Check from '@lucide/svelte/icons/check';
|
import Check from '@lucide/svelte/icons/check';
|
||||||
import { Select as SelectPrimitive, type WithoutChild } from 'bits-ui';
|
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Select as SelectPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { cn } from "$lib/utils.js";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { type WithElementRef } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import { type WithElementRef } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="select-label"
|
data-slot="select-label"
|
||||||
class={cn("text-muted-foreground px-2 py-1.5 text-xs", className)}
|
class={cn('text-muted-foreground px-2 py-1.5 text-xs', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { Separator as SeparatorPrimitive } from "bits-ui";
|
import type { Separator as SeparatorPrimitive } from 'bits-ui';
|
||||||
import { Separator } from "$lib/ui/separator/index.js";
|
import { Separator } from '$lib/ui/separator/index.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,6 +13,6 @@
|
|||||||
<Separator
|
<Separator
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="select-separator"
|
data-slot="select-separator"
|
||||||
class={cn("bg-border pointer-events-none -mx-1 my-1 h-px", className)}
|
class={cn('bg-border pointer-events-none -mx-1 my-1 h-px', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Select as SelectPrimitive, type WithoutChild } from 'bits-ui';
|
import type { WithoutChild } from 'bits-ui';
|
||||||
import ChevronDown from '@lucide/svelte/icons/chevron-down';
|
import ChevronDown from '@lucide/svelte/icons/chevron-down';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Select as SelectPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -19,7 +20,7 @@
|
|||||||
data-slot="select-trigger"
|
data-slot="select-trigger"
|
||||||
data-size={size}
|
data-size={size}
|
||||||
class={cn(
|
class={cn(
|
||||||
'border-surface-1 bg-based hover:border-overlay text-text flex flex-row-reverse w-full cursor-pointer items-center justify-between gap-2 rounded-md border px-3 py-2 md:text-sm whitespace-nowrap shadow-xs transition-all',
|
'border-surface-1 bg-based hover:border-overlay text-text flex w-full cursor-pointer flex-row-reverse items-center justify-between gap-2 rounded-md border px-3 py-2 whitespace-nowrap shadow-xs transition-all md:text-sm',
|
||||||
|
|
||||||
// Focus
|
// Focus
|
||||||
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
'focus-visible:outline-accent focus-visible:outline-2 focus-visible:outline-offset-2',
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Root from "./separator.svelte";
|
import Root from './separator.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
//
|
//
|
||||||
Root as Separator,
|
Root as Separator
|
||||||
};
|
};
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Separator as SeparatorPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Separator as SeparatorPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
class: className,
|
class: className,
|
||||||
orientation = "horizontal",
|
orientation = 'horizontal',
|
||||||
decorative = true,
|
decorative = true,
|
||||||
...restProps
|
...restProps
|
||||||
}: SeparatorPrimitive.RootProps = $props();
|
}: SeparatorPrimitive.RootProps = $props();
|
||||||
@ -17,7 +17,7 @@
|
|||||||
{decorative}
|
{decorative}
|
||||||
{orientation}
|
{orientation}
|
||||||
class={cn(
|
class={cn(
|
||||||
"bg-surface shrink-0 data-[orientation=horizontal]:h-px data-[orientation=vertical]:h-full data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px",
|
'bg-surface shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
import Close from './sheet-close.svelte';
|
||||||
|
import Content from './sheet-content.svelte';
|
||||||
|
import Description from './sheet-description.svelte';
|
||||||
|
import Footer from './sheet-footer.svelte';
|
||||||
|
import Header from './sheet-header.svelte';
|
||||||
|
import Overlay from './sheet-overlay.svelte';
|
||||||
|
import Title from './sheet-title.svelte';
|
||||||
|
import Trigger from './sheet-trigger.svelte';
|
||||||
import Root from './sheet.svelte';
|
import Root from './sheet.svelte';
|
||||||
import Trigger from "./sheet-trigger.svelte";
|
|
||||||
import Close from "./sheet-close.svelte";
|
|
||||||
import Overlay from "./sheet-overlay.svelte";
|
|
||||||
import Content from "./sheet-content.svelte";
|
|
||||||
import Header from "./sheet-header.svelte";
|
|
||||||
import Footer from "./sheet-footer.svelte";
|
|
||||||
import Title from "./sheet-title.svelte";
|
|
||||||
import Description from "./sheet-description.svelte";
|
|
||||||
|
|
||||||
const Portal = SheetPrimitive.Portal;
|
const Portal = SheetPrimitive.Portal;
|
||||||
|
|
||||||
@ -32,5 +32,5 @@ export {
|
|||||||
Header as SheetHeader,
|
Header as SheetHeader,
|
||||||
Footer as SheetFooter,
|
Footer as SheetFooter,
|
||||||
Title as SheetTitle,
|
Title as SheetTitle,
|
||||||
Description as SheetDescription,
|
Description as SheetDescription
|
||||||
};
|
};
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let { ref = $bindable(null), ...restProps }: SheetPrimitive.CloseProps = $props();
|
let { ref = $bindable(null), ...restProps }: SheetPrimitive.CloseProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
<script lang="ts" module>
|
<script lang="ts" module>
|
||||||
import { tv, type VariantProps } from 'tailwind-variants';
|
import type { VariantProps } from 'tailwind-variants';
|
||||||
|
import { tv } from 'tailwind-variants';
|
||||||
|
|
||||||
export const sheetVariants = tv({
|
export const sheetVariants = tv({
|
||||||
base: 'bg-mantle border-surface data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 gap-4 p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
|
base: 'bg-mantle border-surface data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 gap-4 p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500',
|
||||||
variants: {
|
variants: {
|
||||||
@ -9,7 +11,7 @@
|
|||||||
'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 border-t',
|
'data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 border-t',
|
||||||
left: 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
|
left: 'data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm',
|
||||||
right:
|
right:
|
||||||
'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right max-w-2xs inset-y-0 right-0 h-full w-3/4 border-l'
|
'data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 max-w-2xs border-l'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
defaultVariants: {
|
defaultVariants: {
|
||||||
@ -21,11 +23,12 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive, type WithoutChildrenOrChild } from 'bits-ui';
|
import type { WithoutChildrenOrChild } from 'bits-ui';
|
||||||
import X from '@lucide/svelte/icons/x';
|
|
||||||
import type { Snippet } from 'svelte';
|
import type { Snippet } from 'svelte';
|
||||||
import SheetOverlay from './sheet-overlay.svelte';
|
import X from '@lucide/svelte/icons/x';
|
||||||
import { cn } from '$lib/utils.js';
|
import { cn } from '$lib/utils.js';
|
||||||
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
import SheetOverlay from './sheet-overlay.svelte';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -51,7 +54,7 @@
|
|||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
<SheetPrimitive.Close
|
<SheetPrimitive.Close
|
||||||
class="rounded-xs focus:outline-hidden absolute right-4 top-4 cursor-pointer opacity-70 transition-opacity hover:opacity-100 disabled:pointer-events-none"
|
class="absolute top-4 right-4 cursor-pointer rounded-xs opacity-70 transition-opacity hover:opacity-100 focus:outline-hidden disabled:pointer-events-none"
|
||||||
>
|
>
|
||||||
<X class="size-4" />
|
<X class="size-4" />
|
||||||
<span class="sr-only">Close</span>
|
<span class="sr-only">Close</span>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<SheetPrimitive.Description
|
<SheetPrimitive.Description
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="sheet-description"
|
data-slot="sheet-description"
|
||||||
class={cn("text-text text-sm", className)}
|
class={cn('text-text text-sm', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="sheet-footer"
|
data-slot="sheet-footer"
|
||||||
class={cn("mt-auto flex flex-col gap-2 p-4", className)}
|
class={cn('mt-auto flex flex-col gap-2 p-4', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { WithElementRef } from 'bits-ui';
|
||||||
import type { WithElementRef } from "bits-ui";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -14,7 +14,7 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="sheet-header"
|
data-slot="sheet-header"
|
||||||
class={cn("flex flex-col gap-1.5 p-4", className)}
|
class={cn('flex flex-col gap-1.5 p-4', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
>
|
>
|
||||||
{@render children?.()}
|
{@render children?.()}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -15,7 +15,7 @@
|
|||||||
bind:ref
|
bind:ref
|
||||||
data-slot="sheet-overlay"
|
data-slot="sheet-overlay"
|
||||||
class={cn(
|
class={cn(
|
||||||
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50",
|
'data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50',
|
||||||
className
|
className
|
||||||
)}
|
)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { cn } from '$lib/utils.js';
|
||||||
import { cn } from "$lib/utils.js";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -12,6 +12,6 @@
|
|||||||
<SheetPrimitive.Title
|
<SheetPrimitive.Title
|
||||||
bind:ref
|
bind:ref
|
||||||
data-slot="sheet-title"
|
data-slot="sheet-title"
|
||||||
class={cn("text-text font-semibold", className)}
|
class={cn('text-text font-semibold', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
/>
|
/>
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Dialog as SheetPrimitive } from "bits-ui";
|
import { Dialog as SheetPrimitive } from 'bits-ui';
|
||||||
|
|
||||||
let { ref = $bindable(null), ...restProps }: SheetPrimitive.TriggerProps = $props();
|
let { ref = $bindable(null), ...restProps }: SheetPrimitive.TriggerProps = $props();
|
||||||
</script>
|
</script>
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import Root from "./skeleton.svelte";
|
import Root from './skeleton.svelte';
|
||||||
|
|
||||||
export {
|
export {
|
||||||
Root,
|
Root,
|
||||||
//
|
//
|
||||||
Root as Skeleton,
|
Root as Skeleton
|
||||||
};
|
};
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import type { WithElementRef, WithoutChildren } from "bits-ui";
|
import type { WithElementRef, WithoutChildren } from 'bits-ui';
|
||||||
import type { HTMLAttributes } from "svelte/elements";
|
import type { HTMLAttributes } from 'svelte/elements';
|
||||||
import { cn } from "$lib/utils.js";
|
import { cn } from '$lib/utils.js';
|
||||||
|
|
||||||
let {
|
let {
|
||||||
ref = $bindable(null),
|
ref = $bindable(null),
|
||||||
@ -13,6 +13,6 @@
|
|||||||
<div
|
<div
|
||||||
bind:this={ref}
|
bind:this={ref}
|
||||||
data-slot="skeleton"
|
data-slot="skeleton"
|
||||||
class={cn("bg-surface animate-pulse rounded-md", className)}
|
class={cn('bg-surface animate-pulse rounded-md', className)}
|
||||||
{...restProps}
|
{...restProps}
|
||||||
></div>
|
></div>
|
||||||
|
@ -1 +1 @@
|
|||||||
export { default as Sonner } from "./sonner.svelte";
|
export { default as Sonner } from './sonner.svelte';
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { Toaster as Sonner, type ToasterProps as SonnerProps } from 'svelte-sonner';
|
import type { ToasterProps as SonnerProps } from 'svelte-sonner';
|
||||||
import { mode } from 'mode-watcher';
|
import { Toaster as Sonner } from 'svelte-sonner';
|
||||||
|
|
||||||
let { ...restProps }: SonnerProps = $props();
|
let { ...restProps }: SonnerProps = $props();
|
||||||
</script>
|
</script>
|
||||||
@ -13,7 +13,7 @@
|
|||||||
'bg-based text-sm flex gap-2 px-4 border border-surface-1 p-2 rounded-md items-center text-text w-full min-h-12',
|
'bg-based text-sm flex gap-2 px-4 border border-surface-1 p-2 rounded-md items-center text-text w-full min-h-12',
|
||||||
title: 'text-text',
|
title: 'text-text',
|
||||||
description: 'text-subtext text-xs',
|
description: 'text-subtext text-xs',
|
||||||
actionButton: 'bg-blue',
|
actionButton: 'bg-accent',
|
||||||
cancelButton: 'bg-red',
|
cancelButton: 'bg-red',
|
||||||
closeButton: 'bg-green'
|
closeButton: 'bg-green'
|
||||||
}
|
}
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user