@tensorix/metahub 0.5.4 → 0.5.6

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 (39) hide show
  1. package/dist/cli.js +666 -152
  2. package/dist/cli.js.map +23 -17
  3. package/dist/core/copy-views.d.ts +3 -0
  4. package/dist/core/copy-views.d.ts.map +1 -0
  5. package/dist/core/csv-columns.d.ts +6 -0
  6. package/dist/core/csv-columns.d.ts.map +1 -0
  7. package/dist/core/databases.d.ts.map +1 -1
  8. package/dist/core/sync/auth.d.ts.map +1 -1
  9. package/dist/core/sync/cf-oauth.d.ts.map +1 -1
  10. package/dist/core/sync/files.d.ts.map +1 -1
  11. package/dist/core/sync/page-messages.d.ts +5 -0
  12. package/dist/core/sync/page-messages.d.ts.map +1 -1
  13. package/dist/core/sync/remote-shares-cache.d.ts.map +1 -1
  14. package/dist/core/sync/room-serve.d.ts.map +1 -1
  15. package/dist/core/sync/share-actions.d.ts.map +1 -1
  16. package/dist/core/sync/share-copy.d.ts +1 -1
  17. package/dist/core/sync/share-copy.d.ts.map +1 -1
  18. package/dist/core/sync/share-export.d.ts +4 -2
  19. package/dist/core/sync/share-export.d.ts.map +1 -1
  20. package/dist/core/sync/share-file-styles.d.ts +2 -0
  21. package/dist/core/sync/share-file-styles.d.ts.map +1 -0
  22. package/dist/core/sync/share-link.d.ts +27 -0
  23. package/dist/core/sync/share-link.d.ts.map +1 -0
  24. package/dist/core/sync/share-serve.d.ts.map +1 -1
  25. package/dist/core/sync/share-short-links.d.ts +8 -0
  26. package/dist/core/sync/share-short-links.d.ts.map +1 -0
  27. package/dist/core/sync/sites-serve.d.ts.map +1 -1
  28. package/dist/core/ui-theme.d.ts +44 -0
  29. package/dist/core/ui-theme.d.ts.map +1 -0
  30. package/dist/db-worker.js +64 -64
  31. package/dist/edge-worker.js +137 -8
  32. package/dist/index.js +619 -128
  33. package/dist/index.js.map +20 -15
  34. package/dist/metahub-sdk.js +4 -4
  35. package/dist/mh-runtime.js +2 -2
  36. package/dist/sw.js +9 -6
  37. package/dist/webui/server/assets.d.ts.map +1 -1
  38. package/dist/webui.js +130 -130
  39. package/package.json +1 -1
@@ -66,6 +66,90 @@ function normalizeRow(row) {
66
66
  return row;
67
67
  }
68
68
 
69
+ // src/core/ui-theme.ts
70
+ var LIGHT_THEME = {
71
+ bg: "#ffffff",
72
+ paper: "#ffffff",
73
+ surface: "#fafaf9",
74
+ "surface-2": "#f1f1ef",
75
+ sidebar: "#f7f7f5",
76
+ fg: "#37352f",
77
+ "fg-soft": "#595750",
78
+ muted: "#6f6d66",
79
+ line: "#eae9e6",
80
+ "line-strong": "#d8d7d3",
81
+ accent: "#3867b2",
82
+ "accent-fg": "#ffffff",
83
+ "accent-soft": "#edf2f9",
84
+ hover: "rgba(55,53,47,.035)",
85
+ "hover-2": "rgba(55,53,47,.07)",
86
+ "code-bg": "#f6f5f3",
87
+ "selected-bg": "#f7f9fc",
88
+ "selected-border": "#a8b8ce",
89
+ "selected-icon-bg": "#edf2f8",
90
+ "selected-icon-fg": "#4d678b",
91
+ "selected-muted": "#626b78",
92
+ "selected-hover-bg": "#f1f5fa",
93
+ "selected-hover-border": "#8199bb",
94
+ danger: "#b6423a",
95
+ "danger-fg": "#ffffff",
96
+ "danger-soft": "#f9eeec",
97
+ success: "#347653",
98
+ warning: "#866022",
99
+ "warning-soft": "#faf3e5",
100
+ "brand-purple": "#79619d",
101
+ "brand-teal": "#397d76",
102
+ "brand-orange": "#a06436",
103
+ "shadow-sm": "0 1px 2px rgba(35,32,25,.035)",
104
+ "shadow-md": "0 4px 14px rgba(35,32,25,.08)",
105
+ "shadow-lg": "0 16px 48px rgba(35,32,25,.13)",
106
+ "brand-stripe": "linear-gradient(to right,#335cff 0% 25%,#8967ed 25% 50%,#18b7b6 50% 75%,#f28b55 75% 100%)"
107
+ };
108
+ var DARK_THEME = {
109
+ bg: "#191919",
110
+ paper: "#191919",
111
+ surface: "#222222",
112
+ "surface-2": "#2c2c2b",
113
+ sidebar: "#202020",
114
+ fg: "#e8e7e4",
115
+ "fg-soft": "#c0beb8",
116
+ muted: "#aaa8a2",
117
+ line: "#30302f",
118
+ "line-strong": "#42423f",
119
+ accent: "#8aaddb",
120
+ "accent-fg": "#172235",
121
+ "accent-soft": "#263242",
122
+ hover: "rgba(255,255,255,.035)",
123
+ "hover-2": "rgba(255,255,255,.065)",
124
+ "code-bg": "#242423",
125
+ "selected-bg": "#242a32",
126
+ "selected-border": "#56657a",
127
+ "selected-icon-bg": "#2d3745",
128
+ "selected-icon-fg": "#afc5e2",
129
+ "selected-muted": "#b5bfcd",
130
+ "selected-hover-bg": "#2a313b",
131
+ "selected-hover-border": "#7287a3",
132
+ danger: "#e89890",
133
+ "danger-fg": "#2b1716",
134
+ "danger-soft": "#3b2927",
135
+ success: "#92bd9b",
136
+ warning: "#d6b578",
137
+ "warning-soft": "#363024",
138
+ "brand-purple": "#baa6d1",
139
+ "brand-teal": "#8cbbb4",
140
+ "brand-orange": "#d4a37d",
141
+ "shadow-sm": "0 1px 2px rgba(0,0,0,.15)",
142
+ "shadow-md": "0 4px 14px rgba(0,0,0,.25)",
143
+ "shadow-lg": "0 16px 48px rgba(0,0,0,.35)",
144
+ "brand-stripe": "linear-gradient(to right,#335cff 0% 25%,#8967ed 25% 50%,#18b7b6 50% 75%,#f28b55 75% 100%)"
145
+ };
146
+ var declarations = (palette) => Object.entries(palette).map(([k, v]) => `--${k}:${v};`).join("");
147
+ var THEME_CSS = `:root{color-scheme:light;${declarations(LIGHT_THEME)}--card:var(--surface-2);--ok:var(--success)}
148
+ @media(prefers-color-scheme:dark){:root:not([data-resolved]){color-scheme:dark;${declarations(DARK_THEME)}}}
149
+ :root[data-resolved="dark"]{color-scheme:dark;${declarations(DARK_THEME)}}
150
+ ::selection{background:var(--accent-soft);color:var(--accent)}`;
151
+ var THEME_INIT_SCRIPT = `(function(){var t;try{t=localStorage.getItem('mh-theme')}catch(e){}var d=t==='dark'||(t!=='light'&&matchMedia('(prefers-color-scheme: dark)').matches);document.documentElement.dataset.resolved=d?'dark':'light';var m=document.querySelector('meta[name="theme-color"]');if(m)m.content=d?'${DARK_THEME.bg}':'${LIGHT_THEME.bg}'})();`;
152
+
69
153
  // src/core/errors.ts
70
154
  class MhError extends Error {
71
155
  code;
@@ -158,6 +242,45 @@ function idKind(id) {
158
242
  return KINDS.has(prefix) ? prefix : null;
159
243
  }
160
244
 
245
+ // src/core/copy-views.ts
246
+ function copyViews(raw, props, records, selfRelations) {
247
+ if (!Array.isArray(raw))
248
+ return raw;
249
+ const object = (x) => !!x && typeof x === "object" && !Array.isArray(x);
250
+ const prop = (x) => typeof x === "string" ? props.get(x) ?? x : x;
251
+ return raw.map((v) => {
252
+ if (!object(v))
253
+ return v;
254
+ const out = { ...v };
255
+ for (const key of ["group", "dateProp", "start", "end"])
256
+ if (key in out)
257
+ out[key] = prop(out[key]);
258
+ if (Array.isArray(v.hidden))
259
+ out.hidden = v.hidden.map(prop);
260
+ if (Array.isArray(v.sort))
261
+ out.sort = v.sort.map((s) => object(s) ? { ...s, prop: prop(s.prop) } : s);
262
+ if (object(v.filter) && Array.isArray(v.filter.rules))
263
+ out.filter = {
264
+ ...v.filter,
265
+ rules: v.filter.rules.map((r) => {
266
+ if (!object(r))
267
+ return r;
268
+ return {
269
+ ...r,
270
+ prop: prop(r.prop),
271
+ ...typeof r.prop === "string" && selfRelations.has(r.prop) && Array.isArray(r.value) ? { value: r.value.map((id) => typeof id === "string" ? records.get(id) ?? id : id) } : {}
272
+ };
273
+ })
274
+ };
275
+ if (object(v.calc))
276
+ out.calc = Object.fromEntries(Object.entries(v.calc).map(([id, value]) => [
277
+ props.get(id) ?? id,
278
+ value
279
+ ]));
280
+ return out;
281
+ });
282
+ }
283
+
161
284
  // src/core/driver.ts
162
285
  function writeTx(db, fn) {
163
286
  const tx = db.transaction(fn);
@@ -1351,10 +1474,6 @@ var duplicateDatabase = grouped(function duplicateDatabase(db, id, opts = {}) {
1351
1474
  name: opts.name ?? src.name,
1352
1475
  icon: opts.icon ?? src.icon ?? undefined
1353
1476
  });
1354
- if (src.meta !== null) {
1355
- const { collapsed: _hidden, ...meta } = src.meta;
1356
- emitMetaPatch(db, dup.id, null, meta);
1357
- }
1358
1477
  const propIdMap = new Map;
1359
1478
  const selfRelNew = new Set;
1360
1479
  for (const p of listProperties(db, id)) {
@@ -1389,6 +1508,12 @@ var duplicateDatabase = grouped(function duplicateDatabase(db, id, opts = {}) {
1389
1508
  if (Object.keys(patch).length)
1390
1509
  updateRecord(db, recIdMap.get(r.id), patch);
1391
1510
  }
1511
+ if (src.meta !== null) {
1512
+ const { collapsed: _hidden, ...meta } = src.meta;
1513
+ if ("views" in meta)
1514
+ meta.views = copyViews(meta.views, propIdMap, recIdMap, new Set(listProperties(db, id).filter((p) => p.type === "relation" && p.config?.database === id).map((p) => p.id)));
1515
+ emitMetaPatch(db, dup.id, null, meta);
1516
+ }
1392
1517
  return getDatabase(db, dup.id);
1393
1518
  });
1394
1519
  function getDatabase(db, id) {
@@ -1768,6 +1893,11 @@ var EN = {
1768
1893
  "登录已过期,请重新输入令牌。": "Session expired. Enter the token again.",
1769
1894
  附件已失效: "Attachment unavailable",
1770
1895
  链接缺少分享数据: "The link is missing share data",
1896
+ 无法打开这份分享: "Unable to open this share",
1897
+ "请从原消息中重新复制完整链接,再打开试试。": "Copy the full link from the original message, then open it again.",
1898
+ "如果仍然无法打开,请联系分享者重新发送链接。": "If it still won't open, ask the sender for a new link.",
1899
+ "请检查网络连接后重试,或联系分享者确认链接是否仍然有效。": "Check your connection and try again, or ask the sender whether the link is still valid.",
1900
+ 重新加载: "Reload",
1771
1901
  请输入分享口令: "Enter the share passcode",
1772
1902
  链接缺少密钥: "The link is missing its key",
1773
1903
  口令错误或链接已失效: "Wrong passcode or the link has expired",
@@ -3938,16 +4068,15 @@ function serveRoomFile(db, cfg, path, locale) {
3938
4068
  return new Response(body.buffer, { status, headers });
3939
4069
  }
3940
4070
  var PAGE_CSS = `
3941
- :root{--bg:#ffffff;--fg:#1f2328;--muted:#6e7781;--line:#d0d7de;--accent:#0969da;--card:#f6f8fa}
3942
- @media (prefers-color-scheme: dark){:root{--bg:#0d1117;--fg:#e6edf3;--muted:#8b949e;--line:#30363d;--accent:#4493f8;--card:#161b22}}
4071
+ ${THEME_CSS}
3943
4072
  *{box-sizing:border-box}
3944
4073
  body{margin:0;background:var(--bg);color:var(--fg);font:16px/1.65 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"PingFang SC","Microsoft YaHei",sans-serif;
3945
4074
  min-height:100dvh;display:flex;align-items:center;justify-content:center;padding:24px}
3946
4075
  main{max-width:420px;width:100%}
3947
4076
  form.pw{display:flex;flex-direction:column;gap:12px}
3948
4077
  form.pw input{padding:9px;border:1px solid var(--line);border-radius:7px;background:var(--card);color:var(--fg)}
3949
- form.pw button{padding:9px;border:0;border-radius:7px;background:var(--accent);color:#fff;cursor:pointer}
3950
- .err{color:#f85149;font-size:13px;margin:0}
4078
+ form.pw button{padding:9px;border:0;border-radius:7px;background:var(--accent);color:var(--accent-fg);cursor:pointer}
4079
+ .err{color:var(--danger);font-size:13px;margin:0}
3951
4080
  .muted{color:var(--muted);font-size:14px}
3952
4081
  h1{font-size:20px;margin:0 0 10px;text-align:center}
3953
4082
  footer{margin-top:34px;color:var(--muted);font-size:12px;text-align:center}`;