zdashboard 2.8.6 → 2.9.0
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/dist/cli.js +15 -468
- package/dist/cli.js.map +1 -1
- package/dist/web/assets/CodeViewer-yUtAi1hT.js +307 -0
- package/dist/web/assets/{FileIcon-68etP2t6.js → FileIcon-DCL9OD6I.js} +1 -1
- package/dist/web/assets/{FilterPills-DGfzMpn_.js → FilterPills-BD2vsIx2.js} +1 -1
- package/dist/web/assets/{Sidebar-N0HiMJRK.js → Sidebar-CsmNxVjL.js} +1 -1
- package/dist/web/assets/{Sidebar-D83uLTNy.js → Sidebar-DxeR1Shk.js} +1 -1
- package/dist/web/assets/{Workspace-BpSq60xh.js → Workspace-BGj3n613.js} +1 -1
- package/dist/web/assets/Workspace-CUepnOlM.js +1 -0
- package/dist/web/assets/Workspace-D0rSzljF.js +1 -0
- package/dist/web/assets/{Workspace-DW8xX3Tg.js → Workspace-DUK4Lm-v.js} +1 -1
- package/dist/web/assets/{index-DH1Mqw-g.css → index--t_ijYil.css} +1 -1
- package/dist/web/assets/{index-D_uh-zkI.js → index-veTBv7Qv.js} +12 -12
- package/dist/web/assets/{usePluginData-Bk2M7LNj.js → usePluginData-mjHueOjf.js} +1 -1
- package/dist/web/assets/web-BODcUPmi.js +2 -0
- package/dist/web/assets/web-CsCyTuDw.js +2 -0
- package/dist/web/assets/{web-CEB9kTEr.js → web-D6VGQFbH.js} +2 -2
- package/dist/web/assets/{web-CbW9uGDV.js → web-DIZjnUb4.js} +2 -2
- package/dist/web/index.html +2 -2
- package/package.json +1 -1
- package/dist/web/assets/CodeViewer-_jAxbWVL.js +0 -10
- package/dist/web/assets/ImageViewer-ChZdzYPf.js +0 -298
- package/dist/web/assets/Workspace-BE7p2hNz.js +0 -1
- package/dist/web/assets/Workspace-DjL1fdji.js +0 -2
- package/dist/web/assets/Workspace-DrN9--Je.js +0 -1
- package/dist/web/assets/web-BZukfmmT.js +0 -2
- package/dist/web/assets/web-CGvrDSNo.js +0 -2
- package/dist/web/assets/web-CLKkH6eO.js +0 -2
package/dist/cli.js
CHANGED
|
@@ -43,7 +43,7 @@ import { fileURLToPath } from "url";
|
|
|
43
43
|
// package.json
|
|
44
44
|
var package_default = {
|
|
45
45
|
name: "zdashboard",
|
|
46
|
-
version: "2.
|
|
46
|
+
version: "2.9.0",
|
|
47
47
|
description: "ZCode skill dashboard platform \u2014 pluggable viewers for zdesign/zview/zreview/zgoal",
|
|
48
48
|
type: "module",
|
|
49
49
|
bin: {
|
|
@@ -1031,9 +1031,9 @@ var DashboardService = class extends Service3 {
|
|
|
1031
1031
|
res.end('{"error":"method not allowed"}');
|
|
1032
1032
|
});
|
|
1033
1033
|
}
|
|
1034
|
-
register(
|
|
1035
|
-
this.plugins.set(
|
|
1036
|
-
this.ctx.effect(() => () => this.plugins.delete(
|
|
1034
|
+
register(manifest5) {
|
|
1035
|
+
this.plugins.set(manifest5.mode, manifest5);
|
|
1036
|
+
this.ctx.effect(() => () => this.plugins.delete(manifest5.mode));
|
|
1037
1037
|
}
|
|
1038
1038
|
list() {
|
|
1039
1039
|
return Array.from(this.plugins.values());
|
|
@@ -1196,7 +1196,7 @@ var JustRunner = class {
|
|
|
1196
1196
|
|
|
1197
1197
|
// src/sdk/server.ts
|
|
1198
1198
|
function definePlugin(def) {
|
|
1199
|
-
const { manifest:
|
|
1199
|
+
const { manifest: manifest5, setup } = def;
|
|
1200
1200
|
return {
|
|
1201
1201
|
inject: ["server", "dashboard", "reload"],
|
|
1202
1202
|
apply(ctx) {
|
|
@@ -1206,26 +1206,26 @@ function definePlugin(def) {
|
|
|
1206
1206
|
try {
|
|
1207
1207
|
fn();
|
|
1208
1208
|
} catch (e) {
|
|
1209
|
-
console.error(`[zdashboard] plugin ${
|
|
1209
|
+
console.error(`[zdashboard] plugin ${manifest5.mode} dispose error:`, e);
|
|
1210
1210
|
}
|
|
1211
1211
|
}
|
|
1212
1212
|
});
|
|
1213
|
-
ctx.dashboard.register(
|
|
1213
|
+
ctx.dashboard.register(manifest5);
|
|
1214
1214
|
const respondWith = (handler) => async (req, res) => {
|
|
1215
1215
|
if (res.headersSent) return;
|
|
1216
1216
|
try {
|
|
1217
1217
|
const data = await handler(req, res);
|
|
1218
1218
|
if (data !== void 0 && !res.writableEnded) json(res, data);
|
|
1219
1219
|
} catch (e) {
|
|
1220
|
-
console.error(`[zdashboard] plugin ${
|
|
1220
|
+
console.error(`[zdashboard] plugin ${manifest5.mode} route error:`, e);
|
|
1221
1221
|
if (!res.headersSent) json(res, { error: "internal" }, 500);
|
|
1222
1222
|
}
|
|
1223
1223
|
};
|
|
1224
1224
|
const pctx = {
|
|
1225
|
-
mode:
|
|
1225
|
+
mode: manifest5.mode,
|
|
1226
1226
|
config() {
|
|
1227
|
-
const schema =
|
|
1228
|
-
const stored = ctx.server.getPluginConfig(
|
|
1227
|
+
const schema = manifest5.config ?? {};
|
|
1228
|
+
const stored = ctx.server.getPluginConfig(manifest5.mode) ?? {};
|
|
1229
1229
|
const defaults = Object.fromEntries(
|
|
1230
1230
|
Object.entries(schema).map(([key, field]) => [key, field.default])
|
|
1231
1231
|
);
|
|
@@ -1248,7 +1248,7 @@ function definePlugin(def) {
|
|
|
1248
1248
|
ctx.server.static(prefix, dir);
|
|
1249
1249
|
},
|
|
1250
1250
|
broadcast(event, data) {
|
|
1251
|
-
ctx.reload?.broadcast(`plugin:${
|
|
1251
|
+
ctx.reload?.broadcast(`plugin:${manifest5.mode}:${event}`, data ?? "");
|
|
1252
1252
|
},
|
|
1253
1253
|
onDispose(fn) {
|
|
1254
1254
|
disposers.push(fn);
|
|
@@ -1558,459 +1558,6 @@ var apply6 = defineBuiltin({
|
|
|
1558
1558
|
}
|
|
1559
1559
|
});
|
|
1560
1560
|
|
|
1561
|
-
// src/plugins/market/manifest.ts
|
|
1562
|
-
var manifest5 = {
|
|
1563
|
-
mode: "market",
|
|
1564
|
-
label: "\u7075\u611F\u5E02\u573A",
|
|
1565
|
-
icon: "\u2728",
|
|
1566
|
-
description: "Logo / \u52A8\u6548 / \u8BBE\u8BA1\u7075\u611F\u6D4F\u89C8 \xB7 \u8F6C\u63D0\u793A\u8BCD\u95ED\u73AF",
|
|
1567
|
-
order: 40
|
|
1568
|
-
};
|
|
1569
|
-
|
|
1570
|
-
// src/plugins/market/sources/logotypes.ts
|
|
1571
|
-
var LOGOTYPES = [
|
|
1572
|
-
// ---- tech 消费与硬件 ----
|
|
1573
|
-
{ id: "apple", name: "Apple", category: "tech" },
|
|
1574
|
-
{ id: "google", name: "Google", category: "tech" },
|
|
1575
|
-
{ id: "samsung", name: "Samsung", category: "tech" },
|
|
1576
|
-
{ id: "huawei", name: "Huawei", category: "tech" },
|
|
1577
|
-
{ id: "xiaomi", name: "Xiaomi", category: "tech" },
|
|
1578
|
-
{ id: "sony", name: "Sony", category: "tech" },
|
|
1579
|
-
{ id: "panasonic", name: "Panasonic", category: "tech" },
|
|
1580
|
-
{ id: "lg", name: "LG", category: "tech" },
|
|
1581
|
-
{ id: "nvidia", name: "NVIDIA", category: "tech" },
|
|
1582
|
-
{ id: "amd", name: "AMD", category: "tech" },
|
|
1583
|
-
{ id: "intel", name: "Intel", category: "tech" },
|
|
1584
|
-
{ id: "oracle", name: "Oracle", category: "tech" },
|
|
1585
|
-
{ id: "dell", name: "Dell", category: "tech" },
|
|
1586
|
-
{ id: "asus", name: "ASUS", category: "tech" },
|
|
1587
|
-
{ id: "lenovo", name: "Lenovo", category: "tech" },
|
|
1588
|
-
{ id: "razer", name: "Razer", category: "tech" },
|
|
1589
|
-
{ id: "logitech", name: "Logitech", category: "tech" },
|
|
1590
|
-
{ id: "nikon", name: "Nikon", category: "tech" },
|
|
1591
|
-
{ id: "tesla", name: "Tesla", category: "tech" },
|
|
1592
|
-
{ id: "nokia", name: "Nokia", category: "tech" },
|
|
1593
|
-
{ id: "oneplus", name: "OnePlus", category: "tech" },
|
|
1594
|
-
{ id: "oppo", name: "OPPO", category: "tech" },
|
|
1595
|
-
// ---- social 社交内容 ----
|
|
1596
|
-
{ id: "facebook", name: "Facebook", category: "social" },
|
|
1597
|
-
{ id: "instagram", name: "Instagram", category: "social" },
|
|
1598
|
-
{ id: "whatsapp", name: "WhatsApp", category: "social" },
|
|
1599
|
-
{ id: "signal", name: "Signal", category: "social" },
|
|
1600
|
-
{ id: "telegram", name: "Telegram", category: "social" },
|
|
1601
|
-
{ id: "discord", name: "Discord", category: "social" },
|
|
1602
|
-
{ id: "slack", name: "Slack", category: "social" },
|
|
1603
|
-
{ id: "x", name: "X", category: "social" },
|
|
1604
|
-
{ id: "threads", name: "Threads", category: "social" },
|
|
1605
|
-
{ id: "bluesky", name: "Bluesky", category: "social" },
|
|
1606
|
-
{ id: "mastodon", name: "Mastodon", category: "social" },
|
|
1607
|
-
{ id: "reddit", name: "Reddit", category: "social" },
|
|
1608
|
-
{ id: "pinterest", name: "Pinterest", category: "social" },
|
|
1609
|
-
{ id: "tiktok", name: "TikTok", category: "social" },
|
|
1610
|
-
{ id: "youtube", name: "YouTube", category: "social" },
|
|
1611
|
-
{ id: "twitch", name: "Twitch", category: "social" },
|
|
1612
|
-
{ id: "wechat", name: "WeChat", category: "social" },
|
|
1613
|
-
{ id: "sinaweibo", name: "Sina Weibo", category: "social" },
|
|
1614
|
-
{ id: "bilibili", name: "bilibili", category: "social" },
|
|
1615
|
-
{ id: "tencentqq", name: "Tencent QQ", category: "social" },
|
|
1616
|
-
// ---- dev 开发 ----
|
|
1617
|
-
{ id: "github", name: "GitHub", category: "dev" },
|
|
1618
|
-
{ id: "gitlab", name: "GitLab", category: "dev" },
|
|
1619
|
-
{ id: "bitbucket", name: "Bitbucket", category: "dev" },
|
|
1620
|
-
{ id: "git", name: "Git", category: "dev" },
|
|
1621
|
-
{ id: "githubactions", name: "GitHub Actions", category: "dev" },
|
|
1622
|
-
{ id: "react", name: "React", category: "dev" },
|
|
1623
|
-
{ id: "vuedotjs", name: "Vue.js", category: "dev" },
|
|
1624
|
-
{ id: "angular", name: "Angular", category: "dev" },
|
|
1625
|
-
{ id: "svelte", name: "Svelte", category: "dev" },
|
|
1626
|
-
{ id: "nextdotjs", name: "Next.js", category: "dev" },
|
|
1627
|
-
{ id: "nuxtdotjs", name: "Nuxt", category: "dev" },
|
|
1628
|
-
{ id: "astro", name: "Astro", category: "dev" },
|
|
1629
|
-
{ id: "typescript", name: "TypeScript", category: "dev" },
|
|
1630
|
-
{ id: "javascript", name: "JavaScript", category: "dev" },
|
|
1631
|
-
{ id: "nodedotjs", name: "Node.js", category: "dev" },
|
|
1632
|
-
{ id: "python", name: "Python", category: "dev" },
|
|
1633
|
-
{ id: "rust", name: "Rust", category: "dev" },
|
|
1634
|
-
{ id: "go", name: "Go", category: "dev" },
|
|
1635
|
-
{ id: "swift", name: "Swift", category: "dev" },
|
|
1636
|
-
{ id: "kotlin", name: "Kotlin", category: "dev" },
|
|
1637
|
-
{ id: "php", name: "PHP", category: "dev" },
|
|
1638
|
-
{ id: "laravel", name: "Laravel", category: "dev" },
|
|
1639
|
-
{ id: "ruby", name: "Ruby", category: "dev" },
|
|
1640
|
-
{ id: "rubyonrails", name: "Ruby on Rails", category: "dev" },
|
|
1641
|
-
{ id: "cplusplus", name: "C++", category: "dev" },
|
|
1642
|
-
{ id: "sass", name: "Sass", category: "dev" },
|
|
1643
|
-
{ id: "tailwindcss", name: "Tailwind CSS", category: "dev" },
|
|
1644
|
-
{ id: "pnpm", name: "pnpm", category: "dev" },
|
|
1645
|
-
{ id: "npm", name: "npm", category: "dev" },
|
|
1646
|
-
{ id: "yarn", name: "Yarn", category: "dev" },
|
|
1647
|
-
{ id: "vite", name: "Vite", category: "dev" },
|
|
1648
|
-
{ id: "vitest", name: "Vitest", category: "dev" },
|
|
1649
|
-
{ id: "storybook", name: "Storybook", category: "dev" },
|
|
1650
|
-
{ id: "docker", name: "Docker", category: "dev" },
|
|
1651
|
-
{ id: "kubernetes", name: "Kubernetes", category: "dev" },
|
|
1652
|
-
{ id: "terraform", name: "Terraform", category: "dev" },
|
|
1653
|
-
{ id: "ansible", name: "Ansible", category: "dev" },
|
|
1654
|
-
{ id: "jenkins", name: "Jenkins", category: "dev" },
|
|
1655
|
-
{ id: "nginx", name: "NGINX", category: "dev" },
|
|
1656
|
-
{ id: "postgresql", name: "PostgreSQL", category: "dev" },
|
|
1657
|
-
{ id: "mysql", name: "MySQL", category: "dev" },
|
|
1658
|
-
{ id: "mongodb", name: "MongoDB", category: "dev" },
|
|
1659
|
-
{ id: "redis", name: "Redis", category: "dev" },
|
|
1660
|
-
{ id: "sqlite", name: "SQLite", category: "dev" },
|
|
1661
|
-
{ id: "elasticsearch", name: "Elasticsearch", category: "dev" },
|
|
1662
|
-
{ id: "graphql", name: "GraphQL", category: "dev" },
|
|
1663
|
-
{ id: "firebase", name: "Firebase", category: "dev" },
|
|
1664
|
-
{ id: "linux", name: "Linux", category: "dev" },
|
|
1665
|
-
{ id: "ubuntu", name: "Ubuntu", category: "dev" },
|
|
1666
|
-
{ id: "archlinux", name: "Arch Linux", category: "dev" },
|
|
1667
|
-
{ id: "vim", name: "Vim", category: "dev" },
|
|
1668
|
-
{ id: "xcode", name: "Xcode", category: "dev" },
|
|
1669
|
-
{ id: "dotnet", name: ".NET", category: "dev" },
|
|
1670
|
-
{ id: "sublimetext", name: "Sublime Text", category: "dev" },
|
|
1671
|
-
// ---- cloud 云服务 ----
|
|
1672
|
-
{ id: "googlecloud", name: "Google Cloud", category: "cloud" },
|
|
1673
|
-
{ id: "cloudflare", name: "Cloudflare", category: "cloud" },
|
|
1674
|
-
{ id: "vercel", name: "Vercel", category: "cloud" },
|
|
1675
|
-
{ id: "netlify", name: "Netlify", category: "cloud" },
|
|
1676
|
-
{ id: "heroku", name: "Heroku", category: "cloud" },
|
|
1677
|
-
{ id: "digitalocean", name: "DigitalOcean", category: "cloud" },
|
|
1678
|
-
{ id: "hetzner", name: "Hetzner", category: "cloud" },
|
|
1679
|
-
{ id: "fastly", name: "Fastly", category: "cloud" },
|
|
1680
|
-
{ id: "flydotio", name: "Fly.io", category: "cloud" },
|
|
1681
|
-
{ id: "render", name: "Render", category: "cloud" },
|
|
1682
|
-
{ id: "supabase", name: "Supabase", category: "cloud" },
|
|
1683
|
-
{ id: "alibabacloud", name: "Alibaba Cloud", category: "cloud" },
|
|
1684
|
-
{ id: "scaleway", name: "Scaleway", category: "cloud" },
|
|
1685
|
-
// ---- finance 金融支付 ----
|
|
1686
|
-
{ id: "visa", name: "Visa", category: "finance" },
|
|
1687
|
-
{ id: "mastercard", name: "Mastercard", category: "finance" },
|
|
1688
|
-
{ id: "paypal", name: "PayPal", category: "finance" },
|
|
1689
|
-
{ id: "stripe", name: "Stripe", category: "finance" },
|
|
1690
|
-
{ id: "wise", name: "Wise", category: "finance" },
|
|
1691
|
-
{ id: "square", name: "Square", category: "finance" },
|
|
1692
|
-
{ id: "applepay", name: "Apple Pay", category: "finance" },
|
|
1693
|
-
{ id: "googlepay", name: "Google Pay", category: "finance" },
|
|
1694
|
-
{ id: "alipay", name: "Alipay", category: "finance" },
|
|
1695
|
-
{ id: "bitcoin", name: "Bitcoin", category: "finance" },
|
|
1696
|
-
{ id: "ethereum", name: "Ethereum", category: "finance" },
|
|
1697
|
-
{ id: "binance", name: "Binance", category: "finance" },
|
|
1698
|
-
{ id: "coinbase", name: "Coinbase", category: "finance" },
|
|
1699
|
-
{ id: "americanexpress", name: "American Express", category: "finance" },
|
|
1700
|
-
// ---- media 媒体娱乐 ----
|
|
1701
|
-
{ id: "netflix", name: "Netflix", category: "media" },
|
|
1702
|
-
{ id: "spotify", name: "Spotify", category: "media" },
|
|
1703
|
-
{ id: "applemusic", name: "Apple Music", category: "media" },
|
|
1704
|
-
{ id: "soundcloud", name: "SoundCloud", category: "media" },
|
|
1705
|
-
{ id: "youtubemusic", name: "YouTube Music", category: "media" },
|
|
1706
|
-
{ id: "lastdotfm", name: "Last.fm", category: "media" },
|
|
1707
|
-
{ id: "primevideo", name: "Prime Video", category: "media" },
|
|
1708
|
-
{ id: "crunchyroll", name: "Crunchyroll", category: "media" },
|
|
1709
|
-
{ id: "vlcmediaplayer", name: "VLC Media Player", category: "media" },
|
|
1710
|
-
{ id: "unsplash", name: "Unsplash", category: "media" },
|
|
1711
|
-
{ id: "behance", name: "Behance", category: "media" },
|
|
1712
|
-
{ id: "dribbble", name: "Dribbble", category: "media" },
|
|
1713
|
-
{ id: "substack", name: "Substack", category: "media" },
|
|
1714
|
-
{ id: "pixiv", name: "pixiv", category: "media" },
|
|
1715
|
-
// ---- gaming 游戏 ----
|
|
1716
|
-
{ id: "steam", name: "Steam", category: "gaming" },
|
|
1717
|
-
{ id: "epicgames", name: "Epic Games", category: "gaming" },
|
|
1718
|
-
{ id: "playstation", name: "PlayStation", category: "gaming" },
|
|
1719
|
-
{ id: "nintendo", name: "Nintendo", category: "gaming" },
|
|
1720
|
-
{ id: "nintendoswitch", name: "Nintendo Switch", category: "gaming" },
|
|
1721
|
-
{ id: "roblox", name: "Roblox", category: "gaming" },
|
|
1722
|
-
{ id: "unity", name: "Unity", category: "gaming" },
|
|
1723
|
-
{ id: "unrealengine", name: "Unreal Engine", category: "gaming" },
|
|
1724
|
-
{ id: "godotengine", name: "Godot Engine", category: "gaming" },
|
|
1725
|
-
{ id: "itchdotio", name: "itch.io", category: "gaming" },
|
|
1726
|
-
{ id: "riotgames", name: "Riot Games", category: "gaming" },
|
|
1727
|
-
{ id: "dota2", name: "Dota 2", category: "gaming" },
|
|
1728
|
-
{ id: "ea", name: "EA", category: "gaming" },
|
|
1729
|
-
// ---- design 设计创作 ----
|
|
1730
|
-
{ id: "figma", name: "Figma", category: "design" },
|
|
1731
|
-
{ id: "sketch", name: "Sketch", category: "design" },
|
|
1732
|
-
{ id: "canva", name: "Canva", category: "design" },
|
|
1733
|
-
{ id: "adobe", name: "Adobe", category: "design" },
|
|
1734
|
-
{ id: "adobephotoshop", name: "Adobe Photoshop", category: "design" },
|
|
1735
|
-
{ id: "adobeillustrator", name: "Adobe Illustrator", category: "design" },
|
|
1736
|
-
{ id: "adobeaftereffects", name: "Adobe After Effects", category: "design" },
|
|
1737
|
-
{ id: "adobepremierepro", name: "Adobe Premiere Pro", category: "design" },
|
|
1738
|
-
{ id: "blender", name: "Blender", category: "design" },
|
|
1739
|
-
{ id: "affinitydesigner", name: "Affinity Designer", category: "design" },
|
|
1740
|
-
{ id: "framer", name: "Framer", category: "design" },
|
|
1741
|
-
{ id: "webflow", name: "Webflow", category: "design" },
|
|
1742
|
-
{ id: "wordpress", name: "WordPress", category: "design" },
|
|
1743
|
-
{ id: "penpot", name: "Penpot", category: "design" },
|
|
1744
|
-
{ id: "excalidraw", name: "Excalidraw", category: "design" },
|
|
1745
|
-
{ id: "miro", name: "Miro", category: "design" },
|
|
1746
|
-
// ---- shopping 电商零售 ----
|
|
1747
|
-
{ id: "shopify", name: "Shopify", category: "shopping" },
|
|
1748
|
-
{ id: "woocommerce", name: "WooCommerce", category: "shopping" },
|
|
1749
|
-
{ id: "magento", name: "Magento", category: "shopping" },
|
|
1750
|
-
{ id: "amazon", name: "Amazon", category: "shopping" },
|
|
1751
|
-
{ id: "ebay", name: "eBay", category: "shopping" },
|
|
1752
|
-
{ id: "etsy", name: "Etsy", category: "shopping" },
|
|
1753
|
-
{ id: "ikea", name: "IKEA", category: "shopping" },
|
|
1754
|
-
{ id: "target", name: "Target", category: "shopping" },
|
|
1755
|
-
{ id: "walmart", name: "Walmart", category: "shopping" },
|
|
1756
|
-
{ id: "zalando", name: "Zalando", category: "shopping" },
|
|
1757
|
-
// ---- productivity 效率办公 ----
|
|
1758
|
-
{ id: "notion", name: "Notion", category: "productivity" },
|
|
1759
|
-
{ id: "todoist", name: "Todoist", category: "productivity" },
|
|
1760
|
-
{ id: "asana", name: "Asana", category: "productivity" },
|
|
1761
|
-
{ id: "clickup", name: "ClickUp", category: "productivity" },
|
|
1762
|
-
{ id: "jira", name: "Jira", category: "productivity" },
|
|
1763
|
-
{ id: "confluence", name: "Confluence", category: "productivity" },
|
|
1764
|
-
{ id: "linear", name: "Linear", category: "productivity" },
|
|
1765
|
-
{ id: "zapier", name: "Zapier", category: "productivity" },
|
|
1766
|
-
{ id: "n8n", name: "n8n", category: "productivity" },
|
|
1767
|
-
{ id: "googledrive", name: "Google Drive", category: "productivity" },
|
|
1768
|
-
{ id: "googledocs", name: "Google Docs", category: "productivity" },
|
|
1769
|
-
{ id: "gmail", name: "Gmail", category: "productivity" },
|
|
1770
|
-
{ id: "dropbox", name: "Dropbox", category: "productivity" },
|
|
1771
|
-
{ id: "zoom", name: "Zoom", category: "productivity" },
|
|
1772
|
-
{ id: "googlemeet", name: "Google Meet", category: "productivity" },
|
|
1773
|
-
// ---- ai 人工智能 ----
|
|
1774
|
-
{ id: "openai", name: "OpenAI", category: "ai" },
|
|
1775
|
-
{ id: "anthropic", name: "Anthropic", category: "ai" },
|
|
1776
|
-
{ id: "huggingface", name: "Hugging Face", category: "ai" },
|
|
1777
|
-
{ id: "tensorflow", name: "TensorFlow", category: "ai" },
|
|
1778
|
-
{ id: "pytorch", name: "PyTorch", category: "ai" },
|
|
1779
|
-
{ id: "opencv", name: "OpenCV", category: "ai" },
|
|
1780
|
-
{ id: "scikitlearn", name: "scikit-learn", category: "ai" },
|
|
1781
|
-
{ id: "jupyter", name: "Jupyter", category: "ai" },
|
|
1782
|
-
{ id: "ollama", name: "Ollama", category: "ai" },
|
|
1783
|
-
{ id: "langchain", name: "LangChain", category: "ai" },
|
|
1784
|
-
{ id: "googlegemini", name: "Google Gemini", category: "ai" }
|
|
1785
|
-
];
|
|
1786
|
-
|
|
1787
|
-
// src/plugins/market/sources/motions.ts
|
|
1788
|
-
var MOTIONS = [
|
|
1789
|
-
// ---- animate.css:attention seekers 吸睛 ----
|
|
1790
|
-
{ id: "animate-bounce", name: "\u5F39\u8DF3", desc: "\u4E0A\u4E0B\u5F39\u8DF3,\u5E38\u7528\u4E8E\u5F15\u5BFC\u6CE8\u610F", cls: "animate__bounce", lib: "animate.css" },
|
|
1791
|
-
{ id: "animate-flash", name: "\u95EA\u70C1", desc: "\u900F\u660E\u5EA6\u5FEB\u901F\u95EA\u70C1", cls: "animate__flash", lib: "animate.css" },
|
|
1792
|
-
{ id: "animate-pulse", name: "\u8109\u51B2", desc: "\u7F29\u653E\u547C\u5438,\u5E38\u7528\u4E8E\u52A0\u8F7D\u4E0E\u76F4\u64AD\u72B6\u6001", cls: "animate__pulse", lib: "animate.css" },
|
|
1793
|
-
{ id: "animate-rubberband", name: "\u6A61\u76AE\u7B4B", desc: "\u5F39\u6027\u62C9\u4F38,\u5F3A\u8C03\u8DA3\u5473\u53CD\u9988", cls: "animate__rubberBand", lib: "animate.css" },
|
|
1794
|
-
{ id: "animate-shakex", name: "\u6A2A\u5411\u6296\u52A8", desc: "\u5DE6\u53F3\u6296\u52A8,\u5E38\u7528\u4E8E\u9519\u8BEF\u63D0\u793A", cls: "animate__shakeX", lib: "animate.css" },
|
|
1795
|
-
{ id: "animate-shakey", name: "\u7EB5\u5411\u6296\u52A8", desc: "\u4E0A\u4E0B\u6296\u52A8,\u8868\u5355\u6821\u9A8C\u53CD\u9988", cls: "animate__shakeY", lib: "animate.css" },
|
|
1796
|
-
{ id: "animate-headshake", name: "\u6447\u5934", desc: "\u7ED5\u7EB5\u8F74\u5C0F\u5E45\u6446\u5934", cls: "animate__headShake", lib: "animate.css" },
|
|
1797
|
-
{ id: "animate-swing", name: "\u6446\u52A8", desc: "\u9876\u90E8\u60AC\u6302\u5F0F\u5DE6\u53F3\u6446\u52A8", cls: "animate__swing", lib: "animate.css" },
|
|
1798
|
-
{ id: "animate-tada", name: "\u6B22\u547C", desc: "\u7F29\u653E\u52A0\u65CB\u8F6C\u7684\u7EC4\u5408\u5F3A\u8C03", cls: "animate__tada", lib: "animate.css" },
|
|
1799
|
-
{ id: "animate-wobble", name: "\u6447\u6643", desc: "\u5927\u5E45\u5DE6\u53F3\u6447\u6643", cls: "animate__wobble", lib: "animate.css" },
|
|
1800
|
-
{ id: "animate-jello", name: "\u679C\u51BB", desc: "\u503E\u659C\u52A0\u7F29\u653E\u7684\u679C\u51BB\u611F", cls: "animate__jello", lib: "animate.css" },
|
|
1801
|
-
{ id: "animate-heartbeat", name: "\u5FC3\u8DF3", desc: "\u53CC\u51FB\u5F0F\u5FC3\u8DF3\u7F29\u653E", cls: "animate__heartBeat", lib: "animate.css" },
|
|
1802
|
-
// ---- animate.css:入场 ----
|
|
1803
|
-
{ id: "animate-flipinx", name: "\u7FFB\u8F6C\u5165\u573A X", desc: "\u7ED5 X \u8F74\u7FFB\u8F6C\u5165\u573A", cls: "animate__flipInX", lib: "animate.css" },
|
|
1804
|
-
{ id: "animate-flipiny", name: "\u7FFB\u8F6C\u5165\u573A Y", desc: "\u7ED5 Y \u8F74\u7FFB\u8F6C\u5165\u573A", cls: "animate__flipInY", lib: "animate.css" },
|
|
1805
|
-
{ id: "animate-fadein", name: "\u6DE1\u5165", desc: "\u900F\u660E\u5EA6\u6E10\u5165", cls: "animate__fadeIn", lib: "animate.css" },
|
|
1806
|
-
{ id: "animate-fadeindown", name: "\u6DE1\u5165\u4E0B\u79FB", desc: "\u81EA\u4E0A\u800C\u4E0B\u6DE1\u5165", cls: "animate__fadeInDown", lib: "animate.css" },
|
|
1807
|
-
{ id: "animate-fadeinleft", name: "\u6DE1\u5165\u53F3\u79FB", desc: "\u81EA\u5DE6\u5411\u53F3\u6DE1\u5165", cls: "animate__fadeInLeft", lib: "animate.css" },
|
|
1808
|
-
{ id: "animate-fadeinright", name: "\u6DE1\u5165\u5DE6\u79FB", desc: "\u81EA\u53F3\u5411\u5DE6\u6DE1\u5165", cls: "animate__fadeInRight", lib: "animate.css" },
|
|
1809
|
-
{ id: "animate-fadeinup", name: "\u6DE1\u5165\u4E0A\u79FB", desc: "\u81EA\u4E0B\u800C\u4E0A\u6DE1\u5165,\u5361\u7247\u5217\u8868\u5E38\u7528", cls: "animate__fadeInUp", lib: "animate.css" },
|
|
1810
|
-
{ id: "animate-fadeinupbig", name: "\u5927\u5E45\u6DE1\u5165\u4E0A\u79FB", desc: "\u5927\u8DDD\u79BB\u81EA\u4E0B\u800C\u4E0A\u6DE1\u5165", cls: "animate__fadeInUpBig", lib: "animate.css" },
|
|
1811
|
-
{ id: "animate-zoomin", name: "\u653E\u5927\u5165\u573A", desc: "\u7531\u5C0F\u653E\u5927\u6DE1\u5165", cls: "animate__zoomIn", lib: "animate.css" },
|
|
1812
|
-
{ id: "animate-zoomindown", name: "\u653E\u5927\u5165\u573A(\u4E0B)", desc: "\u81EA\u4E0A\u800C\u4E0B\u653E\u5927\u5165\u573A", cls: "animate__zoomInDown", lib: "animate.css" },
|
|
1813
|
-
{ id: "animate-slideindown", name: "\u6ED1\u5165(\u4E0B)", desc: "\u81EA\u4E0A\u6ED1\u5165,\u901A\u77E5\u6761\u5E38\u7528", cls: "animate__slideInDown", lib: "animate.css" },
|
|
1814
|
-
{ id: "animate-slideinleft", name: "\u6ED1\u5165(\u5DE6)", desc: "\u81EA\u5DE6\u6ED1\u5165,\u4FA7\u680F\u62BD\u5C49\u5E38\u7528", cls: "animate__slideInLeft", lib: "animate.css" },
|
|
1815
|
-
{ id: "animate-slideinright", name: "\u6ED1\u5165(\u53F3)", desc: "\u81EA\u53F3\u6ED1\u5165,\u4FA7\u680F\u62BD\u5C49\u5E38\u7528", cls: "animate__slideInRight", lib: "animate.css" },
|
|
1816
|
-
{ id: "animate-slideinup", name: "\u6ED1\u5165(\u4E0A)", desc: "\u81EA\u4E0B\u6ED1\u5165,\u5E95\u90E8\u5F39\u5C42\u5E38\u7528", cls: "animate__slideInUp", lib: "animate.css" },
|
|
1817
|
-
{ id: "animate-backindown", name: "\u56DE\u5F39\u5165\u573A(\u4E0B)", desc: "\u5E26\u56DE\u5F39\u66F2\u7EBF\u81EA\u4E0A\u800C\u4E0B\u5165\u573A", cls: "animate__backInDown", lib: "animate.css" },
|
|
1818
|
-
{ id: "animate-backinleft", name: "\u56DE\u5F39\u5165\u573A(\u5DE6)", desc: "\u5E26\u56DE\u5F39\u66F2\u7EBF\u81EA\u5DE6\u5165\u573A", cls: "animate__backInLeft", lib: "animate.css" },
|
|
1819
|
-
{ id: "animate-backinup", name: "\u56DE\u5F39\u5165\u573A(\u4E0A)", desc: "\u5E26\u56DE\u5F39\u66F2\u7EBF\u81EA\u4E0B\u800C\u4E0A\u5165\u573A", cls: "animate__backInUp", lib: "animate.css" },
|
|
1820
|
-
{ id: "animate-bouncein", name: "\u5F39\u8DF3\u5165\u573A", desc: "\u5F39\u6027\u5F39\u8DF3\u5165\u573A", cls: "animate__bounceIn", lib: "animate.css" },
|
|
1821
|
-
{ id: "animate-bounceindown", name: "\u5F39\u8DF3\u5165\u573A(\u4E0B)", desc: "\u81EA\u4E0A\u5F39\u8DF3\u5165\u573A", cls: "animate__bounceInDown", lib: "animate.css" },
|
|
1822
|
-
{ id: "animate-bounceinup", name: "\u5F39\u8DF3\u5165\u573A(\u4E0A)", desc: "\u81EA\u4E0B\u5F39\u8DF3\u5165\u573A", cls: "animate__bounceInUp", lib: "animate.css" },
|
|
1823
|
-
{ id: "animate-rotatein", name: "\u65CB\u8F6C\u5165\u573A", desc: "\u65CB\u8F6C\u6DE1\u5165", cls: "animate__rotateIn", lib: "animate.css" },
|
|
1824
|
-
{ id: "animate-rotateindownleft", name: "\u65CB\u8F6C\u5165\u573A(\u5DE6\u4E0B)", desc: "\u81EA\u5DE6\u4E0B\u89D2\u65CB\u8F6C\u6DE1\u5165", cls: "animate__rotateInDownLeft", lib: "animate.css" },
|
|
1825
|
-
{ id: "animate-lightspeedinright", name: "\u5149\u901F\u5165\u573A", desc: "\u659C\u5207\u52A0\u9AD8\u901F\u98DE\u5165", cls: "animate__lightSpeedInRight", lib: "animate.css" },
|
|
1826
|
-
{ id: "animate-rollin", name: "\u6EDA\u5165", desc: "\u6C34\u5E73\u6EDA\u8F6C\u5165\u573A", cls: "animate__rollIn", lib: "animate.css" },
|
|
1827
|
-
{ id: "animate-jackinthebox", name: "\u8DF3\u8DF3\u76D2", desc: "\u5F39\u51FA\u76D2\u5F0F\u8DA3\u5473\u5165\u573A", cls: "animate__jackInTheBox", lib: "animate.css" },
|
|
1828
|
-
// ---- animate.css:退场 ----
|
|
1829
|
-
{ id: "animate-flipoutx", name: "\u7FFB\u8F6C\u9000\u573A X", desc: "\u7ED5 X \u8F74\u7FFB\u8F6C\u9000\u573A", cls: "animate__flipOutX", lib: "animate.css" },
|
|
1830
|
-
{ id: "animate-fadeout", name: "\u6DE1\u51FA", desc: "\u900F\u660E\u5EA6\u6E10\u51FA", cls: "animate__fadeOut", lib: "animate.css" },
|
|
1831
|
-
{ id: "animate-fadeoutdown", name: "\u6DE1\u51FA\u4E0B\u79FB", desc: "\u5411\u4E0B\u6DE1\u51FA,\u5F39\u5C42\u5173\u95ED\u5E38\u7528", cls: "animate__fadeOutDown", lib: "animate.css" },
|
|
1832
|
-
{ id: "animate-zoomout", name: "\u7F29\u5C0F\u9000\u573A", desc: "\u7F29\u5C0F\u6DE1\u51FA", cls: "animate__zoomOut", lib: "animate.css" },
|
|
1833
|
-
{ id: "animate-slideoutup", name: "\u6ED1\u51FA(\u4E0A)", desc: "\u5411\u4E0A\u6ED1\u51FA,\u901A\u77E5\u5173\u95ED\u5E38\u7528", cls: "animate__slideOutUp", lib: "animate.css" },
|
|
1834
|
-
{ id: "animate-bounceout", name: "\u5F39\u8DF3\u9000\u573A", desc: "\u5F39\u6027\u5F39\u8DF3\u9000\u573A", cls: "animate__bounceOut", lib: "animate.css" },
|
|
1835
|
-
{ id: "animate-hinge", name: "\u94F0\u94FE", desc: "\u60AC\u6302\u6446\u52A8\u5760\u843D,\u559C\u5267\u5F0F\u9000\u573A", cls: "animate__hinge", lib: "animate.css" },
|
|
1836
|
-
// ---- hover.css:hover 反馈 ----
|
|
1837
|
-
{ id: "hover-grow", name: "\u653E\u5927", desc: "hover \u65F6\u8F7B\u5FAE\u653E\u5927", cls: "hvr-grow", lib: "hover.css" },
|
|
1838
|
-
{ id: "hover-shrink", name: "\u7F29\u5C0F", desc: "hover \u65F6\u8F7B\u5FAE\u7F29\u5C0F", cls: "hvr-shrink", lib: "hover.css" },
|
|
1839
|
-
{ id: "hover-pulse", name: "\u8109\u51B2", desc: "hover \u671F\u95F4\u7F29\u653E\u8109\u51B2", cls: "hvr-pulse", lib: "hover.css" },
|
|
1840
|
-
{ id: "hover-push", name: "\u63A8\u6324", desc: "hover \u65F6\u538B\u6241\u518D\u56DE\u5F39", cls: "hvr-push", lib: "hover.css" },
|
|
1841
|
-
{ id: "hover-pop", name: "\u5F39\u51FA", desc: "hover \u65F6\u5F39\u51FA\u653E\u5927", cls: "hvr-pop", lib: "hover.css" },
|
|
1842
|
-
{ id: "hover-bounce-in", name: "\u5F39\u5165", desc: "hover \u65F6\u5F39\u6027\u653E\u5927", cls: "hvr-bounce-in", lib: "hover.css" },
|
|
1843
|
-
{ id: "hover-bounce-out", name: "\u5F39\u51FA", desc: "hover \u65F6\u5F39\u6027\u7F29\u5C0F", cls: "hvr-bounce-out", lib: "hover.css" },
|
|
1844
|
-
{ id: "hover-rotate", name: "\u65CB\u8F6C", desc: "hover \u65F6\u65CB\u8F6C 4 \u5EA6", cls: "hvr-rotate", lib: "hover.css" },
|
|
1845
|
-
{ id: "hover-grow-rotate", name: "\u653E\u5927\u65CB\u8F6C", desc: "hover \u65F6\u653E\u5927\u5E76\u65CB\u8F6C", cls: "hvr-grow-rotate", lib: "hover.css" },
|
|
1846
|
-
{ id: "hover-float", name: "\u4E0A\u6D6E", desc: "hover \u65F6\u4E0A\u6D6E,\u6309\u94AE\u5E38\u7528", cls: "hvr-float", lib: "hover.css" },
|
|
1847
|
-
{ id: "hover-sink", name: "\u4E0B\u6C89", desc: "hover \u65F6\u4E0B\u6C89\u6309\u538B\u611F", cls: "hvr-sink", lib: "hover.css" },
|
|
1848
|
-
{ id: "hover-bob", name: "\u6D6E\u52A8", desc: "hover \u671F\u95F4\u6301\u7EED\u4E0A\u4E0B\u6D6E\u52A8", cls: "hvr-bob", lib: "hover.css" },
|
|
1849
|
-
{ id: "hover-hang", name: "\u60AC\u6302", desc: "hover \u671F\u95F4\u60AC\u6302\u6446\u52A8", cls: "hvr-hang", lib: "hover.css" },
|
|
1850
|
-
{ id: "hover-skew", name: "\u659C\u5207", desc: "hover \u65F6\u659C\u5207\u53D8\u5F62", cls: "hvr-skew", lib: "hover.css" },
|
|
1851
|
-
{ id: "hover-wobble-horizontal", name: "\u6A2A\u5411\u6447\u6446", desc: "hover \u65F6\u6C34\u5E73\u6447\u6446", cls: "hvr-wobble-horizontal", lib: "hover.css" },
|
|
1852
|
-
{ id: "hover-wobble-vertical", name: "\u7EB5\u5411\u6447\u6446", desc: "hover \u65F6\u5782\u76F4\u6447\u6446", cls: "hvr-wobble-vertical", lib: "hover.css" },
|
|
1853
|
-
{ id: "hover-buzz", name: "\u9707\u52A8", desc: "hover \u65F6\u5C0F\u5E45\u9AD8\u9891\u9707\u52A8", cls: "hvr-buzz", lib: "hover.css" },
|
|
1854
|
-
{ id: "hover-sweep-to-right", name: "\u80CC\u666F\u53F3\u626B", desc: "\u80CC\u666F\u8272\u81EA\u5DE6\u5411\u53F3\u626B\u8FC7", cls: "hvr-sweep-to-right", lib: "hover.css" },
|
|
1855
|
-
{ id: "hover-bounce-to-right", name: "\u5F39\u6027\u53F3\u586B", desc: "\u80CC\u666F\u5F39\u6027\u586B\u6EE1(\u5411\u53F3)", cls: "hvr-bounce-to-right", lib: "hover.css" },
|
|
1856
|
-
{ id: "hover-radial-out", name: "\u5F84\u5411\u6269\u6563", desc: "\u80CC\u666F\u81EA\u4E2D\u5FC3\u5706\u5F62\u6269\u6563", cls: "hvr-radial-out", lib: "hover.css" },
|
|
1857
|
-
{ id: "hover-underline-from-left", name: "\u4E0B\u5212\u7EBF\u6ED1\u5165", desc: "\u4E0B\u5212\u7EBF\u81EA\u5DE6\u6ED1\u5165", cls: "hvr-underline-from-left", lib: "hover.css" },
|
|
1858
|
-
{ id: "hover-glow", name: "\u53D1\u5149", desc: "hover \u65F6\u5916\u53D1\u5149", cls: "hvr-glow", lib: "hover.css" },
|
|
1859
|
-
{ id: "hover-shadow", name: "\u9634\u5F71", desc: "hover \u65F6\u51FA\u73B0\u6295\u5F71", cls: "hvr-shadow", lib: "hover.css" },
|
|
1860
|
-
{ id: "hover-grow-shadow", name: "\u653E\u5927\u6295\u5F71", desc: "hover \u65F6\u653E\u5927\u5E76\u6295\u5F71", cls: "hvr-grow-shadow", lib: "hover.css" },
|
|
1861
|
-
{ id: "hover-float-shadow", name: "\u4E0A\u6D6E\u6295\u5F71", desc: "hover \u65F6\u4E0A\u6D6E\u5E76\u6295\u5F71", cls: "hvr-float-shadow", lib: "hover.css" }
|
|
1862
|
-
];
|
|
1863
|
-
|
|
1864
|
-
// src/plugins/market/sources/inspirations.ts
|
|
1865
|
-
var INSPIRATIONS = [
|
|
1866
|
-
{ id: "shadcn", name: "shadcn/ui", desc: "\u53EF\u590D\u5236\u7C98\u8D34\u7684 React \u7EC4\u4EF6\u96C6,\u4EE3\u7801\u5F52\u4F60\u6240\u6709", url: "https://ui.shadcn.com", tags: ["react", "tailwind", "\u8BBE\u8BA1\u7CFB\u7EDF"] },
|
|
1867
|
-
{ id: "radix", name: "Radix UI", desc: "\u65E0\u6837\u5F0F\u53EF\u8BBF\u95EE\u6027 React \u57FA\u7840\u7EC4\u4EF6", url: "https://www.radix-ui.com", tags: ["react", "\u65E0\u969C\u788D", "\u57FA\u7840\u7EC4\u4EF6"] },
|
|
1868
|
-
{ id: "tailwindcss", name: "Tailwind CSS", desc: "\u539F\u5B50\u5316 CSS \u6846\u67B6\u7684\u5B98\u65B9\u7AD9\u70B9", url: "https://tailwindcss.com", tags: ["css", "\u539F\u5B50\u5316", "\u5B98\u7F51"] },
|
|
1869
|
-
{ id: "antd", name: "Ant Design", desc: "\u4F01\u4E1A\u7EA7 React \u8BBE\u8BA1\u7CFB\u7EDF\u4E0E\u7EC4\u4EF6\u5E93", url: "https://ant.design", tags: ["react", "\u8BBE\u8BA1\u7CFB\u7EDF", "\u4F01\u4E1A\u7EA7"] },
|
|
1870
|
-
{ id: "arco", name: "Arco Design", desc: "\u5B57\u8282\u8DF3\u52A8\u4F01\u4E1A\u7EA7\u8BBE\u8BA1\u7CFB\u7EDF", url: "https://arco.design", tags: ["react", "\u8BBE\u8BA1\u7CFB\u7EDF", "\u4F01\u4E1A\u7EA7"] },
|
|
1871
|
-
{ id: "semi", name: "Semi Design", desc: "\u6296\u97F3\u524D\u7AEF\u56E2\u961F\u8BBE\u8BA1\u7CFB\u7EDF", url: "https://semi.design", tags: ["react", "\u8BBE\u8BA1\u7CFB\u7EDF", "\u4E3B\u9898\u5316"] },
|
|
1872
|
-
{ id: "chakra", name: "Chakra UI", desc: "\u4EE5\u65E0\u969C\u788D\u548C\u4E3B\u9898\u8457\u79F0\u7684 React \u7EC4\u4EF6\u5E93", url: "https://chakra-ui.com", tags: ["react", "\u65E0\u969C\u788D", "\u4E3B\u9898"] },
|
|
1873
|
-
{ id: "mui", name: "MUI", desc: "Material Design \u98CE\u683C React \u7EC4\u4EF6\u5E93", url: "https://mui.com", tags: ["react", "material", "\u7EC4\u4EF6\u5E93"] },
|
|
1874
|
-
{ id: "mantine", name: "Mantine", desc: "\u7EC4\u4EF6+hooks \u9F50\u5168\u7684 React \u5168\u5BB6\u6876", url: "https://mantine.dev", tags: ["react", "\u7EC4\u4EF6\u5E93", "hooks"] },
|
|
1875
|
-
{ id: "naiveui", name: "Naive UI", desc: "Vue 3 \u5168\u7C7B\u578B\u7EC4\u4EF6\u5E93,\u4E3B\u9898\u5B9A\u5236\u7EC6", url: "https://www.naiveui.com", tags: ["vue", "\u7EC4\u4EF6\u5E93", "\u4E3B\u9898"] },
|
|
1876
|
-
{ id: "element-plus", name: "Element Plus", desc: "Vue 3 \u8001\u724C\u4F01\u4E1A\u7EA7\u7EC4\u4EF6\u5E93", url: "https://element-plus.org", tags: ["vue", "\u7EC4\u4EF6\u5E93", "\u4F01\u4E1A\u7EA7"] },
|
|
1877
|
-
{ id: "daisyui", name: "daisyUI", desc: "Tailwind \u8BED\u4E49\u5316\u7EC4\u4EF6\u7C7B\u4E0E\u591A\u4E3B\u9898", url: "https://daisyui.com", tags: ["tailwind", "css", "\u4E3B\u9898"] },
|
|
1878
|
-
{ id: "nextui", name: "NextUI", desc: "\u7F8E\u89C2\u4F18\u5148\u7684 React + Tailwind \u7EC4\u4EF6\u5E93", url: "https://nextui.org", tags: ["react", "tailwind", "\u7EC4\u4EF6\u5E93"] },
|
|
1879
|
-
{ id: "headlessui", name: "Headless UI", desc: "\u5B8C\u5168\u65E0\u6837\u5F0F\u3001\u5E26\u884C\u4E3A\u7684 React/Vue \u7EC4\u4EF6", url: "https://headlessui.com", tags: ["react", "vue", "\u65E0\u6837\u5F0F"] },
|
|
1880
|
-
{ id: "carbon", name: "Carbon Design System", desc: "IBM \u5F00\u6E90\u8BBE\u8BA1\u7CFB\u7EDF,token \u4F53\u7CFB\u6559\u79D1\u4E66", url: "https://carbondesignsystem.com", tags: ["\u8BBE\u8BA1\u7CFB\u7EDF", "token", "\u6587\u6863"] },
|
|
1881
|
-
{ id: "polaris", name: "Polaris", desc: "Shopify \u8BBE\u8BA1\u7CFB\u7EDF,\u7535\u5546\u540E\u53F0\u8303\u5F0F", url: "https://polaris.shopify.com", tags: ["\u8BBE\u8BA1\u7CFB\u7EDF", "react", "\u7535\u5546"] },
|
|
1882
|
-
{ id: "material3", name: "Material Design 3", desc: "Google \u52A8\u6001\u53D6\u8272\u4E0E\u5F62\u53D8\u8BBE\u8BA1\u89C4\u8303", url: "https://m3.material.io", tags: ["google", "\u8BBE\u8BA1\u7CFB\u7EDF", "\u52A8\u6548"] },
|
|
1883
|
-
{ id: "storybook", name: "Storybook", desc: "\u7EC4\u4EF6\u5DE5\u4F5C\u53F0\u4E0E\u6587\u6863\u7684\u4E8B\u5B9E\u6807\u51C6", url: "https://storybook.js.org", tags: ["\u7EC4\u4EF6\u6587\u6863", "\u5DE5\u4F5C\u53F0", "\u534F\u4F5C"] },
|
|
1884
|
-
{ id: "geist", name: "Geist", desc: "Vercel \u6781\u7B80\u8BBE\u8BA1\u7CFB\u7EDF", url: "https://vercel.com/geist", tags: ["\u8BBE\u8BA1\u7CFB\u7EDF", "\u6781\u7B80", "vercel"] },
|
|
1885
|
-
{ id: "openprops", name: "Open Props", desc: "\u8D85\u5B9E\u7528 CSS \u53D8\u91CF\u96C6\u5408(\u52A8\u6548/\u989C\u8272/\u5E03\u5C40)", url: "https://open-props.style", tags: ["css", "\u53D8\u91CF", "\u52A8\u6548"] },
|
|
1886
|
-
{ id: "everylayout", name: "Every Layout", desc: "\u7528 CSS \u539F\u751F\u80FD\u529B\u89E3\u51B3\u5E03\u5C40\u95EE\u9898", url: "https://every-layout.dev", tags: ["css", "\u5E03\u5C40", "\u54CD\u5E94\u5F0F"] },
|
|
1887
|
-
{ id: "animatecss", name: "Animate.css", desc: "\u6700\u6D41\u884C\u7684\u5373\u7528\u578B CSS \u52A8\u753B\u5E93\u5B98\u7F51", url: "https://animate.style", tags: ["css", "\u52A8\u6548", "\u5E93"] },
|
|
1888
|
-
{ id: "csstricks", name: "CSS-Tricks", desc: "CSS \u6280\u5DE7\u4E0E\u6A21\u5F0F\u7684\u957F\u9752\u793E\u533A", url: "https://css-tricks.com", tags: ["css", "\u6559\u7A0B", "\u6A21\u5F0F"] },
|
|
1889
|
-
{ id: "webdev", name: "web.dev", desc: "Google Web \u6700\u4F73\u5B9E\u8DF5\u4E0E\u6027\u80FD\u6307\u5357", url: "https://web.dev", tags: ["\u6027\u80FD", "\u6700\u4F73\u5B9E\u8DF5", "google"] },
|
|
1890
|
-
{ id: "excalidraw", name: "Excalidraw", desc: "\u624B\u7ED8\u98CE\u534F\u4F5C\u767D\u677F,\u5F00\u6E90\u865A\u62DF\u767D\u677F\u6807\u6746", url: "https://excalidraw.com", tags: ["\u767D\u677F", "\u624B\u7ED8\u98CE", "\u534F\u4F5C"] },
|
|
1891
|
-
{ id: "tldraw", name: "tldraw", desc: "\u65E0\u9650\u753B\u5E03 SDK \u4E0E\u7CBE\u7F8E\u767D\u677F", url: "https://www.tldraw.com", tags: ["\u767D\u677F", "\u753B\u5E03", "sdk"] },
|
|
1892
|
-
{ id: "penpot", name: "Penpot", desc: "\u5F00\u6E90 Figma \u66FF\u4EE3,\u8BBE\u8BA1\u5F00\u53D1\u540C\u6E90", url: "https://penpot.app", tags: ["\u8BBE\u8BA1\u5DE5\u5177", "\u5F00\u6E90", "\u534F\u4F5C"] },
|
|
1893
|
-
{ id: "cal", name: "Cal.com", desc: "\u5F00\u6E90\u65E5\u7A0B\u9884\u7EA6,\u4EA7\u54C1\u7AD9\u4E0E\u4EA4\u4E92\u8303\u5F0F", url: "https://cal.com", tags: ["saas", "\u65E5\u7A0B", "\u8868\u5355"] },
|
|
1894
|
-
{ id: "dub", name: "Dub", desc: "\u5F00\u6E90\u77ED\u94FE\u5E73\u53F0,\u73B0\u4EE3 SaaS \u754C\u9762\u8303\u672C", url: "https://dub.co", tags: ["saas", "\u77ED\u94FE", "\u5206\u6790"] },
|
|
1895
|
-
{ id: "twenty", name: "Twenty", desc: "\u5F00\u6E90 Notion \u98CE CRM,\u8868\u683C\u4EA4\u4E92\u6559\u79D1\u4E66", url: "https://twenty.com", tags: ["crm", "\u8868\u683C", "saas"] },
|
|
1896
|
-
{ id: "umami", name: "Umami", desc: "\u9690\u79C1\u53CB\u597D\u7684\u5F00\u6E90\u7AD9\u70B9\u7EDF\u8BA1,\u4EEA\u8868\u76D8\u7B80\u6D01", url: "https://umami.is", tags: ["\u7EDF\u8BA1", "\u9690\u79C1", "\u4EEA\u8868\u76D8"] },
|
|
1897
|
-
{ id: "plausible", name: "Plausible", desc: "\u6781\u7B80\u5F00\u6E90\u5206\u6790,\u4E00\u5C4F\u4EEA\u8868\u76D8\u8303\u5F0F", url: "https://plausible.io", tags: ["\u7EDF\u8BA1", "\u9690\u79C1", "\u6781\u7B80"] },
|
|
1898
|
-
{ id: "outline", name: "Outline", desc: "\u5F00\u6E90\u56E2\u961F wiki,\u6392\u7248\u4E0E\u5FEB\u6377\u952E\u4F53\u9A8C\u4F73", url: "https://www.getoutline.com", tags: ["\u6587\u6863", "wiki", "\u56E2\u961F"] },
|
|
1899
|
-
{ id: "plane", name: "Plane", desc: "\u5F00\u6E90\u9879\u76EE\u7BA1\u7406,issue/\u770B\u677F/\u5468\u671F", url: "https://plane.so", tags: ["\u9879\u76EE\u7BA1\u7406", "\u770B\u677F", "issue"] },
|
|
1900
|
-
{ id: "huly", name: "Huly", desc: "\u5F00\u6E90\u5168\u6808\u9879\u76EE\u7BA1\u7406,\u89C6\u89C9\u534E\u4E3D", url: "https://huly.io", tags: ["\u9879\u76EE\u7BA1\u7406", "\u89C6\u89C9", "\u5168\u6808"] },
|
|
1901
|
-
{ id: "uptime-kuma", name: "Uptime Kuma", desc: "\u81EA\u6258\u7BA1\u76D1\u63A7\u4E0E\u72B6\u6001\u9875", url: "https://uptime.kuma.pet", tags: ["\u76D1\u63A7", "\u72B6\u6001\u9875", "\u81EA\u6258\u7BA1"] },
|
|
1902
|
-
{ id: "homepage", name: "Homepage", desc: "\u73B0\u4EE3\u5316\u81EA\u6258\u7BA1\u5BFC\u822A\u4EEA\u8868\u76D8", url: "https://gethomepage.dev", tags: ["\u4EEA\u8868\u76D8", "\u5BFC\u822A", "\u81EA\u6258\u7BA1"] },
|
|
1903
|
-
{ id: "nocodb", name: "NocoDB", desc: "\u5F00\u6E90 Airtable \u66FF\u4EE3,\u6570\u636E\u5E93\u8868\u683C\u5316", url: "https://nocodb.com", tags: ["\u6570\u636E\u5E93", "\u8868\u683C", "\u4F4E\u4EE3\u7801"] },
|
|
1904
|
-
{ id: "bruno", name: "Bruno", desc: "\u79BB\u7EBF\u4F18\u5148\u5F00\u6E90 API \u5BA2\u6237\u7AEF", url: "https://www.usebruno.com", tags: ["api", "\u79BB\u7EBF\u4F18\u5148", "\u5F00\u53D1\u5DE5\u5177"] },
|
|
1905
|
-
{ id: "grafana", name: "Grafana", desc: "\u5F00\u6E90\u53EF\u89C6\u5316\u76D1\u63A7\u9762\u677F\u6807\u6746", url: "https://grafana.com/oss/grafana/", tags: ["\u76D1\u63A7", "\u53EF\u89C6\u5316", "\u4EEA\u8868\u76D8"] }
|
|
1906
|
-
];
|
|
1907
|
-
|
|
1908
|
-
// src/plugins/market/sources/index.ts
|
|
1909
|
-
var MARKETS = ["logos", "motions", "inspirations"];
|
|
1910
|
-
function isMarketName(v) {
|
|
1911
|
-
return MARKETS.includes(v);
|
|
1912
|
-
}
|
|
1913
|
-
function catalogFor(market) {
|
|
1914
|
-
switch (market) {
|
|
1915
|
-
case "logos":
|
|
1916
|
-
return { entries: LOGOTYPES.map((e) => ({ ...e, slug: e.id })) };
|
|
1917
|
-
case "motions":
|
|
1918
|
-
return { entries: MOTIONS.map((e) => ({ ...e })) };
|
|
1919
|
-
case "inspirations":
|
|
1920
|
-
return { entries: INSPIRATIONS.map((e) => ({ ...e })) };
|
|
1921
|
-
default:
|
|
1922
|
-
return null;
|
|
1923
|
-
}
|
|
1924
|
-
}
|
|
1925
|
-
|
|
1926
|
-
// src/plugins/market/index.ts
|
|
1927
|
-
var ALLOWED_PROXY_HOSTS = ["cdn.jsdelivr.net", "data.jsdelivr.com"];
|
|
1928
|
-
var ALLOWED_PROXY_PORTS = /* @__PURE__ */ new Set(["", "80", "443"]);
|
|
1929
|
-
var PROXY_TIMEOUT_MS = 8e3;
|
|
1930
|
-
var PROXY_CACHE_MAX_ENTRIES = 200;
|
|
1931
|
-
var PROXY_CACHE_TTL_MS = 10 * 60 * 1e3;
|
|
1932
|
-
var CATALOG_PREFIX = "/__market/catalog/";
|
|
1933
|
-
var apply7 = defineBuiltin({
|
|
1934
|
-
manifest: manifest5,
|
|
1935
|
-
setup(ctx) {
|
|
1936
|
-
const cache = /* @__PURE__ */ new Map();
|
|
1937
|
-
ctx.route("/__market/proxy", async (req, res) => {
|
|
1938
|
-
const raw = new URL(req.url || "/", "http://localhost").searchParams.get("url");
|
|
1939
|
-
if (!raw) {
|
|
1940
|
-
res.writeHead(400);
|
|
1941
|
-
res.end("missing url");
|
|
1942
|
-
return;
|
|
1943
|
-
}
|
|
1944
|
-
let target;
|
|
1945
|
-
try {
|
|
1946
|
-
target = new URL(raw);
|
|
1947
|
-
} catch {
|
|
1948
|
-
res.writeHead(400);
|
|
1949
|
-
res.end("bad url");
|
|
1950
|
-
return;
|
|
1951
|
-
}
|
|
1952
|
-
if (target.protocol !== "https:" && target.protocol !== "http:") {
|
|
1953
|
-
res.writeHead(403);
|
|
1954
|
-
res.end("scheme not allowed");
|
|
1955
|
-
return;
|
|
1956
|
-
}
|
|
1957
|
-
if (!ALLOWED_PROXY_HOSTS.includes(target.hostname)) {
|
|
1958
|
-
res.writeHead(403);
|
|
1959
|
-
res.end("host not allowed");
|
|
1960
|
-
return;
|
|
1961
|
-
}
|
|
1962
|
-
if (!ALLOWED_PROXY_PORTS.has(target.port)) {
|
|
1963
|
-
res.writeHead(403);
|
|
1964
|
-
res.end("port not allowed");
|
|
1965
|
-
return;
|
|
1966
|
-
}
|
|
1967
|
-
const hit = cache.get(raw);
|
|
1968
|
-
if (hit && Date.now() - hit.cachedAt < PROXY_CACHE_TTL_MS) {
|
|
1969
|
-
res.writeHead(200, { "Content-Type": hit.contentType, "X-Market-Cache": "hit", "Cache-Control": "no-cache" });
|
|
1970
|
-
res.end(hit.body);
|
|
1971
|
-
return;
|
|
1972
|
-
}
|
|
1973
|
-
if (hit) cache.delete(raw);
|
|
1974
|
-
const controller = new AbortController();
|
|
1975
|
-
const timer = setTimeout(() => controller.abort(), PROXY_TIMEOUT_MS);
|
|
1976
|
-
try {
|
|
1977
|
-
const upstream = await fetch(raw, { signal: controller.signal, redirect: "error" });
|
|
1978
|
-
if (!upstream.ok) {
|
|
1979
|
-
res.writeHead(502);
|
|
1980
|
-
res.end("upstream error");
|
|
1981
|
-
return;
|
|
1982
|
-
}
|
|
1983
|
-
const body = await upstream.text();
|
|
1984
|
-
const contentType = upstream.headers.get("content-type") ?? "application/octet-stream";
|
|
1985
|
-
cache.set(raw, { body, contentType, cachedAt: Date.now() });
|
|
1986
|
-
if (cache.size > PROXY_CACHE_MAX_ENTRIES) {
|
|
1987
|
-
const oldest = cache.keys().next().value;
|
|
1988
|
-
if (oldest !== void 0) cache.delete(oldest);
|
|
1989
|
-
}
|
|
1990
|
-
res.writeHead(200, { "Content-Type": contentType, "X-Market-Cache": "miss", "Cache-Control": "no-cache" });
|
|
1991
|
-
res.end(body);
|
|
1992
|
-
} catch {
|
|
1993
|
-
if (!res.headersSent) {
|
|
1994
|
-
res.writeHead(502);
|
|
1995
|
-
res.end("upstream failed");
|
|
1996
|
-
}
|
|
1997
|
-
} finally {
|
|
1998
|
-
clearTimeout(timer);
|
|
1999
|
-
}
|
|
2000
|
-
});
|
|
2001
|
-
ctx.route("/__market/catalog", async (req, res) => {
|
|
2002
|
-
const pathname = new URL(req.url || "/", "http://localhost").pathname;
|
|
2003
|
-
const market = pathname.startsWith(CATALOG_PREFIX) ? pathname.slice(CATALOG_PREFIX.length).split("/")[0] : "";
|
|
2004
|
-
if (!market || !isMarketName(market)) {
|
|
2005
|
-
res.writeHead(404);
|
|
2006
|
-
res.end("unknown market");
|
|
2007
|
-
return;
|
|
2008
|
-
}
|
|
2009
|
-
return catalogFor(market);
|
|
2010
|
-
});
|
|
2011
|
-
}
|
|
2012
|
-
});
|
|
2013
|
-
|
|
2014
1561
|
// src/cli.ts
|
|
2015
1562
|
var __dirname2 = path9.dirname(fileURLToPath2(import.meta.url));
|
|
2016
1563
|
var DEFAULT_PORT = 4190;
|
|
@@ -2112,7 +1659,7 @@ async function main() {
|
|
|
2112
1659
|
await stopInstance(oldRecord);
|
|
2113
1660
|
}
|
|
2114
1661
|
const appDir = path9.resolve(__dirname2, "web");
|
|
2115
|
-
const BUILTIN_PLUGINS = [apply6, apply3, apply4, apply5
|
|
1662
|
+
const BUILTIN_PLUGINS = [apply6, apply3, apply4, apply5];
|
|
2116
1663
|
if (stripDeadPluginConfig(root, BUILTIN_PLUGINS.map((p) => p.manifest))) {
|
|
2117
1664
|
console.log("[zdashboard] \u5DF2\u6E05\u7406 dashboard.json \u4E2D\u5185\u7F6E\u63D2\u4EF6\u7684\u8FC7\u65F6\u914D\u7F6E\u952E");
|
|
2118
1665
|
}
|
|
@@ -2135,9 +1682,9 @@ async function main() {
|
|
|
2135
1682
|
ctx.plugin(apply, { root });
|
|
2136
1683
|
ctx.plugin(apply2, { root });
|
|
2137
1684
|
ctx.plugin(DashboardService);
|
|
2138
|
-
for (const
|
|
1685
|
+
for (const apply7 of BUILTIN_PLUGINS) {
|
|
2139
1686
|
try {
|
|
2140
|
-
ctx.plugin(
|
|
1687
|
+
ctx.plugin(apply7, { root });
|
|
2141
1688
|
} catch (e) {
|
|
2142
1689
|
console.error("[zdashboard] builtin plugin failed:", e);
|
|
2143
1690
|
}
|