Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
52cc267
chore: upgrade OnlyOffice from 7.5.0 to 9.3.0
chaxus May 31, 2026
b8334b5
docs: record OnlyOffice 9.3.0 upgrade exploration and conclusions
chaxus May 31, 2026
759274a
docs: record Desktop Mode Mock exploration for OnlyOffice 9.3.0
chaxus May 31, 2026
a61f70f
feat: implement AscDesktopEditor mock enabling offline 9.3.0 document…
chaxus May 31, 2026
ad9851d
feat: suppress Connection is lost dialog; fix font path via Common.UI…
chaxus May 31, 2026
266f2ad
fix: revert socket.io to 404 (fake handshake caused reconnect loop)
chaxus May 31, 2026
4a472cf
docs: update Desktop Mode Mock doc with complete working mechanism
chaxus May 31, 2026
0b7ac0f
feat: add font mapping XHR patch and restore AllFonts.js
chaxus May 31, 2026
6fee199
docs: comprehensive Desktop Mode Mock documentation
chaxus May 31, 2026
da20b1e
feat: wrap asc_openDocumentFromBytes to auto-clear AscDesktopEditor
chaxus May 31, 2026
e1ee410
docs: update Desktop Mode Mock with canvas rendering investigation
chaxus May 31, 2026
ce9863f
chore: wrap asc_openDocumentFromBytes + save original file + debug lo…
chaxus May 31, 2026
739d386
docs: update with WordControl investigation results
chaxus May 31, 2026
ab73aac
docs: document Ec.Ms rendering blocker and next steps
chaxus Jun 1, 2026
ca118c9
docs: add analysis of offline capabilities between OnlyOffice 7.5 and…
chaxus Jun 13, 2026
134861c
feat: add SEO landing pages
chaxus Jun 13, 2026
c37df58
SEO: migrate to bybrowser.com, add content and structured data
chaxus Jun 13, 2026
31ed4b2
feat: SEO i18n, ad slots, loading progress, GA injection
chaxus Jun 13, 2026
c9f14a5
feat: fixed top nav, consistent layout between EN/ZH pages
chaxus Jun 13, 2026
eb27acc
feat: replace lang-switch link with globe icon + select dropdown
chaxus Jun 13, 2026
27850c1
style: hide ad slot placeholder until AdSense fills it
chaxus Jun 13, 2026
7d6e5fe
refactor: move source code into src/
chaxus Jun 13, 2026
222bd0f
refactor: consolidate HTML pages into pages/, set Vite root: 'pages'
chaxus Jun 13, 2026
4d7f37f
docs: update upgrade exploration with 2026-06-14 findings
chaxus Jun 13, 2026
2e5a4e1
docs: record definitive findings on OnlyOffice 9.x upgrade path
chaxus Jun 13, 2026
62b7393
docs: 修正 9.x JS 包架构分析,code.js 无网络代码,socket.io 在 sdkjs
chaxus Jun 14, 2026
4994a53
Fix 7.4.1 editor document loading: use sendCommand instead of openDoc…
chaxus Jun 14, 2026
5c13c57
docs: record Path C failure and correct socket.io architecture timeline
chaxus Jun 14, 2026
eb95f31
feat: update 9.3 version
chaxus Jun 14, 2026
8c8f676
docs: record onlyoffice 9.3 upgrade findings
chaxus Jun 14, 2026
70a2a30
feat: enhance OnlyOffice editor configuration and offline capabilities
chaxus Jun 15, 2026
e41948e
feat: Add exploration documents for path reflection and Web Mode impl…
chaxus Jun 15, 2026
d2545a2
feat: restore CI and testing framework after directory migration, upd…
chaxus Jun 19, 2026
4925bd4
test: verify onlyoffice web mode document rendering
chaxus Jun 19, 2026
be93f40
test: cover local office upload rendering
chaxus Jun 19, 2026
474f171
fix: open local powerpoint previews
chaxus Jun 19, 2026
1850c35
feat: enhance dialog suppression in editor iframe and update Vite mid…
chaxus Jun 19, 2026
301b60d
fix: resolve 404 errors for plugins.json and themes.json, add validat…
chaxus Jun 19, 2026
75ec89b
feat: implement dynamic font mapping for ascdesktop URLs with fallbac…
chaxus Jun 19, 2026
0d0e4bc
fix: resolve CJK garbling in local DOCX via server-level font remapping
chaxus Jun 20, 2026
3fa74c6
docs: add dedicated exploration doc for CJK split-brain font renderin…
chaxus Jun 20, 2026
da2b7e7
feat: implement DOCX image extraction and URL redirection for improve…
chaxus Jun 20, 2026
66c215c
feat: support multiple OOXML media paths in DOCX extraction
chaxus Jun 20, 2026
89ff93f
feat: add browser-native media player for PPTX embedded audio/video s…
chaxus Jun 20, 2026
0149b04
feat: integrate XLSX line-break normalization in editor instance for …
chaxus Jun 20, 2026
d46d3be
fix: make all PPTX files loadable in Web Mode (two SDK crash workarou…
chaxus Jun 21, 2026
0f2b2ea
docs: add exploration doc for PPTX load crash fix (2026-06-21)
chaxus Jun 21, 2026
8e152bd
fix: fix PPTX CJK garbling and toolbar crash for Arial-based presenta…
chaxus Jun 21, 2026
fe2f483
docs: record Arial CJK invisible text and toolbar crash root causes
chaxus Jun 21, 2026
583b84c
fix: AscDesktopEditor polyfill + suppress-dialog $window crash
chaxus Jun 21, 2026
65688df
docs: record AscDesktopEditor polyfill and $window crash root cause
chaxus Jun 21, 2026
bc43c6c
fix: add missing AscDesktopEditor stubs for word and cell SDKs
chaxus Jun 21, 2026
a4c4d80
docs: add word/cell SDK gap section to toolbar polyfill exploration
chaxus Jun 21, 2026
398fcad
docs: add OnlyOffice architecture and WASM section to CLAUDE.md
chaxus Jun 21, 2026
e619fd0
fix: complete AscDesktopEditor polyfill — add execCommand, CreateEdit…
chaxus Jun 21, 2026
ac2af65
docs: record execCommand / CreateEditorApi crash root cause and compl…
chaxus Jun 21, 2026
41e26a3
docs: update CLAUDE.md with execCommand/CreateEditorApi polyfill details
chaxus Jun 21, 2026
00f01d4
fix: patch SDK Shc/Mrc/K8b to force web-mode document loading path
chaxus Jun 21, 2026
b39711a
docs: record Shc/Mrc/K8b web-path patch root cause and SDK function map
chaxus Jun 21, 2026
2f5ec15
refactor: extract OnlyOffice iframe polyfill from vite.config.ts to s…
chaxus Jun 21, 2026
cc13ef5
refactor: extract Vite plugins into vite-plugins/ directory
chaxus Jun 21, 2026
c2e5e46
refactor: migrate to monorepo structure under apps/web (Step 1)
chaxus Jun 21, 2026
5d0f328
feat: add version picker CSS styles for navbar version selector
chaxus Jun 21, 2026
c840cda
feat: extract packages/core with EditorAdapter interface and file-typ…
chaxus Jun 21, 2026
91dcecf
feat: extract packages/editor-v9 with full v9.3.0 implementation (Ste…
chaxus Jun 21, 2026
30d1358
docs: record Turborepo monorepo migration design decisions
chaxus Jun 21, 2026
91f4e1b
chore: stage remaining monorepo config files from Step 1
chaxus Jun 21, 2026
bdfacdf
refactor: rename package scope from @doc/ to @ranuts/
chaxus Jun 21, 2026
5a17a5b
fix: update CI/CD workflows for monorepo directory structure
chaxus Jun 21, 2026
4372240
docs: add package READMEs and rename scope to @bybrowser
chaxus Jun 21, 2026
f59493a
Remove turbo.json configuration file as it is no longer needed for th…
chaxus Jun 21, 2026
dd78b9c
feat: implement packages/editor-v7 from main branch
chaxus Jun 21, 2026
46f2ff8
refactor: rename editor import alias to @bybrowser/editor (version-ne…
chaxus Jun 21, 2026
299a76a
feat: split stable/beta builds with separate public dirs and vite con…
chaxus Jun 21, 2026
42f3d6a
fix: make version picker navigate correctly in dev and prod
chaxus Jun 21, 2026
88bed2a
refactor: version-number naming for SDK dirs, configs, and dev scripts
chaxus Jun 21, 2026
a1694f0
fix(v7): preserve GIF animations in PPTX (issue #94 bug 1)
chaxus Jun 21, 2026
bde5fbd
fix: remove editor-ad-strip that was blocking the bottom of the editor
chaxus Jun 21, 2026
dcd6a8c
fix: HiDPI blur/cursor issues in v9, add SmartArts.bin stub for v7
chaxus Jun 21, 2026
deadd41
fix: load fonts into WASM FS before PDF export, improve x2t error mes…
chaxus Jun 21, 2026
867af24
docs: add exploration record for issue fixes batch (2026-06-22)
chaxus Jun 21, 2026
9673686
fix(v7): add font XHR patch to fix #62 (Excel date) and #64 (right-al…
chaxus Jun 21, 2026
65e1ea5
fix(v7): rebuild SmartArts.bin from v9 SmartArtData files to fix #20
chaxus Jun 21, 2026
d32d429
docs: update SmartArts exploration with complete fix analysis
chaxus Jun 21, 2026
67fc892
fix(v7): extend font XHR patch to handle Windows absolute paths
chaxus Jun 21, 2026
a5d3e8c
feat: implement MPA routing for document editors with dedicated HTML …
chaxus Jun 21, 2026
490fc83
feat: implement routing system for document editor with MPA and SPA h…
chaxus Jun 21, 2026
57a251e
Refactor code structure for improved readability and maintainability
chaxus Jun 21, 2026
733f785
feat: add NotoSansSC-Regular font for improved PDF rendering
chaxus Jun 21, 2026
12b2aea
feat: update font mapping to use NotoSansSC-Regular for improved cons…
chaxus Jun 21, 2026
784eece
feat: remove docker
chaxus Jun 21, 2026
61f4ac5
docs: update README with v9 beta, CJK support, and version table
chaxus Jun 22, 2026
ed1a321
docs: record production CJK fix, PDF CJK, and lint infra cleanup
chaxus Jun 22, 2026
065f123
fix: three bugs found in code review
chaxus Jun 22, 2026
a925c5e
fix: five bugs found in second code review
chaxus Jun 22, 2026
104e51d
fix: add public-v7/ and public-v9/ to root .prettierignore
chaxus Jun 22, 2026
59fe6d6
Improve table formatting in README files for better readability
chaxus Jun 22, 2026
f7afe7d
fix: pin ranui/ranuts peer deps to exact pre-release versions
chaxus Jun 22, 2026
cd31f47
fix: update pnpm-lock.yaml to match pinned ranui/ranuts versions in e…
chaxus Jun 22, 2026
e1221a5
fix: resolve 4 Dependabot security vulnerabilities
chaxus Jun 22, 2026
58e2ee4
fix: scope playwright install to @bybrowser/web workspace
chaxus Jun 22, 2026
cb372fc
fix: guard document/window access in I18n to prevent Node.js crash
chaxus Jun 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
run: pnpm install --frozen-lockfile

- name: Install Playwright browsers
run: pnpm exec playwright install --with-deps chromium
run: pnpm --filter=@bybrowser/web exec playwright install --with-deps chromium

- name: Run E2E tests
run: pnpm run test:e2e
Expand All @@ -82,5 +82,5 @@ jobs:
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: playwright-report/
path: apps/web/playwright-report/
retention-days: 7
2 changes: 1 addition & 1 deletion .github/workflows/pages-build-site.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
- name: Upload artifact
uses: actions/upload-pages-artifact@v5
with:
path: "./dist"
path: "./apps/web/dist"

deploy:
name: Deploy to GitHub Pages
Expand Down
21 changes: 14 additions & 7 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,32 @@ jobs:
- name: Checkout code
uses: actions/checkout@v6

- uses: pnpm/action-setup@v6
name: Install pnpm
with:
run_install: false

- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "20"
node-version: "22"
cache: "pnpm"

- name: Install dependencies
run: npm install
run: pnpm install --frozen-lockfile

- name: Build project
run: bash bin/build.sh
run: pnpm build

- name: Create Single-File HTML
working-directory: apps/web
run: node bin/bundle_single_html.js

- name: Create ZIP archive
run: |
cd dist
zip -r ../document-editor.zip .
cd ..
cd apps/web/dist
zip -r ../../../document-editor.zip .
cd -

- name: Create Release
id: create_release
Expand All @@ -48,7 +55,7 @@ jobs:
body: ${{ github.event.inputs.release_body }}
files: |
document-editor.zip
dist/single-file.html
apps/web/dist/single-file.html
draft: false
prerelease: false
env:
Expand Down
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -18,4 +18,11 @@ dist
coverage/
playwright-report/
test-results/
public/fonts/__fallback__/
apps/web/public/fonts/__fallback__/
# Large Noto CJK font families (5-24 MB each) — download separately; only the
# hand-crafted Subset-LongLoca.ttf variants are tracked in the repo.
apps/web/public/fonts/NotoSans*-Regular.ttf
apps/web/public/fonts/NotoSans*-Bold.ttf
apps/web/public/fonts/NotoSans*-VF.ttf
apps/web/public/fonts/NotoSerif*-VF.ttf
docs/screenshots/
2 changes: 2 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
"**/assets/**",
"**/temp/**",
"**/public/**",
"**/public-v7/**",
"**/public-v9/**",
"**/cache/**",
"**/*.snap",
"**/node_modules/**"
Expand Down
11 changes: 11 additions & 0 deletions .prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
node_modules/
dist/
coverage/
playwright-report/
test-results/
public/
docs/explorations/

# OnlyOffice vendor files — minified, not our code
apps/web/public-v7/
apps/web/public-v9/
215 changes: 189 additions & 26 deletions CLAUDE.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,4 @@ RUN pnpm run build
#COPY --from=builder /app/dist /usr/share/nginx/html

FROM joseluisq/static-web-server:2.42.0
COPY --from=builder /app/dist /public
COPY --from=builder /app/apps/web/dist /public
9 changes: 9 additions & 0 deletions apps/web/.prettierignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# OnlyOffice vendor files — minified, not our code
public-v7/
public-v9/

# Build output and generated reports
dist/
coverage/
playwright-report/
test-results/
27 changes: 27 additions & 0 deletions apps/web/bin/build.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
#!/bin/bash

set -e

inject_sw_version() {
local sw_path="$1"
if [ -f "$sw_path" ]; then
local timestamp
timestamp=$(date +%s)
if [[ "$OSTYPE" == "darwin"* ]]; then
sed -i '' "s/SW_VERSION_PLACEHOLDER/$timestamp/g" "$sw_path"
else
sed -i "s/SW_VERSION_PLACEHOLDER/$timestamp/g" "$sw_path"
fi
echo "Service Worker versioned: $sw_path ($timestamp)"
fi
}

echo "Building v7.5.0 (stable)..."
pnpm vite build --config vite.v7.config.ts
inject_sw_version "dist/sw.js"

echo "Building v9.3.0 (beta)..."
pnpm vite build
inject_sw_version "dist/9.3.0/sw.js"

echo "Build completed."
File renamed without changes.
53 changes: 53 additions & 0 deletions apps/web/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"name": "@bybrowser/web",
"version": "1.0.0",
"private": true,
"type": "module",
"description": "A local web-based document editor based on OnlyOffice, allowing you to edit documents directly in your browser without server-side processing, ensuring your privacy and security.",
"scripts": {
"dev": "pnpm dev:v7",
"dev:v7": "vite --host --force --config vite.v7.config.ts",
"dev:v9": "vite --host --force",
"build": "sh ./bin/build.sh",
"build:v7": "vite build --config vite.v7.config.ts",
"build:v9": "vite build",
"build:single": "node bin/bundle_single_html.js",
"preview": "vite preview",
"tsc": "tsc --noEmit",
"test": "vitest run",
"test:watch": "vitest",
"test:coverage": "vitest run --coverage",
"test:e2e": "playwright test",
"test:e2e:ui": "playwright test --ui",
"format:check": "prettier --check .",
"lint:ts": "oxlint && tsc --noEmit",
"lint:docker": "docker compose -f ../../docker-compose.yaml config --quiet",
"lint": "pnpm run lint:ts && pnpm run lint:docker"
},
"engines": {
"node": ">=20.19.0"
},
"devDependencies": {
"@playwright/test": "^1.60.0",
"@tailwindcss/postcss": "^4.3.0",
"@types/node": "^25.9.1",
"@vitest/coverage-v8": "^4.1.7",
"jsdom": "^29.1.1",
"oxlint": "^1.67.0",
"postcss": "^8.5.15",
"prettier": "^3.8.3",
"tailwindcss": "^4.3.0",
"typescript": "^6.0.3",
"undici": "^7.28.0",
"vite": "^8.0.16",
"vitest": "^4.1.7"
},
"dependencies": {
"@bybrowser/core": "workspace:*",
"@bybrowser/editor-v7": "workspace:*",
"@bybrowser/editor-v9": "workspace:*",
"@khmyznikov/pwa-install": "^0.6.3",
"ranui": "0.1.10-alpha-27",
"ranuts": "0.1.0-alpha-23"
}
}
113 changes: 113 additions & 0 deletions apps/web/pages/csv-editor/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link href="../img/64.png" rel="shortcut icon" />
<link rel="icon" type="image/png" href="../img/64.png" />
<link rel="manifest" href="../manifest.json" />
<meta name="theme-color" content="#0052cc" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<meta
name="description"
content="Open and edit CSV files locally in your browser with a spreadsheet-style document editor. No upload and no account required."
/>
<link rel="canonical" href="https://bybrowser.com/csv-editor/" />
<link rel="alternate" hreflang="en" href="https://bybrowser.com/csv-editor/" />
<link rel="alternate" hreflang="zh-Hans" href="https://bybrowser.com/zh-cn/csv-editor/" />
<link rel="alternate" hreflang="x-default" href="https://bybrowser.com/csv-editor/" />
<meta property="og:title" content="CSV Editor in Your Browser" />
<meta property="og:description" content="Review and edit CSV files locally with a browser-based Office editor." />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://bybrowser.com/csv-editor/" />
<meta property="og:image" content="https://bybrowser.com/img/512.png" />
<meta name="twitter:card" content="summary_large_image" />
<title>CSV Editor in Your Browser | Local Spreadsheet Editing</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "SoftwareApplication",
"name": "CSV Editor — ByBrowser",
"url": "https://bybrowser.com/csv-editor/",
"description": "Open and edit CSV files locally in your browser with a spreadsheet-style editor. No upload and no account required.",
"applicationCategory": "ProductivityApplication",
"operatingSystem": "Web Browser",
"offers": { "@type": "Offer", "price": "0", "priceCurrency": "USD" },
"featureList": "CSV editing, spreadsheet grid, no upload, privacy-first, delimiter auto-detection"
}
</script>
<script src="../web-apps/apps/api/documents/api.js"></script>
</head>

<body>
<main id="seo-content">
<h1>CSV Editor in Your Browser</h1>
<p>
Open and edit CSV files locally in your browser without pasting tabular data into upload-based tools. View and
modify comma-separated data in a full spreadsheet grid — privately.
</p>

<h2>What You Can Do</h2>
<ul>
<li>Open any <strong>.csv</strong> file directly from your device — no upload required</li>
<li>View and edit data in a spreadsheet-style grid with column and row controls</li>
<li>Add, delete, and reorder rows and columns</li>
<li>Save the edited data back as a CSV file</li>
<li>Handle large CSV exports from databases, CRMs, or analytics tools</li>
</ul>

<h2>When You Need a Private CSV Editor</h2>
<p>
CSV files frequently contain exported database records, customer lists, financial transactions, or survey
responses. Pasting this data into an online tool or uploading to a third-party service is a data risk.
ByBrowser's CSV editor loads and renders your file entirely in the browser — nothing is transmitted anywhere.
</p>

<h2>How to Open a CSV File</h2>
<ol>
<li>Click the upload button and select your <code>.csv</code> file, or drag and drop it</li>
<li>The file opens in a grid view powered by the OnlyOffice spreadsheet engine</li>
<li>Edit cells, fix formatting errors, or clean up the data</li>
<li>Save the modified CSV back to your device</li>
</ol>

<h2>Frequently Asked Questions</h2>
<dl>
<dt>Does this support large CSV files?</dt>
<dd>
Yes. Files with thousands of rows load well in modern browsers. Very large files (hundreds of thousands of
rows) may be slower depending on your device's memory.
</dd>

<dt>Will my CSV be sent to a server?</dt>
<dd>
No. The entire file is read and processed locally by WebAssembly running in your browser tab. Nothing is
uploaded.
</dd>

<dt>Can I convert CSV to XLSX?</dt>
<dd>Yes. Open the CSV file and use Save As to export the data as an XLSX spreadsheet.</dd>

<dt>Does it handle different delimiters like semicolons or tabs?</dt>
<dd>
The OnlyOffice engine auto-detects common delimiters. If detection fails, you can adjust the import settings
on open.
</dd>
</dl>

<nav aria-label="Related tools">
<h2>More Browser-Only Editors</h2>
<a href="../docx-editor/">DOCX Editor — edit Word documents without uploading</a>
<a href="../xlsx-editor/">XLSX Editor — edit Excel spreadsheets in your browser</a>
<a href="../pptx-editor/">PPTX Editor — open PowerPoint presentations locally</a>
<a href="../private-document-editor/">Private Document Editor — maximum privacy mode</a>
<a href="../">All browser-only tools — ByBrowser home</a>
</nav>
</main>
<div id="app" class="w-full h-full">
<div id="iframe"></div>
</div>
</body>
<script type="module" src="../../src/index.ts"></script>
</html>
13 changes: 6 additions & 7 deletions index.html → apps/web/pages/csv/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,19 @@
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
<link href="img/64.png" rel="shortcut icon" />
<link rel="icon" type="image/png" href="img/64.png" />
<link rel="manifest" href="manifest.json" />
<link href="../img/64.png" rel="shortcut icon" />
<link rel="icon" type="image/png" href="../img/64.png" />
<link rel="manifest" href="../manifest.json" />
<meta name="theme-color" content="#0052cc" />
<meta name="mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
<title>Document Editor</title>
<script src="web-apps/apps/api/documents/api.js"></script>
<title>CSV Editor | ByBrowser</title>
<script src="../web-apps/apps/api/documents/api.js"></script>
</head>

<body>
<div id="app" class="w-full h-full">
<div id="iframe"></div>
</div>
</body>
<script type="module" src="./index.ts"></script>
<script type="module" src="../../src/index.ts"></script>
</html>
Loading
Loading