From 05d410949c7c7e5dd8e0a6b02e0f9e693bd7f014 Mon Sep 17 00:00:00 2001 From: Sebastian Moser Date: Fri, 31 Jul 2026 01:39:46 +0200 Subject: [PATCH] got obsidian plugin to build again --- apps/obsidian-plugin/deno.json | 2 +- apps/obsidian-plugin/deno.lock | 575 +++---------------------------- apps/obsidian-plugin/plugin.ts | 6 +- deno.json | 5 +- deno.lock | 110 +----- marts/Cargo.toml | 5 +- marts/src/obsidian.rs | 46 ++- packages/marts/src/matrix/mod.rs | 246 ------------- packages/marts/src/matrix/ui.rs | 269 --------------- 9 files changed, 113 insertions(+), 1151 deletions(-) delete mode 100644 packages/marts/src/matrix/mod.rs delete mode 100644 packages/marts/src/matrix/ui.rs diff --git a/apps/obsidian-plugin/deno.json b/apps/obsidian-plugin/deno.json index 8da7890..5eb3265 100644 --- a/apps/obsidian-plugin/deno.json +++ b/apps/obsidian-plugin/deno.json @@ -1,7 +1,7 @@ { "name": "@ppc/obsidian-plugin", "tasks": { - "build_rust": "wasm-pack -vvvvv build -d platform/obsidian/rust_dist --target web --no-default-features --features target-obsidian", + "build_rust": "CARGO_TERM_COLOR=always wasm-pack -vvvvv build -d ../apps/obsidian-plugin/rust_dist --target web --no-opt ../../marts --no-default-features --features target-obsidian", "build": "deno run -A build_rust && mkdir -p dist && touch dist/.hotreload && cp manifest.json dist && deno -A esbuild.config.mjs production", "dev": "" }, diff --git a/apps/obsidian-plugin/deno.lock b/apps/obsidian-plugin/deno.lock index 5332c4e..e022e3e 100644 --- a/apps/obsidian-plugin/deno.lock +++ b/apps/obsidian-plugin/deno.lock @@ -1,36 +1,45 @@ { "version": "5", "specifiers": { + "jsr:@deno/esbuild-plugin@^1.2.1": "1.2.1", + "jsr:@deno/loader@~0.3.10": "0.3.12", + "jsr:@std/internal@^1.0.12": "1.0.12", + "jsr:@std/path@^1.1.1": "1.1.4", "npm:@flowershow/remark-wiki-link@^3.4.0": "3.4.0", - "npm:@instantdb/admin@~0.21.3": "0.21.30", - "npm:@instantdb/react@~0.20.28": "0.20.28_react@19.1.0", - "npm:@react-oauth/google@~0.12.2": "0.12.2_react@19.1.0_react-dom@19.1.0__react@19.1.0", - "npm:@tailwindcss/postcss@4": "4.2.0", - "npm:@types/node@20": "20.19.33", - "npm:@types/react-dom@19": "19.2.3_@types+react@19.2.14", - "npm:@types/react@19": "19.2.14", - "npm:@wasm-tool/rollup-plugin-rust@^3.1.4": "3.1.4_binaryen@125.0.0", - "npm:binaryen@125": "125.0.0", "npm:builtin-modules@5": "5.0.0", "npm:esbuild@~0.27.3": "0.27.3", "npm:mdast@3": "3.0.0", "npm:obsidian@^1.12.2": "1.12.2_@codemirror+state@6.5.0_@codemirror+view@6.38.6", - "npm:react-dom@19.1.0": "19.1.0_react@19.1.0", - "npm:react@19.1.0": "19.1.0", "npm:remark-frontmatter@5": "5.0.0", "npm:remark-gfm@^4.0.1": "4.0.1", "npm:remark-parse@11": "11.0.0", "npm:remark-stringify@11": "11.0.0", - "npm:tailwindcss@4": "4.2.0", - "npm:tslib@^2.6.2": "2.8.1", "npm:typescript@^5.9.3": "5.9.3", "npm:unified@^11.0.5": "11.0.5", "npm:unist-util-visit@^5.1.0": "5.1.0" }, - "npm": { - "@alloc/quick-lru@5.2.0": { - "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==" + "jsr": { + "@deno/esbuild-plugin@1.2.1": { + "integrity": "df629467913adc1f960149fdfa3a3430ba8c20381c310fba096db244e6c3c9f6", + "dependencies": [ + "jsr:@deno/loader", + "jsr:@std/path" + ] }, + "@deno/loader@0.3.12": { + "integrity": "52d3b3be0a32192efe07b0a4f1b3047077d2f2bba0f693e32f47421507f9fdb6" + }, + "@std/internal@1.0.12": { + "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" + }, + "@std/path@1.1.4": { + "integrity": "1d2d43f39efb1b42f0b1882a25486647cb851481862dc7313390b2bb044314b5", + "dependencies": [ + "jsr:@std/internal" + ] + } + }, + "npm": { "@codemirror/state@6.5.0": { "integrity": "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==", "dependencies": [ @@ -185,196 +194,9 @@ "micromark-util-symbol" ] }, - "@iarna/toml@2.2.5": { - "integrity": "sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==" - }, - "@instantdb/admin@0.21.30": { - "integrity": "sha512-IR8Wi+wJkGVqClJUnEFkUXYScyhmUV1qPO4s1+eHfFptkquHHtGSz1bUffGbGZJCj84lJVpjcvS1MCPgvd2PBg==", - "dependencies": [ - "@instantdb/core@0.21.30", - "@instantdb/version@0.21.30", - "eventsource" - ] - }, - "@instantdb/core@0.20.28": { - "integrity": "sha512-0ePAgbOZedSLZ4LbPZL6afcFnhL5mWIoWXgOqzdmp6QUrYgtQjWrJCcFlA7DWmrkidZYLU2WVpQbhMbgzKqrOg==", - "dependencies": [ - "@instantdb/version@0.20.28", - "mutative", - "uuid" - ] - }, - "@instantdb/core@0.21.30": { - "integrity": "sha512-PB/QFtrOYRmjKDYzo7oOIuJalLJVY/4mLljcYFkrbShMKz1oukKQ8sy+0/9pVcUETMyePgJUmuXcnrHwO7xjgQ==", - "dependencies": [ - "@instantdb/version@0.21.30", - "mutative", - "uuid" - ] - }, - "@instantdb/react@0.20.28_react@19.1.0": { - "integrity": "sha512-wPig+jUeUqSCYGdCLIGVky8bL0h3VnjYYD2+5SZtF/KlgFGQZ+u8LCdvk+8QJL/kE0xqDbogr7D+b7Vn73uO/A==", - "dependencies": [ - "@instantdb/core@0.20.28", - "@instantdb/version@0.20.28", - "react" - ] - }, - "@instantdb/version@0.20.28": { - "integrity": "sha512-lwsF66TpVwfBOSQ+bpuS2K1NO7jwlnJS5Uh4Xhyylwu4ieOEOOZa2vMnVORsidZCq2vwwKEiLvFIoH8lVkrj0g==" - }, - "@instantdb/version@0.21.30": { - "integrity": "sha512-yhrxnZo3c2/EK3dnDEcX4XYHfXjlyj3QPPvylrBY2qxodKzcEh9BnJufiQiP+2ePUD+kET+2FQlztxQ4E9BAbg==" - }, - "@isaacs/fs-minipass@4.0.1": { - "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", - "dependencies": [ - "minipass" - ] - }, - "@jridgewell/gen-mapping@0.3.13": { - "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", - "dependencies": [ - "@jridgewell/sourcemap-codec", - "@jridgewell/trace-mapping" - ] - }, - "@jridgewell/remapping@2.3.5": { - "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", - "dependencies": [ - "@jridgewell/gen-mapping", - "@jridgewell/trace-mapping" - ] - }, - "@jridgewell/resolve-uri@3.1.2": { - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==" - }, - "@jridgewell/sourcemap-codec@1.5.5": { - "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==" - }, - "@jridgewell/trace-mapping@0.3.31": { - "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", - "dependencies": [ - "@jridgewell/resolve-uri", - "@jridgewell/sourcemap-codec" - ] - }, "@marijn/find-cluster-break@1.0.2": { "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==" }, - "@react-oauth/google@0.12.2_react@19.1.0_react-dom@19.1.0__react@19.1.0": { - "integrity": "sha512-d1GVm2uD4E44EJft2RbKtp8Z1fp/gK8Lb6KHgs3pHlM0PxCXGLaq8LLYQYENnN4xPWO1gkL4apBtlPKzpLvZwg==", - "dependencies": [ - "react", - "react-dom" - ] - }, - "@rollup/pluginutils@5.3.0": { - "integrity": "sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==", - "dependencies": [ - "@types/estree", - "estree-walker", - "picomatch" - ] - }, - "@tailwindcss/node@4.2.0": { - "integrity": "sha512-Yv+fn/o2OmL5fh/Ir62VXItdShnUxfpkMA4Y7jdeC8O81WPB8Kf6TT6GSHvnqgSwDzlB5iT7kDpeXxLsUS0T6Q==", - "dependencies": [ - "@jridgewell/remapping", - "enhanced-resolve", - "jiti", - "lightningcss", - "magic-string", - "source-map-js", - "tailwindcss" - ] - }, - "@tailwindcss/oxide-android-arm64@4.2.0": { - "integrity": "sha512-F0QkHAVaW/JNBWl4CEKWdZ9PMb0khw5DCELAOnu+RtjAfx5Zgw+gqCHFvqg3AirU1IAd181fwOtJQ5I8Yx5wtw==", - "os": ["android"], - "cpu": ["arm64"] - }, - "@tailwindcss/oxide-darwin-arm64@4.2.0": { - "integrity": "sha512-I0QylkXsBsJMZ4nkUNSR04p6+UptjcwhcVo3Zu828ikiEqHjVmQL9RuQ6uT/cVIiKpvtVA25msu/eRV97JeNSA==", - "os": ["darwin"], - "cpu": ["arm64"] - }, - "@tailwindcss/oxide-darwin-x64@4.2.0": { - "integrity": "sha512-6TmQIn4p09PBrmnkvbYQ0wbZhLtbaksCDx7Y7R3FYYx0yxNA7xg5KP7dowmQ3d2JVdabIHvs3Hx4K3d5uCf8xg==", - "os": ["darwin"], - "cpu": ["x64"] - }, - "@tailwindcss/oxide-freebsd-x64@4.2.0": { - "integrity": "sha512-qBudxDvAa2QwGlq9y7VIzhTvp2mLJ6nD/G8/tI70DCDoneaUeLWBJaPcbfzqRIWraj+o969aDQKvKW9dvkUizw==", - "os": ["freebsd"], - "cpu": ["x64"] - }, - "@tailwindcss/oxide-linux-arm-gnueabihf@4.2.0": { - "integrity": "sha512-7XKkitpy5NIjFZNUQPeUyNJNJn1CJeV7rmMR+exHfTuOsg8rxIO9eNV5TSEnqRcaOK77zQpsyUkBWmPy8FgdSg==", - "os": ["linux"], - "cpu": ["arm"] - }, - "@tailwindcss/oxide-linux-arm64-gnu@4.2.0": { - "integrity": "sha512-Mff5a5Q3WoQR01pGU1gr29hHM1N93xYrKkGXfPw/aRtK4bOc331Ho4Tgfsm5WDGvpevqMpdlkCojT3qlCQbCpA==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "@tailwindcss/oxide-linux-arm64-musl@4.2.0": { - "integrity": "sha512-XKcSStleEVnbH6W/9DHzZv1YhjE4eSS6zOu2eRtYAIh7aV4o3vIBs+t/B15xlqoxt6ef/0uiqJVB6hkHjWD/0A==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "@tailwindcss/oxide-linux-x64-gnu@4.2.0": { - "integrity": "sha512-/hlXCBqn9K6fi7eAM0RsobHwJYa5V/xzWspVTzxnX+Ft9v6n+30Pz8+RxCn7sQL/vRHHLS30iQPrHQunu6/vJA==", - "os": ["linux"], - "cpu": ["x64"] - }, - "@tailwindcss/oxide-linux-x64-musl@4.2.0": { - "integrity": "sha512-lKUaygq4G7sWkhQbfdRRBkaq4LY39IriqBQ+Gk6l5nKq6Ay2M2ZZb1tlIyRNgZKS8cbErTwuYSor0IIULC0SHw==", - "os": ["linux"], - "cpu": ["x64"] - }, - "@tailwindcss/oxide-wasm32-wasi@4.2.0": { - "integrity": "sha512-xuDjhAsFdUuFP5W9Ze4k/o4AskUtI8bcAGU4puTYprr89QaYFmhYOPfP+d1pH+k9ets6RoE23BXZM1X1jJqoyw==", - "cpu": ["wasm32"] - }, - "@tailwindcss/oxide-win32-arm64-msvc@4.2.0": { - "integrity": "sha512-2UU/15y1sWDEDNJXxEIrfWKC2Yb4YgIW5Xz2fKFqGzFWfoMHWFlfa1EJlGO2Xzjkq/tvSarh9ZTjvbxqWvLLXA==", - "os": ["win32"], - "cpu": ["arm64"] - }, - "@tailwindcss/oxide-win32-x64-msvc@4.2.0": { - "integrity": "sha512-CrFadmFoc+z76EV6LPG1jx6XceDsaCG3lFhyLNo/bV9ByPrE+FnBPckXQVP4XRkN76h3Fjt/a+5Er/oA/nCBvQ==", - "os": ["win32"], - "cpu": ["x64"] - }, - "@tailwindcss/oxide@4.2.0": { - "integrity": "sha512-AZqQzADaj742oqn2xjl5JbIOzZB/DGCYF/7bpvhA8KvjUj9HJkag6bBuwZvH1ps6dfgxNHyuJVlzSr2VpMgdTQ==", - "optionalDependencies": [ - "@tailwindcss/oxide-android-arm64", - "@tailwindcss/oxide-darwin-arm64", - "@tailwindcss/oxide-darwin-x64", - "@tailwindcss/oxide-freebsd-x64", - "@tailwindcss/oxide-linux-arm-gnueabihf", - "@tailwindcss/oxide-linux-arm64-gnu", - "@tailwindcss/oxide-linux-arm64-musl", - "@tailwindcss/oxide-linux-x64-gnu", - "@tailwindcss/oxide-linux-x64-musl", - "@tailwindcss/oxide-wasm32-wasi", - "@tailwindcss/oxide-win32-arm64-msvc", - "@tailwindcss/oxide-win32-x64-msvc" - ] - }, - "@tailwindcss/postcss@4.2.0": { - "integrity": "sha512-u6YBacGpOm/ixPfKqfgrJEjMfrYmPD7gEFRoygS/hnQaRtV0VCBdpkx5Ouw9pnaLRwwlgGCuJw8xLpaR0hOrQg==", - "dependencies": [ - "@alloc/quick-lru", - "@tailwindcss/node", - "@tailwindcss/oxide", - "postcss", - "tailwindcss" - ] - }, "@types/codemirror@5.60.8": { "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==", "dependencies": [ @@ -399,24 +221,6 @@ "@types/ms@2.1.0": { "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==" }, - "@types/node@20.19.33": { - "integrity": "sha512-Rs1bVAIdBs5gbTIKza/tgpMuG1k3U/UMJLWecIMxNdJFDMzcM5LOiLVRYh3PilWEYDIeUDv7bpiHPLPsbydGcw==", - "dependencies": [ - "undici-types" - ] - }, - "@types/react-dom@19.2.3_@types+react@19.2.14": { - "integrity": "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ==", - "dependencies": [ - "@types/react" - ] - }, - "@types/react@19.2.14": { - "integrity": "sha512-ilcTH/UniCkMdtexkoCN0bI7pMcJDvmQFPvuPvmEaYA/NSfFTAgdUSLAoVjaRJm7+6PvcM+q1zYOwS4wTYMF9w==", - "dependencies": [ - "csstype" - ] - }, "@types/tern@0.23.9": { "integrity": "sha512-ypzHFE/wBzh+BlH6rrBgS5I/Z7RD21pGhZ2rltb/+ZrVM1awdZwjx7hE5XfuYgHWk9uvV5HLZN3SloevCAp3Bw==", "dependencies": [ @@ -426,59 +230,21 @@ "@types/unist@3.0.3": { "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, - "@wasm-tool/rollup-plugin-rust@3.1.4_binaryen@125.0.0": { - "integrity": "sha512-XW3nk8yFPPc86jLXVEXkqQxsx9M6i+j5Boru5yapfS/+egK2IOYsuEOvM3am+/YrKczohKP45+cBKYkxSSGGzg==", - "dependencies": [ - "@iarna/toml", - "@rollup/pluginutils", - "binaryen", - "chalk", - "glob", - "node-fetch", - "rimraf", - "tar" - ] - }, "bail@2.0.2": { "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, - "balanced-match@4.0.3": { - "integrity": "sha512-1pHv8LX9CpKut1Zp4EXey7Z8OfH11ONNH6Dhi2WDUt31VVZFXZzKwXcysBgqSumFCmR+0dqjMK5v5JiFHzi0+g==" - }, - "binaryen@125.0.0": { - "integrity": "sha512-X7CUM9ZnwL/Ow++JH5AJKiemc82J7JyeryuPvXQdXBLcL/rqrC5KMUB1mHiORSolietH9sotvaOZlr6HSwPAlw==", - "bin": true - }, - "brace-expansion@5.0.2": { - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", - "dependencies": [ - "balanced-match" - ] - }, "builtin-modules@5.0.0": { "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==" }, "ccount@2.0.1": { "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==" }, - "chalk@5.6.2": { - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==" - }, "character-entities@2.0.2": { "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" }, - "chownr@3.0.0": { - "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==" - }, "crelt@1.0.6": { "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, - "csstype@3.2.3": { - "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==" - }, - "data-uri-to-buffer@4.0.1": { - "integrity": "sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==" - }, "debug@4.4.3": { "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dependencies": [ @@ -494,22 +260,12 @@ "dequal@2.0.3": { "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==" }, - "detect-libc@2.1.2": { - "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==" - }, "devlop@1.1.0": { "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", "dependencies": [ "dequal" ] }, - "enhanced-resolve@5.19.0": { - "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", - "dependencies": [ - "graceful-fs", - "tapable" - ] - }, "esbuild@0.27.3": { "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "optionalDependencies": [ @@ -546,18 +302,6 @@ "escape-string-regexp@5.0.0": { "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" }, - "estree-walker@2.0.2": { - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "eventsource-parser@3.0.6": { - "integrity": "sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg==" - }, - "eventsource@4.1.0": { - "integrity": "sha512-2GuF51iuHX6A9xdTccMTsNb7VO0lHZihApxhvQzJB5A03DvHDd2FQepodbMaztPBmBcE/ox7o2gqaxGhYB9LhQ==", - "dependencies": [ - "eventsource-parser" - ] - }, "extend@3.0.2": { "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, @@ -567,129 +311,18 @@ "format" ] }, - "fetch-blob@3.2.0": { - "integrity": "sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==", - "dependencies": [ - "node-domexception", - "web-streams-polyfill" - ] - }, "format@0.2.2": { "integrity": "sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==" }, - "formdata-polyfill@4.0.10": { - "integrity": "sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==", - "dependencies": [ - "fetch-blob" - ] - }, "github-slugger@2.0.0": { "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, - "glob@13.0.6": { - "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", - "dependencies": [ - "minimatch", - "minipass", - "path-scurry" - ] - }, - "graceful-fs@4.2.11": { - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, "is-plain-obj@4.1.0": { "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, - "jiti@2.6.1": { - "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==", - "bin": true - }, - "lightningcss-android-arm64@1.31.1": { - "integrity": "sha512-HXJF3x8w9nQ4jbXRiNppBCqeZPIAfUo8zE/kOEGbW5NZvGc/K7nMxbhIr+YlFlHW5mpbg/YFPdbnCh1wAXCKFg==", - "os": ["android"], - "cpu": ["arm64"] - }, - "lightningcss-darwin-arm64@1.31.1": { - "integrity": "sha512-02uTEqf3vIfNMq3h/z2cJfcOXnQ0GRwQrkmPafhueLb2h7mqEidiCzkE4gBMEH65abHRiQvhdcQ+aP0D0g67sg==", - "os": ["darwin"], - "cpu": ["arm64"] - }, - "lightningcss-darwin-x64@1.31.1": { - "integrity": "sha512-1ObhyoCY+tGxtsz1lSx5NXCj3nirk0Y0kB/g8B8DT+sSx4G9djitg9ejFnjb3gJNWo7qXH4DIy2SUHvpoFwfTA==", - "os": ["darwin"], - "cpu": ["x64"] - }, - "lightningcss-freebsd-x64@1.31.1": { - "integrity": "sha512-1RINmQKAItO6ISxYgPwszQE1BrsVU5aB45ho6O42mu96UiZBxEXsuQ7cJW4zs4CEodPUioj/QrXW1r9pLUM74A==", - "os": ["freebsd"], - "cpu": ["x64"] - }, - "lightningcss-linux-arm-gnueabihf@1.31.1": { - "integrity": "sha512-OOCm2//MZJ87CdDK62rZIu+aw9gBv4azMJuA8/KB74wmfS3lnC4yoPHm0uXZ/dvNNHmnZnB8XLAZzObeG0nS1g==", - "os": ["linux"], - "cpu": ["arm"] - }, - "lightningcss-linux-arm64-gnu@1.31.1": { - "integrity": "sha512-WKyLWztD71rTnou4xAD5kQT+982wvca7E6QoLpoawZ1gP9JM0GJj4Tp5jMUh9B3AitHbRZ2/H3W5xQmdEOUlLg==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "lightningcss-linux-arm64-musl@1.31.1": { - "integrity": "sha512-mVZ7Pg2zIbe3XlNbZJdjs86YViQFoJSpc41CbVmKBPiGmC4YrfeOyz65ms2qpAobVd7WQsbW4PdsSJEMymyIMg==", - "os": ["linux"], - "cpu": ["arm64"] - }, - "lightningcss-linux-x64-gnu@1.31.1": { - "integrity": "sha512-xGlFWRMl+0KvUhgySdIaReQdB4FNudfUTARn7q0hh/V67PVGCs3ADFjw+6++kG1RNd0zdGRlEKa+T13/tQjPMA==", - "os": ["linux"], - "cpu": ["x64"] - }, - "lightningcss-linux-x64-musl@1.31.1": { - "integrity": "sha512-eowF8PrKHw9LpoZii5tdZwnBcYDxRw2rRCyvAXLi34iyeYfqCQNA9rmUM0ce62NlPhCvof1+9ivRaTY6pSKDaA==", - "os": ["linux"], - "cpu": ["x64"] - }, - "lightningcss-win32-arm64-msvc@1.31.1": { - "integrity": "sha512-aJReEbSEQzx1uBlQizAOBSjcmr9dCdL3XuC/6HLXAxmtErsj2ICo5yYggg1qOODQMtnjNQv2UHb9NpOuFtYe4w==", - "os": ["win32"], - "cpu": ["arm64"] - }, - "lightningcss-win32-x64-msvc@1.31.1": { - "integrity": "sha512-I9aiFrbd7oYHwlnQDqr1Roz+fTz61oDDJX7n9tYF9FJymH1cIN1DtKw3iYt6b8WZgEjoNwVSncwF4wx/ZedMhw==", - "os": ["win32"], - "cpu": ["x64"] - }, - "lightningcss@1.31.1": { - "integrity": "sha512-l51N2r93WmGUye3WuFoN5k10zyvrVs0qfKBhyC5ogUQ6Ew6JUSswh78mbSO+IU3nTWsyOArqPCcShdQSadghBQ==", - "dependencies": [ - "detect-libc" - ], - "optionalDependencies": [ - "lightningcss-android-arm64", - "lightningcss-darwin-arm64", - "lightningcss-darwin-x64", - "lightningcss-freebsd-x64", - "lightningcss-linux-arm-gnueabihf", - "lightningcss-linux-arm64-gnu", - "lightningcss-linux-arm64-musl", - "lightningcss-linux-x64-gnu", - "lightningcss-linux-x64-musl", - "lightningcss-win32-arm64-msvc", - "lightningcss-win32-x64-msvc" - ] - }, "longest-streak@3.1.0": { "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" }, - "lru-cache@11.2.6": { - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==" - }, - "magic-string@0.30.21": { - "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", - "dependencies": [ - "@jridgewell/sourcemap-codec" - ] - }, "markdown-table@3.0.4": { "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==" }, @@ -1070,46 +703,12 @@ "micromark-util-types" ] }, - "minimatch@10.2.2": { - "integrity": "sha512-+G4CpNBxa5MprY+04MbgOw1v7So6n5JY166pFi9KfYwT78fxScCeSNQSNzp6dpPSW2rONOps6Ocam1wFhCgoVw==", - "dependencies": [ - "brace-expansion" - ] - }, - "minipass@7.1.3": { - "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==" - }, - "minizlib@3.1.0": { - "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", - "dependencies": [ - "minipass" - ] - }, "moment@2.29.4": { "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "ms@2.1.3": { "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "mutative@1.3.0": { - "integrity": "sha512-8MJj6URmOZAV70dpFe1YnSppRTKC4DsMkXQiBDFayLcDI4ljGokHxmpqaBQuDWa4iAxWaJJ1PS8vAmbntjjKmQ==" - }, - "nanoid@3.3.11": { - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", - "bin": true - }, - "node-domexception@1.0.0": { - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": true - }, - "node-fetch@3.3.2": { - "integrity": "sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==", - "dependencies": [ - "data-uri-to-buffer", - "fetch-blob", - "formdata-polyfill" - ] - }, "obsidian@1.12.2_@codemirror+state@6.5.0_@codemirror+view@6.38.6": { "integrity": "sha512-DGAzpt6vo+sMDET/o8Zj26Bj2hbHrFsNUU8TtnzCyerO/OHksMFQnU9QEnPHVsOMstt/WnHXfC56j2r1syObWg==", "dependencies": [ @@ -1119,40 +718,6 @@ "moment" ] }, - "package-json-from-dist@1.0.1": { - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" - }, - "path-scurry@2.0.2": { - "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", - "dependencies": [ - "lru-cache", - "minipass" - ] - }, - "picocolors@1.1.1": { - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "picomatch@4.0.3": { - "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==" - }, - "postcss@8.5.6": { - "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", - "dependencies": [ - "nanoid", - "picocolors", - "source-map-js" - ] - }, - "react-dom@19.1.0_react@19.1.0": { - "integrity": "sha512-Xs1hdnE+DyKgeHJeJznQmYMIBG3TKIHJJT95Q58nHLSrElKlGQqDTR2HQ9fx5CN/Gk6Vh/kupBTDLU11/nDk/g==", - "dependencies": [ - "react", - "scheduler" - ] - }, - "react@19.1.0": { - "integrity": "sha512-FS+XFBNvn3GTAWq26joslQgWNoFu08F4kl0J4CgdNKADkdSGXQyTCnKteIAJy96Br6YbpEU1LSzV5dYtjMkMDg==" - }, "remark-frontmatter@5.0.0": { "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dependencies": [ @@ -1190,52 +755,16 @@ "unified" ] }, - "rimraf@6.1.3": { - "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", - "dependencies": [ - "glob", - "package-json-from-dist" - ], - "bin": true - }, - "scheduler@0.26.0": { - "integrity": "sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==" - }, - "source-map-js@1.2.1": { - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==" - }, "style-mod@4.1.3": { "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==" }, - "tailwindcss@4.2.0": { - "integrity": "sha512-yYzTZ4++b7fNYxFfpnberEEKu43w44aqDMNM9MHMmcKuCH7lL8jJ4yJ7LGHv7rSwiqM0nkiobF9I6cLlpS2P7Q==" - }, - "tapable@2.3.0": { - "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==" - }, - "tar@7.5.9": { - "integrity": "sha512-BTLcK0xsDh2+PUe9F6c2TlRp4zOOBMTkoQHQIWSIzI0R7KG46uEwq4OPk2W7bZcprBMsuaeFsqwYr7pjh6CuHg==", - "dependencies": [ - "@isaacs/fs-minipass", - "chownr", - "minipass", - "minizlib", - "yallist" - ] - }, "trough@2.2.0": { "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==" }, - "tslib@2.8.1": { - "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" - }, "typescript@5.9.3": { "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "bin": true }, - "undici-types@6.21.0": { - "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" - }, "unified@11.0.5": { "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dependencies": [ @@ -1275,10 +804,6 @@ "unist-util-visit-parents" ] }, - "uuid@11.1.0": { - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "bin": true - }, "vfile-message@4.0.3": { "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "dependencies": [ @@ -1296,45 +821,25 @@ "w3c-keyname@2.2.8": { "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==" }, - "web-streams-polyfill@3.3.3": { - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==" - }, - "yallist@5.0.0": { - "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==" - }, "zwitch@2.0.4": { "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==" } }, "workspace": { - "packageJson": { - "dependencies": [ - "npm:@flowershow/remark-wiki-link@^3.4.0", - "npm:@instantdb/admin@~0.21.3", - "npm:@instantdb/react@~0.20.28", - "npm:@react-oauth/google@~0.12.2", - "npm:@tailwindcss/postcss@4", - "npm:@types/node@20", - "npm:@types/react-dom@19", - "npm:@types/react@19", - "npm:@wasm-tool/rollup-plugin-rust@^3.1.4", - "npm:binaryen@125", - "npm:builtin-modules@5", - "npm:esbuild@~0.27.3", - "npm:mdast@3", - "npm:obsidian@^1.12.2", - "npm:react-dom@19.1.0", - "npm:react@19.1.0", - "npm:remark-frontmatter@5", - "npm:remark-gfm@^4.0.1", - "npm:remark-parse@11", - "npm:remark-stringify@11", - "npm:tailwindcss@4", - "npm:tslib@^2.6.2", - "npm:typescript@^5.9.3", - "npm:unified@^11.0.5", - "npm:unist-util-visit@^5.1.0" - ] - } + "dependencies": [ + "jsr:@deno/esbuild-plugin@^1.2.1", + "npm:@flowershow/remark-wiki-link@^3.4.0", + "npm:builtin-modules@5", + "npm:esbuild@~0.27.3", + "npm:mdast@3", + "npm:obsidian@^1.12.2", + "npm:remark-frontmatter@5", + "npm:remark-gfm@^4.0.1", + "npm:remark-parse@11", + "npm:remark-stringify@11", + "npm:typescript@^5.9.3", + "npm:unified@^11.0.5", + "npm:unist-util-visit@^5.1.0" + ] } } diff --git a/apps/obsidian-plugin/plugin.ts b/apps/obsidian-plugin/plugin.ts index f332d84..e11308e 100644 --- a/apps/obsidian-plugin/plugin.ts +++ b/apps/obsidian-plugin/plugin.ts @@ -1,6 +1,6 @@ import { Plugin, ItemView, TFile, Modal } from "obsidian"; -import wasmBinary from "./rust_dist/ppc_bg.wasm"; -import * as wasmNamespace from "./rust_dist/ppc"; +import wasmBinary from "./rust_dist/marts_bg.wasm"; +import * as wasmNamespace from "./rust_dist/marts"; import { c2vi_obsidian_canvas_patch } from "@ppc/marts"; import { task_obsidian_otask_parse } from "@ppc/marts"; @@ -29,7 +29,7 @@ class Mize { async function mize_init() { // init the wasm_bindgen module - const wasmModule = await import("./rust_dist/ppc.js"); + const wasmModule = await import("./rust_dist/marts.js"); await wasmModule.default({ module_or_path: wasmBinary }); wasmModule.initSync(); const jsInstance = await wasmModule.new_js_instance(JSON.stringify({ diff --git a/deno.json b/deno.json index 4acf790..65fcb7e 100644 --- a/deno.json +++ b/deno.json @@ -1,7 +1,6 @@ { "workspace": [ - "./packages/ppc/platform/obsidian", - "./packages/marts", - "./packages/mize" + "./apps/obsidian-plugin", + "./marts" ] } diff --git a/deno.lock b/deno.lock index 47e152c..ad5d68a 100644 --- a/deno.lock +++ b/deno.lock @@ -11,7 +11,6 @@ "npm:esbuild@*": "0.27.3", "npm:esbuild@~0.25.5": "0.25.12", "npm:esbuild@~0.27.3": "0.27.3", - "npm:matrix-js-sdk@42": "42.0.0", "npm:mdast@3": "3.0.0", "npm:obsidian@^1.12.2": "1.12.3_@codemirror+state@6.5.0_@codemirror+view@6.38.6", "npm:obsidian@^1.12.3": "1.12.3_@codemirror+state@6.5.0_@codemirror+view@6.38.6", @@ -46,9 +45,6 @@ } }, "npm": { - "@babel/runtime@8.0.0": { - "integrity": "sha512-sL6cvO2IfkSu/iU+zs2S/w01B7A8V7suXSIKEN4hPFFdZoiPGxrj5pAG0lCaqLWiEIrjKzdznIWuaLcxPR53qw==" - }, "@codemirror/state@6.5.0": { "integrity": "sha512-MwBHVK60IiIHDcoMet78lxt6iw5gJOGSbNbOIVBHWVXIH4/Nq1+GQgLLGgI1KlnN86WDXsPudVaqYHKBIx7Eyw==", "dependencies": [ @@ -336,9 +332,6 @@ "@marijn/find-cluster-break@1.0.2": { "integrity": "sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==" }, - "@matrix-org/matrix-sdk-crypto-wasm@18.3.1": { - "integrity": "sha512-VRjWhE1UgHnPpJ3b9B5+8z71ZC/HICFngPPFIN6ktzmUBKI5RusPujzbAQUoB3CgZ0yU58L99AfSQS4YTztSWw==" - }, "@types/codemirror@5.60.8": { "integrity": "sha512-VjFgDF/eB+Aklcy15TtOTLQeMjTo07k7KAjql8OK5Dirr7a6sJY4T1uVBDuTVG9VEmn1uUsohOpYnVfgC6/jyw==", "dependencies": [ @@ -354,9 +347,6 @@ "@types/estree@1.0.8": { "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==" }, - "@types/events@3.0.3": { - "integrity": "sha512-trOc4AAUThEz9hapPtSd7wf5tiQKvTtu5b371UxXdTuqzIh0ArcRspRP0i0Viu+LXstIQ1z96t1nsPxT9ol01g==" - }, "@types/mdast@4.0.4": { "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", "dependencies": [ @@ -375,21 +365,9 @@ "@types/unist@3.0.3": { "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==" }, - "another-json@0.2.0": { - "integrity": "sha512-/Ndrl68UQLhnCdsAzEXLMFuOR546o2qbYRqCglaNHbjXrwG1ayTcdwr3zkSGOGtGXDyR5X9nCFfnyG2AFJIsqg==" - }, "bail@2.0.2": { "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==" }, - "base-x@5.0.1": { - "integrity": "sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==" - }, - "bs58@6.0.0": { - "integrity": "sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==", - "dependencies": [ - "base-x" - ] - }, "builtin-modules@5.0.0": { "integrity": "sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==" }, @@ -399,9 +377,6 @@ "character-entities@2.0.2": { "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==" }, - "content-type@2.0.0": { - "integrity": "sha512-j/O/d7GcZCyNl7/hwZAb606rzqkyvaDctLmckbxLzHvFBzTJHuGEdodATcP3yIRoDrLHkIATJuvzbFlp/ki2cQ==" - }, "crelt@1.0.6": { "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==" }, @@ -495,9 +470,6 @@ "escape-string-regexp@5.0.0": { "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==" }, - "events@3.3.0": { - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==" - }, "extend@3.0.2": { "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, @@ -513,47 +485,15 @@ "github-slugger@2.0.0": { "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==" }, - "is-network-error@1.3.2": { - "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==" - }, "is-plain-obj@4.1.0": { "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==" }, - "loglevel@1.9.2": { - "integrity": "sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==" - }, "longest-streak@3.1.0": { "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==" }, "markdown-table@3.0.4": { "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==" }, - "matrix-events-sdk@0.0.1": { - "integrity": "sha512-1QEOsXO+bhyCroIe2/A5OwaxHvBm7EsSQ46DEDn8RBIfQwN5HWBpFvyWWR4QY0KHPPnnJdI99wgRiAl7Ad5qaA==" - }, - "matrix-js-sdk@42.0.0": { - "integrity": "sha512-i3SnhdkgnKA7O0iVlaZCo96GGaIZ0FGD93LQ34N2+Hj/kaC7Ffbch7OEkwYA//mYGCKRAMxduBacoy8WscfqVw==", - "dependencies": [ - "@babel/runtime", - "@matrix-org/matrix-sdk-crypto-wasm", - "another-json", - "bs58", - "content-type", - "loglevel", - "matrix-events-sdk", - "matrix-widget-api", - "p-retry", - "sdp-transform", - "unhomoglyph" - ] - }, - "matrix-widget-api@1.17.0": { - "integrity": "sha512-5FHoo3iEP3Bdlv5jsYPWOqj+pGdFQNLWnJLiB0V7Ygne7bb+Gsj3ibyFyHWC6BVw+Z+tSW4ljHpO17I9TwStwQ==", - "dependencies": [ - "@types/events", - "events" - ] - }, "mdast-util-find-and-replace@3.0.2": { "integrity": "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==", "dependencies": [ @@ -946,12 +886,6 @@ "moment" ] }, - "p-retry@8.0.0": { - "integrity": "sha512-kFVqH1HxOHp8LupNsOys7bSV09VYTRLxarH/mokO4Rqhk6wGi70E0jh4VzvVGXfEVNggHoHLAMWsQqHyU1Ey9A==", - "dependencies": [ - "is-network-error" - ] - }, "remark-frontmatter@5.0.0": { "integrity": "sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==", "dependencies": [ @@ -989,10 +923,6 @@ "unified" ] }, - "sdp-transform@3.0.0": { - "integrity": "sha512-gfYVRGxjHkGF2NPeUWHw5u6T/KGFtS5/drPms73gaSuMaVHKCY3lpLnGDfswVQO0kddeePoti09AwhYP4zA8dQ==", - "bin": true - }, "style-mod@4.1.3": { "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==" }, @@ -1003,9 +933,6 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "bin": true }, - "unhomoglyph@1.0.6": { - "integrity": "sha512-7uvcWI3hWshSADBu4JpnyYbTVc7YlhF5GDW/oPD5AxIxl34k4wXR3WDkPnzLxkN32LiTCTKMQLtKVZiwki3zGg==" - }, "unified@11.0.5": { "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", "dependencies": [ @@ -1068,7 +995,24 @@ }, "workspace": { "members": { - "packages/marts": { + "apps/obsidian-plugin": { + "dependencies": [ + "jsr:@deno/esbuild-plugin@^1.2.1", + "npm:@flowershow/remark-wiki-link@^3.4.0", + "npm:builtin-modules@5", + "npm:esbuild@~0.27.3", + "npm:mdast@3", + "npm:obsidian@^1.12.2", + "npm:remark-frontmatter@5", + "npm:remark-gfm@^4.0.1", + "npm:remark-parse@11", + "npm:remark-stringify@11", + "npm:typescript@^5.9.3", + "npm:unified@^11.0.5", + "npm:unist-util-visit@^5.1.0" + ] + }, + "marts": { "packageJson": { "dependencies": [ "npm:@flowershow/remark-wiki-link@^3.4.0", @@ -1085,24 +1029,6 @@ "npm:unist-util-visit@^5.1.0" ] } - }, - "packages/ppc/platform/obsidian": { - "dependencies": [ - "jsr:@deno/esbuild-plugin@^1.2.1", - "npm:@flowershow/remark-wiki-link@^3.4.0", - "npm:builtin-modules@5", - "npm:esbuild@~0.27.3", - "npm:matrix-js-sdk@42", - "npm:mdast@3", - "npm:obsidian@^1.12.2", - "npm:remark-frontmatter@5", - "npm:remark-gfm@^4.0.1", - "npm:remark-parse@11", - "npm:remark-stringify@11", - "npm:typescript@^5.9.3", - "npm:unified@^11.0.5", - "npm:unist-util-visit@^5.1.0" - ] } } } diff --git a/marts/Cargo.toml b/marts/Cargo.toml index 7d3322b..9301ab2 100644 --- a/marts/Cargo.toml +++ b/marts/Cargo.toml @@ -4,6 +4,9 @@ description = "marts = mize_parts - parts collection of the Mize framework" version = "0.1.0" edition = "2021" +[lib] +crate-type = ["cdylib", "rlib"] + [dependencies] clap = { version = "4.5.59", optional = true, features = ["string"] } flume = "0.12.0" @@ -42,7 +45,7 @@ default = ["target-os", "desktop", "server", "client"] #default = ["target-js", "target-obsidian"] # to get rust analyzer to analyzer js only parts target-spacetime = [ "mize/target-js", "spacetimedb-sdk/browser" ] target-os = [ "clap", "mize/target-os", "rusqlite", "dioxus", "dep:webbrowser" ] -target-js = [ "mize/target-js", "spacetimedb-sdk/browser", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "js-sys", "generated/target-js", "web-sys/Storage", "web-sys/Window" ] +target-js = [ "mize/target-js", "spacetimedb-sdk/browser", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", "js-sys", "generated/target-js", "web-sys/Storage", "web-sys/Window", "dioxus" ] target-obsidian = [ "target-js" ] desktop = ["dioxus/desktop"] client = [] diff --git a/marts/src/obsidian.rs b/marts/src/obsidian.rs index 4aeb9af..eff942a 100644 --- a/marts/src/obsidian.rs +++ b/marts/src/obsidian.rs @@ -2,7 +2,11 @@ use mize::{Mize, MizeResult, MizePart, MizePartCreate, mize_part}; use wasm_bindgen::JsValue; use mize::error::IntoMizeResultJsValue; use wasm_bindgen::prelude::*; - +use dioxus::prelude::*; +use crate::ClientAuth; +use wasm_bindgen::prelude::*; +use serde::{Serialize, Deserialize}; +use mize::platform::js::JsMize; // console_log macro @@ -86,3 +90,43 @@ impl ObsidianPart { } } + +#[wasm_bindgen] +pub fn test_fn(mize: &mut JsMize) { + let mize = mize.inner(); + console_log!("test fn..."); + + if let Err(e) = try_test_fn(mize) { + console_log!("err: {:?}", e); + } + +} + +fn try_test_fn(mize: &mut Mize) -> MizeResult<()> { + //let auth = mize.get_part_native::("client_auth")?; + //console_log!("secrets: {:?}", auth.secrets()); + + let parts = mize.parts.lock().unwrap(); + for part in parts.keys() { + console_log!("part: {}", part) + } + + Ok(()) +} + +#[wasm_bindgen] +pub fn part_obsidian_init(mize: &mut JsMize, plugin: JsValue, app: JsValue) { + let mut mize = mize.inner(); + if let Err(e) = obsidian_mize_main(&mut mize, plugin, app) { + console_log!("Failed to start the obsidian mize part: {:?}", e); + } +} + +fn obsidian_mize_main(mize: &mut Mize, plugin: JsValue, app: JsValue) -> MizeResult<()> { + + crate::part_obsidian(mize, plugin, app)?; + crate::part_client_auth(mize)?; + crate::spacetime(mize)?; + + Ok(()) +} diff --git a/packages/marts/src/matrix/mod.rs b/packages/marts/src/matrix/mod.rs deleted file mode 100644 index affbb88..0000000 --- a/packages/marts/src/matrix/mod.rs +++ /dev/null @@ -1,246 +0,0 @@ -use mize::{Mize, MizeResult, MizePart, MizePartCreate, mize_part}; -use wasm_bindgen::prelude::*; -use wasm_bindgen_futures::spawn_local; -use js_sys::Function; -use web_sys::HtmlElement; - -use matrix_sdk::{ - Client, ClientConfig, SyncState, - ruma::{ - user_id::UserId, - events::room::message::RoomMessageEventContent, - }, -}; - -mod ui; -use ui::mount_chat_app; - -const ROOM_ID: &str = "!XwqdXGPlmaLatdGUiN:ppc.social"; -const ACCOUNT_NAME: &str = "default"; -const INITIAL_LOAD_LIMIT: usize = 50; - -/// Matrix part that manages Matrix client and UI -#[mize_part("matrix")] -#[derive(Clone)] -pub struct MatrixPart { - mize: Mize, - pub client: Option, - pub timeline: Vec, - pub message_draft: String, - pub edit_event_id: Option, -} - -impl MizePart for MatrixPart {} -impl MizePartCreate for MatrixPart {} - -impl MatrixPart { - /// Create a new MatrixPart - pub fn new(mize: Mize) -> Self { - Self { - mize, - client: None, - timeline: Vec::new(), - message_draft: String::new(), - edit_event_id: None, - } - } - - /// Initialize the Matrix client from config - pub async fn init_client(&mut self) -> Result<(), String> { - let homeserver = self.mize - .get_config(&format!("matrix.accounts.{}.homeserver", ACCOUNT_NAME)) - .map_err(|e| format!("Failed to get homeserver config: {:?}", e))?; - - let access_token = self.mize - .get_config(&format!("matrix.accounts.{}.access_token", ACCOUNT_NAME)) - .map_err(|e| format!("Failed to get access_token config: {:?}", e))?; - - let user_id_str = self.mize - .get_config(&format!("matrix.accounts.{}.user_id", ACCOUNT_NAME)) - .map_err(|e| format!("Failed to get user_id config: {:?}", e))?; - - let device_id = self.mize - .get_config(&format!("matrix.accounts.{}.device_id", ACCOUNT_NAME)) - .map_err(|e| format!("Failed to get device_id config: {:?}", e))?; - - let user_id = UserId::parse(&user_id_str) - .map_err(|e| format!("Invalid user_id: {:?}", e))?; - - let config = ClientConfig::new() - .homeserver_url(homeserver) - .device_id(device_id); - - let client = Client::new_with_config(user_id, Some(access_token), config) - .await - .map_err(|e| format!("Failed to create client: {:?}", e))?; - - self.client = Some(client.clone()); - - // Start sync in background - self.start_sync(client).await?; - - Ok(()) - } - - /// Start sync and set up event listeners - async fn start_sync(&mut self, client: Client) -> Result<(), String> { - let room_id = ROOM_ID.to_string(); - let mize = self.mize.clone(); - - // Start sync - let sync_token = client.sync_token().await; - let mut sync_state = SyncState::new(sync_token); - - let client_clone = client.clone(); - - spawn_local(async move { - loop { - match client_clone.sync(&mut sync_state).await { - Ok(response) => { - // Process sync response - update MatrixPart via mize - if let Some(rooms) = response.rooms { - if let Some(join) = rooms.join { - if let Some(room_events) = join.get(&room_id) { - // Get MatrixPart and update timeline - if let Ok(mut matrix_part) = mize.get_part_native::("matrix") { - for event in &room_events.timeline.events { - if event.room_id() == room_id { - matrix_part.timeline.push(event.clone()); - // Keep only last INITIAL_LOAD_LIMIT events - if matrix_part.timeline.len() > INITIAL_LOAD_LIMIT { - matrix_part.timeline.remove(0); - } - } - } - } - } - } - } - - // Check if we should stop syncing - if sync_state.should_stop() { - break; - } - } - Err(e) => { - console_log!("Sync error: {:?}", e); - break; - } - } - } - }); - - Ok(()) - } - - /// Send a message to the room - pub async fn send_message(&mut self) -> MizeResult<()> { - let client = self.client.as_ref() - .ok_or_else(|| mize::error::Error::new("Client not initialized"))?; - - if self.message_draft.is_empty() { - return Ok(()); - } - - let content = RoomMessageEventContent::text_plain(&self.message_draft); - - if let Some(_event_id) = &self.edit_event_id { - // Editing existing message - placeholder for now - console_log!("Editing message (not yet implemented)"); - } - - // Send message - client.send_room_message(ROOM_ID, content).await?; - - // Clear draft after sending - self.message_draft.clear(); - self.edit_event_id = None; - - Ok(()) - } -} - -/// Entry point for the Matrix part -pub fn part_matrix(mize: &mut Mize) -> MizeResult<()> { - #[cfg(feature = "target_obsidian")] { - use crate::ObsidianPart; - - // Get the Obsidian part - let obsidian = mize.get_part_native::("obsidian")?; - - // Create and register MatrixPart - let matrix_part = MatrixPart::new(mize.clone()); - mize.register_part(Box::new(matrix_part)); - - // Get the registered MatrixPart to initialize it - let mize_clone = mize.clone(); - spawn_local(async move { - if let Ok(mut matrix_part) = mize_clone.get_part_native::("matrix") { - if let Err(e) = matrix_part.init_client().await { - console_log!("Failed to initialize Matrix client: {}", e); - } - } - }); - - // Create a JS function that will be called when the view is opened - let mize_for_view = mize.clone(); - let view_creator = Closure::::wrap(Box::new(move |leaf: JsValue| { - if let Some(element) = extract_dom_element(leaf) { - // Get MatrixPart state for the UI - if let Ok(matrix_part) = mize_for_view.get_part_native::("matrix") { - let timeline = matrix_part.timeline.clone(); - let message_draft = matrix_part.message_draft.clone(); - let edit_event_id = matrix_part.edit_event_id.clone(); - - mount_chat_app(element, timeline, message_draft, edit_event_id, mize_for_view.clone()); - } - } else { - console_log!("Failed to extract DOM element from leaf"); - } - })); - - // Convert closure to JS Function - let view_creator_fn: &Function = view_creator.as_ref().unchecked_ref(); - - // Register the view with Obsidian - ObsidianPart::register_view(&obsidian.plugin(), "matrix-chat-view", view_creator_fn)?; - - // Prevent the closure from being dropped - view_creator.forget(); - } - - Ok(()) -} - -/// Extract DOM element from Obsidian leaf JSValue -fn extract_dom_element(leaf: JsValue) -> Option { - use wasm_bindgen::JsCast; - use js_sys::Reflect; - - // Try to get the containerEl from the leaf - let container_value = Reflect::get(&leaf, &"containerEl".into()).ok()?; - let container = container_value.dyn_into::().ok()?; - - // Create a div to mount into - let doc = web_sys::window()?.document()?; - let mount_point = doc.create_element("div").ok()?; - mount_point.set_attribute("style", "height: 100%; width: 100%;").ok()?; - - container.append_child(&mount_point).ok()?; - mount_point.dyn_into::().ok() -} - -// Console log macros -#[macro_export] -macro_rules! console_log { - ($($t:tt)*) => { - web_sys::console::log_1(&format!($($t)*).into()); - }; -} - -#[macro_export] -macro_rules! console_error { - ($($t:tt)*) => { - web_sys::console::error_1(&format!($($t)*).into()); - }; -} diff --git a/packages/marts/src/matrix/ui.rs b/packages/marts/src/matrix/ui.rs deleted file mode 100644 index 3ebf160..0000000 --- a/packages/marts/src/matrix/ui.rs +++ /dev/null @@ -1,269 +0,0 @@ -use dioxus::prelude::*; -use dioxus_web::events::FormEvent; -use mize::Mize; -use matrix_sdk::SyncRoomEvent; - -const ROOM_ID: &str = "!XwqdXGPlmaLatdGUiN:ppc.social"; - -/// Props for the chat component -#[derive(Props, Clone)] -pub struct ChatProps { - pub mize: Mize, - pub initial_timeline: Vec, - pub initial_draft: String, - pub initial_edit_id: Option, -} - -/// Message component - renders a single message -#[component] -pub fn Message(cx: Scope, event: SyncRoomEvent) -> Element { - let sender = event.sender().to_string(); - let timestamp = event.origin_server_ts(); - - // Extract display name from MXID (basic version) - let display_name = if let Some(at_pos) = sender.find('@') { - if let Some(colon_pos) = sender.rfind(':') { - &sender[at_pos + 1..colon_pos] - } else { - &sender[at_pos + 1..] - } - } else { - &sender - }; - - // Format timestamp - let time_str = { - let dt = js_sys::Date::new(&(timestamp as f64)); - dt.to_locale_string() - }; - - // Extract message content - let content = event - .as_original() - .and_then(|e| e.content().deserialize().ok()) - .and_then(|c: matrix_sdk::ruma::events::room::message::RoomMessageEventContent| { - c.body().map(|s| s.to_string()) - }) - .unwrap_or_default(); - - // Check if this is an edit - let is_edit = event - .as_original() - .map(|e| { - e.content() - .get("m.relates_to") - .and_then(|v| v.as_object()) - .and_then(|o| o.get("rel_type")) - .and_then(|v| v.as_str()) - == Some("m.replace") - }) - .unwrap_or(false); - - cx.render(rsx! { - div { - class: "matrix-chat-event", - style: "margin: 14px 16px; padding-bottom: 10px; border-bottom: 1px solid var(--background-modifier-border);", - - div { - class: "matrix-chat-msghead", - style: "font-size: 1em; font-weight: 500; color: var(--interactive-accent); display: flex; align-items: center; gap: 10px;", - - span { display_name } - span { - style: "font-size: 0.85em; color: var(--text-muted); margin-left: auto;", - {time_str.clone()} - if is_edit { " ยท edited" } - } - } - - div { - class: "matrix-chat-msgbody", - style: "margin: 6px 0 0 0; font-size: 1em;", - {content} - } - } - }) -} - -/// Editor component - message input area -#[component] -pub fn Editor(cx: Scope, mize: Mize, draft: UseSignal, edit_id: UseSignal>) -> Element { - let on_input = move |evt: FormEvent| { - draft.set(evt.value.clone()); - }; - - let on_send = move |_| { - let mize_clone = mize.clone(); - let draft_val = draft.read().clone(); - let edit_id_val = edit_id.read().clone(); - - cx.spawn(async move { - if let Ok(mut matrix_part) = mize_clone.get_part_native::("matrix") { - matrix_part.message_draft = draft_val; - matrix_part.edit_event_id = edit_id_val; - if let Err(e) = matrix_part.send_message().await { - console_log!("Failed to send message: {:?}", e); - } - // Clear local draft - draft.set(String::new()); - edit_id.set(None); - } - }); - }; - - let on_keydown = move |evt: dioxus_web::events::KeyboardEvent| { - if (evt.ctrl_key() || evt.meta_key()) && evt.key() == "Enter" { - on_send(evt); - } - }; - - let on_cancel = move |_| { - draft.set(String::new()); - edit_id.set(None); - }; - - cx.render(rsx! { - div { - class: "matrix-chat-editor", - style: "border-top: 1px solid var(--background-modifier-border); background: var(--background-primary); padding: 8px 12px;", - - div { - class: "matrix-chat-editor-inner", - style: "border: 1px solid var(--background-modifier-border); border-radius: 6px; overflow: hidden; background: var(--background-secondary);", - - textarea { - r#type: "text", - rows: "3", - style: "width: 99%; min-height: 40px; resize: vertical; background: transparent; border: none; outline: none; padding: 8px; font-family: inherit; font-size: inherit; color: var(--text-normal);", - value: "{draft}", - oninput: on_input, - onkeydown: on_keydown, - } - } - - button { - r#type: "button", - style: "margin-top: 3px; float: right; padding: 6px 14px; font-size: 0.97em; border-radius: 5px; border: none; background: var(--interactive-accent); color: white; cursor: pointer;", - onclick: on_send, - if edit_id.read().is_some() { "Save" } else { "Send" } - } - - if edit_id.read().is_some() { - button { - r#type: "button", - style: "margin-right: 12px; padding: 6px 12px; font-size: 0.93em; border-radius: 5px; border: none; color: var(--text-normal); background: var(--background-secondary); cursor: pointer;", - onclick: on_cancel, - "Cancel" - } - } - } - }) -} - -/// Timeline component - list of messages -#[component] -pub fn Timeline(cx: Scope, mize: Mize, timeline: UseSignal>) -> Element { - // Periodically refresh timeline from MatrixPart - cx.use_effect((), move |_| { - let mize_clone = mize.clone(); - let timeline_clone = timeline.clone(); - - // Set up interval to poll for updates - let interval = js_sys::set_interval( - &Closure::::wrap(Box::new(move || { - if let Ok(matrix_part) = mize_clone.get_part_native::("matrix") { - *timeline_clone.write() = matrix_part.timeline.clone(); - } - })), - 1000, // 1 second - ); - - // Cleanup on unmount - move || { - js_sys::clear_interval(interval); - } - }); - - cx.render(rsx! { - div { - class: "matrix-chat-scroll", - style: "flex-grow: 1; overflow-y: auto; padding: 8px 0; background: var(--background-secondary);", - - // Room name header - div { - class: "matrix-chat-roomname", - style: "font-weight: 600; text-align: center; font-size: 1.1em; margin: 2px 0 12px 0; border-bottom: 1px solid var(--background-modifier-border); color: var(--text-accent); background: var(--background-primary);", - "Matrix Chat - {ROOM_ID}" - } - - // Messages - for event in timeline.read().iter() { - rsx! { Message { event: event.clone() } } - } - } - }) -} - -/// Root chat component -#[component] -pub fn Chat(cx: Scope, props: ChatProps) -> Element { - let timeline = use_signal(&cx, || props.initial_timeline); - let draft = use_signal(&cx, || props.initial_draft); - let edit_id = use_signal(&cx, || props.initial_edit_id); - - cx.render(rsx! { - div { - class: "matrix-chat-root", - style: "height: 100%; display: flex; flex-direction: column; background: var(--background-primary); color: var(--text-normal);", - - // Title - div { - class: "matrix-chat-title", - style: "padding: 12px; font-weight: bold; font-size: 1.2em; text-align: center; border-bottom: 1px solid var(--background-modifier-border);", - "Matrix Chat" - } - - // Info - div { - class: "matrix-chat-info", - style: "font-size: 0.85em; color: var(--text-muted); text-align: center; margin-bottom: 5px;", - "Room: {ROOM_ID}" - } - - // Timeline - Timeline { mize: props.mize.clone(), timeline } - - // Editor - Editor { mize: props.mize.clone(), draft, edit_id } - } - }) -} - -/// Mount the Dioxus app into a DOM element -pub fn mount_chat_app( - element: web_sys::HtmlElement, - initial_timeline: Vec, - initial_draft: String, - initial_edit_id: Option, - mize: Mize, -) { - dioxus_web::launch( - dioxus::prelude::App::new(move || rsx! { - Chat { - mize: mize.clone(), - initial_timeline: initial_timeline.clone(), - initial_draft: initial_draft.clone(), - initial_edit_id: initial_edit_id.clone(), - } - }), - element, - ); -} - -// Console log macro -#[macro_export] -macro_rules! console_log { - ($($t:tt)*) => { - web_sys::console::log_1(&format!($($t)*).into()); - }; -}