atproto explorer pdsls.dev
atproto tool

fixes and tweaks

Changed files
+84 -84
src
components
utils
views
+2 -2
package.json
···
"prettier-plugin-tailwindcss": "^0.6.11",
"typescript": "^5.7.3",
"unocss": "^66.0.0",
-
"vite": "^6.1.0",
-
"vite-plugin-solid": "^2.11.1",
+
"vite": "^6.1.1",
+
"vite-plugin-solid": "^2.11.2",
"vite-plugin-wasm": "^3.4.1"
},
"dependencies": {
+41 -41
pnpm-lock.yaml
···
version: 5.7.3
unocss:
specifier: ^66.0.0
-
version: 66.0.0(postcss@8.5.2)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
+
version: 66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
vite:
-
specifier: ^6.1.0
-
version: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
specifier: ^6.1.1
+
version: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
vite-plugin-solid:
-
specifier: ^2.11.1
-
version: 2.11.1(solid-js@1.9.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
+
specifier: ^2.11.2
+
version: 2.11.2(solid-js@1.9.4)(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
vite-plugin-wasm:
specifier: ^3.4.1
-
version: 3.4.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
+
version: 3.4.1(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
packages:
···
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
postcss@8.5.2:
-
resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
+
postcss@8.5.3:
+
resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==}
engines: {node: ^10 || ^12 || >=14}
prettier-plugin-tailwindcss@0.6.11:
···
tinyexec@0.3.2:
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
tinyglobby@0.2.11:
-
resolution: {integrity: sha512-32TmKeeKUahv0Go8WmQgiEp9Y21NuxjwjqiRC1nrUB51YacfSwuB44xgXD+HdIppmMRgjQNPdrHyA6vIybYZ+g==}
+
tinyglobby@0.2.12:
+
resolution: {integrity: sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==}
engines: {node: '>=12.0.0'}
to-regex-range@5.0.1:
···
validate-html-nesting@1.2.2:
resolution: {integrity: sha512-hGdgQozCsQJMyfK5urgFcWEqsSSrK63Awe0t/IMR0bZ0QMtnuaiHzThW81guu3qx9abLi99NEuiaN6P9gVYsNg==}
-
vite-plugin-solid@2.11.1:
-
resolution: {integrity: sha512-X9vbbK6AOOA6yxSsNl1VTuUq5y4BG9AR6Z5F/J1ZC2VO7ll8DlSCbOL+RcZXlRbxn0ptE6OI5832nGQhq4yXKQ==}
+
vite-plugin-solid@2.11.2:
+
resolution: {integrity: sha512-/OXVasW5OIRSFXnqzMgm8X3hPvf+JTbGecjQhmk7QnbDFq4hqdLssuYAWw9GsJGfzUPiMHM3ME2Y2XHPsTWmkw==}
peerDependencies:
'@testing-library/jest-dom': ^5.16.6 || ^5.17.0 || ^6.*
solid-js: ^1.7.2
···
peerDependencies:
vite: ^2 || ^3 || ^4 || ^5 || ^6
-
vite@6.1.0:
-
resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==}
+
vite@6.1.1:
+
resolution: {integrity: sha512-4GgM54XrwRfrOp297aIYspIti66k56v16ZnqHvrIM7mG+HjDlAwS7p+Srr7J6fGvEdOJ5JcQ/D9T7HhtdXDTzA==}
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
hasBin: true
peerDependencies:
···
undici-types: 6.20.0
optional: true
-
'@unocss/astro@66.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))':
+
'@unocss/astro@66.0.0(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))':
dependencies:
'@unocss/core': 66.0.0
'@unocss/reset': 66.0.0
-
'@unocss/vite': 66.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
+
'@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
optionalDependencies:
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
transitivePeerDependencies:
- vue
···
magic-string: 0.30.17
pathe: 2.0.3
perfect-debounce: 1.0.0
-
tinyglobby: 0.2.11
+
tinyglobby: 0.2.12
unplugin-utils: 0.2.4
'@unocss/config@66.0.0':
···
transitivePeerDependencies:
- vue
-
'@unocss/postcss@66.0.0(postcss@8.5.2)':
+
'@unocss/postcss@66.0.0(postcss@8.5.3)':
dependencies:
'@unocss/config': 66.0.0
'@unocss/core': 66.0.0
'@unocss/rule-utils': 66.0.0
css-tree: 3.1.0
-
postcss: 8.5.2
-
tinyglobby: 0.2.11
+
postcss: 8.5.3
+
tinyglobby: 0.2.12
'@unocss/preset-attributify@66.0.0':
dependencies:
···
dependencies:
'@unocss/core': 66.0.0
-
'@unocss/vite@66.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))':
+
'@unocss/vite@66.0.0(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))':
dependencies:
'@ampproject/remapping': 2.3.0
'@unocss/config': 66.0.0
···
'@unocss/inspector': 66.0.0(vue@3.5.13(typescript@5.7.3))
chokidar: 3.6.0
magic-string: 0.30.17
-
tinyglobby: 0.2.11
+
tinyglobby: 0.2.12
unplugin-utils: 0.2.4
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
transitivePeerDependencies:
- vue
···
'@vue/shared': 3.5.13
estree-walker: 2.0.2
magic-string: 0.30.17
-
postcss: 8.5.2
+
postcss: 8.5.3
source-map-js: 1.2.1
'@vue/compiler-ssr@3.5.13':
···
mlly: 1.7.4
pathe: 2.0.3
-
postcss@8.5.2:
+
postcss@8.5.3:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
···
tinyexec@0.3.2: {}
-
tinyglobby@0.2.11:
+
tinyglobby@0.2.12:
dependencies:
fdir: 6.4.3(picomatch@4.0.2)
picomatch: 4.0.2
···
undici-types@6.20.0:
optional: true
-
unocss@66.0.0(postcss@8.5.2)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3)):
+
unocss@66.0.0(postcss@8.5.3)(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3)):
dependencies:
-
'@unocss/astro': 66.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
+
'@unocss/astro': 66.0.0(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
'@unocss/cli': 66.0.0
'@unocss/core': 66.0.0
-
'@unocss/postcss': 66.0.0(postcss@8.5.2)
+
'@unocss/postcss': 66.0.0(postcss@8.5.3)
'@unocss/preset-attributify': 66.0.0
'@unocss/preset-icons': 66.0.0
'@unocss/preset-mini': 66.0.0
···
'@unocss/transformer-compile-class': 66.0.0
'@unocss/transformer-directives': 66.0.0
'@unocss/transformer-variant-group': 66.0.0
-
'@unocss/vite': 66.0.0(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
+
'@unocss/vite': 66.0.0(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))(vue@3.5.13(typescript@5.7.3))
optionalDependencies:
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
transitivePeerDependencies:
- postcss
- supports-color
···
validate-html-nesting@1.2.2: {}
-
vite-plugin-solid@2.11.1(solid-js@1.9.4)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
+
vite-plugin-solid@2.11.2(solid-js@1.9.4)(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
dependencies:
'@babel/core': 7.26.9
'@types/babel__core': 7.20.5
···
merge-anything: 5.1.7
solid-js: 1.9.4
solid-refresh: 0.6.3(solid-js@1.9.4)
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
-
vitefu: 1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vitefu: 1.0.5(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2))
transitivePeerDependencies:
- supports-color
-
vite-plugin-wasm@3.4.1(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
+
vite-plugin-wasm@3.4.1(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
dependencies:
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
-
vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2):
+
vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2):
dependencies:
esbuild: 0.24.2
-
postcss: 8.5.2
+
postcss: 8.5.3
rollup: 4.34.8
optionalDependencies:
'@types/node': 22.13.1
···
jiti: 2.4.2
tsx: 4.19.2
-
vitefu@1.0.5(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
+
vitefu@1.0.5(vite@6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)):
optionalDependencies:
-
vite: 6.1.0(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
+
vite: 6.1.1(@types/node@22.13.1)(jiti@2.4.2)(tsx@4.19.2)
vue-flow-layout@0.1.1(vue@3.5.13(typescript@5.7.3)):
dependencies:
+1 -1
src/components/create.tsx
···
type="submit"
class="rounded-lg bg-green-500 px-2.5 py-1.5 text-sm font-bold text-slate-100 hover:bg-green-400 focus:outline-none focus:ring-1 focus:ring-slate-700 dark:bg-green-600 dark:hover:bg-green-500 dark:focus:ring-slate-300"
>
-
Confirm
+
Create
</button>
</div>
</div>
+38
src/utils/templates.ts
···
+
export type AtUri = { repo: string; collection: string; rkey: string };
+
type TemplateFn = (uri: AtUri) => { label: string; link: string };
+
type TemplateMap = Record<string, TemplateFn>;
+
+
export const uriTemplates: TemplateMap = {
+
"app.bsky.actor.profile": (uri) => ({
+
label: "Bluesky",
+
link: `https://bsky.app/profile/${uri.repo}`,
+
}),
+
"app.bsky.feed.post": (uri) => ({
+
label: "Bluesky",
+
link: `https://bsky.app/profile/${uri.repo}/post/${uri.rkey}`,
+
}),
+
"app.bsky.graph.list": (uri) => ({
+
label: "Bluesky",
+
link: `https://bsky.app/profile/${uri.repo}/lists/${uri.rkey}`,
+
}),
+
"app.bsky.feed.generator": (uri) => ({
+
label: "Bluesky",
+
link: `https://bsky.app/profile/${uri.repo}/feed/${uri.rkey}`,
+
}),
+
"fyi.unravel.frontpage.post": (uri) => ({
+
label: "Frontpage",
+
link: `https://frontpage.fyi/post/${uri.repo}/${uri.rkey}`,
+
}),
+
"com.whtwnd.blog.entry": (uri) => ({
+
label: "WhiteWind",
+
link: `https://whtwnd.com/${uri.repo}/${uri.rkey}`,
+
}),
+
"com.shinolabs.pinksea.oekaki": (uri) => ({
+
label: "PinkSea",
+
link: `https://pinksea.art/${uri.repo}/oekaki/${uri.rkey}`,
+
}),
+
"blue.linkat.board": (uri) => ({
+
label: "Linkat",
+
link: `https://linkat.blue/${uri.repo}`,
+
}),
+
};
+2 -40
src/views/record.tsx
···
import { setCID, setValidRecord, validRecord } from "../components/navbar.jsx";
import { didDocCache, resolveHandle, resolvePDS } from "../utils/api.js";
import { theme } from "../layout.jsx";
+
import { AtUri, uriTemplates } from "../utils/templates.js";
const RecordView = () => {
const params = useParams();
···
setEditNotice("");
});
-
type AtUri = { repo: string; collection: string; rkey: string };
-
type TemplateFn = (uri: AtUri) => { label: string; link: string };
-
type TemplateMap = Record<string, TemplateFn>;
-
-
const uriTemplates: TemplateMap = {
-
"app.bsky.actor.profile": (uri) => ({
-
label: "Bluesky",
-
link: `https://bsky.app/profile/${uri.repo}`,
-
}),
-
"app.bsky.feed.post": (uri) => ({
-
label: "Bluesky",
-
link: `https://bsky.app/profile/${uri.repo}/post/${uri.rkey}`,
-
}),
-
"app.bsky.graph.list": (uri) => ({
-
label: "Bluesky",
-
link: `https://bsky.app/profile/${uri.repo}/lists/${uri.rkey}`,
-
}),
-
"app.bsky.feed.generator": (uri) => ({
-
label: "Bluesky",
-
link: `https://bsky.app/profile/${uri.repo}/feed/${uri.rkey}`,
-
}),
-
"fyi.unravel.frontpage.post": (uri) => ({
-
label: "Frontpage",
-
link: `https://frontpage.fyi/post/${uri.repo}/${uri.rkey}`,
-
}),
-
"com.whtwnd.blog.entry": (uri) => ({
-
label: "WhiteWind",
-
link: `https://whtwnd.com/${uri.repo}/${uri.rkey}`,
-
}),
-
"com.shinolabs.pinksea.oekaki": (uri) => ({
-
label: "PinkSea",
-
link: `https://pinksea.art/${uri.repo}/oekaki/${uri.rkey}`,
-
}),
-
"blue.linkat.board": (uri) => ({
-
label: "Linkat",
-
link: `https://linkat.blue/${uri.repo}`,
-
}),
-
};
-
const checkUri = (uri: string) => {
const uriParts = uri.split("/"); // expected: ["at:", "", "repo", "collection", "rkey"]
if (uriParts.length != 5) return undefined;
···
type="submit"
class="rounded-lg bg-green-500 px-2.5 py-1.5 text-sm font-bold text-slate-100 hover:bg-green-400 focus:outline-none focus:ring-1 focus:ring-slate-700 dark:bg-green-600 dark:hover:bg-green-500 dark:focus:ring-slate-300"
>
-
Confirm
+
Edit
</button>
</div>
</div>