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.
Files changed (28) hide show
  1. package/dist/cli.js +15 -468
  2. package/dist/cli.js.map +1 -1
  3. package/dist/web/assets/CodeViewer-yUtAi1hT.js +307 -0
  4. package/dist/web/assets/{FileIcon-68etP2t6.js → FileIcon-DCL9OD6I.js} +1 -1
  5. package/dist/web/assets/{FilterPills-DGfzMpn_.js → FilterPills-BD2vsIx2.js} +1 -1
  6. package/dist/web/assets/{Sidebar-N0HiMJRK.js → Sidebar-CsmNxVjL.js} +1 -1
  7. package/dist/web/assets/{Sidebar-D83uLTNy.js → Sidebar-DxeR1Shk.js} +1 -1
  8. package/dist/web/assets/{Workspace-BpSq60xh.js → Workspace-BGj3n613.js} +1 -1
  9. package/dist/web/assets/Workspace-CUepnOlM.js +1 -0
  10. package/dist/web/assets/Workspace-D0rSzljF.js +1 -0
  11. package/dist/web/assets/{Workspace-DW8xX3Tg.js → Workspace-DUK4Lm-v.js} +1 -1
  12. package/dist/web/assets/{index-DH1Mqw-g.css → index--t_ijYil.css} +1 -1
  13. package/dist/web/assets/{index-D_uh-zkI.js → index-veTBv7Qv.js} +12 -12
  14. package/dist/web/assets/{usePluginData-Bk2M7LNj.js → usePluginData-mjHueOjf.js} +1 -1
  15. package/dist/web/assets/web-BODcUPmi.js +2 -0
  16. package/dist/web/assets/web-CsCyTuDw.js +2 -0
  17. package/dist/web/assets/{web-CEB9kTEr.js → web-D6VGQFbH.js} +2 -2
  18. package/dist/web/assets/{web-CbW9uGDV.js → web-DIZjnUb4.js} +2 -2
  19. package/dist/web/index.html +2 -2
  20. package/package.json +1 -1
  21. package/dist/web/assets/CodeViewer-_jAxbWVL.js +0 -10
  22. package/dist/web/assets/ImageViewer-ChZdzYPf.js +0 -298
  23. package/dist/web/assets/Workspace-BE7p2hNz.js +0 -1
  24. package/dist/web/assets/Workspace-DjL1fdji.js +0 -2
  25. package/dist/web/assets/Workspace-DrN9--Je.js +0 -1
  26. package/dist/web/assets/web-BZukfmmT.js +0 -2
  27. package/dist/web/assets/web-CGvrDSNo.js +0 -2
  28. 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.8.6",
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(manifest6) {
1035
- this.plugins.set(manifest6.mode, manifest6);
1036
- this.ctx.effect(() => () => this.plugins.delete(manifest6.mode));
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: manifest6, setup } = def;
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 ${manifest6.mode} dispose error:`, e);
1209
+ console.error(`[zdashboard] plugin ${manifest5.mode} dispose error:`, e);
1210
1210
  }
1211
1211
  }
1212
1212
  });
1213
- ctx.dashboard.register(manifest6);
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 ${manifest6.mode} route error:`, e);
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: manifest6.mode,
1225
+ mode: manifest5.mode,
1226
1226
  config() {
1227
- const schema = manifest6.config ?? {};
1228
- const stored = ctx.server.getPluginConfig(manifest6.mode) ?? {};
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:${manifest6.mode}:${event}`, data ?? "");
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, apply7];
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 apply8 of BUILTIN_PLUGINS) {
1685
+ for (const apply7 of BUILTIN_PLUGINS) {
2139
1686
  try {
2140
- ctx.plugin(apply8, { root });
1687
+ ctx.plugin(apply7, { root });
2141
1688
  } catch (e) {
2142
1689
  console.error("[zdashboard] builtin plugin failed:", e);
2143
1690
  }