wip bsky client for the web & android bbell.vt3e.cat

feat: display images, quoted posts

vt3e.cat 3ea05312 7de6641d

verified
+868 -195
+147
.workspace/view.json
··· 1 + { 2 + "post": { 3 + "uri": "at://did:plc:k644h4rq5bjfzcetgsa6tuby/app.bsky.feed.post/3mahdk5t6n22a", 4 + "cid": "bafyreiawy5p2tksycqce2fkgx2yxrpz2jjyklpvzrjxxsipn7qpzlwgpxa", 5 + "author": { 6 + "did": "did:plc:k644h4rq5bjfzcetgsa6tuby", 7 + "handle": "natalie.sh", 8 + "displayName": "midwest emo fan", 9 + "pronouns": "magic john", 10 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreibjnhqfhangwgwam5msfpqu64qazduai7n25ttiiihnttcgeabnua@jpeg", 11 + "associated": { 12 + "chat": { "allowIncoming": "all" }, 13 + "activitySubscription": { "allowSubscriptions": "followers" } 14 + }, 15 + "viewer": { 16 + "muted": false, 17 + "blockedBy": false, 18 + "following": "at://did:plc:2hcnfmbfr4ucfbjpnvjqvt3e/app.bsky.graph.follow/3lqmlddnsxm2w" 19 + }, 20 + "labels": [], 21 + "createdAt": "2023-05-29T04:28:08.255Z" 22 + }, 23 + "record": { 24 + "$type": "app.bsky.feed.post", 25 + "createdAt": "2025-12-20T23:15:55.318Z", 26 + "embed": { 27 + "$type": "app.bsky.embed.recordWithMedia", 28 + "media": { 29 + "$type": "app.bsky.embed.images", 30 + "images": [ 31 + { 32 + "alt": "", 33 + "aspectRatio": { "height": 1557, "width": 1206 }, 34 + "image": { 35 + "$type": "blob", 36 + "ref": { "$link": "bafkreihxlsjnyiansy3acxistrdk6i3dic65wmwbgxauynogv64azfu4vy" }, 37 + "mimeType": "image/jpeg", 38 + "size": 447894 39 + } 40 + } 41 + ] 42 + }, 43 + "record": { 44 + "$type": "app.bsky.embed.record", 45 + "record": { 46 + "cid": "bafyreifxgjdtxagrjytfvkkdl554cxum25q226tsusm6ddpn2we2k543c4", 47 + "uri": "at://did:plc:k644h4rq5bjfzcetgsa6tuby/app.bsky.feed.post/3mafb5szfr22p" 48 + } 49 + } 50 + }, 51 + "langs": ["en"], 52 + "text": "SO TRUE!" 53 + }, 54 + 55 + "embed": { 56 + "$type": "app.bsky.embed.recordWithMedia#view", 57 + "media": { 58 + "$type": "app.bsky.embed.images#view", 59 + "images": [ 60 + { 61 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreihxlsjnyiansy3acxistrdk6i3dic65wmwbgxauynogv64azfu4vy@jpeg", 62 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreihxlsjnyiansy3acxistrdk6i3dic65wmwbgxauynogv64azfu4vy@jpeg", 63 + "alt": "", 64 + "aspectRatio": { "height": 1557, "width": 1206 } 65 + } 66 + ] 67 + }, 68 + "record": { 69 + "record": { 70 + "$type": "app.bsky.embed.record#viewRecord", 71 + "uri": "at://did:plc:k644h4rq5bjfzcetgsa6tuby/app.bsky.feed.post/3mafb5szfr22p", 72 + "cid": "bafyreifxgjdtxagrjytfvkkdl554cxum25q226tsusm6ddpn2we2k543c4", 73 + "author": { 74 + "did": "did:plc:k644h4rq5bjfzcetgsa6tuby", 75 + "handle": "natalie.sh", 76 + "displayName": "midwest emo fan", 77 + "pronouns": "magic john", 78 + "avatar": "https://cdn.bsky.app/img/avatar/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreibjnhqfhangwgwam5msfpqu64qazduai7n25ttiiihnttcgeabnua@jpeg", 79 + "associated": { 80 + "chat": { "allowIncoming": "all" }, 81 + "activitySubscription": { "allowSubscriptions": "followers" } 82 + }, 83 + "viewer": { 84 + "muted": false, 85 + "blockedBy": false, 86 + "following": "at://did:plc:2hcnfmbfr4ucfbjpnvjqvt3e/app.bsky.graph.follow/3lqmlddnsxm2w" 87 + }, 88 + "labels": [], 89 + "createdAt": "2023-05-29T04:28:08.255Z" 90 + }, 91 + "value": { 92 + "$type": "app.bsky.feed.post", 93 + "createdAt": "2025-12-20T03:27:54.374Z", 94 + "embed": { 95 + "$type": "app.bsky.embed.images", 96 + "images": [ 97 + { 98 + "alt": "", 99 + "aspectRatio": { "height": 1570, "width": 1206 }, 100 + "image": { 101 + "$type": "blob", 102 + "ref": { 103 + "$link": "bafkreide5jhg265kxekrtztct7lrcotl7jhelpqqc6n2dn4ocolihxprky" 104 + }, 105 + "mimeType": "image/jpeg", 106 + "size": 630425 107 + } 108 + } 109 + ] 110 + }, 111 + "langs": ["en"], 112 + "text": "forced to assume that cloudflare badge in twitter is a bad thing actually" 113 + }, 114 + "labels": [], 115 + "likeCount": 36, 116 + "replyCount": 2, 117 + "repostCount": 1, 118 + "quoteCount": 1, 119 + "indexedAt": "2025-12-20T03:27:55.231Z", 120 + "embeds": [ 121 + { 122 + "$type": "app.bsky.embed.images#view", 123 + "images": [ 124 + { 125 + "thumb": "https://cdn.bsky.app/img/feed_thumbnail/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreide5jhg265kxekrtztct7lrcotl7jhelpqqc6n2dn4ocolihxprky@jpeg", 126 + "fullsize": "https://cdn.bsky.app/img/feed_fullsize/plain/did:plc:k644h4rq5bjfzcetgsa6tuby/bafkreide5jhg265kxekrtztct7lrcotl7jhelpqqc6n2dn4ocolihxprky@jpeg", 127 + "alt": "", 128 + "aspectRatio": { "height": 1570, "width": 1206 } 129 + } 130 + ] 131 + } 132 + ] 133 + } 134 + } 135 + }, 136 + 137 + "bookmarkCount": 0, 138 + "replyCount": 4, 139 + "repostCount": 0, 140 + "likeCount": 11, 141 + "quoteCount": 1, 142 + "indexedAt": "2025-12-20T23:15:56.584Z", 143 + "viewer": { "bookmarked": false, "threadMuted": false, "embeddingDisabled": false }, 144 + "labels": [], 145 + "$type": "app.bsky.feed.defs#postView" 146 + } 147 + }
+3
.zed/settings.json
··· 1 + { 2 + "hard_tabs": false 3 + }
+254 -7
bun.lock
··· 11 11 "@atcute/lexicons": "^1.2.5", 12 12 "@atcute/oauth-browser-client": "^2.0.3", 13 13 "@iconify-prerendered/vue-material-symbols": "^0.28.1755063979", 14 + "@volar/vue-language-server": "^1.6.5", 15 + "@vue/language-server": "2.0.29", 14 16 "pinia": "^3.0.4", 15 17 "vue": "^3.5.25", 16 18 }, 17 19 "devDependencies": { 18 20 "@prettier/plugin-oxc": "^0.0.5", 19 21 "@tsconfig/node24": "^24.0.3", 20 - "@types/node": "^24.10.1", 22 + "@types/node": "^25.0.3", 21 23 "@vitejs/plugin-vue": "^6.0.2", 22 24 "@vue/eslint-config-prettier": "^10.2.0", 23 25 "@vue/eslint-config-typescript": "^14.6.0", 24 26 "@vue/tsconfig": "^0.8.1", 27 + "@vue/typescript-plugin": "^3.2.0", 25 28 "eslint": "^9.39.1", 26 29 "eslint-plugin-oxlint": "~1.29.0", 27 30 "eslint-plugin-vue": "~10.5.1", ··· 30 33 "oxlint": "~1.29.0", 31 34 "prettier": "3.6.2", 32 35 "sass-embedded": "^1.97.0", 33 - "typescript": "~5.9.0", 36 + "typescript": "^5.9.3", 34 37 "vite": "npm:rolldown-vite@latest", 35 38 "vite-plugin-vue-devtools": "^8.0.5", 36 39 "vue-tsc": "^3.1.5", ··· 122 125 123 126 "@bufbuild/protobuf": ["@bufbuild/protobuf@2.10.2", "", {}, "sha512-uFsRXwIGyu+r6AMdz+XijIIZJYpoWeYzILt5yZ2d3mCjQrWUTVpVD9WL/jZAbvp+Ed04rOhrsk7FiTcEDseB5A=="], 124 127 128 + "@emmetio/abbreviation": ["@emmetio/abbreviation@2.3.3", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-mgv58UrU3rh4YgbE/TzgLQwJ3pFsHHhCLqY20aJq+9comytTXUDNGG/SMtSeMJdkpxgXSXunBGLD8Boka3JyVA=="], 129 + 130 + "@emmetio/css-abbreviation": ["@emmetio/css-abbreviation@2.1.8", "", { "dependencies": { "@emmetio/scanner": "^1.0.4" } }, "sha512-s9yjhJ6saOO/uk1V74eifykk2CBYi01STTK3WlXWGOepyKa23ymJ053+DNQjpFcy1ingpaO7AxCcwLvHFY9tuw=="], 131 + 132 + "@emmetio/css-parser": ["@emmetio/css-parser@0.4.1", "", { "dependencies": { "@emmetio/stream-reader": "^2.2.0", "@emmetio/stream-reader-utils": "^0.1.0" } }, "sha512-2bC6m0MV/voF4CTZiAbG5MWKbq5EBmDPKu9Sb7s7nVcEzNQlrZP6mFFFlIaISM8X6514H9shWMme1fCm8cWAfQ=="], 133 + 134 + "@emmetio/html-matcher": ["@emmetio/html-matcher@1.3.0", "", { "dependencies": { "@emmetio/scanner": "^1.0.0" } }, "sha512-NTbsvppE5eVyBMuyGfVu2CRrLvo7J4YHb6t9sBFLyY03WYhXET37qA4zOYUjBWFCRHO7pS1B9khERtY0f5JXPQ=="], 135 + 136 + "@emmetio/scanner": ["@emmetio/scanner@1.0.4", "", {}, "sha512-IqRuJtQff7YHHBk4G8YZ45uB9BaAGcwQeVzgj/zj8/UdOhtQpEIupUhSk8dys6spFIWVZVeK20CzGEnqR5SbqA=="], 137 + 138 + "@emmetio/stream-reader": ["@emmetio/stream-reader@2.2.0", "", {}, "sha512-fXVXEyFA5Yv3M3n8sUGT7+fvecGrZP4k6FnWWMSZVQf69kAq0LLpaBQLGcPR30m3zMmKYhECP4k/ZkzvhEW5kw=="], 139 + 140 + "@emmetio/stream-reader-utils": ["@emmetio/stream-reader-utils@0.1.0", "", {}, "sha512-ZsZ2I9Vzso3Ho/pjZFsmmZ++FWeEd/txqybHTm4OgaZzdS8V9V/YYWQwg5TC38Z7uLWUV1vavpLLbjJtKubR1A=="], 141 + 125 142 "@emnapi/core": ["@emnapi/core@1.7.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.1.0", "tslib": "^2.4.0" } }, "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg=="], 126 143 127 144 "@emnapi/runtime": ["@emnapi/runtime@1.7.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA=="], ··· 155 172 "@humanwhocodes/retry": ["@humanwhocodes/retry@0.4.3", "", {}, "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="], 156 173 157 174 "@iconify-prerendered/vue-material-symbols": ["@iconify-prerendered/vue-material-symbols@0.28.1755063979", "", { "peerDependencies": { "vue": "^3.0.0" } }, "sha512-twv15c6sQPhr06gAJxPBqdPgGAbaFamMZMECqdzBPePna9mJ6ISV8rBX4bKwan4h3EiSHei/pSu+jOt8G5xVLA=="], 175 + 176 + "@johnsoncodehk/pug-beautify": ["@johnsoncodehk/pug-beautify@0.2.2", "", {}, "sha512-qqNS/YD0Nck5wtQLCPHAfGVgWbbGafxSPjNh0ekYPFSNNqnDH2kamnduzYly8IiADmeVx/MfAE1njMEjVeHTMA=="], 158 177 159 178 "@jridgewell/gen-mapping": ["@jridgewell/gen-mapping@0.3.13", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.0", "@jridgewell/trace-mapping": "^0.3.24" } }, "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA=="], 160 179 ··· 296 315 297 316 "@types/json-schema": ["@types/json-schema@7.0.15", "", {}, "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="], 298 317 299 - "@types/node": ["@types/node@24.10.4", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-vnDVpYPMzs4wunl27jHrfmwojOGKya0xyM3sH+UE5iv5uPS6vX7UIoh6m+vQc5LGBq52HBKPIn/zcSZVzeDEZg=="], 318 + "@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="], 300 319 301 320 "@typescript-eslint/eslint-plugin": ["@typescript-eslint/eslint-plugin@8.50.0", "", { "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "8.50.0", "@typescript-eslint/type-utils": "8.50.0", "@typescript-eslint/utils": "8.50.0", "@typescript-eslint/visitor-keys": "8.50.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" }, "peerDependencies": { "@typescript-eslint/parser": "^8.50.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg=="], 302 321 ··· 320 339 321 340 "@vitejs/plugin-vue": ["@vitejs/plugin-vue@6.0.3", "", { "dependencies": { "@rolldown/pluginutils": "1.0.0-beta.53" }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0", "vue": "^3.2.25" } }, "sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w=="], 322 341 323 - "@volar/language-core": ["@volar/language-core@2.4.26", "", { "dependencies": { "@volar/source-map": "2.4.26" } }, "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A=="], 342 + "@volar-plugins/css": ["@volar-plugins/css@2.0.0", "", { "dependencies": { "vscode-css-languageservice": "^6.2.3", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8" }, "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-ZAXdRK6n6T5fwC3Et4rOofLS9VH919/ayFHo5tXNCA7k2wkrVU2Uno408+024/irpVsFCkSxipycSQJBtTFh+A=="], 324 343 325 - "@volar/source-map": ["@volar/source-map@2.4.26", "", {}, "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw=="], 344 + "@volar-plugins/emmet": ["@volar-plugins/emmet@2.0.0", "", { "dependencies": { "@volar-plugins/html": "2.0.0", "@vscode/emmet-helper": "^2.8.6" }, "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-fbi+fDjixvipXt6qX71Bci66RGho/LnxeA9GfGsezdDWdQr9VjHs/3ewEpgi3fJkPeZqSawAkG+v2YQEWG4QMg=="], 326 345 327 - "@volar/typescript": ["@volar/typescript@2.4.26", "", { "dependencies": { "@volar/language-core": "2.4.26", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA=="], 346 + "@volar-plugins/html": ["@volar-plugins/html@2.0.0", "", { "dependencies": { "vscode-html-languageservice": "^5.0.4", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8" }, "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-X/DlOX/qJ54v8NzS80ZuD0OOU+Txx4GH0cUffhIsd9yn55mP/vc4nH+Lxo0Yz2I8SkjIiLM+DssumvAJSjH+og=="], 347 + 348 + "@volar-plugins/json": ["@volar-plugins/json@2.0.0", "", { "dependencies": { "vscode-json-languageservice": "^5.2.0", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8" }, "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-o56Ei2D2jVs5opSILGcE3wHVg0dGZEQ9A6xsx+klCDJ2/ZNADrByefga0z8LKdD2ZZiIpUpjzvsM/Oh9+hZOWw=="], 349 + 350 + "@volar-plugins/pug": ["@volar-plugins/pug@2.0.0", "", { "dependencies": { "@volar-plugins/html": "2.0.0", "muggle-string": "^0.2.2", "pug-lexer": "^5.0.1", "pug-parser": "^6.0.0", "vscode-html-languageservice": "^5.0.4", "vscode-languageserver-textdocument": "^1.0.8", "vscode-languageserver-types": "^3.17.2" }, "peerDependencies": { "@volar/language-service": "*", "@volar/source-map": "*" } }, "sha512-BDz1n7EUa+J51cBxdhj8jVfB6KywB0BHt6IaMu/HV8VXFLNpDQCCUMEkEb5Wm7u9iV54hYk1x4cZawGruhHGZw=="], 351 + 352 + "@volar-plugins/pug-beautify": ["@volar-plugins/pug-beautify@2.0.0", "", { "dependencies": { "@johnsoncodehk/pug-beautify": "^0.2.2" }, "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-25r8HwObez/LoNrb0+kbyKDbhlEJe/WgjYeYMJ/OlKu+60BvSWyDTDtGmkV9DHh921zeAHcFTkHebf7oX1KbmA=="], 353 + 354 + "@volar-plugins/typescript": ["@volar-plugins/typescript@2.0.0", "", { "dependencies": { "jsonc-parser": "^3.2.0", "minimatch": "^9.0.0", "semver": "^7.3.8", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.7" }, "peerDependencies": { "@volar/language-service": "*" } }, "sha512-392e4KyMikiU9QkC/ii1K/HCs5Zcf8h6GA9BTpuuhxXeYk8LOnqDX8xLHTFVBuTORCXzrikZEzNzXHdL/4tqEA=="], 355 + 356 + "@volar-plugins/typescript-twoslash-queries": ["@volar-plugins/typescript-twoslash-queries@2.0.0", "", { "peerDependencies": { "@volar/language-service": "*" }, "optionalPeers": ["@volar/language-service"] }, "sha512-NwqBBruD1DvVmFVyPinOuuMGqpSroVTnl1R1vOnhbKquButOj+0b2k43Gn1fz/Uqe9hijLCxMEtMIIcW38ny8w=="], 357 + 358 + "@volar/language-core": ["@volar/language-core@1.4.1", "", { "dependencies": { "@volar/source-map": "1.4.1" } }, "sha512-EIY+Swv+TjsWpxOxujjMf1ZXqOjg9MT2VMXZ+1dKva0wD8W0L6EtptFFcCJdBbcKmGMFkr57Qzz9VNMWhs3jXQ=="], 359 + 360 + "@volar/language-server": ["@volar/language-server@1.4.1", "", { "dependencies": { "@volar/language-core": "1.4.1", "@volar/language-service": "1.4.1", "@vscode/l10n": "^0.0.11", "request-light": "^0.7.0", "typesafe-path": "^0.2.2", "vscode-html-languageservice": "^5.0.4", "vscode-languageserver": "^8.1.0", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7" } }, "sha512-UxhiN205o8ZfTnMNhRPCtW+ncrBtqZMd+f08Xf99Je4WB+SYyv3VNnIZEQDXfaTXR6mLUgQ1mDwPsUOLKKGY8A=="], 361 + 362 + "@volar/language-service": ["@volar/language-service@1.4.1", "", { "dependencies": { "@volar/language-core": "1.4.1", "@volar/source-map": "1.4.1", "typescript-auto-import-cache": "^0.2.1", "vscode-html-languageservice": "^5.0.4", "vscode-json-languageservice": "^5.2.0", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7" } }, "sha512-F30uT+xk20ZYpxRwNW9xBEoErSqd9zNW7iuFwSIX9bYO/12RLjB2I+vgM/GdPZnzZ37imXa76ykwqTRXrafigQ=="], 363 + 364 + "@volar/source-map": ["@volar/source-map@1.4.1", "", { "dependencies": { "muggle-string": "^0.2.2" } }, "sha512-bZ46ad72dsbzuOWPUtJjBXkzSQzzSejuR3CT81+GvTEI2E994D8JPXzM3tl98zyCNnjgs4OkRyliImL1dvJ5BA=="], 365 + 366 + "@volar/typescript": ["@volar/typescript@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg=="], 367 + 368 + "@volar/vue-language-core": ["@volar/vue-language-core@1.6.5", "", { "dependencies": { "@volar/language-core": "1.4.1", "@volar/source-map": "1.4.1", "@vue/compiler-dom": "^3.3.0", "@vue/compiler-sfc": "^3.3.0", "@vue/reactivity": "^3.3.0", "@vue/shared": "^3.3.0", "minimatch": "^9.0.0", "muggle-string": "^0.2.2", "vue-template-compiler": "^2.7.14" } }, "sha512-IF2b6hW4QAxfsLd5mePmLgtkXzNi+YnH6ltCd80gb7+cbdpFMjM1I+w+nSg2kfBTyfu+W8useCZvW89kPTBpzg=="], 369 + 370 + "@volar/vue-language-server": ["@volar/vue-language-server@1.6.5", "", { "dependencies": { "@volar/language-core": "1.4.1", "@volar/language-server": "1.4.1", "@volar/vue-language-core": "1.6.5", "@volar/vue-language-service": "1.6.5", "vscode-languageserver-protocol": "^3.17.3", "vue-component-meta": "1.6.5" }, "bin": { "vue-language-server": "bin/vue-language-server.js" } }, "sha512-+/kSxBAkZbeVBePoG2qRSvCkVIslk1dNlU5wQHAcbzOFTi7pEQR6C+kjoj94I+vGXVGMFfDwOYm07sPsd8dM6w=="], 371 + 372 + "@volar/vue-language-service": ["@volar/vue-language-service@1.6.5", "", { "dependencies": { "@volar-plugins/css": "2.0.0", "@volar-plugins/emmet": "2.0.0", "@volar-plugins/html": "2.0.0", "@volar-plugins/json": "2.0.0", "@volar-plugins/pug": "2.0.0", "@volar-plugins/pug-beautify": "2.0.0", "@volar-plugins/typescript": "2.0.0", "@volar-plugins/typescript-twoslash-queries": "2.0.0", "@volar/language-core": "1.4.1", "@volar/language-service": "1.4.1", "@volar/source-map": "1.4.1", "@volar/vue-language-core": "1.6.5", "@vue/compiler-dom": "^3.3.0", "@vue/reactivity": "^3.3.0", "@vue/shared": "^3.3.0", "vscode-html-languageservice": "^5.0.4", "vscode-json-languageservice": "^5.2.0", "vscode-languageserver-protocol": "^3.17.3", "vscode-languageserver-textdocument": "^1.0.8", "vscode-uri": "^3.0.7" } }, "sha512-2uZPvDfo8Bspq9u+RaQhsdONFhu35HBS7/ZDXhhmhyMfcN327e1vnvAhHPDfOb8XNFg/Cj54rVKegANpKZJTOg=="], 373 + 374 + "@vscode/emmet-helper": ["@vscode/emmet-helper@2.11.0", "", { "dependencies": { "emmet": "^2.4.3", "jsonc-parser": "^2.3.0", "vscode-languageserver-textdocument": "^1.0.1", "vscode-languageserver-types": "^3.15.1", "vscode-uri": "^3.0.8" } }, "sha512-QLxjQR3imPZPQltfbWRnHU6JecWTF1QSWhx3GAKQpslx7y3Dp6sIIXhKjiUJ/BR9FX8PVthjr9PD6pNwOJfAzw=="], 375 + 376 + "@vscode/l10n": ["@vscode/l10n@0.0.11", "", {}, "sha512-ukOMWnCg1tCvT7WnDfsUKQOFDQGsyR5tNgRpwmqi+5/vzU3ghdDXzvIM4IOPdSb3OeSsBNvmSL8nxIVOqi2WXA=="], 328 377 329 378 "@vue/babel-helper-vue-transform-on": ["@vue/babel-helper-vue-transform-on@1.5.0", "", {}, "sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA=="], 330 379 ··· 340 389 341 390 "@vue/compiler-ssr": ["@vue/compiler-ssr@3.5.26", "", { "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/shared": "3.5.26" } }, "sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw=="], 342 391 392 + "@vue/compiler-vue2": ["@vue/compiler-vue2@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A=="], 393 + 343 394 "@vue/devtools-api": ["@vue/devtools-api@7.7.9", "", { "dependencies": { "@vue/devtools-kit": "^7.7.9" } }, "sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g=="], 344 395 345 396 "@vue/devtools-core": ["@vue/devtools-core@8.0.5", "", { "dependencies": { "@vue/devtools-kit": "^8.0.5", "@vue/devtools-shared": "^8.0.5", "mitt": "^3.0.1", "nanoid": "^5.1.5", "pathe": "^2.0.3", "vite-hot-client": "^2.1.0" }, "peerDependencies": { "vue": "^3.0.0" } }, "sha512-dpCw8nl0GDBuiL9SaY0mtDxoGIEmU38w+TQiYEPOLhW03VDC0lfNMYXS/qhl4I0YlysGp04NLY4UNn6xgD0VIQ=="], ··· 352 403 353 404 "@vue/eslint-config-typescript": ["@vue/eslint-config-typescript@14.6.0", "", { "dependencies": { "@typescript-eslint/utils": "^8.35.1", "fast-glob": "^3.3.3", "typescript-eslint": "^8.35.1", "vue-eslint-parser": "^10.2.0" }, "peerDependencies": { "eslint": "^9.10.0", "eslint-plugin-vue": "^9.28.0 || ^10.0.0", "typescript": ">=4.8.4" }, "optionalPeers": ["typescript"] }, "sha512-UpiRY/7go4Yps4mYCjkvlIbVWmn9YvPGQDxTAlcKLphyaD77LjIu3plH4Y9zNT0GB4f3K5tMmhhtRhPOgrQ/bQ=="], 354 405 355 - "@vue/language-core": ["@vue/language-core@3.1.8", "", { "dependencies": { "@volar/language-core": "2.4.26", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw=="], 406 + "@vue/language-core": ["@vue/language-core@3.2.0", "", { "dependencies": { "@volar/language-core": "2.4.27", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" } }, "sha512-CHIuDtZ04CIElAgEuLbwmq3p7QcmYoVPmBPqtdvWJCflZE5W3KHT/5DRBvDv1r2TteCjN02uYHiaAEWq9hQNiA=="], 407 + 408 + "@vue/language-server": ["@vue/language-server@2.0.29", "", { "dependencies": { "@volar/language-core": "~2.4.0-alpha.18", "@volar/language-server": "~2.4.0-alpha.18", "@vue/language-core": "2.0.29", "@vue/language-service": "2.0.29", "@vue/typescript-plugin": "2.0.29", "vscode-languageserver-protocol": "^3.17.5", "vscode-uri": "^3.0.8" }, "bin": { "vue-language-server": "./bin/vue-language-server.js" } }, "sha512-Nni7KwxQBzFVKJj9tLIDe1MVmFBFHtup8yC5LIrWq+8/LFNcznf9QHBjgEWEmwfz6PKtv46vH1hqHlmPrClf/w=="], 409 + 410 + "@vue/language-service": ["@vue/language-service@2.0.29", "", { "dependencies": { "@volar/language-core": "~2.4.0-alpha.18", "@volar/language-service": "~2.4.0-alpha.18", "@volar/typescript": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", "@vue/language-core": "2.0.29", "@vue/shared": "^3.4.0", "@vue/typescript-plugin": "2.0.29", "computeds": "^0.0.1", "path-browserify": "^1.0.1", "volar-service-css": "0.0.59", "volar-service-emmet": "0.0.59", "volar-service-html": "0.0.59", "volar-service-json": "0.0.59", "volar-service-pug": "0.0.59", "volar-service-pug-beautify": "0.0.59", "volar-service-typescript": "0.0.59", "volar-service-typescript-twoslash-queries": "0.0.59", "vscode-html-languageservice": "^5.2.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-lY54t7KNp1WKXfYccTj9PizwE8zrswTZbYzYdLyoeLyLwcO/JlkMssTrt1G+64TLBwBptvV9PwvNw5Bp2YxJHg=="], 356 411 357 412 "@vue/reactivity": ["@vue/reactivity@3.5.26", "", { "dependencies": { "@vue/shared": "3.5.26" } }, "sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ=="], 358 413 ··· 365 420 "@vue/shared": ["@vue/shared@3.5.26", "", {}, "sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A=="], 366 421 367 422 "@vue/tsconfig": ["@vue/tsconfig@0.8.1", "", { "peerDependencies": { "typescript": "5.x", "vue": "^3.4.0" }, "optionalPeers": ["typescript", "vue"] }, "sha512-aK7feIWPXFSUhsCP9PFqPyFOcz4ENkb8hZ2pneL6m2UjCkccvaOhC/5KCKluuBufvp2KzkbdA2W2pk20vLzu3g=="], 423 + 424 + "@vue/typescript-plugin": ["@vue/typescript-plugin@3.2.0", "", { "dependencies": { "@volar/typescript": "2.4.27", "@vue/language-core": "3.2.0", "@vue/shared": "^3.5.0", "path-browserify": "^1.0.1", "vue-component-meta": "3.2.0" } }, "sha512-DLFqvbCPlIOvGLJRTZQsizADyfPgiN/qaHCcrshsk0IcL1Uu9Hpp065eaquz8CxK6irxUIANQdyjfRNLAo6Qlg=="], 368 425 369 426 "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], 370 427 ··· 397 454 "buffer-builder": ["buffer-builder@0.2.0", "", {}, "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg=="], 398 455 399 456 "bundle-name": ["bundle-name@4.1.0", "", { "dependencies": { "run-applescript": "^7.0.0" } }, "sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q=="], 457 + 458 + "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="], 459 + 460 + "call-bound": ["call-bound@1.0.4", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "get-intrinsic": "^1.3.0" } }, "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg=="], 400 461 401 462 "callsites": ["callsites@3.1.0", "", {}, "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ=="], 402 463 ··· 404 465 405 466 "chalk": ["chalk@4.1.2", "", { "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA=="], 406 467 468 + "character-parser": ["character-parser@2.2.0", "", { "dependencies": { "is-regex": "^1.0.3" } }, "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw=="], 469 + 407 470 "chokidar": ["chokidar@4.0.3", "", { "dependencies": { "readdirp": "^4.0.1" } }, "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA=="], 408 471 409 472 "color-convert": ["color-convert@2.0.1", "", { "dependencies": { "color-name": "~1.1.4" } }, "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ=="], ··· 411 474 "color-name": ["color-name@1.1.4", "", {}, "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="], 412 475 413 476 "colorjs.io": ["colorjs.io@0.5.2", "", {}, "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw=="], 477 + 478 + "computeds": ["computeds@0.0.1", "", {}, "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q=="], 414 479 415 480 "concat-map": ["concat-map@0.0.1", "", {}, "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="], 416 481 ··· 424 489 425 490 "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], 426 491 492 + "de-indent": ["de-indent@1.0.2", "", {}, "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="], 493 + 427 494 "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], 428 495 429 496 "deep-is": ["deep-is@0.1.4", "", {}, "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ=="], ··· 435 502 "define-lazy-prop": ["define-lazy-prop@3.0.0", "", {}, "sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg=="], 436 503 437 504 "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], 505 + 506 + "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="], 438 507 439 508 "electron-to-chromium": ["electron-to-chromium@1.5.267", "", {}, "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw=="], 440 509 510 + "emmet": ["emmet@2.4.11", "", { "dependencies": { "@emmetio/abbreviation": "^2.3.3", "@emmetio/css-abbreviation": "^2.1.8" } }, "sha512-23QPJB3moh/U9sT4rQzGgeyyGIrcM+GH5uVYg2C6wZIxAIJq7Ng3QLT79tl8FUwDXhyq9SusfknOrofAKqvgyQ=="], 511 + 441 512 "entities": ["entities@7.0.0", "", {}, "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ=="], 442 513 443 514 "error-stack-parser-es": ["error-stack-parser-es@1.0.5", "", {}, "sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA=="], 515 + 516 + "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="], 517 + 518 + "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="], 519 + 520 + "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="], 444 521 445 522 "escalade": ["escalade@3.2.0", "", {}, "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA=="], 446 523 ··· 500 577 501 578 "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="], 502 579 580 + "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="], 581 + 503 582 "gensync": ["gensync@1.0.0-beta.2", "", {}, "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg=="], 504 583 584 + "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="], 585 + 586 + "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="], 587 + 505 588 "glob-parent": ["glob-parent@6.0.2", "", { "dependencies": { "is-glob": "^4.0.3" } }, "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A=="], 506 589 507 590 "globals": ["globals@14.0.0", "", {}, "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="], 591 + 592 + "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="], 508 593 509 594 "has-flag": ["has-flag@4.0.0", "", {}, "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="], 510 595 596 + "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="], 597 + 598 + "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="], 599 + 600 + "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="], 601 + 602 + "he": ["he@1.2.0", "", { "bin": { "he": "bin/he" } }, "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw=="], 603 + 511 604 "hookable": ["hookable@5.5.3", "", {}, "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ=="], 512 605 513 606 "ignore": ["ignore@5.3.2", "", {}, "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g=="], ··· 520 613 521 614 "is-docker": ["is-docker@3.0.0", "", { "bin": { "is-docker": "cli.js" } }, "sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ=="], 522 615 616 + "is-expression": ["is-expression@4.0.0", "", { "dependencies": { "acorn": "^7.1.1", "object-assign": "^4.1.1" } }, "sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A=="], 617 + 523 618 "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="], 524 619 525 620 "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="], ··· 527 622 "is-inside-container": ["is-inside-container@1.0.0", "", { "dependencies": { "is-docker": "^3.0.0" }, "bin": { "is-inside-container": "cli.js" } }, "sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA=="], 528 623 529 624 "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="], 625 + 626 + "is-regex": ["is-regex@1.2.1", "", { "dependencies": { "call-bound": "^1.0.2", "gopd": "^1.2.0", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g=="], 530 627 531 628 "is-what": ["is-what@5.5.0", "", {}, "sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw=="], 532 629 ··· 592 689 593 690 "magic-string": ["magic-string@0.30.21", "", { "dependencies": { "@jridgewell/sourcemap-codec": "^1.5.5" } }, "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ=="], 594 691 692 + "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="], 693 + 595 694 "memorystream": ["memorystream@0.3.1", "", {}, "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw=="], 596 695 597 696 "merge2": ["merge2@1.4.1", "", {}, "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="], ··· 621 720 "npm-run-all2": ["npm-run-all2@8.0.4", "", { "dependencies": { "ansi-styles": "^6.2.1", "cross-spawn": "^7.0.6", "memorystream": "^0.3.1", "picomatch": "^4.0.2", "pidtree": "^0.6.0", "read-package-json-fast": "^4.0.0", "shell-quote": "^1.7.3", "which": "^5.0.0" }, "bin": { "run-p": "bin/run-p/index.js", "run-s": "bin/run-s/index.js", "npm-run-all": "bin/npm-run-all/index.js", "npm-run-all2": "bin/npm-run-all/index.js" } }, "sha512-wdbB5My48XKp2ZfJUlhnLVihzeuA1hgBnqB2J9ahV77wLS+/YAJAlN8I+X3DIFIPZ3m5L7nplmlbhNiFDmXRDA=="], 622 721 623 722 "nth-check": ["nth-check@2.1.1", "", { "dependencies": { "boolbase": "^1.0.0" } }, "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w=="], 723 + 724 + "object-assign": ["object-assign@4.1.1", "", {}, "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg=="], 624 725 625 726 "ohash": ["ohash@2.0.11", "", {}, "sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ=="], 626 727 ··· 666 767 667 768 "prettier-linter-helpers": ["prettier-linter-helpers@1.0.0", "", { "dependencies": { "fast-diff": "^1.1.2" } }, "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w=="], 668 769 770 + "pug-error": ["pug-error@2.1.0", "", {}, "sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg=="], 771 + 772 + "pug-lexer": ["pug-lexer@5.0.1", "", { "dependencies": { "character-parser": "^2.2.0", "is-expression": "^4.0.0", "pug-error": "^2.0.0" } }, "sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w=="], 773 + 774 + "pug-parser": ["pug-parser@6.0.0", "", { "dependencies": { "pug-error": "^2.0.0", "token-stream": "1.0.0" } }, "sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw=="], 775 + 669 776 "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], 670 777 671 778 "queue-microtask": ["queue-microtask@1.2.3", "", {}, "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="], ··· 673 780 "read-package-json-fast": ["read-package-json-fast@4.0.0", "", { "dependencies": { "json-parse-even-better-errors": "^4.0.0", "npm-normalize-package-bin": "^4.0.0" } }, "sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg=="], 674 781 675 782 "readdirp": ["readdirp@4.1.2", "", {}, "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg=="], 783 + 784 + "request-light": ["request-light@0.7.0", "", {}, "sha512-lMbBMrDoxgsyO+yB3sDcrDuX85yYt7sS8BfQd11jtbW/z5ZWgLZRcEGLsLoYw7I0WSUGQBs8CC8ScIxkTX1+6Q=="], 676 785 677 786 "resolve-from": ["resolve-from@4.0.0", "", {}, "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g=="], 678 787 ··· 758 867 759 868 "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="], 760 869 870 + "token-stream": ["token-stream@1.0.0", "", {}, "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="], 871 + 761 872 "totalist": ["totalist@3.0.1", "", {}, "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ=="], 762 873 763 874 "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], ··· 766 877 767 878 "type-check": ["type-check@0.4.0", "", { "dependencies": { "prelude-ls": "^1.2.1" } }, "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew=="], 768 879 880 + "typesafe-path": ["typesafe-path@0.2.2", "", {}, "sha512-OJabfkAg1WLZSqJAJ0Z6Sdt3utnbzr/jh+NAHoyWHJe8CMSy79Gm085094M9nvTPy22KzTVn5Zq5mbapCI/hPA=="], 881 + 769 882 "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="], 883 + 884 + "typescript-auto-import-cache": ["typescript-auto-import-cache@0.2.1", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-FD5uYQSNkVTX4b3lvtifP+SR3bARWGmKe/uyp5BfuW2ZUCYG7vHKPddrteLU06Uh68woRaYIX+Sbs2nnySpGLw=="], 770 885 771 886 "typescript-eslint": ["typescript-eslint@8.50.0", "", { "dependencies": { "@typescript-eslint/eslint-plugin": "8.50.0", "@typescript-eslint/parser": "8.50.0", "@typescript-eslint/typescript-estree": "8.50.0", "@typescript-eslint/utils": "8.50.0" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A=="], 772 887 ··· 794 909 795 910 "vite-plugin-vue-inspector": ["vite-plugin-vue-inspector@5.3.2", "", { "dependencies": { "@babel/core": "^7.23.0", "@babel/plugin-proposal-decorators": "^7.23.0", "@babel/plugin-syntax-import-attributes": "^7.22.5", "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-transform-typescript": "^7.22.15", "@vue/babel-plugin-jsx": "^1.1.5", "@vue/compiler-dom": "^3.3.4", "kolorist": "^1.8.0", "magic-string": "^0.30.4" }, "peerDependencies": { "vite": "^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0" } }, "sha512-YvEKooQcSiBTAs0DoYLfefNja9bLgkFM7NI2b07bE2SruuvX0MEa9cMaxjKVMkeCp5Nz9FRIdcN1rOdFVBeL6Q=="], 796 911 912 + "volar-service-css": ["volar-service-css@0.0.59", "", { "dependencies": { "vscode-css-languageservice": "^6.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-gLNjJnECbalPvQB7qeJjhkDN8sR5M3ItbVYjnyio61aHaWptIiXm/HfDahcQ2ApwmvWidkMWWegjGq5L0BENDA=="], 913 + 914 + "volar-service-emmet": ["volar-service-emmet@0.0.59", "", { "dependencies": { "@emmetio/css-parser": "^0.4.0", "@emmetio/html-matcher": "^1.3.0", "@vscode/emmet-helper": "^2.9.3", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-6EynHcuMwMBETpK29TbZvIMmvzdVG+Tkokk9VWfZeI+SwDptk2tgdhEqiXXvIkqYNgbuu73Itp66lpH76cAU+Q=="], 915 + 916 + "volar-service-html": ["volar-service-html@0.0.59", "", { "dependencies": { "vscode-html-languageservice": "^5.3.0", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-hEXOsYpILDlITZxnqRLV9OepVWD63GZBsyjMxszwdzlxvGZjzbGcBBinJGGJRwFIV8djdJwnt91bkdg1V5tj6Q=="], 917 + 918 + "volar-service-json": ["volar-service-json@0.0.59", "", { "dependencies": { "vscode-json-languageservice": "^5.4.0", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-LfDOQhCvUpDBjA6CP9EogO0dn1yEFbInvV3Yk4OsEdyxwWUEYPLVjDacPlVUYcjCIKQN6NcTOWbVwpg4vYjw6A=="], 919 + 920 + "volar-service-pug": ["volar-service-pug@0.0.59", "", { "dependencies": { "@volar/language-service": "~2.4.0-alpha.12", "muggle-string": "^0.4.1", "pug-lexer": "^5.0.1", "pug-parser": "^6.0.0", "volar-service-html": "0.0.59", "vscode-html-languageservice": "^5.3.0", "vscode-languageserver-textdocument": "^1.0.11" } }, "sha512-kmch7yoqeGNlJuDzpw/YL2b89ilzBmWDd0lJbpG412/RXc3PJVA4usUK+SQHdVoF+qi5IcZL6IDxlvRiIrDgWg=="], 921 + 922 + "volar-service-pug-beautify": ["volar-service-pug-beautify@0.0.59", "", { "dependencies": { "@johnsoncodehk/pug-beautify": "^0.2.2" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-SCLWHpBdgvWww3a9Vp8FX80ookozhnHx10gkKBTYW4wp7/rzEoVAPSyO7JKBwTdXmdKQv7YXfxLMVUGv0sYUKg=="], 923 + 924 + "volar-service-typescript": ["volar-service-typescript@0.0.59", "", { "dependencies": { "path-browserify": "^1.0.1", "semver": "^7.6.2", "typescript-auto-import-cache": "^0.3.3", "vscode-languageserver-textdocument": "^1.0.11", "vscode-nls": "^5.2.0", "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-VCOpfiu+lUo5lapWLB5L5vmQGtwzmNWn5MueV915eku7blpphmE+Z7hCNcL1NApn7AetXWhiblv8ZhmUx/dGIA=="], 925 + 926 + "volar-service-typescript-twoslash-queries": ["volar-service-typescript-twoslash-queries@0.0.59", "", { "dependencies": { "vscode-uri": "^3.0.8" }, "peerDependencies": { "@volar/language-service": "~2.4.0-alpha.12" }, "optionalPeers": ["@volar/language-service"] }, "sha512-skm8e6yhCIkqLwJB6S9MqT5lO9LNFuMD3dYxKpmOZs1CKbXmCZZTmLfEaD5VkJae1xdleEDZFFTHl2O5HLjOGQ=="], 927 + 928 + "vscode-css-languageservice": ["vscode-css-languageservice@6.3.9", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-1tLWfp+TDM5ZuVWht3jmaY5y7O6aZmpeXLoHl5bv1QtRsRKt4xYGRMmdJa5Pqx/FTkgRbsna9R+Gn2xE+evVuA=="], 929 + 930 + "vscode-html-languageservice": ["vscode-html-languageservice@5.6.1", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-5Mrqy5CLfFZUgkyhNZLA1Ye5g12Cb/v6VM7SxUzZUaRKWMDz4md+y26PrfRTSU0/eQAl3XpO9m2og+GGtDMuaA=="], 931 + 932 + "vscode-json-languageservice": ["vscode-json-languageservice@5.6.4", "", { "dependencies": { "@vscode/l10n": "^0.0.18", "jsonc-parser": "^3.3.1", "vscode-languageserver-textdocument": "^1.0.12", "vscode-languageserver-types": "^3.17.5", "vscode-uri": "^3.1.0" } }, "sha512-i0MhkFmnQAbYr+PiE6Th067qa3rwvvAErCEUo0ql+ghFXHvxbwG3kLbwMaIUrrbCLUDEeULiLgROJjtuyYoIsA=="], 933 + 934 + "vscode-jsonrpc": ["vscode-jsonrpc@8.2.0", "", {}, "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA=="], 935 + 936 + "vscode-languageserver": ["vscode-languageserver@8.1.0", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.3" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-eUt8f1z2N2IEUDBsKaNapkz7jl5QpskN2Y0G01T/ItMxBxw1fJwvtySGB9QMecatne8jFIWJGWI61dWjyTLQsw=="], 937 + 938 + "vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.5", "", { "dependencies": { "vscode-jsonrpc": "8.2.0", "vscode-languageserver-types": "3.17.5" } }, "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg=="], 939 + 940 + "vscode-languageserver-textdocument": ["vscode-languageserver-textdocument@1.0.12", "", {}, "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="], 941 + 942 + "vscode-languageserver-types": ["vscode-languageserver-types@3.17.5", "", {}, "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="], 943 + 944 + "vscode-nls": ["vscode-nls@5.2.0", "", {}, "sha512-RAaHx7B14ZU04EU31pT+rKz2/zSl7xMsfIZuo8pd+KZO6PXtQmpevpq3vxvWNcrGbdmhM/rr5Uw5Mz+NBfhVng=="], 945 + 797 946 "vscode-uri": ["vscode-uri@3.1.0", "", {}, "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ=="], 798 947 799 948 "vue": ["vue@3.5.26", "", { "dependencies": { "@vue/compiler-dom": "3.5.26", "@vue/compiler-sfc": "3.5.26", "@vue/runtime-dom": "3.5.26", "@vue/server-renderer": "3.5.26", "@vue/shared": "3.5.26" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA=="], 800 949 950 + "vue-component-meta": ["vue-component-meta@3.2.0", "", { "dependencies": { "@volar/typescript": "2.4.27", "@vue/language-core": "3.2.0", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-HU1A//MXRUfNXzQj6RktgCXAL0uXF39tGSlCRoyvXOZPhn8L0GaIFt9AYzZsFi+r17X+xVrdeRwITLkVAvjPmw=="], 951 + 952 + "vue-component-type-helpers": ["vue-component-type-helpers@1.6.5", "", {}, "sha512-iGdlqtajmiqed8ptURKPJ/Olz0/mwripVZszg6tygfZSIL9kYFPJTNY6+Q6OjWGznl2L06vxG5HvNvAnWrnzbg=="], 953 + 801 954 "vue-eslint-parser": ["vue-eslint-parser@10.2.0", "", { "dependencies": { "debug": "^4.4.0", "eslint-scope": "^8.2.0", "eslint-visitor-keys": "^4.2.0", "espree": "^10.3.0", "esquery": "^1.6.0", "semver": "^7.6.3" }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" } }, "sha512-CydUvFOQKD928UzZhTp4pr2vWz1L+H99t7Pkln2QSPdvmURT0MoC4wUccfCnuEaihNsu9aYYyk+bep8rlfkUXw=="], 955 + 956 + "vue-template-compiler": ["vue-template-compiler@2.7.16", "", { "dependencies": { "de-indent": "^1.0.2", "he": "^1.2.0" } }, "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ=="], 802 957 803 958 "vue-tsc": ["vue-tsc@3.1.8", "", { "dependencies": { "@volar/typescript": "2.4.26", "@vue/language-core": "3.1.8" }, "peerDependencies": { "typescript": ">=5.0.0" }, "bin": { "vue-tsc": "./bin/vue-tsc.js" } }, "sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA=="], 804 959 ··· 828 983 829 984 "@typescript-eslint/typescript-estree/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 830 985 986 + "@volar-plugins/pug/muggle-string": ["muggle-string@0.2.2", "", {}, "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg=="], 987 + 988 + "@volar-plugins/typescript/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 989 + 990 + "@volar/source-map/muggle-string": ["muggle-string@0.2.2", "", {}, "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg=="], 991 + 992 + "@volar/typescript/@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], 993 + 994 + "@volar/vue-language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 995 + 996 + "@volar/vue-language-core/muggle-string": ["muggle-string@0.2.2", "", {}, "sha512-YVE1mIJ4VpUMqZObFndk9CJu6DBJR/GB13p3tXuNbwD4XExaI5EOuRl6BHeIDxIqXZVxSfAC+y6U1Z/IxCfKUg=="], 997 + 998 + "@volar/vue-language-server/vue-component-meta": ["vue-component-meta@1.6.5", "", { "dependencies": { "@volar/language-core": "1.4.1", "@volar/vue-language-core": "1.6.5", "typesafe-path": "^0.2.2", "vue-component-type-helpers": "1.6.5" }, "peerDependencies": { "typescript": "*" } }, "sha512-pps5DTFz9JiqidXMrPCf/Qt8sngQYzkU73CB4zLh5dsPlAMSm742+/zOR4MgKxuaZSPAwDFazSRhRCkpkywmCw=="], 999 + 1000 + "@vscode/emmet-helper/jsonc-parser": ["jsonc-parser@2.3.1", "", {}, "sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg=="], 1001 + 831 1002 "@vue/devtools-api/@vue/devtools-kit": ["@vue/devtools-kit@7.7.9", "", { "dependencies": { "@vue/devtools-shared": "^7.7.9", "birpc": "^2.3.0", "hookable": "^5.5.3", "mitt": "^3.0.1", "perfect-debounce": "^1.0.0", "speakingurl": "^14.0.1", "superjson": "^2.2.2" } }, "sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA=="], 832 1003 1004 + "@vue/language-core/@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], 1005 + 1006 + "@vue/language-server/@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], 1007 + 1008 + "@vue/language-server/@volar/language-server": ["@volar/language-server@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "@volar/language-service": "2.4.27", "@volar/typescript": "2.4.27", "path-browserify": "^1.0.1", "request-light": "^0.7.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-SymGNkErcHg8GjiG65iQN8sLkhqu1pwKhFySmxeBuYq5xFYagKBW36eiNITXQTdvT0tutI1GXcXdq/FdE/IyjA=="], 1009 + 1010 + "@vue/language-server/@vue/language-core": ["@vue/language-core@2.0.29", "", { "dependencies": { "@volar/language-core": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ=="], 1011 + 1012 + "@vue/language-server/@vue/typescript-plugin": ["@vue/typescript-plugin@2.0.29", "", { "dependencies": { "@volar/typescript": "~2.4.0-alpha.18", "@vue/language-core": "2.0.29", "@vue/shared": "^3.4.0" } }, "sha512-cO/cP467bGONkm/imEVvcRg77/VmoWpLyO94jSwLAt8QV0X9l414SwsRdsae+wGMPV+6k7rweer0SP16A0HYdw=="], 1013 + 1014 + "@vue/language-service/@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], 1015 + 1016 + "@vue/language-service/@volar/language-service": ["@volar/language-service@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw=="], 1017 + 1018 + "@vue/language-service/@vue/language-core": ["@vue/language-core@2.0.29", "", { "dependencies": { "@volar/language-core": "~2.4.0-alpha.18", "@vue/compiler-dom": "^3.4.0", "@vue/compiler-vue2": "^2.7.16", "@vue/shared": "^3.4.0", "computeds": "^0.0.1", "minimatch": "^9.0.3", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-o2qz9JPjhdoVj8D2+9bDXbaI4q2uZTHQA/dbyZT4Bj1FR9viZxDJnLcKVHfxdn6wsOzRgpqIzJEEmSSvgMvDTQ=="], 1019 + 1020 + "@vue/language-service/@vue/typescript-plugin": ["@vue/typescript-plugin@2.0.29", "", { "dependencies": { "@volar/typescript": "~2.4.0-alpha.18", "@vue/language-core": "2.0.29", "@vue/shared": "^3.4.0" } }, "sha512-cO/cP467bGONkm/imEVvcRg77/VmoWpLyO94jSwLAt8QV0X9l414SwsRdsae+wGMPV+6k7rweer0SP16A0HYdw=="], 1021 + 833 1022 "chalk/ansi-styles": ["ansi-styles@4.3.0", "", { "dependencies": { "color-convert": "^2.0.1" } }, "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg=="], 834 1023 835 1024 "chalk/supports-color": ["supports-color@7.2.0", "", { "dependencies": { "has-flag": "^4.0.0" } }, "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw=="], ··· 837 1026 "cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], 838 1027 839 1028 "fast-glob/glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="], 1029 + 1030 + "is-expression/acorn": ["acorn@7.4.1", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A=="], 840 1031 841 1032 "micromatch/picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="], 842 1033 ··· 844 1035 845 1036 "rolldown/@oxc-project/types": ["@oxc-project/types@0.101.0", "", {}, "sha512-nuFhqlUzJX+gVIPPfuE6xurd4lST3mdcWOhyK/rZO0B9XWMKm79SuszIQEnSMmmDhq1DC8WWVYGVd+6F93o1gQ=="], 846 1037 1038 + "volar-service-pug/@volar/language-service": ["@volar/language-service@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw=="], 1039 + 1040 + "volar-service-typescript/typescript-auto-import-cache": ["typescript-auto-import-cache@0.3.6", "", { "dependencies": { "semver": "^7.3.8" } }, "sha512-RpuHXrknHdVdK7wv/8ug3Fr0WNsNi5l5aB8MYYuXhq2UH5lnEB1htJ1smhtD5VeCsGr2p8mUDtd83LCQDFVgjQ=="], 1041 + 1042 + "vscode-css-languageservice/@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], 1043 + 1044 + "vscode-html-languageservice/@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], 1045 + 1046 + "vscode-json-languageservice/@vscode/l10n": ["@vscode/l10n@0.0.18", "", {}, "sha512-KYSIHVmslkaCDyw013pphY+d7x1qV8IZupYfeIfzNA+nsaWHbn5uPuQRvdRFsa9zFzGeudPuoGoZ1Op4jrJXIQ=="], 1047 + 1048 + "vscode-languageserver/vscode-languageserver-protocol": ["vscode-languageserver-protocol@3.17.3", "", { "dependencies": { "vscode-jsonrpc": "8.1.0", "vscode-languageserver-types": "3.17.3" } }, "sha512-924/h0AqsMtA5yK22GgMtCYiMdCOtWTSGgUOkgEDX+wk2b0x4sAfLiO4NxBxqbiVtz7K7/1/RgVrVI0NClZwqA=="], 1049 + 1050 + "vue-tsc/@volar/typescript": ["@volar/typescript@2.4.26", "", { "dependencies": { "@volar/language-core": "2.4.26", "path-browserify": "^1.0.1", "vscode-uri": "^3.0.8" } }, "sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA=="], 1051 + 1052 + "vue-tsc/@vue/language-core": ["@vue/language-core@3.1.8", "", { "dependencies": { "@volar/language-core": "2.4.26", "@vue/compiler-dom": "^3.5.0", "@vue/shared": "^3.5.0", "alien-signals": "^3.0.0", "muggle-string": "^0.4.1", "path-browserify": "^1.0.1", "picomatch": "^4.0.2" }, "peerDependencies": { "typescript": "*" }, "optionalPeers": ["typescript"] }, "sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw=="], 1053 + 847 1054 "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 848 1055 1056 + "@volar-plugins/typescript/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 1057 + 1058 + "@volar/typescript/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], 1059 + 1060 + "@volar/vue-language-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 1061 + 849 1062 "@vue/devtools-api/@vue/devtools-kit/@vue/devtools-shared": ["@vue/devtools-shared@7.7.9", "", { "dependencies": { "rfdc": "^1.4.1" } }, "sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA=="], 850 1063 851 1064 "@vue/devtools-api/@vue/devtools-kit/perfect-debounce": ["perfect-debounce@1.0.0", "", {}, "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA=="], 852 1065 1066 + "@vue/language-core/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], 1067 + 1068 + "@vue/language-server/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], 1069 + 1070 + "@vue/language-server/@volar/language-server/@volar/language-service": ["@volar/language-service@2.4.27", "", { "dependencies": { "@volar/language-core": "2.4.27", "vscode-languageserver-protocol": "^3.17.5", "vscode-languageserver-textdocument": "^1.0.11", "vscode-uri": "^3.0.8" } }, "sha512-SxKZ8yLhpWa7Y5e/RDxtNfm7j7xsXp/uf2urijXEffRNpPSmVdfzQrFFy5d7l8PNpZy+bHg+yakmqBPjQN+MOw=="], 1071 + 1072 + "@vue/language-server/@volar/language-server/vscode-languageserver": ["vscode-languageserver@9.0.1", "", { "dependencies": { "vscode-languageserver-protocol": "3.17.5" }, "bin": { "installServerIntoExtension": "bin/installServerIntoExtension" } }, "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g=="], 1073 + 1074 + "@vue/language-server/@vue/language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 1075 + 1076 + "@vue/language-service/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], 1077 + 1078 + "@vue/language-service/@vue/language-core/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], 1079 + 853 1080 "cross-spawn/which/isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], 1081 + 1082 + "volar-service-pug/@volar/language-service/@volar/language-core": ["@volar/language-core@2.4.27", "", { "dependencies": { "@volar/source-map": "2.4.27" } }, "sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ=="], 1083 + 1084 + "vscode-languageserver/vscode-languageserver-protocol/vscode-jsonrpc": ["vscode-jsonrpc@8.1.0", "", {}, "sha512-6TDy/abTQk+zDGYazgbIPc+4JoXdwC8NHU9Pbn4UJP1fehUyZmM4RHp5IthX7A6L5KS30PRui+j+tbbMMMafdw=="], 1085 + 1086 + "vscode-languageserver/vscode-languageserver-protocol/vscode-languageserver-types": ["vscode-languageserver-types@3.17.3", "", {}, "sha512-SYU4z1dL0PyIMd4Vj8YOqFvHu7Hz/enbWtpfnVbJHU4Nd1YNYx8u0ennumc6h48GQNeOLxmwySmnADouT/AuZA=="], 1087 + 1088 + "vue-tsc/@volar/typescript/@volar/language-core": ["@volar/language-core@2.4.26", "", { "dependencies": { "@volar/source-map": "2.4.26" } }, "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A=="], 1089 + 1090 + "vue-tsc/@vue/language-core/@volar/language-core": ["@volar/language-core@2.4.26", "", { "dependencies": { "@volar/source-map": "2.4.26" } }, "sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A=="], 1091 + 1092 + "@vue/language-server/@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 1093 + 1094 + "@vue/language-service/@vue/language-core/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], 1095 + 1096 + "volar-service-pug/@volar/language-service/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.27", "", {}, "sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg=="], 1097 + 1098 + "vue-tsc/@volar/typescript/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.26", "", {}, "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw=="], 1099 + 1100 + "vue-tsc/@vue/language-core/@volar/language-core/@volar/source-map": ["@volar/source-map@2.4.26", "", {}, "sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw=="], 854 1101 } 855 1102 }
+51 -51
package.json
··· 1 1 { 2 - "name": "bluebell", 3 - "version": "0.0.0", 4 - "private": true, 5 - "type": "module", 6 - "engines": { 7 - "node": "^20.19.0 || >=22.12.0" 8 - }, 9 - "scripts": { 10 - "dev": "vite", 11 - "build": "run-p type-check \"build-only {@}\" --", 12 - "preview": "vite preview", 13 - "build-only": "vite build", 14 - "type-check": "vue-tsc --build", 15 - "lint:oxlint": "oxlint . --fix -D correctness --ignore-path .gitignore", 16 - "lint:eslint": "eslint . --fix --cache", 17 - "lint": "run-s lint:*", 18 - "format": "prettier --write --experimental-cli src/" 19 - }, 20 - "dependencies": { 21 - "@atcute/atproto": "^3.1.9", 22 - "@atcute/bluesky": "^3.2.14", 23 - "@atcute/client": "^4.1.1", 24 - "@atcute/identity-resolver": "^1.2.0", 25 - "@atcute/lexicons": "^1.2.5", 26 - "@atcute/oauth-browser-client": "^2.0.3", 27 - "@iconify-prerendered/vue-material-symbols": "^0.28.1755063979", 28 - "pinia": "^3.0.4", 29 - "vue": "^3.5.25" 30 - }, 31 - "devDependencies": { 32 - "@prettier/plugin-oxc": "^0.0.5", 33 - "@tsconfig/node24": "^24.0.3", 34 - "@types/node": "^24.10.1", 35 - "@vitejs/plugin-vue": "^6.0.2", 36 - "@vue/eslint-config-prettier": "^10.2.0", 37 - "@vue/eslint-config-typescript": "^14.6.0", 38 - "@vue/tsconfig": "^0.8.1", 39 - "eslint": "^9.39.1", 40 - "eslint-plugin-oxlint": "~1.29.0", 41 - "eslint-plugin-vue": "~10.5.1", 42 - "jiti": "^2.6.1", 43 - "npm-run-all2": "^8.0.4", 44 - "oxlint": "~1.29.0", 45 - "prettier": "3.6.2", 46 - "sass-embedded": "^1.97.0", 47 - "typescript": "~5.9.0", 48 - "vite": "npm:rolldown-vite@latest", 49 - "vite-plugin-vue-devtools": "^8.0.5", 50 - "vue-tsc": "^3.1.5" 51 - } 52 - } 2 + "name": "bluebell", 3 + "version": "0.0.0", 4 + "private": true, 5 + "type": "module", 6 + "engines": { 7 + "node": "^20.19.0 || >=22.12.0" 8 + }, 9 + "scripts": { 10 + "dev": "vite", 11 + "build": "run-p type-check \"build-only {@}\" --", 12 + "preview": "vite preview", 13 + "build-only": "vite build", 14 + "type-check": "vue-tsc --build", 15 + "lint:oxlint": "oxlint . --fix -D correctness --ignore-path .gitignore", 16 + "lint:eslint": "eslint . --fix --cache", 17 + "lint": "run-s lint:*", 18 + "format": "prettier --write --experimental-cli src/" 19 + }, 20 + "dependencies": { 21 + "@atcute/atproto": "^3.1.9", 22 + "@atcute/bluesky": "^3.2.14", 23 + "@atcute/client": "^4.1.1", 24 + "@atcute/identity-resolver": "^1.2.0", 25 + "@atcute/lexicons": "^1.2.5", 26 + "@atcute/oauth-browser-client": "^2.0.3", 27 + "@iconify-prerendered/vue-material-symbols": "^0.28.1755063979", 28 + "pinia": "^3.0.4", 29 + "vue": "^3.5.25" 30 + }, 31 + "devDependencies": { 32 + "@prettier/plugin-oxc": "^0.0.5", 33 + "@tsconfig/node24": "^24.0.3", 34 + "@types/node": "^25.0.3", 35 + "@vitejs/plugin-vue": "^6.0.2", 36 + "@vue/eslint-config-prettier": "^10.2.0", 37 + "@vue/eslint-config-typescript": "^14.6.0", 38 + "@vue/tsconfig": "^0.8.1", 39 + "eslint": "^9.39.1", 40 + "eslint-plugin-oxlint": "~1.29.0", 41 + "eslint-plugin-vue": "~10.5.1", 42 + "jiti": "^2.6.1", 43 + "npm-run-all2": "^8.0.4", 44 + "oxlint": "~1.29.0", 45 + "prettier": "3.6.2", 46 + "sass-embedded": "^1.97.0", 47 + "typescript": "^5.9.3", 48 + "vite": "npm:rolldown-vite@latest", 49 + "vite-plugin-vue-devtools": "^8.0.5", 50 + "vue-tsc": "^3.1.5" 51 + } 52 + }
+6 -5
src/assets/main.css
··· 1 1 @font-face { 2 - font-family: "OpenDyslexic"; 2 + font-family: 'OpenDyslexic'; 3 3 src: 4 - url("/fonts/OpenDyslexic-Regular.woff2") format("woff2"), 5 - url("/fonts/OpenDyslexic-Regular.woff") format("woff"); 4 + url('/fonts/OpenDyslexic-Regular.woff2') format('woff2'), 5 + url('/fonts/OpenDyslexic-Regular.woff') format('woff'); 6 6 font-weight: 400; 7 7 font-style: normal; 8 8 font-display: swap; ··· 53 53 --space-8: 2rem; 54 54 --space-12: 3rem; 55 55 56 + --radius-xsm: 0.25rem; 56 57 --radius-sm: 0.5rem; 57 58 --radius-md: 0.75rem; 58 59 --radius-lg: 1rem; ··· 71 72 background-color: hsl(var(--base)); 72 73 color: hsl(var(--text)); 73 74 font-family: 74 - -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", 75 - Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; 75 + -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif, 76 + 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol'; 76 77 font-size: 15px; 77 78 line-height: 1.5; 78 79 text-rendering: optimizeLegibility;
+43
src/components/Feed/Embeds/EmbedRecord.vue
··· 1 + <script setup lang="ts"> 2 + import { AppBskyEmbedRecord } from '@atcute/bluesky' 3 + import FeedItem from '../FeedItem.vue' 4 + 5 + defineProps<{ 6 + embed: AppBskyEmbedRecord.View 7 + }>() 8 + 9 + const messages: Record<string, string> = { 10 + 'app.bsky.embed.record#viewNotFound': "Couldn't find post, maybe it was deleted?", 11 + 'app.bsky.embed.record#viewBlocked': 'Blocked post.', 12 + 'app.bsky.embed.record#viewDetached': 'Quoted post was detached.', 13 + } 14 + </script> 15 + 16 + <template> 17 + <div class="embed-record"> 18 + <FeedItem 19 + v-if="embed.record.$type === 'app.bsky.embed.record#viewRecord'" 20 + :post="embed.record" 21 + :embedded="true" 22 + /> 23 + 24 + <div v-else class="not-found"> 25 + {{ messages[embed.record.$type] || 'Unknown embed type.' }} 26 + </div> 27 + </div> 28 + </template> 29 + 30 + <style scoped> 31 + .embed-record { 32 + margin-top: 0.5rem; 33 + } 34 + 35 + .not-found { 36 + padding: 0.75rem; 37 + border: 1px solid hsla(var(--surface2) / 0.5); 38 + border-radius: var(--radius-md); 39 + background-color: hsla(var(--surface0) / 0.3); 40 + color: hsl(var(--subtext0)); 41 + font-size: 0.9rem; 42 + } 43 + </style>
+126
src/components/Feed/Embeds/ImageEmbed.vue
··· 1 + <script lang="ts" setup> 2 + import { computed, ref } from 'vue' 3 + import { AppBskyEmbedImages } from '@atcute/bluesky' 4 + 5 + const props = defineProps<{ 6 + embed: AppBskyEmbedImages.View 7 + }>() 8 + 9 + const imageCount = computed(() => props.embed.images.length) 10 + 11 + // TODO)) lightbox. 12 + const lightboxOpen = ref(false) 13 + const activeImageIndex = ref(0) 14 + 15 + const openLightbox = (index: number) => { 16 + activeImageIndex.value = index 17 + lightboxOpen.value = true 18 + } 19 + </script> 20 + 21 + <template> 22 + <div class="image-embed" :class="`count-${imageCount}`"> 23 + <div 24 + v-for="(image, index) in embed.images" 25 + :key="index" 26 + class="image-container" 27 + @click.stop="openLightbox(index)" 28 + > 29 + <img :src="image.thumb" :alt="image.alt" loading="lazy" /> 30 + </div> 31 + </div> 32 + </template> 33 + 34 + <style lang="scss" scoped> 35 + .image-embed { 36 + display: grid; 37 + gap: 2px; 38 + overflow: hidden; 39 + margin-top: 0.5rem; 40 + width: 100%; 41 + aspect-ratio: 16 / 9; 42 + 43 + .image-container { 44 + position: relative; 45 + width: 100%; 46 + height: 100%; 47 + overflow: hidden; 48 + cursor: zoom-in; 49 + border: 1px solid hsla(var(--surface2) / 0.3); 50 + 51 + img { 52 + width: 100%; 53 + height: 100%; 54 + object-fit: contain; 55 + object-fit: cover; 56 + display: block; 57 + } 58 + } 59 + } 60 + 61 + .count-1 { 62 + display: block; 63 + aspect-ratio: auto; 64 + max-height: 600px; 65 + 66 + .image-container { 67 + height: auto; 68 + max-height: 600px; 69 + border-radius: var(--radius-md); 70 + 71 + img { 72 + height: auto; 73 + max-height: 600px; 74 + object-fit: cover; 75 + } 76 + } 77 + } 78 + 79 + .count-2 { 80 + grid-template-columns: 1fr 1fr; 81 + aspect-ratio: 2 / 1; 82 + 83 + .image-container:nth-child(1) { 84 + border-radius: var(--radius-md) var(--radius-xsm) var(--radius-xsm) var(--radius-md); 85 + } 86 + .image-container:nth-child(2) { 87 + border-radius: var(--radius-xsm) var(--radius-md) var(--radius-md) var(--radius-xsm); 88 + } 89 + } 90 + 91 + .count-3 { 92 + grid-template-columns: 1fr 1fr; 93 + grid-template-rows: 1fr 1fr; 94 + aspect-ratio: 4 / 3; 95 + 96 + .image-container:nth-child(1) { 97 + grid-row: 1 / -1; 98 + border-radius: var(--radius-md) var(--radius-xsm) var(--radius-xsm) var(--radius-md); 99 + } 100 + .image-container:nth-child(2) { 101 + border-radius: var(--radius-xsm) var(--radius-md) var(--radius-xsm) var(--radius-xsm); 102 + } 103 + .image-container:nth-child(3) { 104 + border-radius: var(--radius-xsm) var(--radius-xsm) var(--radius-md) var(--radius-xsm); 105 + } 106 + } 107 + 108 + .count-4 { 109 + grid-template-columns: 1fr 1fr; 110 + grid-template-rows: 1fr 1fr; 111 + aspect-ratio: 4 / 3; 112 + 113 + .image-container:nth-child(1) { 114 + border-radius: var(--radius-md) var(--radius-xsm) var(--radius-xsm) var(--radius-xsm); 115 + } 116 + .image-container:nth-child(2) { 117 + border-radius: var(--radius-xsm) var(--radius-md) var(--radius-xsm) var(--radius-xsm); 118 + } 119 + .image-container:nth-child(3) { 120 + border-radius: var(--radius-xsm) var(--radius-xsm) var(--radius-xsm) var(--radius-md); 121 + } 122 + .image-container:nth-child(4) { 123 + border-radius: var(--radius-xsm) var(--radius-xsm) var(--radius-md) var(--radius-xsm); 124 + } 125 + } 126 + </style>
+210 -104
src/components/Feed/FeedItem.vue
··· 1 1 <script setup lang="ts"> 2 - import { AppBskyFeedDefs } from '@atcute/bluesky' 2 + import { computed } from 'vue' 3 + import { AppBskyFeedDefs, AppBskyEmbedRecord } from '@atcute/bluesky' 3 4 import { 4 5 IconRefreshRounded, 5 6 IconChatBubbleOutlineRounded, ··· 7 8 IconFavoriteOutlineRounded, 8 9 IconFavoriteRounded, 9 10 } from '@iconify-prerendered/vue-material-symbols' 11 + 10 12 import { usePostStore } from '@/stores/posts' 13 + import ImageEmbed from './Embeds/ImageEmbed.vue' 14 + import EmbedRecord from './Embeds/EmbedRecord.vue' 15 + 16 + type PostInput = AppBskyFeedDefs.PostView | AppBskyEmbedRecord.ViewRecord 11 17 12 18 const props = defineProps<{ 13 - item: AppBskyFeedDefs.FeedViewPost 19 + item?: AppBskyFeedDefs.FeedViewPost 20 + post?: PostInput 21 + embedded?: boolean 14 22 }>() 15 23 16 24 const postStore = usePostStore() 17 25 18 - const formatTime = (dateString: string) => { 26 + const displayPost = computed(() => { 27 + if (props.item) return props.item.post 28 + 29 + if (props.post) { 30 + const p = props.post 31 + 32 + if ('value' in p && 'embeds' in p) { 33 + return { 34 + ...p, 35 + record: p.value, 36 + embed: p.embeds?.[0], 37 + } as AppBskyFeedDefs.PostView 38 + } 39 + 40 + return p as AppBskyFeedDefs.PostView 41 + } 42 + 43 + return null 44 + }) 45 + 46 + const embed = computed(() => displayPost.value?.embed) 47 + 48 + const formatTime = (dateString?: string) => { 49 + if (!dateString) return '' 19 50 const date = new Date(dateString) 20 51 const now = new Date() 21 52 const diff = (now.getTime() - date.getTime()) / 1000 ··· 34 65 } 35 66 36 67 const handleLike = () => { 37 - postStore.toggleLike(props.item.post) 68 + if (displayPost.value && !props.embedded) postStore.toggleLike(displayPost.value) 38 69 } 39 70 40 71 const handleRepost = () => { 41 - postStore.toggleRepost(props.item.post) 72 + if (displayPost.value && !props.embedded) postStore.toggleRepost(displayPost.value) 73 + } 74 + 75 + const handleClick = (e: MouseEvent) => { 76 + if (window.getSelection()?.toString().length) return 77 + 78 + if (props.embedded) { 79 + e.stopPropagation() 80 + } 81 + } 82 + 83 + const handleMiddleClick = () => { 84 + console.log(displayPost.value) 85 + navigator.clipboard.writeText(JSON.stringify(displayPost.value, null, 2)) 42 86 } 43 87 </script> 44 88 45 89 <template> 46 - <article :key="item.post.uri" class="feed-item" @mousedown.middle="console.log(item)"> 47 - <div v-if="item.reason?.$type === 'app.bsky.feed.defs#reasonRepost'" class="repost-indicator"> 90 + <article 91 + v-if="displayPost" 92 + :key="displayPost.uri" 93 + class="feed-item" 94 + :class="{ 'is-embedded': embedded }" 95 + @click="handleClick" 96 + @click.middle="handleMiddleClick" 97 + > 98 + <div v-if="item?.reason?.$type === 'app.bsky.feed.defs#reasonRepost'" class="repost-indicator"> 48 99 <IconRefreshRounded class="repost-icon" /> 49 100 <span>Reposted by {{ item.reason.by.displayName || item.reason.by.handle }}</span> 50 101 </div> ··· 52 103 <div class="post-layout"> 53 104 <div class="post-avatar"> 54 105 <img 55 - v-if="item.post.author.avatar" 56 - :src="item.post.author.avatar" 106 + v-if="displayPost.author.avatar" 107 + :src="displayPost.author.avatar" 57 108 alt="avatar" 58 109 loading="lazy" 59 110 /> ··· 63 114 <div class="post-content"> 64 115 <div class="post-header"> 65 116 <span class="display-name">{{ 66 - item.post.author.displayName || item.post.author.handle 117 + displayPost.author.displayName || displayPost.author.handle 67 118 }}</span> 68 - <span class="handle">@{{ item.post.author.handle }}</span> 119 + <span class="handle">@{{ displayPost.author.handle }}</span> 69 120 <span class="dot" aria-hidden="true">·</span> 70 - <span class="time">{{ formatTime(item.post.indexedAt) }}</span> 121 + <span class="time">{{ formatTime(displayPost.indexedAt) }}</span> 122 + </div> 123 + 124 + <div class="post-text" v-if="displayPost.record?.text"> 125 + {{ displayPost.record.text }} 71 126 </div> 72 127 73 - <div class="post-text" v-if="item.post.record.text"> 74 - {{ item.post.record.text }} 128 + <div class="post-embeds" v-if="embed"> 129 + <ImageEmbed v-if="embed.$type === 'app.bsky.embed.images#view'" :embed="embed" /> 130 + <template v-else-if="embed.$type === 'app.bsky.embed.record#view'"> 131 + <EmbedRecord v-if="!embedded" :embed="embed" /> 132 + <div v-else class="embedded-record">Post has nested quote.</div> 133 + </template> 134 + 135 + <template v-else-if="embed.$type === 'app.bsky.embed.recordWithMedia#view'"> 136 + <ImageEmbed 137 + v-if="embed.media.$type === 'app.bsky.embed.images#view'" 138 + :embed="embed.media" 139 + /> 140 + <EmbedRecord 141 + v-if="embed.record.$type === 'app.bsky.embed.record#view'" 142 + :embed="embed.record" 143 + /> 144 + </template> 75 145 </div> 76 146 77 - <div class="post-footer" @click.stop> 147 + <div class="post-footer" v-if="!embedded" @click.stop> 78 148 <div class="metrics"> 79 149 <button class="action-button reply" aria-label="Reply"> 80 - <div class="icon-wrapper"> 81 - <IconChatBubbleOutlineRounded /> 82 - </div> 83 - <span class="count" v-if="item.post.replyCount && item.post.replyCount > 0"> 84 - {{ formatCount(item.post.replyCount) }} 150 + <div class="icon-wrapper"><IconChatBubbleOutlineRounded /></div> 151 + <span class="count" v-if="displayPost.replyCount && displayPost.replyCount > 0"> 152 + {{ formatCount(displayPost.replyCount) }} 85 153 </span> 86 154 </button> 87 155 88 156 <button 89 157 class="action-button repost" 90 - :class="{ 'is-active': !!item.post.viewer?.repost }" 158 + :class="{ 'is-active': !!displayPost.viewer?.repost }" 91 159 @click="handleRepost" 92 160 aria-label="Repost" 93 161 > 94 - <div class="icon-wrapper"> 95 - <IconRepeatRounded /> 96 - </div> 97 - <span class="count" v-if="item.post.repostCount && item.post.repostCount > 0"> 98 - {{ formatCount(item.post.repostCount) }} 162 + <div class="icon-wrapper"><IconRepeatRounded /></div> 163 + <span class="count" v-if="displayPost.repostCount && displayPost.repostCount > 0"> 164 + {{ formatCount(displayPost.repostCount) }} 99 165 </span> 100 166 </button> 101 167 102 168 <button 103 169 class="action-button like" 104 - :class="{ 'is-active': !!item.post.viewer?.like }" 170 + :class="{ 'is-active': !!displayPost.viewer?.like }" 105 171 @click="handleLike" 106 172 aria-label="Like" 107 173 > 108 174 <div class="icon-wrapper"> 109 - <IconFavoriteRounded v-if="!!item.post.viewer?.like" /> 175 + <IconFavoriteRounded v-if="!!displayPost.viewer?.like" /> 110 176 <IconFavoriteOutlineRounded v-else /> 111 177 </div> 112 - <span class="count" v-if="item.post.likeCount && item.post.likeCount > 0"> 113 - {{ formatCount(item.post.likeCount) }} 178 + <span class="count" v-if="displayPost.likeCount && displayPost.likeCount > 0"> 179 + {{ formatCount(displayPost.likeCount) }} 114 180 </span> 115 181 </button> 116 182 </div> ··· 127 193 display: flex; 128 194 flex-direction: column; 129 195 gap: 0.25rem; 130 - transition: background-color 0.15s ease; 131 196 132 197 &:hover { 133 198 background-color: hsla(var(--surface0) / 0.3); 134 199 cursor: pointer; 135 200 } 136 201 137 - .repost-indicator { 138 - display: flex; 139 - align-items: center; 140 - gap: 0.35rem; 141 - font-size: 0.8rem; 142 - color: hsl(var(--subtext0)); 143 - font-weight: 600; 144 - margin-left: 3.25rem; 145 - margin-bottom: 0.125rem; 202 + &.is-embedded { 203 + border: 1px solid hsla(var(--surface2) / 0.5); 204 + border-radius: var(--radius-md); 205 + padding: 0.5rem; 206 + margin-top: 0.5rem; 207 + background-color: transparent; 146 208 147 - .repost-icon { 148 - font-size: 1rem; 149 - color: hsl(var(--green)); 209 + &:hover { 210 + background-color: hsla(var(--surface0) / 0.5); 211 + border-color: hsla(var(--surface2) / 0.8); 150 212 } 151 - } 152 213 153 - .post-layout { 154 - display: flex; 155 - gap: 0.75rem; 214 + .post-layout { 215 + gap: 0.5rem; 216 + } 156 217 157 218 .post-avatar { 158 - flex-shrink: 0; 159 - width: 2.75rem; 160 - height: 2.75rem; 161 - margin-top: 0.25rem; 219 + width: 1.5rem; 220 + height: 1.5rem; 221 + margin-top: 0; 222 + } 162 223 163 - img { 164 - width: 100%; 165 - height: 100%; 166 - border-radius: 50%; 167 - object-fit: cover; 168 - background-color: hsl(var(--surface1)); 169 - } 224 + .post-header { 225 + font-size: 0.85rem; 226 + } 170 227 171 - .avatar-fallback { 172 - width: 100%; 173 - height: 100%; 174 - border-radius: 50%; 175 - background-color: hsl(var(--surface2)); 176 - } 228 + .post-text { 229 + font-size: 0.9rem; 177 230 } 231 + } 232 + } 178 233 179 - .post-content { 180 - flex: 1; 181 - min-width: 0; 182 - display: flex; 183 - flex-direction: column; 234 + .repost-indicator { 235 + display: flex; 236 + align-items: center; 237 + gap: 0.35rem; 238 + font-size: 0.8rem; 239 + color: hsl(var(--subtext0)); 240 + font-weight: 600; 241 + margin-left: 3.25rem; 242 + margin-bottom: 0.125rem; 243 + 244 + .repost-icon { 245 + font-size: 1rem; 246 + color: hsl(var(--green)); 247 + } 248 + } 184 249 185 - .post-header { 186 - display: flex; 187 - align-items: baseline; 188 - gap: 0.35rem; 189 - font-size: 0.95rem; 190 - line-height: 1.3; 191 - margin-bottom: 0.125rem; 250 + .post-layout { 251 + display: flex; 252 + gap: 0.75rem; 253 + 254 + .post-avatar { 255 + flex-shrink: 0; 256 + width: 2.75rem; 257 + height: 2.75rem; 258 + margin-top: 0.25rem; 192 259 193 - * { 194 - min-width: 0; 195 - text-wrap: nowrap; 196 - text-overflow: ellipsis; 197 - overflow: hidden; 198 - } 260 + img { 261 + width: 100%; 262 + height: 100%; 263 + border-radius: 50%; 264 + object-fit: cover; 265 + background-color: hsl(var(--surface1)); 266 + } 199 267 200 - .display-name { 201 - font-weight: 700; 202 - color: hsl(var(--text)); 203 - } 268 + .avatar-fallback { 269 + width: 100%; 270 + height: 100%; 271 + border-radius: 50%; 272 + background-color: hsl(var(--surface2)); 273 + } 274 + } 204 275 205 - .handle { 206 - color: hsl(var(--subtext0)); 207 - font-weight: 400; 208 - } 276 + .post-content { 277 + flex: 1; 278 + min-width: 0; 279 + display: flex; 280 + flex-direction: column; 209 281 210 - .dot { 211 - user-select: none; 212 - color: hsl(var(--surface2)); 213 - } 282 + .post-header { 283 + display: flex; 284 + align-items: baseline; 285 + gap: 0.35rem; 286 + font-size: 0.95rem; 287 + line-height: 1.3; 288 + margin-bottom: 0.125rem; 214 289 215 - .time { 216 - color: hsl(var(--subtext0)); 217 - font-size: 0.85rem; 218 - flex-shrink: 0; 219 - } 290 + * { 291 + min-width: 0; 292 + text-wrap: nowrap; 293 + text-overflow: ellipsis; 294 + overflow: hidden; 220 295 } 221 296 222 - .post-text { 297 + .display-name { 298 + font-weight: 700; 223 299 color: hsl(var(--text)); 224 - font-size: 0.95rem; 225 - line-height: 1.4; 226 - white-space: pre-wrap; 227 - word-wrap: break-word; 300 + } 301 + 302 + .handle { 303 + color: hsl(var(--subtext0)); 304 + font-weight: 400; 305 + } 306 + 307 + .dot { 308 + user-select: none; 309 + color: hsl(var(--surface2)); 310 + } 311 + 312 + .time { 313 + color: hsl(var(--subtext0)); 314 + font-size: 0.85rem; 315 + flex-shrink: 0; 228 316 } 317 + } 318 + 319 + .post-text { 320 + color: hsl(var(--text)); 321 + font-size: 0.95rem; 322 + line-height: 1.4; 323 + white-space: pre-wrap; 324 + word-wrap: break-word; 325 + } 326 + 327 + .embedded-record { 328 + padding: 0.5rem; 329 + border: 1px solid hsla(var(--surface2) / 0.5); 330 + border-radius: var(--radius-sm); 331 + color: hsl(var(--subtext0)); 332 + font-size: 0.9rem; 333 + text-align: center; 334 + margin-top: 0.5rem; 229 335 } 230 336 } 231 337 }
+8 -3
src/components/Feed/FeedList.vue
··· 3 3 import { IconRefreshRounded } from '@iconify-prerendered/vue-material-symbols' 4 4 import type { ResourceUri } from '@atcute/lexicons' 5 5 import { ok } from '@atcute/client' 6 + import { AppBskyFeedDefs } from '@atcute/bluesky' 6 7 7 8 import { useNavigationStore } from '@/stores/navigation' 8 9 import { useAuthStore } from '@/stores/auth' ··· 30 31 const loading = ref(false) 31 32 const error = ref<string | null>(null) 32 33 33 - const loadOnScroll = ref(false) 34 + const loadOnScroll = ref(true) 34 35 const loadMoreTrigger = ref<HTMLElement | null>(null) 35 36 let observer: IntersectionObserver | null = null 36 37 ··· 70 71 71 72 if (item.reply) { 72 73 if (item.reply.parent && item.reply.parent.$type === 'app.bsky.feed.defs#postView') { 73 - item.reply.parent = postStore.mergePost(item.reply.parent) 74 + item.reply.parent = postStore.mergePost(item.reply.parent) as AppBskyFeedDefs.PostView & { 75 + $type: 'app.bsky.feed.defs#postView' 76 + } 74 77 } 75 78 if (item.reply.root && item.reply.root.$type === 'app.bsky.feed.defs#postView') { 76 - item.reply.root = postStore.mergePost(item.reply.root) 79 + item.reply.root = postStore.mergePost(item.reply.root) as AppBskyFeedDefs.PostView & { 80 + $type: 'app.bsky.feed.defs#postView' 81 + } 77 82 } 78 83 } 79 84 return item
+1 -6
src/components/Feed/FeedThread.vue
··· 33 33 <div class="thread-node" :class="{ 'is-child': currentDepth > 0 }"> 34 34 <div class="thread-content"> 35 35 <FeedItem :item="displayItem" :class="{ 'virtual-node': node.isVirtual }" /> 36 - 37 - <!-- Thread line connecting this post to its children --> 38 36 <div v-if="sortedChildren.length > 0" class="thread-line"></div> 39 37 </div> 40 38 ··· 60 58 position: relative; 61 59 z-index: 2; 62 60 63 - :deep(.feed-item) { 61 + :deep(.feed-item:not(.is-embedded)) { 64 62 border-bottom: none; 65 - } 66 - 67 - :deep(.virtual-node) { 68 63 } 69 64 70 65 .thread-line {
+10 -10
tsconfig.app.json
··· 1 1 { 2 - "extends": "@vue/tsconfig/tsconfig.dom.json", 3 - "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 - "exclude": ["src/**/__tests__/*"], 5 - "compilerOptions": { 6 - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 7 - "types": ["@atcute/bluesky", "@atcute/atproto"], 8 - "paths": { 9 - "@/*": ["./src/*"] 10 - } 11 - } 2 + "extends": "@vue/tsconfig/tsconfig.dom.json", 3 + "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], 4 + "exclude": ["src/**/__tests__/*"], 5 + "compilerOptions": { 6 + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", 7 + "types": ["@atcute/bluesky", "@atcute/atproto"], 8 + "paths": { 9 + "@/*": ["./src/*"] 10 + } 11 + } 12 12 }
+9 -9
tsconfig.json
··· 1 1 { 2 - "files": [], 3 - "references": [ 4 - { 5 - "path": "./tsconfig.node.json" 6 - }, 7 - { 8 - "path": "./tsconfig.app.json" 9 - } 10 - ] 2 + "files": [], 3 + "references": [ 4 + { 5 + "path": "./tsconfig.node.json" 6 + }, 7 + { 8 + "path": "./tsconfig.app.json" 9 + } 10 + ] 11 11 }