From 1cd0d0687f3c43270456202f34c1e2e11f9446f6 Mon Sep 17 00:00:00 2001 From: Michael Gartner Date: Sun, 16 Aug 2026 20:24:54 -0600 Subject: [PATCH 1/2] Add stock base dialog prototype --- pnpm-lock.yaml | 37 ++++++++++++------- prototypes/stock-base-dialog/CHANGELOG.md | 5 +++ prototypes/stock-base-dialog/README.md | 20 ++++++++++ prototypes/stock-base-dialog/package.json | 21 +++++++++++ prototypes/stock-base-dialog/src/index.ts | 23 ++++++++++++ prototypes/stock-base-dialog/src/styles.css | 3 ++ .../stock-base-dialog/tailwind.config.cjs | 6 +++ prototypes/stock-base-dialog/tsconfig.json | 16 ++++++++ prototypes/stock-base-dialog/vitest.config.ts | 8 ++++ 9 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 prototypes/stock-base-dialog/CHANGELOG.md create mode 100644 prototypes/stock-base-dialog/README.md create mode 100644 prototypes/stock-base-dialog/package.json create mode 100644 prototypes/stock-base-dialog/src/index.ts create mode 100644 prototypes/stock-base-dialog/src/styles.css create mode 100644 prototypes/stock-base-dialog/tailwind.config.cjs create mode 100644 prototypes/stock-base-dialog/tsconfig.json create mode 100644 prototypes/stock-base-dialog/vitest.config.ts diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 19318ed..3fbcf50 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,7 +41,7 @@ importers: version: 30.0.1 roamjs-components: specifier: 'catalog:' - version: 0.88.4(bcb98d651d8702d922a465e82d329485) + version: 0.88.4(8b3dba144aa4c6a891ee791b6ddc21c2) use-sync-external-store: specifier: 'catalog:' version: 1.6.0(react@17.0.2) @@ -49,6 +49,25 @@ importers: specifier: 'catalog:' version: 4.1.10(@types/node@26.2.0)(jsdom@30.0.1)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.17.14)(jiti@1.21.7)(yaml@2.9.0)) + prototypes/stock-base-dialog: + dependencies: + roamjs-components: + specifier: 'catalog:' + version: 0.88.4(8b3dba144aa4c6a891ee791b6ddc21c2) + use-sync-external-store: + specifier: 'catalog:' + version: 1.6.0(react@17.0.2) + devDependencies: + '@discoursegraphs/extension-base': + specifier: workspace:* + version: link:../../packages/extension-base + jsdom: + specifier: 'catalog:' + version: 30.0.1 + vitest: + specifier: 'catalog:' + version: 4.1.10(@types/node@26.2.0)(jsdom@30.0.1)(vite@8.2.1(@types/node@26.2.0)(esbuild@0.17.14)(jiti@1.21.7)(yaml@2.9.0)) + packages: '@alloc/quick-lru@5.2.0': @@ -1762,9 +1781,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@2.0.4: - resolution: {integrity: sha512-sOJnBmY3TJQBVIBqKHoifuwygrocXg3NjS9rZSMnVl05XWSHK7Qxb177AIZQyMDjP86bz+yneozj/h9qsPLcCA==} - nanoid@3.3.18: resolution: {integrity: sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2324,9 +2340,6 @@ packages: tslib@1.13.0: resolution: {integrity: sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==} - tslib@2.2.0: - resolution: {integrity: sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==} - tslib@2.3.1: resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} @@ -4261,8 +4274,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@2.0.4: {} - nanoid@3.3.18: {} nice-try@1.0.5: {} @@ -4571,7 +4582,7 @@ snapshots: dependencies: glob: 7.2.3 - roamjs-components@0.88.4(bcb98d651d8702d922a465e82d329485): + roamjs-components@0.88.4(8b3dba144aa4c6a891ee791b6ddc21c2): dependencies: '@blueprintjs/core': 3.50.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@blueprintjs/datetime': 3.23.14(react-dom@17.0.2(react@17.0.2))(react@17.0.2) @@ -4601,11 +4612,11 @@ snapshots: jszip: 3.10.0 marked: 4.0.16 marked-react: 1.1.2(react@17.0.2) - nanoid: 2.0.4 + nanoid: 3.3.18 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) refractor: 3.6.0 - tslib: 2.2.0 + tslib: 2.8.1 use-sync-external-store: 1.6.0(react@17.0.2) xregexp: 5.1.2 transitivePeerDependencies: @@ -4866,8 +4877,6 @@ snapshots: tslib@1.13.0: {} - tslib@2.2.0: {} - tslib@2.3.1: {} tslib@2.5.3: {} diff --git a/prototypes/stock-base-dialog/CHANGELOG.md b/prototypes/stock-base-dialog/CHANGELOG.md new file mode 100644 index 0000000..1d97fcf --- /dev/null +++ b/prototypes/stock-base-dialog/CHANGELOG.md @@ -0,0 +1,5 @@ +# Changelog + +## 0.0.0 - 2026-08-17 + +- Created the Stock Base Dialog prototype scaffold. diff --git a/prototypes/stock-base-dialog/README.md b/prototypes/stock-base-dialog/README.md new file mode 100644 index 0000000..10fc6a5 --- /dev/null +++ b/prototypes/stock-base-dialog/README.md @@ -0,0 +1,20 @@ +# Stock Base Dialog + +A stock base prototype that confirms a Roam extension can load a dialog screen. + +## Status + +Internal prototype for evaluation by Discourse Graphs. + +## Features + +- Opens a stock confirmation dialog as soon as the extension loads. +- Closes and cleans up the dialog when the extension unloads. + +## Install + +Load this developer-extension URL in Roam: + +```text +https://discoursegraphs.com/releases/prototypes/stock-base-dialog/ +``` diff --git a/prototypes/stock-base-dialog/package.json b/prototypes/stock-base-dialog/package.json new file mode 100644 index 0000000..0c2a4d4 --- /dev/null +++ b/prototypes/stock-base-dialog/package.json @@ -0,0 +1,21 @@ +{ + "name": "stock-base-dialog", + "version": "0.0.0", + "private": true, + "description": "A stock base prototype that confirms a Roam extension can load a dialog screen.", + "type": "module", + "scripts": { + "start": "roam-prototype dev", + "build": "roam-prototype build", + "test": "vitest run --passWithNoTests" + }, + "dependencies": { + "roamjs-components": "catalog:", + "use-sync-external-store": "catalog:" + }, + "devDependencies": { + "@discoursegraphs/extension-base": "workspace:*", + "jsdom": "catalog:", + "vitest": "catalog:" + } +} diff --git a/prototypes/stock-base-dialog/src/index.ts b/prototypes/stock-base-dialog/src/index.ts new file mode 100644 index 0000000..4d90ec2 --- /dev/null +++ b/prototypes/stock-base-dialog/src/index.ts @@ -0,0 +1,23 @@ +import { render as renderAlert } from "roamjs-components/components/SimpleAlert"; +import runExtension from "roamjs-components/util/runExtension"; +import "./styles.css"; + +export default runExtension(async () => { + let closeDialog: (() => void) | undefined; + + closeDialog = await renderAlert({ + content: "**Stock Base Dialog is working.**\n\nThe extension loaded successfully.", + confirmText: "Close", + onConfirm: () => { + closeDialog = undefined; + }, + }); + + return { + unload: () => { + const close = closeDialog; + closeDialog = undefined; + close?.(); + }, + }; +}); diff --git a/prototypes/stock-base-dialog/src/styles.css b/prototypes/stock-base-dialog/src/styles.css new file mode 100644 index 0000000..928c1ad --- /dev/null +++ b/prototypes/stock-base-dialog/src/styles.css @@ -0,0 +1,3 @@ +.dg-prototype-stock-base-dialog { + --dg-prototype-name: "stock-base-dialog"; +} diff --git a/prototypes/stock-base-dialog/tailwind.config.cjs b/prototypes/stock-base-dialog/tailwind.config.cjs new file mode 100644 index 0000000..394b553 --- /dev/null +++ b/prototypes/stock-base-dialog/tailwind.config.cjs @@ -0,0 +1,6 @@ +const base = require("../../packages/extension-base/tailwind.config.cjs"); + +module.exports = { + ...base, + content: ["./src/**/*.{js,jsx,ts,tsx}"], +}; diff --git a/prototypes/stock-base-dialog/tsconfig.json b/prototypes/stock-base-dialog/tsconfig.json new file mode 100644 index 0000000..a3469d4 --- /dev/null +++ b/prototypes/stock-base-dialog/tsconfig.json @@ -0,0 +1,16 @@ +{ + "extends": "../../packages/extension-base/tsconfig.json", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "~/*": [ + "./src/*" + ] + } + }, + "include": [ + "src", + "tests", + "vitest.config.ts" + ] +} diff --git a/prototypes/stock-base-dialog/vitest.config.ts b/prototypes/stock-base-dialog/vitest.config.ts new file mode 100644 index 0000000..7116b8d --- /dev/null +++ b/prototypes/stock-base-dialog/vitest.config.ts @@ -0,0 +1,8 @@ +import { defineConfig } from "vitest/config"; + +export default defineConfig({ + test: { + environment: "jsdom", + restoreMocks: true, + }, +}); From 234ba07a700e86e46ccbd5fdc6f0bafba6c76fff Mon Sep 17 00:00:00 2001 From: Michael Gartner Date: Sun, 16 Aug 2026 20:31:33 -0600 Subject: [PATCH 2/2] Fix runExtension runtime import --- prototypes/stock-base-dialog/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/prototypes/stock-base-dialog/src/index.ts b/prototypes/stock-base-dialog/src/index.ts index 4d90ec2..3006a9d 100644 --- a/prototypes/stock-base-dialog/src/index.ts +++ b/prototypes/stock-base-dialog/src/index.ts @@ -1,5 +1,5 @@ import { render as renderAlert } from "roamjs-components/components/SimpleAlert"; -import runExtension from "roamjs-components/util/runExtension"; +import { runExtension } from "roamjs-components/util"; import "./styles.css"; export default runExtension(async () => {