From 6c7fb3e2bae7530d494c92be0bef55a2335e079e Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Tue, 18 Jul 2023 23:26:06 +0800 Subject: [PATCH] feat: init excalidraw plugin --- pnpm-lock.yaml | 43 ++++++++++++++++++- .../com.msgbyte.excalidraw/.ministarrc.js | 14 ++++++ .../models/excalidraw.ts | 26 +++++++++++ .../com.msgbyte.excalidraw/package.json | 20 +++++++++ .../services/excalidraw.service.dev.ts | 22 ++++++++++ .../com.msgbyte.excalidraw/manifest.json | 9 ++++ .../com.msgbyte.excalidraw/package.json | 18 ++++++++ .../src/ExcalidrawRender.tsx | 11 +++++ .../com.msgbyte.excalidraw/src/index.tsx | 1 + .../com.msgbyte.excalidraw/tsconfig.json | 7 +++ .../types/tailchat.d.ts | 2 + 11 files changed, 172 insertions(+), 1 deletion(-) create mode 100644 server/plugins/com.msgbyte.excalidraw/.ministarrc.js create mode 100644 server/plugins/com.msgbyte.excalidraw/models/excalidraw.ts create mode 100644 server/plugins/com.msgbyte.excalidraw/package.json create mode 100644 server/plugins/com.msgbyte.excalidraw/services/excalidraw.service.dev.ts create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/manifest.json create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/package.json create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/ExcalidrawRender.tsx create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/index.tsx create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/tsconfig.json create mode 100644 server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/types/tailchat.d.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 42531745..887591cd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1957,6 +1957,35 @@ importers: specifier: ^5.3.6 version: 5.3.6(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + server/plugins/com.msgbyte.excalidraw: + dependencies: + tailchat-server-sdk: + specifier: '*' + version: link:../../packages/sdk + devDependencies: + '@types/react': + specifier: 18.0.20 + version: 18.0.20 + mini-star: + specifier: '*' + version: 1.3.1 + + server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw: + dependencies: + '@excalidraw/excalidraw': + specifier: ^0.15.2 + version: 0.15.2(react-dom@18.2.0)(react@18.2.0) + devDependencies: + '@types/styled-components': + specifier: ^5.1.26 + version: 5.1.26 + react: + specifier: 18.2.0 + version: 18.2.0 + styled-components: + specifier: ^5.3.6 + version: 5.3.10(react-dom@18.2.0)(react-is@18.2.0)(react@18.2.0) + server/plugins/com.msgbyte.getui: dependencies: got: @@ -2714,7 +2743,7 @@ packages: '@babel/compat-data': 7.18.13 '@babel/core': 7.18.13 '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.3 + browserslist: 4.21.5 semver: 6.3.0 /@babel/helper-compilation-targets@7.18.9(@babel/core@7.21.0): @@ -7123,6 +7152,16 @@ packages: transitivePeerDependencies: - supports-color + /@excalidraw/excalidraw@0.15.2(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-rTI02kgWSTXiUdIkBxt9u/581F3eXcqQgJdIxmz54TFtG3ughoxO5fr4t7Fr2LZIturBPqfocQHGKZ0t2KLKgw==} + peerDependencies: + react: ^17.0.2 || ^18.2.0 + react-dom: ^17.0.2 || ^18.2.0 + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + dev: false + /@fastify/busboy@1.1.0: resolution: {integrity: sha512-Fv854f94v0CzIDllbY3i/0NJPNBRNLDawf3BTYVGCe9VrIIs3Wi7AFx24F9NzCxdf0wyx/x0Q9kEVnvDOPnlxA==} engines: {node: '>=10.17.0'} @@ -15244,6 +15283,7 @@ packages: electron-to-chromium: 1.4.310 node-releases: 2.0.10 update-browserslist-db: 1.0.10(browserslist@4.21.3) + dev: true /browserslist@4.21.5: resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} @@ -34470,6 +34510,7 @@ packages: browserslist: 4.21.3 escalade: 3.1.1 picocolors: 1.0.0 + dev: true /update-browserslist-db@1.0.10(browserslist@4.21.5): resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} diff --git a/server/plugins/com.msgbyte.excalidraw/.ministarrc.js b/server/plugins/com.msgbyte.excalidraw/.ministarrc.js new file mode 100644 index 00000000..3c4db179 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/.ministarrc.js @@ -0,0 +1,14 @@ +const path = require('path'); + +module.exports = { + externalDeps: [ + 'react', + 'react-router', + 'axios', + 'styled-components', + 'zustand', + 'zustand/middleware/immer', + ], + pluginRoot: path.resolve(__dirname, './web'), + outDir: path.resolve(__dirname, '../../public'), +}; diff --git a/server/plugins/com.msgbyte.excalidraw/models/excalidraw.ts b/server/plugins/com.msgbyte.excalidraw/models/excalidraw.ts new file mode 100644 index 00000000..6b67eaca --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/models/excalidraw.ts @@ -0,0 +1,26 @@ +import { db } from 'tailchat-server-sdk'; +const { getModelForClass, prop, modelOptions, TimeStamps } = db; + +@modelOptions({ + options: { + customName: 'p_excalidraw', + }, +}) +export class Excalidraw extends TimeStamps implements db.Base { + _id: db.Types.ObjectId; + id: string; + + @prop() + userId: string; + + @prop() + dataState: Record; +} + +export type ExcalidrawDocument = db.DocumentType; + +const model = getModelForClass(Excalidraw); + +export type ExcalidrawModel = typeof model; + +export default model; diff --git a/server/plugins/com.msgbyte.excalidraw/package.json b/server/plugins/com.msgbyte.excalidraw/package.json new file mode 100644 index 00000000..e416ff23 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/package.json @@ -0,0 +1,20 @@ +{ + "name": "tailchat-plugin-excalidraw", + "version": "1.0.0", + "main": "index.js", + "author": "moonrailgun", + "description": "Add excalidraw support in Tailchat", + "license": "MIT", + "private": true, + "scripts": { + "build:web": "ministar buildPlugin all", + "build:web:watch": "ministar watchPlugin all" + }, + "devDependencies": { + "@types/react": "18.0.20", + "mini-star": "*" + }, + "dependencies": { + "tailchat-server-sdk": "*" + } +} diff --git a/server/plugins/com.msgbyte.excalidraw/services/excalidraw.service.dev.ts b/server/plugins/com.msgbyte.excalidraw/services/excalidraw.service.dev.ts new file mode 100644 index 00000000..2e9c4579 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/services/excalidraw.service.dev.ts @@ -0,0 +1,22 @@ +import { TcService, TcDbService } from 'tailchat-server-sdk'; +import type { ExcalidrawDocument, ExcalidrawModel } from '../models/excalidraw'; + +/** + * Excalidraw + * + * Add excalidraw support in Tailchat + */ +interface ExcalidrawService + extends TcService, + TcDbService {} +class ExcalidrawService extends TcService { + get serviceName() { + return 'plugin:com.msgbyte.excalidraw'; + } + + onInit() { + this.registerLocalDb(require('../models/excalidraw').default); + } +} + +export default ExcalidrawService; diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/manifest.json b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/manifest.json new file mode 100644 index 00000000..4cf4fea9 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/manifest.json @@ -0,0 +1,9 @@ +{ + "label": "Excalidraw", + "name": "com.msgbyte.excalidraw", + "url": "{BACKEND}/plugins/com.msgbyte.excalidraw/index.js", + "version": "0.0.0", + "author": "moonrailgun", + "description": "Add excalidraw support in Tailchat", + "requireRestart": true +} diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/package.json b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/package.json new file mode 100644 index 00000000..77226a7a --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/package.json @@ -0,0 +1,18 @@ +{ + "name": "@plugins/com.msgbyte.excalidraw", + "main": "src/index.tsx", + "version": "0.0.0", + "description": "Add excalidraw support in Tailchat", + "private": true, + "scripts": { + "sync:declaration": "tailchat declaration github" + }, + "dependencies": { + "@excalidraw/excalidraw": "^0.15.2" + }, + "devDependencies": { + "@types/styled-components": "^5.1.26", + "react": "18.2.0", + "styled-components": "^5.3.6" + } +} diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/ExcalidrawRender.tsx b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/ExcalidrawRender.tsx new file mode 100644 index 00000000..cfedf6bf --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/ExcalidrawRender.tsx @@ -0,0 +1,11 @@ +import React from 'react'; +import { Excalidraw } from '@excalidraw/excalidraw'; + +export const ExcalidrawRender: React.FC = React.memo(() => { + return ( +
+ +
+ ); +}); +ExcalidrawRender.displayName = 'ExcalidrawRender'; diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/index.tsx b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/index.tsx new file mode 100644 index 00000000..6988e763 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/src/index.tsx @@ -0,0 +1 @@ +console.log('Plugin Excalidraw is loaded'); diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/tsconfig.json b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/tsconfig.json new file mode 100644 index 00000000..d9b47ed0 --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/tsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "esModuleInterop": true, + "jsx": "react", + "importsNotUsedAsValues": "error" + } +} diff --git a/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/types/tailchat.d.ts b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/types/tailchat.d.ts new file mode 100644 index 00000000..49f524ae --- /dev/null +++ b/server/plugins/com.msgbyte.excalidraw/web/plugins/com.msgbyte.excalidraw/types/tailchat.d.ts @@ -0,0 +1,2 @@ +declare module '@capital/common'; +declare module '@capital/component';