diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..56b60dd
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+.vscode
+.idea
+
+deno.lock
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..be5af33
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,7 @@
+Copyright 2021 RaptorFX Team, ReMod Software
+
+Permission is hereby granted, cafree of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a979b10
--- /dev/null
+++ b/README.md
@@ -0,0 +1,16 @@
+# RaptorFX - Website
+
+This is the repository housing the main website for RaptorFX, hosted on Deno Deploy and powered by Aleph, a Modern SSR Framework.
+
+## Requirements
+
+- Deno
+- Git
+
+## Contributing
+
+You can contribute by adding UI components for a platform which hasn't been added yet, adding documentation, fixing bugs, etc.
+
+## License
+
+RaptorFX Website is licensed under MIT License, see: LICENSE.
diff --git a/assets/Pixel-UniCode.ttf b/assets/Pixel-UniCode.ttf
new file mode 100644
index 0000000..5b4d3cb
Binary files /dev/null and b/assets/Pixel-UniCode.ttf differ
diff --git a/assets/banner.png b/assets/banner.png
new file mode 100644
index 0000000..9f4275d
Binary files /dev/null and b/assets/banner.png differ
diff --git a/assets/icons/cross.png b/assets/icons/cross.png
new file mode 100644
index 0000000..95520b2
Binary files /dev/null and b/assets/icons/cross.png differ
diff --git a/assets/icons/deno.png b/assets/icons/deno.png
new file mode 100644
index 0000000..5dcceca
Binary files /dev/null and b/assets/icons/deno.png differ
diff --git a/assets/icons/open.png b/assets/icons/open.png
new file mode 100644
index 0000000..88703c0
Binary files /dev/null and b/assets/icons/open.png differ
diff --git a/assets/icons/web.png b/assets/icons/web.png
new file mode 100644
index 0000000..d6fc59d
Binary files /dev/null and b/assets/icons/web.png differ
diff --git a/assets/logo.png b/assets/logo.png
new file mode 100644
index 0000000..13675b8
Binary files /dev/null and b/assets/logo.png differ
diff --git a/assets/pfp/arc.png b/assets/pfp/arc.png
new file mode 100644
index 0000000..d53cc03
Binary files /dev/null and b/assets/pfp/arc.png differ
diff --git a/assets/pfp/lepichu.png b/assets/pfp/lepichu.png
new file mode 100644
index 0000000..4eaa69d
Binary files /dev/null and b/assets/pfp/lepichu.png differ
diff --git a/assets/pfp/ryan.png b/assets/pfp/ryan.png
new file mode 100644
index 0000000..a75d12e
Binary files /dev/null and b/assets/pfp/ryan.png differ
diff --git a/assets/pfp/wobbler.png b/assets/pfp/wobbler.png
new file mode 100644
index 0000000..1b16b86
Binary files /dev/null and b/assets/pfp/wobbler.png differ
diff --git a/assets/social/discord.png b/assets/social/discord.png
new file mode 100644
index 0000000..684a177
Binary files /dev/null and b/assets/social/discord.png differ
diff --git a/assets/social/github.png b/assets/social/github.png
new file mode 100644
index 0000000..d307502
Binary files /dev/null and b/assets/social/github.png differ
diff --git a/assets/social/twitter.png b/assets/social/twitter.png
new file mode 100644
index 0000000..8fc116a
Binary files /dev/null and b/assets/social/twitter.png differ
diff --git a/components/BlogIndex.tsx b/components/BlogIndex.tsx
new file mode 100644
index 0000000..ba88be2
--- /dev/null
+++ b/components/BlogIndex.tsx
@@ -0,0 +1,34 @@
+import { Link } from "aleph/react"
+
+interface IBlogPost {
+ title: string
+ slug: string
+ description?: string
+}
+
+const blogPosts: IBlogPost[] = [
+ {
+ title: "Hello Denosaurs!",
+ slug: "/blog/hello-denosaurs",
+ description: "Welcome to the RaptorFX blog!"
+ },
+ {
+ title: "Roadmap",
+ slug: "/blog/roadmap",
+ description: "Roadmap for RaptorFX!"
+ }
+]
+
+function BlogPost(post: IBlogPost) {
+ const description = post.description ?
{post.description}
: null
+ return
+ {post.title}
+ {description}
+
+}
+
+export default function BlogIndex() {
+ return <>
+ {blogPosts.map((post) => BlogPost(post))}
+ >
+}
\ No newline at end of file
diff --git a/components/Features.tsx b/components/Features.tsx
new file mode 100644
index 0000000..99c21fe
--- /dev/null
+++ b/components/Features.tsx
@@ -0,0 +1,27 @@
+export interface IFeatures {
+ title: string
+ description: string
+ icon: string
+}
+
+export default function Features(features: IFeatures) {
+ return (
+
+ >
+ )
+}
diff --git a/routes/_app.tsx b/routes/_app.tsx
new file mode 100644
index 0000000..8838e1c
--- /dev/null
+++ b/routes/_app.tsx
@@ -0,0 +1,12 @@
+import Header from "../components/Header.tsx"
+import Footer from "../components/Footer.tsx"
+
+export default function App({ children }: { children: React.ReactNode }) {
+ return (
+ <>
+
+ {children}
+
+ >
+ )
+}
diff --git a/routes/_export.ts b/routes/_export.ts
new file mode 100644
index 0000000..bdbb5fc
--- /dev/null
+++ b/routes/_export.ts
@@ -0,0 +1,121 @@
+// Imports router modules for serverless env that doesn't support the dynamic import.
+// This module will be updated automaticlly in develoment mode, do NOT edit it manually.
+// deno-fmt-ignore-file
+// deno-lint-ignore-file
+// @ts-nocheck
+var G=Object.defineProperty;var o=(s,e)=>{for(var X in e)G(s,X,{get:e[X],enumerable:!0})};import*as We from"./_404.tsx";import*as Ee from"./_app.tsx";import*as Te from"./about.tsx";import*as Ie from"./blog.tsx";import*as Pe from"./docs.tsx";import*as $e from"./index.tsx";var g={};o(g,{default:()=>Q});import{Fragment as U,jsx as h,jsxs as V}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as v}from"https://esm.sh/@mdx-js/react@2.1.3";import J from"OpenGraphEmbed";function D(s){let e=Object.assign({h1:"h1",hr:"hr",p:"p"},v(),s.components);return V(U,{children:[h(J,{title:"RaptorFX | Hello Denosaurs!",description:"Welcome to the blog for RaptorFX!"}),`
+`,h(e.h1,{id:"greetings",children:"Greetings!"}),`
+`,h(e.hr,{}),`
+`,h(e.p,{children:"Heya, we have a blog now! We will post updates related to RaptorFX again and take community feedback via here! We will also post some very cool stuff here until RaptorFX releases, so stay tuned!"})]})}function K(s={}){let{wrapper:e}=Object.assign({},v(),s.components);return e?h(e,Object.assign({},s,{children:h(D,s)})):D(s)}var Q=K;var u={};o(u,{default:()=>te});import{Fragment as Y,jsx as d,jsxs as Z}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as k}from"https://esm.sh/@mdx-js/react@2.1.3";import ee from"OpenGraphEmbed";import ne from"BlogIndex";function M(s){let e=Object.assign({h1:"h1",hr:"hr"},k(),s.components);return Z(Y,{children:[d(ee,{title:"RaptorFX | Blog!",description:"Welcome to the blog for RaptorFX!"}),`
+`,d(e.h1,{id:"blog-index",children:"Blog Index"}),`
+`,d(e.hr,{}),`
+`,d(ne,{})]})}function se(s={}){let{wrapper:e}=Object.assign({},k(),s.components);return e?d(e,Object.assign({},s,{children:d(M,s)})):M(s)}var te=se;var N={};o(N,{default:()=>oe});import{Fragment as ae,jsx as m,jsxs as re}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as R}from"https://esm.sh/@mdx-js/react@2.1.3";import ie from"OpenGraphEmbed";function C(s){let e=Object.assign({h1:"h1",hr:"hr",p:"p"},R(),s.components);return re(ae,{children:[m(ie,{title:"RaptorFX | Roadmap!",description:"Welcome to the blog for RaptorFX!"}),`
+`,m(e.h1,{id:"roadmap",children:"Roadmap"}),`
+`,m(e.hr,{}),`
+`,m(e.p,{children:"Gaming"})]})}function le(s={}){let{wrapper:e}=Object.assign({},R(),s.components);return e?m(e,Object.assign({},s,{children:m(C,s)})):C(s)}var oe=le;var w={};o(w,{default:()=>me});import{Fragment as ce,jsx as c,jsxs as O}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as E}from"https://esm.sh/@mdx-js/react@2.1.3";import he from"OpenGraphEmbed";function W(s){let e=Object.assign({h1:"h1",p:"p",pre:"pre",code:"code",span:"span"},E(),s.components);return O(ce,{children:[c(he,{title:"RaptorFX | Getting Started!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,c(e.h1,{id:"get-started",children:"Get Started"}),`
+`,c(e.p,{children:"Unfortunately, you cannot use RaptorFX at this point in time, however, we are working hard to deliver and make it usable by Summer of 2023!"}),`
+`,c(e.pre,{children:O(e.code,{className:"hljs language-shell",children:[c(e.span,{className:"hljs-meta prompt_",children:"$ "}),c(e.span,{className:"bash",children:" deno run -A https://deno.land/x/raptorfx/get-raptor.ts"}),`
+`]})})]})}function de(s={}){let{wrapper:e}=Object.assign({},E(),s.components);return e?c(e,Object.assign({},s,{children:c(W,s)})):W(s)}var me=de;var b={};o(b,{default:()=>ge});import{Fragment as pe,jsx as n,jsxs as r}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as I}from"https://esm.sh/@mdx-js/react@2.1.3";import je from"OpenGraphEmbed";function T(s){let e=Object.assign({h1:"h1",hr:"hr",p:"p",strong:"strong",a:"a",blockquote:"blockquote",h3:"h3",ul:"ul",li:"li",pre:"pre",code:"code",span:"span"},I(),s.components);return r(pe,{children:[n(je,{title:"RaptorFX | Documentation!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,n(e.h1,{id:"about",children:"About"}),`
+`,n(e.hr,{}),`
+`,r(e.p,{children:[n(e.strong,{children:"RaptorFX"})," is a ",n(e.strong,{children:"Deno-based framework"})," for building native apps using ",n(e.a,{href:"https://deno.land",children:"Deno"})," and System WebViews. It is inspired by Electron, NW.js, Tauri, and the many more that came before it."]}),`
+`,r(e.blockquote,{children:[`
+`,r(e.p,{children:["The name is taken a combination of ",n(e.strong,{children:"Raptor + Effects"})," (shortened to ",n(e.strong,{children:'"FX"'}),", coming from ",n(e.strong,{children:"JavaFX"})," as an inspiration)."]}),`
+`]}),`
+`,r(e.p,{children:[n(e.strong,{children:"RaptorFX"}),` is a modern, web-standards compliant effort at building a native app framework.\r
+It is built on top of `,n(e.a,{href:"https://deno.land",children:"Deno"}),`, and uses the System WebView API to render web content in a native window.\r
+Best of all, it allows you to use the `,n(e.strong,{children:"Deno"}),` namespace directly in the DOM and allows you to use\r
+TypeScript directly and natively, transpiling it quickly on the fly using `,n(e.a,{href:"https://swc.rs",children:"swc"}),"."]}),`
+`,n(e.h3,{id:"examples",children:"Examples!"}),`
+`,n(e.p,{children:"A Few examples of what you can do with RaptorFX (using different frameworks!):"}),`
+`,r(e.ul,{children:[`
+`,r(e.li,{children:["Pushing an User Notification (along ",n(e.a,{href:"https://preactjs.com/",children:"Preact"}),"):"]}),`
+`]}),`
+`,n(e.pre,{children:r(e.code,{className:"hljs language-tsx",children:[n(e.span,{className:"hljs-keyword",children:"import"})," { h, render } ",n(e.span,{className:"hljs-keyword",children:"from"})," ",n(e.span,{className:"hljs-string",children:'"https://esm.sh/preact@10.11.3"'}),`\r
+\r
+`,n(e.span,{className:"hljs-keyword",children:"function"})," ",n(e.span,{className:"hljs-title function_",children:"notify"}),"(",n(e.span,{className:"hljs-params"}),`) {\r
+ `,n(e.span,{className:"hljs-title class_",children:"Notification"}),".",n(e.span,{className:"hljs-title function_",children:"requestPermission"}),"().",n(e.span,{className:"hljs-title function_",children:"then"}),"(",r(e.span,{className:"hljs-function",children:["(",n(e.span,{className:"hljs-params",children:"permission"}),") =>"]}),` {\r
+ `,n(e.span,{className:"hljs-keyword",children:"if"})," (permission === ",n(e.span,{className:"hljs-string",children:'"granted"'}),`) {\r
+ `,n(e.span,{className:"hljs-keyword",children:"const"})," myNotif = ",n(e.span,{className:"hljs-keyword",children:"new"})," ",n(e.span,{className:"hljs-title class_",children:"Notification"}),"(",n(e.span,{className:"hljs-string",children:'"Hello World"'}),`)\r
+ `,n(e.span,{className:"hljs-built_in",children:"setTimeout"}),"(",n(e.span,{className:"hljs-function",children:"() =>"})," myNotif.",n(e.span,{className:"hljs-title function_",children:"close"}),"(), ",n(e.span,{className:"hljs-number",children:"2500"}),`)\r
+ }\r
+ })\r
+}\r
+\r
+`,n(e.span,{className:"hljs-keyword",children:"function"})," ",n(e.span,{className:"hljs-title function_",children:"App"}),"(",n(e.span,{className:"hljs-params"}),`) {\r
+ `,n(e.span,{className:"hljs-keyword",children:"return"})," ",r(e.span,{className:"xml",children:[r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"button"})," ",n(e.span,{className:"hljs-attr",children:"onClick"}),"=",n(e.span,{className:"hljs-string",children:"{notify}"}),">"]}),"Click Me!",r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"button"}),">"]})]}),`\r
+}\r
+\r
+`,n(e.span,{className:"hljs-title function_",children:"render"}),"(",n(e.span,{className:"xml",children:r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"App"})," />"]})}),", ",n(e.span,{className:"hljs-variable language_",children:"document"}),".",n(e.span,{className:"hljs-property",children:"body"}),`)
+`]})}),`
+`,r(e.ul,{children:[`
+`,r(e.li,{children:["Writing a File to disk (along ",n(e.a,{href:"https://vuejs.org/",children:"Vue"}),"):"]}),`
+`]}),`
+`,n(e.pre,{children:r(e.code,{className:"hljs language-html",children:[r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"script"}),">"]}),r(e.span,{className:"javascript",children:[`\r
+`,n(e.span,{className:"hljs-keyword",children:"let"})," msg = ",n(e.span,{className:"hljs-string",children:'""'}),`\r
+\r
+`,n(e.span,{className:"hljs-keyword",children:"export"})," ",n(e.span,{className:"hljs-keyword",children:"function"})," ",n(e.span,{className:"hljs-title function_",children:"writeFile"}),"(",n(e.span,{className:"hljs-params",children:"name"}),`) {\r
+ `,n(e.span,{className:"hljs-title class_",children:"Deno"}),".",n(e.span,{className:"hljs-title function_",children:"writeFile"}),"(",n(e.span,{className:"hljs-string",children:'"hello.txt"'}),", ",r(e.span,{className:"hljs-string",children:["`Hello, ",n(e.span,{className:"hljs-subst",children:"${name}"}),"!`"]}),`)\r
+}\r
+`]}),r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"script"}),">"]}),`\r
+\r
+`,r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"template"}),">"]}),`\r
+ `,r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"input"})," ",n(e.span,{className:"hljs-attr",children:"v-model"}),"=",n(e.span,{className:"hljs-string",children:'"msg"'})," ",n(e.span,{className:"hljs-attr",children:"placeholder"}),"=",n(e.span,{className:"hljs-string",children:'"Enter your name!"'})," />"]}),`\r
+ `,r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"button"})," @",n(e.span,{className:"hljs-attr",children:"click"}),"=",n(e.span,{className:"hljs-string",children:'"writeFile(msg)"'}),">"]}),"Click Me!",r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"button"}),">"]}),`\r
+`,r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"template"}),">"]}),`
+`]})}),`
+`,r(e.ul,{children:[`
+`,r(e.li,{children:["Displaying User's Device Information (along ",n(e.a,{href:"https://svelte.dev/",children:"Svelte"}),"):"]}),`
+`]}),`
+`,n(e.pre,{children:r(e.code,{className:"hljs language-xml",children:[r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"script"})," ",n(e.span,{className:"hljs-attr",children:"lang"}),"=",n(e.span,{className:"hljs-string",children:'"ts"'}),">"]}),r(e.span,{className:"javascript",children:[`\r
+ `,n(e.span,{className:"hljs-comment",children:'// @ts-ignore "Deno Environment"'}),`\r
+ `,n(e.span,{className:"hljs-keyword",children:"let"})," info = ",n(e.span,{className:"hljs-title class_",children:"Deno"}),".",n(e.span,{className:"hljs-property",children:"build"}),`\r
+`]}),r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"script"}),">"]}),`\r
+\r
+`,r(e.span,{className:"hljs-tag",children:["<",n(e.span,{className:"hljs-name",children:"p"}),">"]}),`\r
+ The Device is a {info.os}-{info.vendor} device, \r
+ running on {info.arch} architecture with the \r
+ LLVM triplet of {info.target} and using the Linker {info.env}.\r
+`,r(e.span,{className:"hljs-tag",children:["",n(e.span,{className:"hljs-name",children:"p"}),">"]}),`
+`]})})]})}function fe(s={}){let{wrapper:e}=Object.assign({},I(),s.components);return e?n(e,Object.assign({},s,{children:n(T,s)})):T(s)}var ge=fe;var y={};o(y,{default:()=>be});import{Fragment as ue,jsx as a,jsxs as j}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as $}from"https://esm.sh/@mdx-js/react@2.1.3";import Ne from"OpenGraphEmbed";function P(s){let e=Object.assign({h1:"h1",p:"p",a:"a",pre:"pre",code:"code",span:"span"},$(),s.components);return j(ue,{children:[a(Ne,{title:"RaptorFX | Integration - File System!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,a(e.h1,{id:"file-system",children:"File System"}),`
+`,j(e.p,{children:["The File System in a RaptorFX application can be managed by two ways; the first one is by using the ",a(e.a,{href:"https://wicg.github.io/file-system-access/",children:"File System Access API"})," or via how ",a(e.a,{href:"https://deno.land/manual@v1.12.2/examples/read_write_files",children:"Deno handles files"}),"."]}),`
+`,a(e.pre,{children:j(e.code,{className:"hljs language-js",children:[a(e.span,{className:"hljs-comment",children:"// Using Deno API"}),`\r
+`,a(e.span,{className:"hljs-keyword",children:"await"})," ",a(e.span,{className:"hljs-title class_",children:"Deno"}),".",a(e.span,{className:"hljs-property",children:"permissions"}),".",a(e.span,{className:"hljs-title function_",children:"request"}),"({ ",a(e.span,{className:"hljs-attr",children:"name"}),": ",a(e.span,{className:"hljs-string",children:'"write"'})," }).",a(e.span,{className:"hljs-title function_",children:"then"}),"(",j(e.span,{className:"hljs-function",children:[a(e.span,{className:"hljs-params",children:"x"})," =>"]}),` {\r
+ `,a(e.span,{className:"hljs-keyword",children:"if"}),"(x.",a(e.span,{className:"hljs-property",children:"state"})," === ",a(e.span,{className:"hljs-string",children:'"granted"'}),") ",a(e.span,{className:"hljs-title class_",children:"Deno"}),".",a(e.span,{className:"hljs-title function_",children:"writeTextFileSync"}),"(",a(e.span,{className:"hljs-string",children:'"hello.txt"'}),", ",a(e.span,{className:"hljs-string",children:'"Hello world!"'}),`)\r
+})\r
+\r
+`,a(e.span,{className:"hljs-comment",children:"// Using File System Access API"}),`\r
+`,a(e.span,{className:"hljs-keyword",children:"const"})," handle = ",a(e.span,{className:"hljs-keyword",children:"await"})," ",a(e.span,{className:"hljs-variable language_",children:"window"}),".",a(e.span,{className:"hljs-title function_",children:"showSaveFilePicker"}),`()\r
+`,a(e.span,{className:"hljs-keyword",children:"const"})," file = ",a(e.span,{className:"hljs-keyword",children:"await"})," handle.",a(e.span,{className:"hljs-title function_",children:"createWritable"}),`()\r
+`,a(e.span,{className:"hljs-keyword",children:"await"})," file.",a(e.span,{className:"hljs-title function_",children:"write"}),"(",a(e.span,{className:"hljs-string",children:'"Hello world!"'}),`)\r
+`,a(e.span,{className:"hljs-keyword",children:"await"})," file.",a(e.span,{className:"hljs-title function_",children:"close"}),`()
+`]})})]})}function we(s={}){let{wrapper:e}=Object.assign({},$(),s.components);return e?a(e,Object.assign({},s,{children:a(P,s)})):P(s)}var be=we;var _={};o(_,{default:()=>Fe});import{Fragment as ye,jsx as p,jsxs as A}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as S}from"https://esm.sh/@mdx-js/react@2.1.3";import _e from"OpenGraphEmbed";function L(s){let e=Object.assign({h1:"h1",p:"p",strong:"strong"},S(),s.components);return A(ye,{children:[p(_e,{title:"RaptorFX | Integration!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,p(e.h1,{id:"integration",children:"Integration"}),`
+`,A(e.p,{children:["This section of document details how to leverage existing Web APIs and how ",p(e.strong,{children:"RaptorFX"})," adapts them to function better natively on each platform."]})]})}function xe(s={}){let{wrapper:e}=Object.assign({},S(),s.components);return e?p(e,Object.assign({},s,{children:p(L,s)})):L(s)}var Fe=xe;var x={};o(x,{default:()=>Me});import{Fragment as Xe,jsx as i,jsxs as f}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as q}from"https://esm.sh/@mdx-js/react@2.1.3";import De from"OpenGraphEmbed";function H(s){let e=Object.assign({h1:"h1",p:"p",a:"a",pre:"pre",code:"code",span:"span"},q(),s.components);return f(Xe,{children:[i(De,{title:"RaptorFX | Integration - Notifications!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,i(e.h1,{id:"notifications",children:"Notifications"}),`
+`,f(e.p,{children:["In RaptorFX, you can send notifications to the user. This can be achieved quite easily by using the ",i(e.a,{href:"https://notifications.spec.whatwg.org/#api",children:"Web Notifications API"}),"."]}),`
+`,i(e.pre,{children:f(e.code,{className:"hljs language-js",children:[i(e.span,{className:"hljs-comment",children:"// Example Code on how to send a Notification!"}),`\r
+`,i(e.span,{className:"hljs-title class_",children:"Notification"}),".",i(e.span,{className:"hljs-title function_",children:"requestPermission"}),"().",i(e.span,{className:"hljs-title function_",children:"then"}),"(",f(e.span,{className:"hljs-function",children:["(",i(e.span,{className:"hljs-params",children:"permission"}),") =>"]}),` {\r
+ `,i(e.span,{className:"hljs-keyword",children:"if"})," (permission === ",i(e.span,{className:"hljs-string",children:'"granted"'}),`) {\r
+ `,i(e.span,{className:"hljs-keyword",children:"const"})," notification = ",i(e.span,{className:"hljs-keyword",children:"new"})," ",i(e.span,{className:"hljs-title class_",children:"Notification"}),"(",i(e.span,{className:"hljs-string",children:'"Hello World!"'}),`, {\r
+ `,i(e.span,{className:"hljs-attr",children:"body"}),": ",i(e.span,{className:"hljs-string",children:'"This is a notification!"'}),`\r
+ })\r
+\r
+ `,i(e.span,{className:"hljs-built_in",children:"setTimeout"}),"(",i(e.span,{className:"hljs-function",children:"() =>"}),` {\r
+ notification.`,i(e.span,{className:"hljs-title function_",children:"close"}),`()\r
+ }, `,i(e.span,{className:"hljs-number",children:"5000"}),`);\r
+ }\r
+})
+`]})})]})}function ve(s={}){let{wrapper:e}=Object.assign({},q(),s.components);return e?i(e,Object.assign({},s,{children:i(H,s)})):H(s)}var Me=ve;var F={};o(F,{default:()=>Oe});import{Fragment as ke,jsx as t,jsxs as l}from"https://esm.sh/react@18.2.0/jsx-runtime";import{useMDXComponents as z}from"https://esm.sh/@mdx-js/react@2.1.3";import Ce from"OpenGraphEmbed";function B(s){let e=Object.assign({h1:"h1",p:"p",code:"code",h2:"h2",table:"table",thead:"thead",tr:"tr",th:"th",tbody:"tbody",td:"td"},z(),s.components);return l(ke,{children:[t(Ce,{title:"RaptorFX | Integration - Window!",description:"Welcome to the documentation for RaptorFX!"}),`
+`,t(e.h1,{id:"window",children:"Window"}),`
+`,l(e.p,{children:["Windows in RaptorFX are managed by the already existing ",t(e.code,{children:"window"})," object in JavaScript. That being said, here is a short list of methods and properties which can help you."]}),`
+`,t(e.h2,{id:"methods",children:"Methods"}),`
+`,t("br",{}),`
+`,l(e.table,{children:[t(e.thead,{children:l(e.tr,{children:[t(e.th,{children:"Methods"}),t(e.th,{children:"Description"})]})}),l(e.tbody,{children:[l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.close()"})}),t(e.td,{children:"Closes the window."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.focus()"})}),t(e.td,{children:"Brings the window to foreground."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.blur()"})}),t(e.td,{children:"Minimizes the window."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.resizeTo(width, height)"})}),t(e.td,{children:"Resizes the window to the specified width and height."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.resizeBy(width, height)"})}),t(e.td,{children:"Resizes the window by the specified width and height."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.moveTo(x, y)"})}),t(e.td,{children:"Moves the window to the specified x and y coordinates."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.moveBy(x, y)"})}),t(e.td,{children:"Moves the window by the specified x and y coordinates."})]})]})]}),`
+`,t("br",{}),`
+`,t(e.h2,{id:"properties",children:"Properties"}),`
+`,t("br",{}),`
+`,l(e.table,{children:[t(e.thead,{children:l(e.tr,{children:[t(e.th,{children:"Properties"}),t(e.th,{children:"Description"})]})}),l(e.tbody,{children:[l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.innerHeight"})}),t(e.td,{children:"The height of the window."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.innerWidth"})}),t(e.td,{children:"The width of the window."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.outerHeight"})}),t(e.td,{children:"The height of the display."})]}),l(e.tr,{children:[t(e.td,{children:t(e.code,{children:"window.outerWidth"})}),t(e.td,{children:"The width of the display."})]})]})]}),`
+`,t("br",{})]})}function Re(s={}){let{wrapper:e}=Object.assign({},z(),s.components);return e?t(e,Object.assign({},s,{children:t(B,s)})):B(s)}var Oe=Re;var fn={"/_404":We,"/_app":Ee,"/about":Te,"/blog":Ie,"/docs":Pe,"/":$e,"/blog/hello-denosaurs":g,"/blog/index":u,"/blog/roadmap":N,"/docs/get-started":w,"/docs/index":b,"/docs/integration/filesystem":y,"/docs/integration/index":_,"/docs/integration/notifications":x,"/docs/integration/window":F,depGraph:{"modules":[{"specifier":"./routes\\blog\\hello-denosaurs.mdx"},{"specifier":"./routes\\blog\\index.mdx"},{"specifier":"./routes\\blog\\roadmap.mdx"},{"specifier":"./routes\\docs\\get-started.mdx"},{"specifier":"./routes\\docs\\index.mdx"},{"specifier":"./routes\\docs\\integration\\filesystem.mdx"},{"specifier":"./routes\\docs\\integration\\index.mdx"},{"specifier":"./routes\\docs\\integration\\notifications.mdx"},{"specifier":"./routes\\docs\\integration\\window.mdx"}]}};export{fn as default};
diff --git a/routes/about.tsx b/routes/about.tsx
new file mode 100644
index 0000000..5c97314
--- /dev/null
+++ b/routes/about.tsx
@@ -0,0 +1,97 @@
+import TeamMember, { ITeamMember } from "../components/TeamMember.tsx"
+import Embed from "../components/OpenGraphEmbed.tsx"
+
+const team: ITeamMember[] = [
+ {
+ name: "LePichu",
+ role: ["Lead Developer", "Mobile Team", "Tools Team"],
+ description:
+ "The founder of RaptorFX and is the lead developer of the project; long time programmer and web developer, actively inspired by names like Ryan Carniato and Evan You.",
+ image: "lepichu"
+ },
+ {
+ name: "Arc'blroth",
+ role: ["Lead Developer", "Desktop Team", "Tools Team"],
+ description:
+ "Rust and Deno Evangelist, the man behind the 'core' internals and leading the technical side of the project. Also the creator of JS Engine Neutral Deno, 'deno_minus_v8'.",
+ image: "arc"
+ },
+ {
+ name: "RyanCaoDev",
+ role: ["Design Team", "Mobile Team"],
+ description:
+ "Ryan is a contributor and designer on the sub-project 'Amber' for the Cupertino Design Set, he is also a member of the mobile team.",
+ image: "ryan"
+ },
+ {
+ name: "suyashtnt",
+ role: ["Design Team", "Mobile Team"],
+ description:
+ "Rust enjoyer, and a Svelte Developer who likes Tauri and similar tech, now working on our Apple Platform Support and Amber Components.",
+ image: "wobbler"
+ }
+]
+
+export default function About() {
+ return (
+ <>
+
+
+
About Us!
+
+
+ RaptorFX originally started back in June of 2021 as a
+ project named WebSmith, which at the time, was closer
+ to Electron but Deno as host instead of what it is today.
+
+
+ Starting in Early October of the same year, however, things
+ started to change, the project got rebranded to Brontodroid
+ and focused solely on Android. However, this was bound to
+ change and I decided to go with the multiple-platform
+ approach and rebranded to RaptorFX and decided to
+ target all 5 major operating systems (Windows, Mac, Linux,
+ Android, and iOS).
+
+ I was alone, and well, couldn't slowly handle any
+ approaches to sanely get Deno to function in the DOM.
+ Fast-forward to about late Summer of 2022, the now co-lead
+ of the team, Arc chimed in and made
+ deno_minus_v8 to allow for Deno to function in the
+ DOM. This was a huge step forward and allowed for the
+ project to move forward and be able to be worked on again
+ properly.
+
+
+ That is our little backstory, it is 22/12/2022 while
+ I write this and the project has never been more alive and
+ worked on before. We are currently working on the first
+ release of RaptorFX, which is expected to be released
+ in Summer of 2023.
+
+
+ ~ LePichu, Founder of RaptorFX
+
+
+
Meet the Team!
+
+
+ {team.map((member) => {
+ return
+ })}
+
+
+
Licenses and Credits
+
+ - RaptorFX is licensed under the MIT License.
+ - Footer Social Media Icons and Frontpage Features Icons are made by Pixelstories.
+ - RaptorFX Icon and Banner was made by ArathainFarqoe and FelipeBdC.
+ - Pixel Unicode Font was made by IviLand.
+
+
+ >
+ )
+}
diff --git a/routes/blog.tsx b/routes/blog.tsx
new file mode 100644
index 0000000..443b292
--- /dev/null
+++ b/routes/blog.tsx
@@ -0,0 +1,11 @@
+import { PropsWithChildren } from "react"
+import { MDXProvider } from "@mdx-js/react"
+import { components } from "~/components/Heading.tsx"
+
+export default function Blog(props: PropsWithChildren) {
+ return
+
+ {props.children}
+
+
+}
\ No newline at end of file
diff --git a/routes/blog/hello-denosaurs.mdx b/routes/blog/hello-denosaurs.mdx
new file mode 100644
index 0000000..db1bb5d
--- /dev/null
+++ b/routes/blog/hello-denosaurs.mdx
@@ -0,0 +1,15 @@
+---
+title: "Hello Denosaurs"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# Greetings!
+---
+Heya, we have a blog now! We will post updates related to RaptorFX again and take community feedback via here! We will also post some very cool stuff here until RaptorFX releases, so stay tuned!
diff --git a/routes/blog/index.mdx b/routes/blog/index.mdx
new file mode 100644
index 0000000..866f354
--- /dev/null
+++ b/routes/blog/index.mdx
@@ -0,0 +1,16 @@
+---
+title: "Blog Index"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+import BlogIndex from "BlogIndex"
+
+
+
+# Blog Index
+---
+
\ No newline at end of file
diff --git a/routes/blog/roadmap.mdx b/routes/blog/roadmap.mdx
new file mode 100644
index 0000000..d2ba4db
--- /dev/null
+++ b/routes/blog/roadmap.mdx
@@ -0,0 +1,15 @@
+---
+title: "Roadmap"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# Roadmap
+---
+Gaming
\ No newline at end of file
diff --git a/routes/docs.tsx b/routes/docs.tsx
new file mode 100644
index 0000000..2b8c228
--- /dev/null
+++ b/routes/docs.tsx
@@ -0,0 +1,83 @@
+import { PropsWithChildren } from "react"
+import { MDXProvider } from "@mdx-js/react"
+import { NavLink } from "aleph/react"
+import { components } from "~/components/Heading.tsx"
+
+interface ChildNodes {
+ name: string
+ path: string
+}
+
+const nav: Record = {
+ "About": "/docs/",
+ "Get Started": "/docs/get-started",
+ "Integration": [
+ {
+ name: "Window",
+ path: "/docs/integration/window"
+ },
+ {
+ name: "Notifications",
+ path: "/docs/integration/notifications"
+ },
+ {
+ name: "File System",
+ path: "/docs/integration/filesystem"
+ }
+ ]
+}
+
+export default function Docs(props: PropsWithChildren) {
+ return
+}
diff --git a/routes/docs/get-started.mdx b/routes/docs/get-started.mdx
new file mode 100644
index 0000000..4c95f8b
--- /dev/null
+++ b/routes/docs/get-started.mdx
@@ -0,0 +1,19 @@
+---
+title: "Get Started - Docs"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# Get Started
+
+Unfortunately, you cannot use RaptorFX at this point in time, however, we are working hard to deliver and make it usable by Summer of 2023!
+
+```shell
+$ deno run -A https://deno.land/x/raptorfx/get-raptor.ts
+```
diff --git a/routes/docs/index.mdx b/routes/docs/index.mdx
new file mode 100644
index 0000000..1724bbf
--- /dev/null
+++ b/routes/docs/index.mdx
@@ -0,0 +1,79 @@
+---
+title: "About - Docs"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# About
+
+---
+
+**RaptorFX** is a **Deno-based framework** for building native apps using [Deno] and System WebViews. It is inspired by Electron, NW.js, Tauri, and the many more that came before it.
+
+> The name is taken a combination of **Raptor + Effects** (shortened to **"FX"**, coming from **JavaFX** as an inspiration).
+
+**RaptorFX** is a modern, web-standards compliant effort at building a native app framework.
+It is built on top of [Deno], and uses the System WebView API to render web content in a native window.
+Best of all, it allows you to use the **Deno** namespace directly in the DOM and allows you to use
+TypeScript directly and natively, transpiling it quickly on the fly using [swc].
+
+[deno]: https://deno.land
+[swc]: https://swc.rs
+
+### Examples!
+A Few examples of what you can do with RaptorFX (using different frameworks!):
+
+- Pushing an User Notification (along [Preact](https://preactjs.com/)):
+```tsx
+import { h, render } from "https://esm.sh/preact@10.11.3"
+
+function notify() {
+ Notification.requestPermission().then((permission) => {
+ if (permission === "granted") {
+ const myNotif = new Notification("Hello World")
+ setTimeout(() => myNotif.close(), 2500)
+ }
+ })
+}
+
+function App() {
+ return
+}
+
+render(, document.body)
+```
+- Writing a File to disk (along [Vue](https://vuejs.org/)):
+```html
+
+
+
+
+
+
+```
+
+- Displaying User's Device Information (along [Svelte](https://svelte.dev/)):
+```xml
+
+
+
+ The Device is a {info.os}-{info.vendor} device,
+ running on {info.arch} architecture with the
+ LLVM triplet of {info.target} and using the Linker {info.env}.
+
+```
\ No newline at end of file
diff --git a/routes/docs/integration/filesystem.mdx b/routes/docs/integration/filesystem.mdx
new file mode 100644
index 0000000..df3134b
--- /dev/null
+++ b/routes/docs/integration/filesystem.mdx
@@ -0,0 +1,27 @@
+---
+title: "Integration - File System"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# File System
+The File System in a RaptorFX application can be managed by two ways; the first one is by using the [File System Access API](https://wicg.github.io/file-system-access/) or via how [Deno handles files](https://deno.land/manual@v1.12.2/examples/read_write_files).
+
+```js
+// Using Deno API
+await Deno.permissions.request({ name: "write" }).then(x => {
+ if(x.state === "granted") Deno.writeTextFileSync("hello.txt", "Hello world!")
+})
+
+// Using File System Access API
+const handle = await window.showSaveFilePicker()
+const file = await handle.createWritable()
+await file.write("Hello world!")
+await file.close()
+```
\ No newline at end of file
diff --git a/routes/docs/integration/index.mdx b/routes/docs/integration/index.mdx
new file mode 100644
index 0000000..c541ac6
--- /dev/null
+++ b/routes/docs/integration/index.mdx
@@ -0,0 +1,15 @@
+---
+title: "Integration"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+
+# Integration
+This section of document details how to leverage existing Web APIs and how **RaptorFX** adapts them to function better natively on each platform.
\ No newline at end of file
diff --git a/routes/docs/integration/notifications.mdx b/routes/docs/integration/notifications.mdx
new file mode 100644
index 0000000..14ba51f
--- /dev/null
+++ b/routes/docs/integration/notifications.mdx
@@ -0,0 +1,29 @@
+---
+title: "Integration - Notifications"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# Notifications
+In RaptorFX, you can send notifications to the user. This can be achieved quite easily by using the [Web Notifications API](https://notifications.spec.whatwg.org/#api).
+
+```js
+// Example Code on how to send a Notification!
+Notification.requestPermission().then((permission) => {
+ if (permission === "granted") {
+ const notification = new Notification("Hello World!", {
+ body: "This is a notification!"
+ })
+
+ setTimeout(() => {
+ notification.close()
+ }, 5000);
+ }
+})
+```
\ No newline at end of file
diff --git a/routes/docs/integration/window.mdx b/routes/docs/integration/window.mdx
new file mode 100644
index 0000000..3e63628
--- /dev/null
+++ b/routes/docs/integration/window.mdx
@@ -0,0 +1,37 @@
+---
+title: "Integration - Window"
+author: LePichu
+---
+
+import Embed from "OpenGraphEmbed"
+
+
+
+# Window
+Windows in RaptorFX are managed by the already existing `window` object in JavaScript. That being said, here is a short list of methods and properties which can help you.
+
+## Methods
+
+|Methods |Description |
+|--------------------|---------------------------|
+|`window.close()` | Closes the window. |
+|`window.focus()` | Brings the window to foreground.|
+|`window.blur()` | Minimizes the window. |
+|`window.resizeTo(width, height)`| Resizes the window to the specified width and height.|
+|`window.resizeBy(width, height)`| Resizes the window by the specified width and height.|
+|`window.moveTo(x, y)`| Moves the window to the specified x and y coordinates.|
+|`window.moveBy(x, y)`| Moves the window by the specified x and y coordinates.|
+
+
+## Properties
+
+|Properties |Description |
+|--------------------|---------------------------|
+|`window.innerHeight`| The height of the window. |
+|`window.innerWidth` | The width of the window. |
+|`window.outerHeight`| The height of the display.|
+|`window.outerWidth` | The width of the display. |
+
\ No newline at end of file
diff --git a/routes/index.tsx b/routes/index.tsx
new file mode 100644
index 0000000..3e97795
--- /dev/null
+++ b/routes/index.tsx
@@ -0,0 +1,48 @@
+import Hero from "~/components/Hero.tsx"
+import Feature, { IFeatures } from "~/components/Features.tsx"
+import Embed from "~/components/OpenGraphEmbed.tsx"
+import Standout from "~/components/StandoutHeading.tsx"
+
+const features: IFeatures[] = [
+ {
+ title: "Web Standards",
+ description:
+ "Built on Web Standards and Technologies, RaptorFX can use many modern APIs like fetch and Web Push.",
+ icon: "web"
+ },
+ {
+ title: "Cross-Platform",
+ description:
+ "RaptorFX is built to run on all 5 major operating systems; Windows, Mac, Linux, Android, and iOS.",
+ icon: "cross"
+ },
+ {
+ title: "Open Source",
+ description:
+ "Built upon and as open source, RaptorFX is licensed under the MIT License, meaning you can use it for free!",
+ icon: "open"
+ },
+ {
+ title: "Deno",
+ description:
+ "Built on top of Deno, RaptorFX is built to be fast, secure, and reliable.",
+ icon: "deno"
+ }
+]
+
+export default function Index() {
+ return (
+ <>
+
+
+
+
+