rssany 0.3.2 → 0.3.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +52 -52
- package/README.md +156 -147
- package/app/plugins/builtin/email.rssany.js +84 -84
- package/app/plugins/builtin/rss.rssany.js +164 -164
- package/app/statics/README.md +7 -7
- package/app/webui/build/200.html +36 -36
- package/app/webui/build/_app/immutable/assets/10.CmGYYZFR.css +1 -0
- package/app/webui/build/_app/immutable/assets/11.Dkz3VS_N.css +1 -0
- package/app/webui/build/_app/immutable/assets/14.BCCBoMGj.css +1 -0
- package/app/webui/build/_app/immutable/assets/6.Cm_jpHOq.css +1 -0
- package/app/webui/build/_app/immutable/assets/7.CJ3BjogD.css +1 -0
- package/app/webui/build/_app/immutable/assets/9.CATKVZ-n.css +1 -0
- package/app/webui/build/_app/immutable/assets/{SourcesList.D5Lso0bo.css → SourcesList.ke66uOSi.css} +1 -1
- package/app/webui/build/_app/immutable/assets/chevron-down.CV-KWLNP.css +1 -0
- package/app/webui/build/_app/immutable/chunks/{CGCMIfh3.js → 4TuV_psf.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{DAdOEnFb.js → B0czyjwj.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{CFwxUBGi.js → B553hBXT.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/B8StT3Do.js +6 -0
- package/app/webui/build/_app/immutable/chunks/BI_ale1m.js +1 -0
- package/app/webui/build/_app/immutable/chunks/BK0ygNWX.js +2 -0
- package/app/webui/build/_app/immutable/chunks/{Brun6sCr.js → BZY5aksi.js} +2 -2
- package/app/webui/build/_app/immutable/chunks/{C8umpVpB.js → BnqaikL8.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/BsQ08Wq_.js +1 -0
- package/app/webui/build/_app/immutable/chunks/C9wTDiHH.js +1 -0
- package/app/webui/build/_app/immutable/chunks/{B-CeeY89.js → CAKuIoAf.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/CEWi_rGa.js +1 -0
- package/app/webui/build/_app/immutable/chunks/CIsxbQ9B.js +1 -0
- package/app/webui/build/_app/immutable/chunks/{ChUctqXA.js → Cc7aBSsN.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{DXDBlEGf.js → Czo-EcYU.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{BAJAS8BI.js → D8G961Hm.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{CS53ooo0.js → DIeahUKq.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/DO5OXNYS.js +1 -0
- package/app/webui/build/_app/immutable/chunks/{Dr67pd7v.js → DhZZHWov.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{Dyvi1wBH.js → DptdhtA1.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{ClknbeNl.js → FDS7fbwH.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/{DCEayuDt.js → IhDlsCxD.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/Nd0ktDhd.js +1 -0
- package/app/webui/build/_app/immutable/chunks/{D6kzEN_P.js → SvdgnirT.js} +1 -1
- package/app/webui/build/_app/immutable/chunks/WW6La7Nt.js +2 -0
- package/app/webui/build/_app/immutable/chunks/{DsxvjlCC.js → pd_p3yYy.js} +5 -5
- package/app/webui/build/_app/immutable/chunks/qwlQuQWi.js +36 -0
- package/app/webui/build/_app/immutable/chunks/rNwPv4DZ.js +1 -0
- package/app/webui/build/_app/immutable/entry/app.CsaNbZ85.js +2 -0
- package/app/webui/build/_app/immutable/entry/start.BZt_oICN.js +1 -0
- package/app/webui/build/_app/immutable/nodes/{0.CQDkqUeN.js → 0.zuqEMBQT.js} +3 -3
- package/app/webui/build/_app/immutable/nodes/1.DzLFxso0.js +1 -0
- package/app/webui/build/_app/immutable/nodes/10.BC-1FXeC.js +1 -0
- package/app/webui/build/_app/immutable/nodes/11.CePwEHqu.js +3 -0
- package/app/webui/build/_app/immutable/nodes/12.eeQ9B6bg.js +1 -0
- package/app/webui/build/_app/immutable/nodes/13.BLKI9iZo.js +1 -0
- package/app/webui/build/_app/immutable/nodes/14.T9l5Rh19.js +1 -0
- package/app/webui/build/_app/immutable/nodes/15.39GHtAg1.js +1 -0
- package/app/webui/build/_app/immutable/nodes/{16.p6WfP435.js → 16.BO-9BBQ5.js} +2 -2
- package/app/webui/build/_app/immutable/nodes/17.BWRgFCUw.js +1 -0
- package/app/webui/build/_app/immutable/nodes/2.BOYqXdCa.js +1 -0
- package/app/webui/build/_app/immutable/nodes/3.CJw5Nx2o.js +1 -0
- package/app/webui/build/_app/immutable/nodes/5.9zgwFV6I.js +2 -0
- package/app/webui/build/_app/immutable/nodes/6.trFT-trT.js +2 -0
- package/app/webui/build/_app/immutable/nodes/7.DCqiDq6O.js +1 -0
- package/app/webui/build/_app/immutable/nodes/8.DG_T-wWN.js +1 -0
- package/app/webui/build/_app/immutable/nodes/9.FiPTezQy.js +1 -0
- package/app/webui/build/_app/version.json +1 -1
- package/bin/rssany.js +55 -3
- package/dist/index.js +314 -96
- package/dist/index.js.map +1 -1
- package/package.json +107 -103
- package/scripts/postinstall.mjs +44 -0
- package/scripts/reset.mjs +137 -135
- package/scripts/user-dir.mjs +52 -0
- package/app/webui/build/_app/immutable/assets/10.Dj8_pmut.css +0 -1
- package/app/webui/build/_app/immutable/assets/13.Qu_tY6H9.css +0 -1
- package/app/webui/build/_app/immutable/assets/5.B-dPiwB7.css +0 -1
- package/app/webui/build/_app/immutable/assets/6.B27N7pdA.css +0 -1
- package/app/webui/build/_app/immutable/assets/8.Cgji2b15.css +0 -1
- package/app/webui/build/_app/immutable/assets/9.BsCIAvn3.css +0 -1
- package/app/webui/build/_app/immutable/chunks/6prdYIKP.js +0 -1
- package/app/webui/build/_app/immutable/chunks/B2cyTHdf.js +0 -2
- package/app/webui/build/_app/immutable/chunks/B6WG2Sd3.js +0 -1
- package/app/webui/build/_app/immutable/chunks/BA4Gucnq.js +0 -1
- package/app/webui/build/_app/immutable/chunks/BXTsojX2.js +0 -36
- package/app/webui/build/_app/immutable/chunks/BkD3yAYe.js +0 -1
- package/app/webui/build/_app/immutable/chunks/C4uF_YIK.js +0 -1
- package/app/webui/build/_app/immutable/chunks/CBY2biv-.js +0 -1
- package/app/webui/build/_app/immutable/chunks/DAV9bzjw.js +0 -1
- package/app/webui/build/_app/immutable/chunks/DL3Q5sfb.js +0 -1
- package/app/webui/build/_app/immutable/chunks/DVa8Y-mQ.js +0 -1
- package/app/webui/build/_app/immutable/chunks/DoRPmqLn.js +0 -2
- package/app/webui/build/_app/immutable/chunks/vtBo8kBV.js +0 -1
- package/app/webui/build/_app/immutable/entry/app.dq7-6soi.js +0 -2
- package/app/webui/build/_app/immutable/entry/start.BnoTfBrB.js +0 -1
- package/app/webui/build/_app/immutable/nodes/1.BUa24rXB.js +0 -1
- package/app/webui/build/_app/immutable/nodes/10.MZgVhpGF.js +0 -1
- package/app/webui/build/_app/immutable/nodes/11.B39IbrZ0.js +0 -1
- package/app/webui/build/_app/immutable/nodes/12.B5B81dLQ.js +0 -1
- package/app/webui/build/_app/immutable/nodes/13.DWWcH27k.js +0 -6
- package/app/webui/build/_app/immutable/nodes/14.Db6eOPqq.js +0 -1
- package/app/webui/build/_app/immutable/nodes/15.B2jiP2VJ.js +0 -1
- package/app/webui/build/_app/immutable/nodes/2.AJd2163d.js +0 -1
- package/app/webui/build/_app/immutable/nodes/3.BZQeL-vz.js +0 -1
- package/app/webui/build/_app/immutable/nodes/4.BT_N8pCh.js +0 -2
- package/app/webui/build/_app/immutable/nodes/5.Bo_ftyqW.js +0 -2
- package/app/webui/build/_app/immutable/nodes/6.vOowdQUr.js +0 -1
- package/app/webui/build/_app/immutable/nodes/7.BfVbBKZu.js +0 -1
- package/app/webui/build/_app/immutable/nodes/8.BslYG5f2.js +0 -1
- package/app/webui/build/_app/immutable/nodes/9.DAgT-df2.js +0 -1
- /package/app/webui/build/_app/immutable/assets/{11.qYZMiTb0.css → 12.qYZMiTb0.css} +0 -0
- /package/app/webui/build/_app/immutable/assets/{12.DfJcfUWl.css → 13.DfJcfUWl.css} +0 -0
- /package/app/webui/build/_app/immutable/assets/{14.DfMfOrS3.css → 15.DfMfOrS3.css} +0 -0
- /package/app/webui/build/_app/immutable/assets/{15.nNGjXhCQ.css → 17.nNGjXhCQ.css} +0 -0
- /package/app/webui/build/_app/immutable/assets/{4.Di6rvlY-.css → 5.Di6rvlY-.css} +0 -0
- /package/app/webui/build/_app/immutable/assets/{7.CrNxmd8B.css → 8.CrNxmd8B.css} +0 -0
- /package/app/webui/build/_app/immutable/nodes/{17.BtYZF6FM.js → 18.BtYZF6FM.js} +0 -0
- /package/app/webui/build/_app/immutable/nodes/{18.BIzqhTqv.js → 4.BIzqhTqv.js} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
// 内置 RSS/Atom/JSON Feed:通过浏览器(Puppeteer)拉取 Feed URL,再用 rss-parser 解析;
|
|
2
|
-
// 与站点插件一致走 Chrome,便于应对需浏览器环境或代理的场景;XML 使用 HTTP 响应原文(useHttpResponseBody)。
|
|
1
|
+
// 内置 RSS/Atom/JSON Feed:通过浏览器(Puppeteer)拉取 Feed URL,再用 rss-parser 解析;
|
|
2
|
+
// 与站点插件一致走 Chrome,便于应对需浏览器环境或代理的场景;XML 使用 HTTP 响应原文(useHttpResponseBody)。
|
|
3
3
|
export const id = "__rss__";
|
|
4
4
|
export const name = "RSS Feed";
|
|
5
5
|
export const pattern = /^https:\/\//;
|
|
@@ -7,167 +7,167 @@ export const match = looksLikeFeed;
|
|
|
7
7
|
export const priority = 20;
|
|
8
8
|
export const refreshInterval = "1h";
|
|
9
9
|
|
|
10
|
-
const UA = "RssAny/1.0 (+https://github.com/joohw/rssany)";
|
|
11
|
-
|
|
12
|
-
const IMAGE_TYPE_RE = /^image\//i;
|
|
13
|
-
const IMAGE_EXT_IN_PATH_RE = /\.(jpg|jpeg|png|gif|webp|avif|svg)(\?|#|$)/i;
|
|
14
|
-
|
|
15
|
-
function trimUrl(s) {
|
|
16
|
-
if (typeof s !== "string") return undefined;
|
|
17
|
-
const t = s.trim();
|
|
18
|
-
return t || undefined;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** rss-parser 常把多位作者压成一段逗号(或中文逗号)分隔文本,拆成数组入库。 */
|
|
22
|
-
function authorsFromCommaText(authorRaw) {
|
|
23
|
-
if (typeof authorRaw !== "string") return undefined;
|
|
24
|
-
const parts = authorRaw
|
|
25
|
-
.split(/[,,]/)
|
|
26
|
-
.map((s) => s.trim())
|
|
27
|
-
.filter(Boolean);
|
|
28
|
-
return parts.length > 0 ? parts : undefined;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/** 从 rss-parser 条目上尽量取出配图 URL(入库用 imageUrl,与 Gateway 的 cover_img 对齐)。 */
|
|
32
|
-
function extractItemImageUrl(item) {
|
|
33
|
-
const enc = item.enclosure;
|
|
34
|
-
if (enc && typeof enc.url === "string") {
|
|
35
|
-
const u = trimUrl(enc.url);
|
|
36
|
-
const t = typeof enc.type === "string" ? enc.type : "";
|
|
37
|
-
if (u && (IMAGE_TYPE_RE.test(t) || (!t && IMAGE_EXT_IN_PATH_RE.test(u)))) {
|
|
38
|
-
return u;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
const itunesImg = item.itunes && typeof item.itunes.image === "string" ? item.itunes.image : undefined;
|
|
43
|
-
const fromItunes = trimUrl(itunesImg);
|
|
44
|
-
if (fromItunes) return fromItunes;
|
|
45
|
-
|
|
46
|
-
const thumbs = item.mediaThumbnail;
|
|
47
|
-
if (Array.isArray(thumbs) && thumbs[0]?.$) {
|
|
48
|
-
const u = trimUrl(thumbs[0].$.url ?? thumbs[0].$.href);
|
|
49
|
-
if (u) return u;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
const mediaBlocks = item.mediaContent;
|
|
53
|
-
if (Array.isArray(mediaBlocks)) {
|
|
54
|
-
for (const block of mediaBlocks) {
|
|
55
|
-
const $ = block && block.$;
|
|
56
|
-
if (!$ || typeof $.url !== "string") continue;
|
|
57
|
-
const medium = $.medium;
|
|
58
|
-
const ctype = typeof $.type === "string" ? $.type : "";
|
|
59
|
-
if (medium === "image" || IMAGE_TYPE_RE.test(ctype)) {
|
|
60
|
-
const u = trimUrl($.url);
|
|
61
|
-
if (u) return u;
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
const atomLinks = item.atomLinks;
|
|
67
|
-
if (Array.isArray(atomLinks)) {
|
|
68
|
-
for (const l of atomLinks) {
|
|
69
|
-
const $ = l && l.$;
|
|
70
|
-
if (!$ || typeof $.href !== "string") continue;
|
|
71
|
-
const rel = String($.rel || "").toLowerCase();
|
|
72
|
-
const ctype = String($.type || "").toLowerCase();
|
|
73
|
-
if (rel === "enclosure" && ctype.startsWith("image/")) {
|
|
74
|
-
const u = trimUrl($.href);
|
|
75
|
-
if (u) return u;
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
const fromHtml =
|
|
81
|
-
firstImgSrcFromHtml(item.content) ||
|
|
82
|
-
firstImgSrcFromHtml(item.summary) ||
|
|
83
|
-
firstImgSrcFromHtml(item["content:encoded"]) ||
|
|
84
|
-
firstImgSrcFromHtml(item.contentSnippet);
|
|
85
|
-
if (fromHtml && /^https:\/\//i.test(fromHtml)) {
|
|
86
|
-
return fromHtml;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
return undefined;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
function firstImgSrcFromHtml(html) {
|
|
93
|
-
if (typeof html !== "string" || !html) return undefined;
|
|
94
|
-
const m = html.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);
|
|
95
|
-
return m ? trimUrl(m[1]) : undefined;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
async function fetchFeedXml(url, ctx) {
|
|
99
|
-
const fetchHtml = ctx.fetchHtml;
|
|
100
|
-
if (typeof fetchHtml !== "function") {
|
|
101
|
-
throw new Error("RSS 插件需要 ctx.fetchHtml(请通过 feeder / buildSourceContext 调用)");
|
|
102
|
-
}
|
|
103
|
-
const { html } = await fetchHtml(url, {
|
|
104
|
-
waitMs: 800,
|
|
105
|
-
purify: false,
|
|
106
|
-
useHttpResponseBody: true,
|
|
107
|
-
});
|
|
108
|
-
return html;
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
export async function fetchItems(sourceId, ctx) {
|
|
112
|
-
const { deps } = ctx;
|
|
113
|
-
const xml = await fetchFeedXml(sourceId, ctx);
|
|
114
|
-
const parser = new deps.RssParser({
|
|
115
|
-
timeout: 30_000,
|
|
116
|
-
headers: {
|
|
117
|
-
"User-Agent": UA,
|
|
118
|
-
Accept: "application/rss+xml,application/atom+xml,application/json,application/xml,text/xml,*/*",
|
|
119
|
-
},
|
|
120
|
-
customFields: {
|
|
121
|
-
item: [
|
|
122
|
-
["media:thumbnail", "mediaThumbnail", { keepArray: true }],
|
|
123
|
-
["media:content", "mediaContent", { keepArray: true }],
|
|
124
|
-
["link", "atomLinks", { keepArray: true }],
|
|
125
|
-
],
|
|
126
|
-
},
|
|
127
|
-
});
|
|
128
|
-
const feed = await parser.parseString(xml);
|
|
129
|
-
return (feed.items ?? []).map((item) => {
|
|
130
|
-
const link = item.link ?? item.guid ?? sourceId;
|
|
131
|
-
const guid = item.guid ?? deps.createHash("sha256").update(link).digest("hex");
|
|
132
|
-
const pubDate =
|
|
133
|
-
item.pubDate != null
|
|
134
|
-
? new Date(item.pubDate)
|
|
135
|
-
: item.isoDate != null
|
|
136
|
-
? new Date(item.isoDate)
|
|
137
|
-
: new Date();
|
|
138
|
-
const authorRaw =
|
|
139
|
-
typeof item.creator === "string" ? item.creator : typeof item.author === "string" ? item.author : undefined;
|
|
140
|
-
const author = authorsFromCommaText(authorRaw);
|
|
141
|
-
const summary =
|
|
142
|
-
typeof item.summary === "string" ? item.summary : typeof item.contentSnippet === "string" ? item.contentSnippet : undefined;
|
|
143
|
-
const content =
|
|
144
|
-
typeof item.content === "string" ? item.content : typeof item["content:encoded"] === "string" ? item["content:encoded"] : undefined;
|
|
145
|
-
const imageUrl = extractItemImageUrl(item);
|
|
146
|
-
const base = {
|
|
147
|
-
guid,
|
|
148
|
-
title: item.title ?? "",
|
|
149
|
-
link,
|
|
150
|
-
pubDate,
|
|
151
|
-
author,
|
|
152
|
-
summary,
|
|
153
|
-
content,
|
|
154
|
-
};
|
|
155
|
-
if (!imageUrl) return base;
|
|
156
|
-
return { ...base, imageUrl, cover_img: imageUrl };
|
|
157
|
-
});
|
|
10
|
+
const UA = "RssAny/1.0 (+https://github.com/joohw/rssany)";
|
|
11
|
+
|
|
12
|
+
const IMAGE_TYPE_RE = /^image\//i;
|
|
13
|
+
const IMAGE_EXT_IN_PATH_RE = /\.(jpg|jpeg|png|gif|webp|avif|svg)(\?|#|$)/i;
|
|
14
|
+
|
|
15
|
+
function trimUrl(s) {
|
|
16
|
+
if (typeof s !== "string") return undefined;
|
|
17
|
+
const t = s.trim();
|
|
18
|
+
return t || undefined;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/** rss-parser 常把多位作者压成一段逗号(或中文逗号)分隔文本,拆成数组入库。 */
|
|
22
|
+
function authorsFromCommaText(authorRaw) {
|
|
23
|
+
if (typeof authorRaw !== "string") return undefined;
|
|
24
|
+
const parts = authorRaw
|
|
25
|
+
.split(/[,,]/)
|
|
26
|
+
.map((s) => s.trim())
|
|
27
|
+
.filter(Boolean);
|
|
28
|
+
return parts.length > 0 ? parts : undefined;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/** 从 rss-parser 条目上尽量取出配图 URL(入库用 imageUrl,与 Gateway 的 cover_img 对齐)。 */
|
|
32
|
+
function extractItemImageUrl(item) {
|
|
33
|
+
const enc = item.enclosure;
|
|
34
|
+
if (enc && typeof enc.url === "string") {
|
|
35
|
+
const u = trimUrl(enc.url);
|
|
36
|
+
const t = typeof enc.type === "string" ? enc.type : "";
|
|
37
|
+
if (u && (IMAGE_TYPE_RE.test(t) || (!t && IMAGE_EXT_IN_PATH_RE.test(u)))) {
|
|
38
|
+
return u;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const itunesImg = item.itunes && typeof item.itunes.image === "string" ? item.itunes.image : undefined;
|
|
43
|
+
const fromItunes = trimUrl(itunesImg);
|
|
44
|
+
if (fromItunes) return fromItunes;
|
|
45
|
+
|
|
46
|
+
const thumbs = item.mediaThumbnail;
|
|
47
|
+
if (Array.isArray(thumbs) && thumbs[0]?.$) {
|
|
48
|
+
const u = trimUrl(thumbs[0].$.url ?? thumbs[0].$.href);
|
|
49
|
+
if (u) return u;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const mediaBlocks = item.mediaContent;
|
|
53
|
+
if (Array.isArray(mediaBlocks)) {
|
|
54
|
+
for (const block of mediaBlocks) {
|
|
55
|
+
const $ = block && block.$;
|
|
56
|
+
if (!$ || typeof $.url !== "string") continue;
|
|
57
|
+
const medium = $.medium;
|
|
58
|
+
const ctype = typeof $.type === "string" ? $.type : "";
|
|
59
|
+
if (medium === "image" || IMAGE_TYPE_RE.test(ctype)) {
|
|
60
|
+
const u = trimUrl($.url);
|
|
61
|
+
if (u) return u;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
const atomLinks = item.atomLinks;
|
|
67
|
+
if (Array.isArray(atomLinks)) {
|
|
68
|
+
for (const l of atomLinks) {
|
|
69
|
+
const $ = l && l.$;
|
|
70
|
+
if (!$ || typeof $.href !== "string") continue;
|
|
71
|
+
const rel = String($.rel || "").toLowerCase();
|
|
72
|
+
const ctype = String($.type || "").toLowerCase();
|
|
73
|
+
if (rel === "enclosure" && ctype.startsWith("image/")) {
|
|
74
|
+
const u = trimUrl($.href);
|
|
75
|
+
if (u) return u;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
const fromHtml =
|
|
81
|
+
firstImgSrcFromHtml(item.content) ||
|
|
82
|
+
firstImgSrcFromHtml(item.summary) ||
|
|
83
|
+
firstImgSrcFromHtml(item["content:encoded"]) ||
|
|
84
|
+
firstImgSrcFromHtml(item.contentSnippet);
|
|
85
|
+
if (fromHtml && /^https:\/\//i.test(fromHtml)) {
|
|
86
|
+
return fromHtml;
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return undefined;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function firstImgSrcFromHtml(html) {
|
|
93
|
+
if (typeof html !== "string" || !html) return undefined;
|
|
94
|
+
const m = html.match(/<img[^>]+src\s*=\s*["']([^"']+)["']/i);
|
|
95
|
+
return m ? trimUrl(m[1]) : undefined;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
async function fetchFeedXml(url, ctx) {
|
|
99
|
+
const fetchHtml = ctx.fetchHtml;
|
|
100
|
+
if (typeof fetchHtml !== "function") {
|
|
101
|
+
throw new Error("RSS 插件需要 ctx.fetchHtml(请通过 feeder / buildSourceContext 调用)");
|
|
102
|
+
}
|
|
103
|
+
const { html } = await fetchHtml(url, {
|
|
104
|
+
waitMs: 800,
|
|
105
|
+
purify: false,
|
|
106
|
+
useHttpResponseBody: true,
|
|
107
|
+
});
|
|
108
|
+
return html;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
export async function fetchItems(sourceId, ctx) {
|
|
112
|
+
const { deps } = ctx;
|
|
113
|
+
const xml = await fetchFeedXml(sourceId, ctx);
|
|
114
|
+
const parser = new deps.RssParser({
|
|
115
|
+
timeout: 30_000,
|
|
116
|
+
headers: {
|
|
117
|
+
"User-Agent": UA,
|
|
118
|
+
Accept: "application/rss+xml,application/atom+xml,application/json,application/xml,text/xml,*/*",
|
|
119
|
+
},
|
|
120
|
+
customFields: {
|
|
121
|
+
item: [
|
|
122
|
+
["media:thumbnail", "mediaThumbnail", { keepArray: true }],
|
|
123
|
+
["media:content", "mediaContent", { keepArray: true }],
|
|
124
|
+
["link", "atomLinks", { keepArray: true }],
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
});
|
|
128
|
+
const feed = await parser.parseString(xml);
|
|
129
|
+
return (feed.items ?? []).map((item) => {
|
|
130
|
+
const link = item.link ?? item.guid ?? sourceId;
|
|
131
|
+
const guid = item.guid ?? deps.createHash("sha256").update(link).digest("hex");
|
|
132
|
+
const pubDate =
|
|
133
|
+
item.pubDate != null
|
|
134
|
+
? new Date(item.pubDate)
|
|
135
|
+
: item.isoDate != null
|
|
136
|
+
? new Date(item.isoDate)
|
|
137
|
+
: new Date();
|
|
138
|
+
const authorRaw =
|
|
139
|
+
typeof item.creator === "string" ? item.creator : typeof item.author === "string" ? item.author : undefined;
|
|
140
|
+
const author = authorsFromCommaText(authorRaw);
|
|
141
|
+
const summary =
|
|
142
|
+
typeof item.summary === "string" ? item.summary : typeof item.contentSnippet === "string" ? item.contentSnippet : undefined;
|
|
143
|
+
const content =
|
|
144
|
+
typeof item.content === "string" ? item.content : typeof item["content:encoded"] === "string" ? item["content:encoded"] : undefined;
|
|
145
|
+
const imageUrl = extractItemImageUrl(item);
|
|
146
|
+
const base = {
|
|
147
|
+
guid,
|
|
148
|
+
title: item.title ?? "",
|
|
149
|
+
link,
|
|
150
|
+
pubDate,
|
|
151
|
+
author,
|
|
152
|
+
summary,
|
|
153
|
+
content,
|
|
154
|
+
};
|
|
155
|
+
if (!imageUrl) return base;
|
|
156
|
+
return { ...base, imageUrl, cover_img: imageUrl };
|
|
157
|
+
});
|
|
158
158
|
}
|
|
159
159
|
|
|
160
|
-
function looksLikeFeed(url) {
|
|
161
|
-
const lower = url.toLowerCase();
|
|
162
|
-
return (
|
|
163
|
-
lower.includes("/feed") ||
|
|
164
|
-
lower.includes("/rss") ||
|
|
165
|
-
lower.includes("/atom") ||
|
|
166
|
-
lower.endsWith(".xml") ||
|
|
167
|
-
lower.endsWith(".rss") ||
|
|
168
|
-
lower.endsWith(".atom") ||
|
|
169
|
-
lower.includes("format=rss") ||
|
|
170
|
-
lower.includes("format=atom") ||
|
|
171
|
-
lower.includes("output=rss")
|
|
172
|
-
);
|
|
173
|
-
}
|
|
160
|
+
function looksLikeFeed(url) {
|
|
161
|
+
const lower = url.toLowerCase();
|
|
162
|
+
return (
|
|
163
|
+
lower.includes("/feed") ||
|
|
164
|
+
lower.includes("/rss") ||
|
|
165
|
+
lower.includes("/atom") ||
|
|
166
|
+
lower.endsWith(".xml") ||
|
|
167
|
+
lower.endsWith(".rss") ||
|
|
168
|
+
lower.endsWith(".atom") ||
|
|
169
|
+
lower.includes("format=rss") ||
|
|
170
|
+
lower.includes("format=atom") ||
|
|
171
|
+
lower.includes("output=rss")
|
|
172
|
+
);
|
|
173
|
+
}
|
package/app/statics/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
# statics
|
|
2
|
-
|
|
3
|
-
静态 HTML 页面:home(首页)、401、404。
|
|
4
|
-
|
|
5
|
-
- **home.html**:首页,含 Try This 示例链接;下方「需登录的站点」从 `/plugins` 拉取,每个站点可点击「打开登录页」调用 `POST /auth/ensure?siteId=...` 批量做登录。
|
|
6
|
-
- **401.html**:需登录时返回;占位符 `{{listUrl}}` 由 router 注入为失败请求的订阅地址;页内「打开有头登录页」按钮调用 `POST /auth/ensure?url=...` 弹出有头浏览器完成登录。
|
|
7
|
-
- **404.html**:无匹配站点时返回。
|
|
1
|
+
# statics
|
|
2
|
+
|
|
3
|
+
静态 HTML 页面:home(首页)、401、404。
|
|
4
|
+
|
|
5
|
+
- **home.html**:首页,含 Try This 示例链接;下方「需登录的站点」从 `/plugins` 拉取,每个站点可点击「打开登录页」调用 `POST /auth/ensure?siteId=...` 批量做登录。
|
|
6
|
+
- **401.html**:需登录时返回;占位符 `{{listUrl}}` 由 router 注入为失败请求的订阅地址;页内「打开有头登录页」按钮调用 `POST /auth/ensure?url=...` 弹出有头浏览器完成登录。
|
|
7
|
+
- **404.html**:无匹配站点时返回。
|
package/app/webui/build/200.html
CHANGED
|
@@ -1,51 +1,51 @@
|
|
|
1
|
-
<!doctype html>
|
|
2
|
-
<html lang="zh-CN">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8" />
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
-
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
7
|
-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
8
|
-
<link
|
|
9
|
-
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
|
10
|
-
rel="stylesheet"
|
|
11
|
-
/>
|
|
12
|
-
<link rel="icon" href="/favicon.ico" sizes="32x32" />
|
|
13
|
-
<link rel="icon" href="/favicon.png" type="image/png" />
|
|
14
|
-
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
15
|
-
<link href="/_app/immutable/entry/start.
|
|
16
|
-
<link href="/_app/immutable/chunks/
|
|
17
|
-
<link href="/_app/immutable/chunks/
|
|
18
|
-
<link href="/_app/immutable/chunks/
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="zh-CN">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
|
+
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
7
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
8
|
+
<link
|
|
9
|
+
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"
|
|
10
|
+
rel="stylesheet"
|
|
11
|
+
/>
|
|
12
|
+
<link rel="icon" href="/favicon.ico" sizes="32x32" />
|
|
13
|
+
<link rel="icon" href="/favicon.png" type="image/png" />
|
|
14
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
15
|
+
<link href="/_app/immutable/entry/start.BZt_oICN.js" rel="modulepreload">
|
|
16
|
+
<link href="/_app/immutable/chunks/DhZZHWov.js" rel="modulepreload">
|
|
17
|
+
<link href="/_app/immutable/chunks/BsQ08Wq_.js" rel="modulepreload">
|
|
18
|
+
<link href="/_app/immutable/chunks/FDS7fbwH.js" rel="modulepreload">
|
|
19
19
|
<link href="/_app/immutable/chunks/BUApaBEI.js" rel="modulepreload">
|
|
20
|
-
<link href="/_app/immutable/chunks/
|
|
21
|
-
<link href="/_app/immutable/entry/app.
|
|
22
|
-
<link href="/_app/immutable/chunks/
|
|
23
|
-
<link href="/_app/immutable/chunks/
|
|
24
|
-
<link href="/_app/immutable/chunks/
|
|
25
|
-
<link href="/_app/immutable/chunks/
|
|
26
|
-
<link href="/_app/immutable/chunks/
|
|
27
|
-
<link href="/_app/immutable/chunks/
|
|
28
|
-
<link href="/_app/immutable/chunks/
|
|
29
|
-
|
|
30
|
-
</head>
|
|
31
|
-
<body>
|
|
20
|
+
<link href="/_app/immutable/chunks/DptdhtA1.js" rel="modulepreload">
|
|
21
|
+
<link href="/_app/immutable/entry/app.CsaNbZ85.js" rel="modulepreload">
|
|
22
|
+
<link href="/_app/immutable/chunks/BK0ygNWX.js" rel="modulepreload">
|
|
23
|
+
<link href="/_app/immutable/chunks/DIeahUKq.js" rel="modulepreload">
|
|
24
|
+
<link href="/_app/immutable/chunks/rNwPv4DZ.js" rel="modulepreload">
|
|
25
|
+
<link href="/_app/immutable/chunks/C9wTDiHH.js" rel="modulepreload">
|
|
26
|
+
<link href="/_app/immutable/chunks/CAKuIoAf.js" rel="modulepreload">
|
|
27
|
+
<link href="/_app/immutable/chunks/D8G961Hm.js" rel="modulepreload">
|
|
28
|
+
<link href="/_app/immutable/chunks/BI_ale1m.js" rel="modulepreload">
|
|
29
|
+
|
|
30
|
+
</head>
|
|
31
|
+
<body>
|
|
32
32
|
<div id="svelte">
|
|
33
33
|
<script>
|
|
34
34
|
{
|
|
35
|
-
|
|
35
|
+
__sveltekit_c0lzti = {
|
|
36
36
|
base: ""
|
|
37
37
|
};
|
|
38
38
|
|
|
39
39
|
const element = document.currentScript.parentElement;
|
|
40
40
|
|
|
41
41
|
Promise.all([
|
|
42
|
-
import("/_app/immutable/entry/start.
|
|
43
|
-
import("/_app/immutable/entry/app.
|
|
42
|
+
import("/_app/immutable/entry/start.BZt_oICN.js"),
|
|
43
|
+
import("/_app/immutable/entry/app.CsaNbZ85.js")
|
|
44
44
|
]).then(([kit, app]) => {
|
|
45
45
|
kit.start(app, element);
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
</script>
|
|
49
|
-
</div>
|
|
50
|
-
</body>
|
|
51
|
-
</html>
|
|
49
|
+
</div>
|
|
50
|
+
</body>
|
|
51
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-jqd85f{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-jqd85f{padding:0}.feed-header.svelte-jqd85f{padding:var(--main-padding-top) 0 .875rem;flex-shrink:0;border-bottom:1px solid var(--color-border-muted)}.feed-header.svelte-jqd85f h2:where(.svelte-jqd85f){font-size:.9375rem;font-weight:600;margin:0 0 .25rem;color:var(--color-foreground)}.page-desc.svelte-jqd85f{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0}.state.svelte-jqd85f{padding:2rem;text-align:center;color:var(--color-muted-foreground);font-size:.875rem}.body.svelte-jqd85f{flex:1;overflow:visible;padding:1rem 0}.section-title.svelte-jqd85f{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .25rem}.hint.svelte-jqd85f{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0 0 .5rem}.pipeline-section.svelte-jqd85f{margin-bottom:1.5rem}.step-list.svelte-jqd85f{display:flex;flex-direction:column;gap:0;border:1px solid var(--color-border);border-radius:var(--radius-sm);overflow:hidden}.step-row.svelte-jqd85f{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:var(--color-card);border-bottom:1px solid var(--color-border);cursor:grab}.step-row.svelte-jqd85f:last-child{border-bottom:none}.step-row.dragging.svelte-jqd85f{opacity:.5;cursor:grabbing}.drag-handle.svelte-jqd85f{color:var(--color-muted-foreground-soft);font-size:.875rem;cursor:grab;-webkit-user-select:none;user-select:none}.toggle-wrap.svelte-jqd85f{display:flex;align-items:center;cursor:pointer}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f){position:absolute;opacity:0;width:0;height:0}.toggle-slider.svelte-jqd85f{width:36px;height:20px;background:var(--color-input);border-radius:10px;transition:background .2s}.toggle-slider.svelte-jqd85f:after{content:"";display:block;width:16px;height:16px;background:var(--color-card-elevated);border-radius:50%;margin:2px 0 0 2px;transition:transform .2s;box-shadow:0 1px 2px #00000059}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f):checked+.toggle-slider:where(.svelte-jqd85f){background:var(--color-success)}.toggle-wrap.svelte-jqd85f input:where(.svelte-jqd85f):checked+.toggle-slider:where(.svelte-jqd85f):after{transform:translate(16px)}.step-label.svelte-jqd85f{flex:1;font-size:.875rem;min-width:0;color:var(--color-foreground)}.btn-add.svelte-jqd85f{margin-top:.5rem;padding:.35rem .75rem;font-size:.8125rem;color:var(--color-muted-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:4px;cursor:pointer}.btn-add.svelte-jqd85f:hover:not(:disabled){background:var(--color-accent)}.save-row.svelte-jqd85f{margin-top:1rem}.btn.svelte-jqd85f{padding:.5rem 1rem;font-size:.875rem;border-radius:var(--radius-sm);cursor:pointer;border:none}.btn-primary.svelte-jqd85f{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-jqd85f:hover:not(:disabled){background:var(--color-primary-hover)}.btn.svelte-jqd85f:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-jqd85f{max-width:100%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-1f24zj{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1f24zj{padding:0}.body.svelte-1f24zj{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-1f24zj{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.intro.svelte-1f24zj code:where(.svelte-1f24zj){font-size:.8125rem}.section-title.svelte-1f24zj{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-1f24zj{margin-bottom:1.25rem}.text-input.svelte-1f24zj{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.text-input.svelte-1f24zj::placeholder{color:var(--color-muted-foreground-soft)}.proxy-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit;cursor:pointer}.proxy-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-select-trigger:focus-visible{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.proxy-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(42rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.proxy-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.proxy-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.proxy-select-item[data-highlighted]{background:var(--color-muted)}.proxy-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.hint.svelte-1f24zj{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-1f24zj{display:flex;gap:.75rem}.btn.svelte-1f24zj{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-1f24zj{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1f24zj:hover:not(:disabled){background:var(--color-primary-hover)}.btn.svelte-1f24zj:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1f24zj{max-width:100%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-1lsf4ps{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:100%;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1lsf4ps{flex:1;display:flex;flex-direction:column;overflow:hidden;min-height:0;background:transparent}.feed-toolbar-block.svelte-1lsf4ps{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after)}.feed-toolbar-block.svelte-1lsf4ps .admin-feed-header{min-height:4.1rem}.log-filter-input.svelte-1lsf4ps{width:min(16rem,34vw)}.log-level-trigger.svelte-1lsf4ps{width:7.25rem;min-width:7.25rem;height:2.25rem;box-sizing:border-box;display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.45rem .65rem;font-size:.8125rem;font-family:inherit;color:var(--color-foreground);background:var(--color-card-elevated);border:1px solid var(--color-input);border-radius:6px;flex-shrink:0;cursor:pointer;font-variant-numeric:tabular-nums;transition:border-color .15s,background .15s,box-shadow .15s}.log-level-trigger.svelte-1lsf4ps:hover{border-color:var(--color-border)}.log-level-trigger.svelte-1lsf4ps:focus-visible{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.log-level-label.svelte-1lsf4ps{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.log-level-trigger.svelte-1lsf4ps svg{flex-shrink:0;color:var(--color-muted-foreground)}.log-level-content{z-index:120;min-width:7rem;padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.log-level-viewport{display:flex;flex-direction:column;gap:.05rem}.log-level-item{display:flex;align-items:center;min-height:1.85rem;padding:.35rem .55rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;font-variant-numeric:tabular-nums}.log-level-item[data-highlighted]{background:var(--color-muted)}.log-level-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.log-body-scroll.svelte-1lsf4ps,.log-has-data.svelte-1lsf4ps{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}.log-table-scroll.svelte-1lsf4ps{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar{width:4px}.log-table-scroll.svelte-1lsf4ps::-webkit-scrollbar-thumb{background:var(--color-scrollbar-thumb);border-radius:2px}.btn.svelte-1lsf4ps{display:inline-flex;align-items:center;padding:.4rem .9rem;border:none;border-radius:var(--radius-sm);cursor:pointer;font-size:.875rem;font-family:inherit;transition:background .15s}.btn-primary.svelte-1lsf4ps{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-1lsf4ps:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-1lsf4ps:disabled{opacity:.4;cursor:not-allowed}.btn-sm.svelte-1lsf4ps{padding:.25rem .5rem;font-size:.75rem}.table-wrap.svelte-1lsf4ps{width:100%}table.svelte-1lsf4ps{width:100%;table-layout:fixed;border-collapse:collapse}thead.svelte-1lsf4ps th:where(.svelte-1lsf4ps){position:sticky;top:0;z-index:3;background:var(--color-card-elevated);font-size:.72rem;font-weight:600;color:var(--color-muted-foreground);text-transform:uppercase;letter-spacing:.04em;padding:.5rem .75rem;text-align:left;border-bottom:1px solid var(--color-border);box-shadow:0 1px 0 var(--color-border)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps){border-bottom:1px solid var(--color-border-muted)}tbody.svelte-1lsf4ps tr:where(.svelte-1lsf4ps):hover{background:var(--color-muted)}tbody.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.5rem .75rem;font-size:.8125rem;vertical-align:middle}.th-time.svelte-1lsf4ps{width:130px}.th-level.svelte-1lsf4ps{width:68px}.th-cat.svelte-1lsf4ps{width:7rem;max-width:28vw}.th-msg.svelte-1lsf4ps{min-width:0}.log-row.svelte-1lsf4ps{cursor:pointer}.log-row.svelte-1lsf4ps:focus{outline:1px dotted var(--color-muted-foreground);outline-offset:-1px}.td-time.svelte-1lsf4ps{color:var(--color-muted-foreground);white-space:nowrap}.td-level.svelte-1lsf4ps{white-space:nowrap}.badge.svelte-1lsf4ps{display:inline-block;padding:.12rem .4rem;border-radius:4px;font-size:.7rem;font-weight:500}.badge.level-error.svelte-1lsf4ps{background:color-mix(in srgb,var(--color-destructive) 18%,transparent);color:var(--color-destructive);border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent)}.badge.level-warn.svelte-1lsf4ps{background:#eab30824;color:#fbbf24;border:1px solid rgba(234,179,8,.35)}.badge.level-info.svelte-1lsf4ps{background:var(--color-primary-light);color:var(--color-primary-hover);border:1px solid color-mix(in srgb,var(--color-primary) 40%,transparent)}.badge.level-debug.svelte-1lsf4ps{background:var(--color-muted);color:var(--color-muted-foreground-strong);border:1px solid var(--color-border)}.td-cat.svelte-1lsf4ps{color:var(--color-muted-foreground-strong)}.td-msg.svelte-1lsf4ps{word-break:break-word;max-width:320px}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding:.25rem .75rem .65rem;background:transparent;border-bottom:1px solid var(--color-border-muted);vertical-align:top}.payload-content.svelte-1lsf4ps{margin:0;padding:0;font-family:Menlo,Monaco,Consolas,monospace;font-size:.72rem;line-height:1.5;background:transparent;border:none;border-radius:0;overflow-x:auto;max-height:200px;overflow-y:auto;white-space:pre-wrap;word-break:break-all;color:var(--color-muted-foreground-strong)}.log-toolbar.svelte-1lsf4ps{display:flex;align-items:center;justify-content:space-between;padding:.65rem 0 .85rem;flex-shrink:0}.pagination-info.svelte-1lsf4ps{font-size:.8125rem;color:var(--color-muted-foreground)}.pagination-btns.svelte-1lsf4ps{display:flex;gap:.5rem}.state.svelte-1lsf4ps{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:3rem 1.5rem;color:var(--color-muted-foreground-soft);font-size:.875rem}.state.err.svelte-1lsf4ps{flex:1;align-self:stretch;color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 12%,transparent);border-radius:var(--radius-md);padding:1rem;margin:.75rem 0}@media(max-width:720px){.feed-wrap.svelte-1lsf4ps{max-width:100%}.payload-row.svelte-1lsf4ps td:where(.svelte-1lsf4ps){padding-left:.5rem}.payload-row.svelte-1lsf4ps td[colspan="4"]:where(.svelte-1lsf4ps){padding-left:.5rem}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-bhaf7m{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-bhaf7m{padding:0}.body.svelte-bhaf7m{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-bhaf7m{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.intro.svelte-bhaf7m code:where(.svelte-bhaf7m){font-size:.8125rem}.section-title.svelte-bhaf7m{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-bhaf7m{margin-bottom:1.25rem}.url-input.svelte-bhaf7m{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.url-input.svelte-bhaf7m::placeholder{color:var(--color-muted-foreground-soft)}.hint.svelte-bhaf7m{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-bhaf7m{display:flex;gap:.75rem;flex-wrap:wrap}.btn.svelte-bhaf7m{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-bhaf7m{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-bhaf7m:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-bhaf7m{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-bhaf7m:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-bhaf7m:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-bhaf7m{max-width:100%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-1a0dvmg{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1a0dvmg{padding:0}.body.svelte-1a0dvmg{overflow:visible;padding:var(--main-padding-top) 0 1rem}.intro.svelte-1a0dvmg{color:var(--color-muted-foreground-strong);margin:0 0 1.25rem;line-height:1.5;font-size:.875rem}.section-title.svelte-1a0dvmg{font-size:.8125rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .5rem}.form-section.svelte-1a0dvmg{margin-bottom:1.25rem}.text-input.svelte-1a0dvmg{width:100%;box-sizing:border-box;padding:.5rem .75rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);background:var(--color-card-elevated);color:var(--color-foreground)}.text-input.svelte-1a0dvmg::placeholder{color:var(--color-muted-foreground-soft)}.hint.svelte-1a0dvmg{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:.5rem 0 0;line-height:1.45}.btn-row.svelte-1a0dvmg{display:flex;gap:.75rem}.btn.svelte-1a0dvmg{padding:.5rem 1rem;font-size:.875rem;border-radius:6px;cursor:pointer;border:none}.btn-primary.svelte-1a0dvmg{background:var(--color-primary);color:var(--color-primary-foreground)}.btn-primary.svelte-1a0dvmg:hover:not(:disabled){background:var(--color-primary-hover)}.btn-secondary.svelte-1a0dvmg{background:var(--color-muted);color:var(--color-foreground);border:1px solid var(--color-border)}.btn-secondary.svelte-1a0dvmg:hover:not(:disabled){background:var(--color-accent)}.btn.svelte-1a0dvmg:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1a0dvmg{max-width:100%}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.feed-wrap.svelte-1x680s0{margin-top:calc(-1 * var(--main-padding-top));width:100%;max-width:42rem}.feed-col.svelte-1x680s0{padding:0}.feed-header.svelte-1x680s0{padding:var(--main-padding-top) 0 .875rem;flex-shrink:0;border-bottom:1px solid var(--color-border-muted)}.feed-header.svelte-1x680s0 h2:where(.svelte-1x680s0){font-size:.9375rem;font-weight:600;margin:0 0 .25rem;color:var(--color-foreground)}.page-desc.svelte-1x680s0{font-size:.75rem;color:var(--color-muted-foreground-soft);margin:0;line-height:1.5}.body.svelte-1x680s0{flex:1;overflow:visible;padding:1rem 0}.url-row.svelte-1x680s0{display:flex;gap:.5rem;margin-bottom:.75rem}.url-row.svelte-1x680s0 input:where(.svelte-1x680s0){flex:1;padding:.65rem 1rem;border:1px solid var(--color-input);border-radius:var(--radius-md);font-size:.9375rem;outline:none;transition:border .15s,box-shadow .15s;min-width:0;background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit}.url-row.svelte-1x680s0 input:where(.svelte-1x680s0):focus{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.action-row.svelte-1x680s0{display:flex;justify-content:flex-start;margin-bottom:.75rem}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0){padding:.65rem 1.375rem;background:var(--color-primary);color:var(--color-primary-foreground);border:none;border-radius:8px;cursor:pointer;font-size:.9rem;font-family:inherit;white-space:nowrap;transition:background .15s}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0):hover:not(:disabled){background:var(--color-primary-hover)}.action-row.svelte-1x680s0 button:where(.svelte-1x680s0):disabled{opacity:.65;cursor:not-allowed}.result-error.svelte-1x680s0{margin-top:1rem;width:100%;padding:.75rem 1rem;border-radius:var(--radius-md);background:color-mix(in srgb,var(--color-destructive, #c00) 12%,transparent);color:var(--color-foreground);font-size:.8125rem;white-space:pre-wrap;word-break:break-word}.result-wrap.svelte-1x680s0{margin-top:1rem;width:100%}.result-label.svelte-1x680s0{font-size:.75rem;font-weight:600;color:var(--color-muted-foreground);margin:0 0 .4rem}.result-json.svelte-1x680s0{margin:0;padding:1rem;max-height:min(70vh,520px);overflow:auto;font-size:.75rem;line-height:1.45;border-radius:var(--radius-md);border:1px solid var(--color-input);background:var(--color-muted);color:var(--color-foreground)}.proxy-row.svelte-1x680s0{margin-bottom:.75rem}.proxy-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;box-sizing:border-box;padding:.55rem 1rem;border:1px solid var(--color-input);border-radius:var(--radius-md);font-size:.8125rem;outline:none;transition:border .15s,box-shadow .15s;background:var(--color-card-elevated);color:var(--color-foreground);font-family:inherit;cursor:pointer}.proxy-select-trigger:focus-visible{border-color:var(--color-primary);box-shadow:0 0 0 3px var(--color-primary-light)}.proxy-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.proxy-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(42rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.proxy-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.proxy-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.proxy-select-item[data-highlighted]{background:var(--color-muted)}.proxy-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.field-hint.svelte-1x680s0{margin:.4rem 0 0;font-size:.75rem;color:var(--color-muted-foreground-soft);line-height:1.4}@media(max-width:600px){.feed-wrap.svelte-1x680s0{max-width:100%}}
|
package/app/webui/build/_app/immutable/assets/{SourcesList.D5Lso0bo.css → SourcesList.ke66uOSi.css}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
.feed-wrap.svelte-1beoyzy{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));margin-left:calc(-1 * var(--shell-gutter));margin-right:calc(-1 * var(--shell-gutter));width:calc(100% + 2 * var(--shell-gutter));max-width:none;box-sizing:border-box;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1beoyzy{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:transparent}.feed-toolbar-block.svelte-1beoyzy{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after);padding-inline:var(--shell-gutter);box-sizing:border-box}.feed-body-scroll.svelte-1beoyzy{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.feed-header.svelte-1beoyzy{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;flex-shrink:0}.header-left.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0}.header-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.filter-input.svelte-1beoyzy{flex:0 1 auto;width:100%;min-width:6.5rem;max-width:12rem;padding:.35rem .6rem;font-size:.8125rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card-elevated);color:var(--color-foreground);transition:border-color .15s,background .15s}.filter-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card)}.filter-input.svelte-1beoyzy::placeholder{color:var(--color-muted-foreground-soft)}.btn-sort{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;font:inherit;color:var(--color-muted-foreground-strong);background:transparent;border:1px solid var(--color-input);border-radius:var(--radius-sm);box-shadow:none;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.btn-sort:hover{color:var(--color-primary);border-color:var(--color-primary);background:transparent}.btn-sort:focus-visible{outline:2px solid color-mix(in srgb,var(--color-primary) 45%,transparent);outline-offset:1px}.sort-menu{min-width:10.5rem;padding:.3rem;box-sizing:border-box}.sort-menu-item.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .55rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);transition:background .12s,color .12s}.sort-menu-item.svelte-1beoyzy:hover{background:var(--color-muted);color:var(--color-accent-foreground)}.sort-menu-item.active.svelte-1beoyzy{color:var(--color-primary);font-weight:500}.sort-menu-dir.svelte-1beoyzy{font-size:.75rem;font-variant-numeric:tabular-nums;opacity:.9}.btn-add.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:opacity .15s,background .15s}.btn-add.svelte-1beoyzy:hover{opacity:.9;background:var(--color-primary-hover, var(--color-primary))}.dropdown-panel{z-index:50;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:var(--shadow-panel)}.more-menu{width:11.5rem;min-width:11.5rem;padding:.25rem;box-sizing:border-box}.more-menu-item.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);text-decoration:none;transition:background .15s,color .15s}.more-menu-item.svelte-1beoyzy:hover:not(:disabled){background:var(--color-muted);color:var(--color-accent-foreground)}.more-menu-item.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.more-menu-item-danger.svelte-1beoyzy:hover:not(:disabled){color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 14%,transparent)}.more-menu-item-remove.svelte-1beoyzy{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy svg{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 14%,transparent);color:var(--color-destructive)}.more-menu-item.pulling.svelte-1beoyzy svg{animation:svelte-1beoyzy-spin .8s linear infinite}.state.svelte-1beoyzy{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:1.5rem calc(var(--shell-gutter) + 1rem);color:var(--color-muted-foreground);font-size:.875rem;gap:.25rem}.state.error.svelte-1beoyzy{color:var(--color-destructive)}.link-btn.svelte-1beoyzy{background:none;border:none;padding:0;color:var(--color-primary);font-size:inherit;cursor:pointer;text-decoration:underline}.link-btn.svelte-1beoyzy:hover{text-decoration:underline}.feed-body-scroll.svelte-1beoyzy>.list:where(.svelte-1beoyzy){flex-shrink:0}.list.svelte-1beoyzy{min-width:0;width:100%;display:flex;flex-direction:column;border-top:1px solid var(--color-border-muted)}.row-grid.svelte-1beoyzy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem .75rem;align-items:center;padding:.55rem var(--shell-gutter);box-sizing:border-box}.card.svelte-1beoyzy{border-bottom:1px solid var(--color-border-muted);transition:background .15s;cursor:pointer}.card.svelte-1beoyzy:hover{background:var(--color-muted)}.card.svelte-1beoyzy:focus-visible{outline:1px solid color-mix(in srgb,var(--color-primary) 55%,transparent);outline-offset:-1px}.card.svelte-1beoyzy:last-child{border-bottom:none}.cell-title.svelte-1beoyzy{min-width:0}.title-block.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;width:100%;box-sizing:border-box;color:inherit}.title-line.svelte-1beoyzy{display:flex;align-items:baseline;gap:.35rem;min-width:0;flex:1 1 0%}.title-item-count.svelte-1beoyzy{flex-shrink:0;font-size:.72rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--color-muted-foreground-soft);line-height:1.2}.source-title-favicon-slot.svelte-1beoyzy{flex-shrink:0;box-sizing:border-box;width:1rem;height:1rem;border-radius:3px;background:transparent;overflow:hidden}.source-title-favicon.svelte-1beoyzy{display:block;width:100%;height:100%;object-fit:contain}.title-text.svelte-1beoyzy{font-size:.875rem;font-weight:500;line-height:1.2;color:var(--color-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cell-actions.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:0}@keyframes svelte-1beoyzy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;color:var(--color-muted-foreground);background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;transition:color .15s,background .15s}.btn-icon:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:100}.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--color-card-elevated);border-radius:10px;width:calc(100% - 2rem);max-width:460px;box-shadow:var(--shadow-panel);border:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;z-index:101}.modal .modal-header.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--color-border-muted)}.modal-title{font-size:.9375rem;font-weight:600;margin:0;color:var(--color-foreground)}.modal-close{background:none;border:none;padding:.25rem;font-size:1rem;color:var(--color-muted-foreground);cursor:pointer;line-height:1;border-radius:4px}.modal-close:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-body.svelte-1beoyzy{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.75rem}.field.svelte-1beoyzy{display:flex;flex-direction:column;gap:.3rem}.field-row.svelte-1beoyzy{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.field-label.svelte-1beoyzy{font-size:.8rem;font-weight:500;color:var(--color-muted-foreground-strong)}.required.svelte-1beoyzy{color:var(--color-destructive)}.ref-input-wrap.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;width:100%}.ref-input-wrap.svelte-1beoyzy .field-input:where(.svelte-1beoyzy){flex:1;min-width:0}.parse-hints.svelte-1beoyzy{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}.parse-hint.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.72rem;font-weight:500;color:var(--color-muted-foreground-soft);border-radius:5px;border:1px solid transparent;background:transparent;transition:color .15s,border-color .15s,background .15s}.parse-hint.active.svelte-1beoyzy{color:var(--color-primary);border-color:color-mix(in srgb,var(--color-primary) 35%,transparent);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}.field-input.svelte-1beoyzy{padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;transition:border-color .15s,background .15s;width:100%}.field-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card-elevated)}.field-input--weight.svelte-1beoyzy{-moz-appearance:textfield}.field-input--weight.svelte-1beoyzy::-webkit-outer-spin-button,.field-input--weight.svelte-1beoyzy::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.save-error.svelte-1beoyzy{font-size:.8rem;color:var(--color-destructive);margin:0}.modal-footer.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--color-border-muted)}.remove-dialog-footer.svelte-1beoyzy{justify-content:flex-end}.remove-dialog-text.svelte-1beoyzy{margin:0;font-size:.875rem;line-height:1.5;color:var(--color-foreground)}.remove-dialog-target.svelte-1beoyzy{margin:0;margin-top:.5rem;font-size:.8125rem;color:var(--color-muted-foreground-strong);word-break:break-all}.modal-footer-left.svelte-1beoyzy{display:flex;align-items:center}.modal-footer-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem}.btn-delete.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.4rem .8rem;font-size:.875rem;color:var(--color-destructive);background:transparent;border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s}.btn-delete.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 12%,transparent)}.confirm-delete-row.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem}.confirm-delete-text.svelte-1beoyzy{color:var(--color-destructive);font-weight:500}.btn-confirm-yes.svelte-1beoyzy{padding:.3rem .7rem;font-size:.8rem;color:var(--color-destructive-foreground);background:var(--color-destructive);border:none;border-radius:5px;cursor:pointer}.btn-confirm-yes.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.btn-confirm-no.svelte-1beoyzy{padding:.3rem .6rem;font-size:.8rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:5px;cursor:pointer}.btn-cancel{padding:.4rem 1rem;font-size:.875rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.btn-cancel:hover:not(:disabled){background:var(--color-accent)}.btn-save.svelte-1beoyzy{padding:.4rem 1.2rem;font-size:.875rem;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:6px;cursor:pointer;transition:opacity .15s}.btn-save.svelte-1beoyzy:hover:not(:disabled){opacity:.85}.btn-save.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1beoyzy{max-width:100%}.field-row.svelte-1beoyzy{grid-template-columns:1fr}}
|
|
1
|
+
.feed-wrap.svelte-1beoyzy{--feed-sticky-gap-after: 0;margin-top:calc(-1 * var(--main-padding-top));margin-left:calc(-1 * var(--shell-gutter));margin-right:calc(-1 * var(--shell-gutter));width:calc(100% + 2 * var(--shell-gutter));max-width:none;box-sizing:border-box;display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden}.feed-col.svelte-1beoyzy{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;background:transparent}.feed-toolbar-block.svelte-1beoyzy{flex-shrink:0;padding-top:var(--main-padding-top);padding-bottom:var(--feed-sticky-gap-after);padding-inline:var(--shell-gutter);box-sizing:border-box}.feed-body-scroll.svelte-1beoyzy{flex:1;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overflow-x:auto;overscroll-behavior-y:contain;-webkit-overflow-scrolling:touch}.feed-header.svelte-1beoyzy{display:flex;align-items:center;gap:.75rem;padding:.75rem 0;flex-shrink:0}.header-left.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex:0 1 auto;min-width:0}.header-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;flex-shrink:0;margin-left:auto}.filter-input.svelte-1beoyzy{flex:0 1 auto;width:100%;min-width:6.5rem;max-width:12rem;padding:.35rem .6rem;font-size:.8125rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card-elevated);color:var(--color-foreground);transition:border-color .15s,background .15s}.filter-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card)}.filter-input.svelte-1beoyzy::placeholder{color:var(--color-muted-foreground-soft)}.btn-sort{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;font:inherit;color:var(--color-muted-foreground-strong);background:transparent;border:1px solid var(--color-input);border-radius:var(--radius-sm);box-shadow:none;cursor:pointer;transition:color .15s,border-color .15s,background .15s}.btn-sort:hover{color:var(--color-primary);border-color:var(--color-primary);background:transparent}.btn-sort:focus-visible{outline:2px solid color-mix(in srgb,var(--color-primary) 45%,transparent);outline-offset:1px}.sort-menu{min-width:10.5rem;padding:.3rem;box-sizing:border-box}.sort-menu-item.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .55rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);transition:background .12s,color .12s}.sort-menu-item.svelte-1beoyzy:hover{background:var(--color-muted);color:var(--color-accent-foreground)}.sort-menu-item.active.svelte-1beoyzy{color:var(--color-primary);font-weight:500}.sort-menu-dir.svelte-1beoyzy{font-size:.75rem;font-variant-numeric:tabular-nums;opacity:.9}.btn-add.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;flex-shrink:0;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:var(--radius-sm);cursor:pointer;transition:opacity .15s,background .15s}.btn-add.svelte-1beoyzy:hover{opacity:.9;background:var(--color-primary-hover, var(--color-primary))}.dropdown-panel{z-index:50;background:var(--color-card);border:1px solid var(--color-border);border-radius:var(--radius-sm);box-shadow:var(--shadow-panel)}.more-menu{width:11.5rem;min-width:11.5rem;padding:.25rem;box-sizing:border-box}.more-menu-item.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.8125rem;text-align:left;border:none;border-radius:6px;cursor:pointer;background:transparent;color:var(--color-muted-foreground-strong);text-decoration:none;transition:background .15s,color .15s}.more-menu-item.svelte-1beoyzy:hover:not(:disabled){background:var(--color-muted);color:var(--color-accent-foreground)}.more-menu-item.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.more-menu-item-danger.svelte-1beoyzy:hover:not(:disabled){color:var(--color-destructive);background:color-mix(in srgb,var(--color-destructive) 14%,transparent)}.more-menu-item-remove.svelte-1beoyzy{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy svg{color:var(--color-destructive)}.more-menu-item-remove.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 14%,transparent);color:var(--color-destructive)}.more-menu-item.pulling.svelte-1beoyzy svg{animation:svelte-1beoyzy-spin .8s linear infinite}.state.svelte-1beoyzy{flex:1;display:flex;align-items:center;justify-content:center;text-align:center;padding:1.5rem calc(var(--shell-gutter) + 1rem);color:var(--color-muted-foreground);font-size:.875rem;gap:.25rem}.state.error.svelte-1beoyzy{color:var(--color-destructive)}.link-btn.svelte-1beoyzy{background:none;border:none;padding:0;color:var(--color-primary);font-size:inherit;cursor:pointer;text-decoration:underline}.link-btn.svelte-1beoyzy:hover{text-decoration:underline}.feed-body-scroll.svelte-1beoyzy>.list:where(.svelte-1beoyzy){flex-shrink:0}.list.svelte-1beoyzy{min-width:0;width:100%;display:flex;flex-direction:column;border-top:1px solid var(--color-border-muted)}.row-grid.svelte-1beoyzy{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:.5rem .75rem;align-items:center;padding:.55rem var(--shell-gutter);box-sizing:border-box}.card.svelte-1beoyzy{border-bottom:1px solid var(--color-border-muted);transition:background .15s;cursor:pointer}.card.svelte-1beoyzy:hover{background:var(--color-muted)}.card.svelte-1beoyzy:focus-visible{outline:1px solid color-mix(in srgb,var(--color-primary) 55%,transparent);outline-offset:-1px}.card.svelte-1beoyzy:last-child{border-bottom:none}.cell-title.svelte-1beoyzy{min-width:0}.title-block.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;min-width:0;max-width:100%;width:100%;box-sizing:border-box;color:inherit}.title-line.svelte-1beoyzy{display:flex;align-items:baseline;gap:.35rem;min-width:0;flex:1 1 0%}.title-item-count.svelte-1beoyzy{flex-shrink:0;font-size:.72rem;font-weight:500;font-variant-numeric:tabular-nums;color:var(--color-muted-foreground-soft);line-height:1.2}.source-title-favicon-slot.svelte-1beoyzy{flex-shrink:0;box-sizing:border-box;width:1rem;height:1rem;border-radius:3px;background:transparent;overflow:hidden}.source-title-favicon.svelte-1beoyzy{display:block;width:100%;height:100%;object-fit:contain}.title-text.svelte-1beoyzy{font-size:.875rem;font-weight:500;line-height:1.2;color:var(--color-foreground);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.cell-actions.svelte-1beoyzy{display:inline-flex;align-items:center;justify-content:flex-end;flex-shrink:0}@keyframes svelte-1beoyzy-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.btn-icon{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;color:var(--color-muted-foreground);background:transparent;border:none;border-radius:var(--radius-sm);cursor:pointer;transition:color .15s,background .15s}.btn-icon:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;z-index:100}.modal{position:fixed;left:50%;top:50%;transform:translate(-50%,-50%);background:var(--color-card-elevated);border-radius:10px;width:calc(100% - 2rem);max-width:460px;box-shadow:var(--shadow-panel);border:1px solid var(--color-border);display:flex;flex-direction:column;overflow:hidden;z-index:101}.modal .modal-header.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem .75rem;border-bottom:1px solid var(--color-border-muted)}.modal-title{font-size:.9375rem;font-weight:600;margin:0;color:var(--color-foreground)}.modal-close{background:none;border:none;padding:.25rem;font-size:1rem;color:var(--color-muted-foreground);cursor:pointer;line-height:1;border-radius:4px}.modal-close:hover{color:var(--color-foreground);background:var(--color-muted)}.modal-body.svelte-1beoyzy{padding:1rem 1.25rem;display:flex;flex-direction:column;gap:.75rem}.field.svelte-1beoyzy{display:flex;flex-direction:column;gap:.3rem}.field-row.svelte-1beoyzy{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.field-label.svelte-1beoyzy{font-size:.8rem;font-weight:500;color:var(--color-muted-foreground-strong)}.required.svelte-1beoyzy{color:var(--color-destructive)}.ref-input-wrap.svelte-1beoyzy{display:flex;align-items:center;gap:.35rem;width:100%}.ref-input-wrap.svelte-1beoyzy .field-input:where(.svelte-1beoyzy){flex:1;min-width:0}.parse-hints.svelte-1beoyzy{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem}.parse-hint.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.2rem .45rem;font-size:.72rem;font-weight:500;color:var(--color-muted-foreground-soft);border-radius:5px;border:1px solid transparent;background:transparent;transition:color .15s,border-color .15s,background .15s}.parse-hint.active.svelte-1beoyzy{color:var(--color-primary);border-color:color-mix(in srgb,var(--color-primary) 35%,transparent);background:color-mix(in srgb,var(--color-primary) 10%,transparent)}.field-input.svelte-1beoyzy{padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;transition:border-color .15s,background .15s;width:100%}.field-input.svelte-1beoyzy:focus{border-color:var(--color-primary);background:var(--color-card-elevated)}.source-modal-select-trigger{display:inline-flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.4rem .65rem;font-size:.875rem;border:1px solid var(--color-input);border-radius:var(--radius-sm);outline:none;background:var(--color-card);color:var(--color-foreground);font-family:inherit;cursor:pointer;transition:border-color .15s,background .15s}.source-modal-select-trigger:focus-visible{border-color:var(--color-primary);background:var(--color-card-elevated);box-shadow:0 0 0 3px var(--color-primary-light)}.source-modal-select-trigger span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.source-modal-select-content{z-index:140;width:var(--bits-select-anchor-width);max-width:min(34rem,calc(100vw - 2rem));padding:.25rem;background:var(--color-card-elevated);border:1px solid var(--color-border);border-radius:var(--radius-md);box-shadow:var(--shadow-panel)}.source-modal-select-viewport{display:flex;flex-direction:column;gap:.05rem;max-height:16rem;overflow:auto}.source-modal-select-item{display:flex;align-items:center;min-height:2rem;padding:.4rem .6rem;font-size:.8125rem;line-height:1.25;color:var(--color-foreground);border-radius:var(--radius-sm);outline:none;cursor:pointer;word-break:break-all}.source-modal-select-item[data-highlighted]{background:var(--color-muted)}.source-modal-select-item[data-selected]{color:var(--color-primary);background:var(--color-primary-light)}.field-hint.svelte-1beoyzy{margin:0;font-size:.75rem;color:var(--color-muted-foreground-soft);line-height:1.4}.field-input--weight.svelte-1beoyzy{-moz-appearance:textfield}.field-input--weight.svelte-1beoyzy::-webkit-outer-spin-button,.field-input--weight.svelte-1beoyzy::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.save-error.svelte-1beoyzy{font-size:.8rem;color:var(--color-destructive);margin:0}.modal-footer.svelte-1beoyzy{display:flex;align-items:center;justify-content:space-between;gap:.5rem;padding:.75rem 1.25rem;border-top:1px solid var(--color-border-muted)}.remove-dialog-footer.svelte-1beoyzy{justify-content:flex-end}.remove-dialog-text.svelte-1beoyzy{margin:0;font-size:.875rem;line-height:1.5;color:var(--color-foreground)}.remove-dialog-target.svelte-1beoyzy{margin:0;margin-top:.5rem;font-size:.8125rem;color:var(--color-muted-foreground-strong);word-break:break-all}.modal-footer-left.svelte-1beoyzy{display:flex;align-items:center}.modal-footer-right.svelte-1beoyzy{display:flex;align-items:center;gap:.5rem}.btn-delete.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.3rem;padding:.4rem .8rem;font-size:.875rem;color:var(--color-destructive);background:transparent;border:1px solid color-mix(in srgb,var(--color-destructive) 45%,transparent);border-radius:var(--radius-sm);cursor:pointer;transition:background .15s}.btn-delete.svelte-1beoyzy:hover:not(:disabled){background:color-mix(in srgb,var(--color-destructive) 12%,transparent)}.confirm-delete-row.svelte-1beoyzy{display:inline-flex;align-items:center;gap:.4rem;font-size:.8rem}.confirm-delete-text.svelte-1beoyzy{color:var(--color-destructive);font-weight:500}.btn-confirm-yes.svelte-1beoyzy{padding:.3rem .7rem;font-size:.8rem;color:var(--color-destructive-foreground);background:var(--color-destructive);border:none;border-radius:5px;cursor:pointer}.btn-confirm-yes.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}.btn-confirm-no.svelte-1beoyzy{padding:.3rem .6rem;font-size:.8rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:5px;cursor:pointer}.btn-cancel{padding:.4rem 1rem;font-size:.875rem;color:var(--color-foreground);background:var(--color-muted);border:1px solid var(--color-border);border-radius:var(--radius-sm);cursor:pointer}.btn-cancel:hover:not(:disabled){background:var(--color-accent)}.btn-save.svelte-1beoyzy{padding:.4rem 1.2rem;font-size:.875rem;color:var(--color-primary-foreground);background:var(--color-primary);border:none;border-radius:6px;cursor:pointer;transition:opacity .15s}.btn-save.svelte-1beoyzy:hover:not(:disabled){opacity:.85}.btn-save.svelte-1beoyzy:disabled{opacity:.6;cursor:not-allowed}@media(max-width:600px){.feed-wrap.svelte-1beoyzy{max-width:100%}.field-row.svelte-1beoyzy{grid-template-columns:1fr}}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[data-select-viewport],[data-combobox-viewport]{scrollbar-width:none!important;-ms-overflow-style:none!important;-webkit-overflow-scrolling:touch!important}[data-combobox-viewport]::-webkit-scrollbar{display:none!important}[data-select-viewport]::-webkit-scrollbar{display:none!important}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{w as a}from"./
|
|
1
|
+
import{w as a}from"./FDS7fbwH.js";let t=null;const s=a({msg:"",type:""});function m(e,o=""){s.set({msg:e,type:o}),t&&clearTimeout(t),t=setTimeout(()=>s.set({msg:"",type:""}),3500)}export{m as s,s as t};
|