diff --git a/.gitignore b/.gitignore
index e8fe197..fde9077 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
dist
stats.json
-node_modules
\ No newline at end of file
+node_modules
+docs
\ No newline at end of file
diff --git a/README.md b/README.md
index 235cc3f..725c94e 100644
--- a/README.md
+++ b/README.md
@@ -4,7 +4,7 @@
# FlowOS Next
- 
+ 
diff --git a/package-lock.json b/package-lock.json
index 13bc2b3..745e3ae 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -20,6 +20,9 @@
"@types/uuid": "^9.0.5",
"@types/web": "^0.0.117",
"ts-standard": "^12.0.2",
+ "typedoc": "^0.25.3",
+ "typedoc-material-theme": "^1.0.0",
+ "typedoc-plugin-missing-exports": "^2.1.0",
"typescript": "^5.2.2",
"vite": "^4.4.11",
"vite-plugin-dynamic-import": "^1.5.0",
@@ -617,6 +620,12 @@
"@jridgewell/sourcemap-codec": "^1.4.14"
}
},
+ "node_modules/@material/material-color-utilities": {
+ "version": "0.2.7",
+ "resolved": "https://registry.npmjs.org/@material/material-color-utilities/-/material-color-utilities-0.2.7.tgz",
+ "integrity": "sha512-0FCeqG6WvK4/Cc06F/xXMd/pv4FeisI0c1tUpBbfhA2n9Y8eZEv4Karjbmf2ZqQCPUWMrGp8A571tCjizxoTiQ==",
+ "dev": true
+ },
"node_modules/@nodelib/fs.scandir": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
@@ -1092,6 +1101,12 @@
"node": ">=8"
}
},
+ "node_modules/ansi-sequence-parser": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz",
+ "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==",
+ "dev": true
+ },
"node_modules/ansi-styles": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -3620,6 +3635,12 @@
"integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
"dev": true
},
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
"node_modules/jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
@@ -4013,6 +4034,12 @@
"node": ">=10"
}
},
+ "node_modules/lunr": {
+ "version": "2.3.9",
+ "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz",
+ "integrity": "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==",
+ "dev": true
+ },
"node_modules/magic-string": {
"version": "0.30.5",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz",
@@ -4062,6 +4089,18 @@
"semver": "bin/semver"
}
},
+ "node_modules/marked": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz",
+ "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==",
+ "dev": true,
+ "bin": {
+ "marked": "bin/marked.js"
+ },
+ "engines": {
+ "node": ">= 12"
+ }
+ },
"node_modules/md5.js": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz",
@@ -5223,6 +5262,18 @@
"node": ">=8"
}
},
+ "node_modules/shiki": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.5.tgz",
+ "integrity": "sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==",
+ "dev": true,
+ "dependencies": {
+ "ansi-sequence-parser": "^1.1.0",
+ "jsonc-parser": "^3.2.0",
+ "vscode-oniguruma": "^1.7.0",
+ "vscode-textmate": "^8.0.0"
+ }
+ },
"node_modules/side-channel": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
@@ -5768,6 +5819,86 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/typedoc": {
+ "version": "0.25.3",
+ "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.3.tgz",
+ "integrity": "sha512-Ow8Bo7uY1Lwy7GTmphRIMEo6IOZ+yYUyrc8n5KXIZg1svpqhZSWgni2ZrDhe+wLosFS8yswowUzljTAV/3jmWw==",
+ "dev": true,
+ "dependencies": {
+ "lunr": "^2.3.9",
+ "marked": "^4.3.0",
+ "minimatch": "^9.0.3",
+ "shiki": "^0.14.1"
+ },
+ "bin": {
+ "typedoc": "bin/typedoc"
+ },
+ "engines": {
+ "node": ">= 16"
+ },
+ "peerDependencies": {
+ "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x"
+ }
+ },
+ "node_modules/typedoc-material-theme": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/typedoc-material-theme/-/typedoc-material-theme-1.0.0.tgz",
+ "integrity": "sha512-jrR3xf2lzPMxKOiEKEifs8royJ1zhkQ84+GFnTKMY0Rh4xWoUfxNUgiDijIw4veBlrVG9Tsf5ba1Frr4IFsEsg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://paypal.me/dmnsgn"
+ },
+ {
+ "type": "individual",
+ "url": "https://commerce.coinbase.com/checkout/56cbdf28-e323-48d8-9c98-7019e72c97f3"
+ }
+ ],
+ "dependencies": {
+ "@material/material-color-utilities": "^0.2.7"
+ },
+ "engines": {
+ "node": ">=20.0.0",
+ "npm": ">=9.6.4"
+ },
+ "peerDependencies": {
+ "typedoc": "^0.25.3"
+ }
+ },
+ "node_modules/typedoc-plugin-missing-exports": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/typedoc-plugin-missing-exports/-/typedoc-plugin-missing-exports-2.1.0.tgz",
+ "integrity": "sha512-+1DhqZCEu7Vu5APnrqpPwl31D+hXpt1fV0Le9ycCRL1eLVdatdl6KVt4SEVwPxnEpKwgOn2dNX6I9+0F1aO2aA==",
+ "dev": true,
+ "peerDependencies": {
+ "typedoc": "0.24.x || 0.25.x"
+ }
+ },
+ "node_modules/typedoc/node_modules/brace-expansion": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
+ "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0"
+ }
+ },
+ "node_modules/typedoc/node_modules/minimatch": {
+ "version": "9.0.3",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
+ "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=16 || 14 >=14.17"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
"node_modules/typescript": {
"version": "5.2.2",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz",
@@ -5971,6 +6102,18 @@
"integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==",
"dev": true
},
+ "node_modules/vscode-oniguruma": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
+ "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
+ "dev": true
+ },
+ "node_modules/vscode-textmate": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
+ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
+ "dev": true
+ },
"node_modules/which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
diff --git a/package.json b/package.json
index 3165e62..7620e33 100644
--- a/package.json
+++ b/package.json
@@ -4,6 +4,7 @@
"description": "The future of FlowOS.",
"main": "src/index.ts",
"scripts": {
+ "docs": "typedoc src/**",
"test": "ts-standard",
"dev": "vite",
"build": "vite build",
@@ -18,6 +19,9 @@
"@types/uuid": "^9.0.5",
"@types/web": "^0.0.117",
"ts-standard": "^12.0.2",
+ "typedoc": "^0.25.3",
+ "typedoc-material-theme": "^1.0.0",
+ "typedoc-plugin-missing-exports": "^2.1.0",
"typescript": "^5.2.2",
"vite": "^4.4.11",
"vite-plugin-dynamic-import": "^1.5.0",
diff --git a/src/builtin/plugins/apps.ts b/src/builtin/plugins/apps.ts
index 9ad7406..3e2c8bc 100644
--- a/src/builtin/plugins/apps.ts
+++ b/src/builtin/plugins/apps.ts
@@ -12,7 +12,7 @@ export const run = (element: HTMLDivElement): void => {
element.style.alignItems = 'center'
element.style.gap = '5px'
element.style.flex = '1'
- // @ts-expect-error
+
window.addEventListener('app_opened', (e: AppOpenedEvent): void => {
const appIcon = document.createElement('app')
const app = e.detail.app
@@ -28,7 +28,7 @@ export const run = (element: HTMLDivElement): void => {
}
element.appendChild(appIcon)
})
- // @ts-expect-error
+
window.addEventListener('app_closed', (e: AppClosedEvent): void => {
const win = e.detail.win
element.querySelector(`img[data-id="${win.id}"]`)?.parentElement?.remove()
diff --git a/typedoc.config.js b/typedoc.config.js
new file mode 100644
index 0000000..8f922d7
--- /dev/null
+++ b/typedoc.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ name: 'FlowOS',
+ plugin: ['typedoc-material-theme', 'typedoc-plugin-missing-exports'],
+ themeColor: '#1e1e2e'
+}