diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml new file mode 100644 index 000000000..8d292ebcc --- /dev/null +++ b/.github/workflows/deploy-docs.yml @@ -0,0 +1,44 @@ +name: Deploy docs to GitHub Pages + +on: + push: + branches: + - main + +jobs: + build: + name: Build Docusaurus + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + run: bun install + - name: Build website + run: cd docs && bun run build + + - name: Upload Build Artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/build + + deploy: + name: Deploy to GitHub Pages + needs: build + + permissions: + pages: write + id-token: write + + environment: + name: github-pages + url: ${{ steps.deployment.outputs.page_url }} + + runs-on: ubuntu-latest + steps: + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/test-deploy-docs.yml b/.github/workflows/test-deploy-docs.yml new file mode 100644 index 000000000..1971abd73 --- /dev/null +++ b/.github/workflows/test-deploy-docs.yml @@ -0,0 +1,21 @@ +name: Test deployment + +on: + pull_request: + branches: + - main + +jobs: + test-deploy: + name: Test deployment + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: oven-sh/setup-bun@v1 + + - name: Install dependencies + run: bun install + - name: Build website + run: cd docs && bun run build diff --git a/README.md b/README.md index 6b21436d3..b0c3d1192 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ - - - Nitro Modules + + + Nitro Modules @@ -16,16 +16,11 @@ It consists of two parts: ## Installation -1. Install [react-native-nitro-modules](https://npmjs.org/react-native-nitro-modules) from npm: - ```sh - npm i react-native-nitro-modules - cd ios && pod install - ``` -2. If you don't already have one, add an empty Swift file to your iOS project (including a generated bridging header). - 1. Open your `.xcworkspace` in Xcode - 2. Right-click on your app's project on the left - 3. **New File** > **Swift File** > Call it **EmptyFile.swift** > **Create** - 4. When promted to create a Bridging Header, press **Create Bridging Header** +Install [react-native-nitro-modules](https://npmjs.org/react-native-nitro-modules) from npm: +```sh +npm i react-native-nitro-modules +cd ios && pod install +``` ## Documentation diff --git a/bun.lockb b/bun.lockb index 70fd7c36c..3f019eed1 100755 Binary files a/bun.lockb and b/bun.lockb differ diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..b2d6de306 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,20 @@ +# Dependencies +/node_modules + +# Production +/build + +# Generated files +.docusaurus +.cache-loader + +# Misc +.DS_Store +.env.local +.env.development.local +.env.test.local +.env.production.local + +npm-debug.log* +yarn-debug.log* +yarn-error.log* diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..0c6c2c27b --- /dev/null +++ b/docs/README.md @@ -0,0 +1,41 @@ +# Website + +This website is built using [Docusaurus](https://docusaurus.io/), a modern static website generator. + +### Installation + +``` +$ yarn +``` + +### Local Development + +``` +$ yarn start +``` + +This command starts a local development server and opens up a browser window. Most changes are reflected live without having to restart the server. + +### Build + +``` +$ yarn build +``` + +This command generates static content into the `build` directory and can be served using any static contents hosting service. + +### Deployment + +Using SSH: + +``` +$ USE_SSH=true yarn deploy +``` + +Not using SSH: + +``` +$ GIT_USER= yarn deploy +``` + +If you are using GitHub pages for hosting, this command is a convenient way to build the website and push to the `gh-pages` branch. diff --git a/docs/babel.config.js b/docs/babel.config.js new file mode 100644 index 000000000..e00595dae --- /dev/null +++ b/docs/babel.config.js @@ -0,0 +1,3 @@ +module.exports = { + presets: [require.resolve('@docusaurus/core/lib/babel/preset')], +}; diff --git a/docs/docs/intro.md b/docs/docs/intro.md new file mode 100644 index 000000000..45e8604c8 --- /dev/null +++ b/docs/docs/intro.md @@ -0,0 +1,47 @@ +--- +sidebar_position: 1 +--- + +# Tutorial Intro + +Let's discover **Docusaurus in less than 5 minutes**. + +## Getting Started + +Get started by **creating a new site**. + +Or **try Docusaurus immediately** with **[docusaurus.new](https://docusaurus.new)**. + +### What you'll need + +- [Node.js](https://nodejs.org/en/download/) version 18.0 or above: + - When installing Node.js, you are recommended to check all checkboxes related to dependencies. + +## Generate a new site + +Generate a new Docusaurus site using the **classic template**. + +The classic template will automatically be added to your project after you run the command: + +```bash +npm init docusaurus@latest my-website classic +``` + +You can type this command into Command Prompt, Powershell, Terminal, or any other integrated terminal of your code editor. + +The command also installs all necessary dependencies you need to run Docusaurus. + +## Start your site + +Run the development server: + +```bash +cd my-website +npm run start +``` + +The `cd` command changes the directory you're working with. In order to work with your newly created Docusaurus site, you'll need to navigate the terminal there. + +The `npm run start` command builds your website locally and serves it through a development server, ready for you to view at http://localhost:3000/. + +Open `docs/intro.md` (this page) and edit some lines: the site **reloads automatically** and displays your changes. diff --git a/docs/docs/tutorial-basics/_category_.json b/docs/docs/tutorial-basics/_category_.json new file mode 100644 index 000000000..2e6db55b1 --- /dev/null +++ b/docs/docs/tutorial-basics/_category_.json @@ -0,0 +1,8 @@ +{ + "label": "Tutorial - Basics", + "position": 2, + "link": { + "type": "generated-index", + "description": "5 minutes to learn the most important Docusaurus concepts." + } +} diff --git a/docs/docs/tutorial-basics/congratulations.md b/docs/docs/tutorial-basics/congratulations.md new file mode 100644 index 000000000..d4156add8 --- /dev/null +++ b/docs/docs/tutorial-basics/congratulations.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 6 +--- + +# Congratulations! + +You have just learned the **basics of Docusaurus** and made some changes to the **initial template**. + +Docusaurus has **much more to offer**! + +Have **5 more minutes**? Take a look at **[versioning](../tutorial-extras/manage-docs-versions.md)** and **[i18n](../tutorial-extras/translate-your-site.md)**. + +Anything **unclear** or **buggy** in this tutorial? [Please report it!](https://github.com/facebook/docusaurus/discussions/4610) + +```cpp +// diff-remove +void hello() { + // diff-add + return 55 +} +``` + +## What's next? + +- Read the [official documentation](https://docusaurus.io/) +- Modify your site configuration with [`docusaurus.config.js`](https://docusaurus.io/docs/api/docusaurus-config) +- Add navbar and footer items with [`themeConfig`](https://docusaurus.io/docs/api/themes/configuration) +- Add a custom [Design and Layout](https://docusaurus.io/docs/styling-layout) +- Add a [search bar](https://docusaurus.io/docs/search) +- Find inspirations in the [Docusaurus showcase](https://docusaurus.io/showcase) +- Get involved in the [Docusaurus Community](https://docusaurus.io/community/support) diff --git a/docs/docs/tutorial-basics/create-a-blog-post.md b/docs/docs/tutorial-basics/create-a-blog-post.md new file mode 100644 index 000000000..550ae17ee --- /dev/null +++ b/docs/docs/tutorial-basics/create-a-blog-post.md @@ -0,0 +1,34 @@ +--- +sidebar_position: 3 +--- + +# Create a Blog Post + +Docusaurus creates a **page for each blog post**, but also a **blog index page**, a **tag system**, an **RSS** feed... + +## Create your first Post + +Create a file at `blog/2021-02-28-greetings.md`: + +```md title="blog/2021-02-28-greetings.md" +--- +slug: greetings +title: Greetings! +authors: + - name: Joel Marcey + title: Co-creator of Docusaurus 1 + url: https://github.com/JoelMarcey + image_url: https://github.com/JoelMarcey.png + - name: Sébastien Lorber + title: Docusaurus maintainer + url: https://sebastienlorber.com + image_url: https://github.com/slorber.png +tags: [greetings] +--- + +Congratulations, you have made your first post! + +Feel free to play around and edit this post as much as you like. +``` + +A new blog post is now available at [http://localhost:3000/blog/greetings](http://localhost:3000/blog/greetings). diff --git a/docs/docs/tutorial-basics/create-a-document.md b/docs/docs/tutorial-basics/create-a-document.md new file mode 100644 index 000000000..c22fe2944 --- /dev/null +++ b/docs/docs/tutorial-basics/create-a-document.md @@ -0,0 +1,57 @@ +--- +sidebar_position: 2 +--- + +# Create a Document + +Documents are **groups of pages** connected through: + +- a **sidebar** +- **previous/next navigation** +- **versioning** + +## Create your first Doc + +Create a Markdown file at `docs/hello.md`: + +```md title="docs/hello.md" +# Hello + +This is my **first Docusaurus document**! +``` + +A new document is now available at [http://localhost:3000/docs/hello](http://localhost:3000/docs/hello). + +## Configure the Sidebar + +Docusaurus automatically **creates a sidebar** from the `docs` folder. + +Add metadata to customize the sidebar label and position: + +```md title="docs/hello.md" {1-4} +--- +sidebar_label: 'Hi!' +sidebar_position: 3 +--- + +# Hello + +This is my **first Docusaurus document**! +``` + +It is also possible to create your sidebar explicitly in `sidebars.js`: + +```js title="sidebars.js" +export default { + tutorialSidebar: [ + 'intro', + // highlight-next-line + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], +}; +``` diff --git a/docs/docs/tutorial-basics/create-a-page.md b/docs/docs/tutorial-basics/create-a-page.md new file mode 100644 index 000000000..20e2ac300 --- /dev/null +++ b/docs/docs/tutorial-basics/create-a-page.md @@ -0,0 +1,43 @@ +--- +sidebar_position: 1 +--- + +# Create a Page + +Add **Markdown or React** files to `src/pages` to create a **standalone page**: + +- `src/pages/index.js` → `localhost:3000/` +- `src/pages/foo.md` → `localhost:3000/foo` +- `src/pages/foo/bar.js` → `localhost:3000/foo/bar` + +## Create your first React Page + +Create a file at `src/pages/my-react-page.js`: + +```jsx title="src/pages/my-react-page.js" +import React from 'react'; +import Layout from '@theme/Layout'; + +export default function MyReactPage() { + return ( + +

My React page

+

This is a React page

+
+ ); +} +``` + +A new page is now available at [http://localhost:3000/my-react-page](http://localhost:3000/my-react-page). + +## Create your first Markdown Page + +Create a file at `src/pages/my-markdown-page.md`: + +```mdx title="src/pages/my-markdown-page.md" +# My Markdown page + +This is a Markdown page +``` + +A new page is now available at [http://localhost:3000/my-markdown-page](http://localhost:3000/my-markdown-page). diff --git a/docs/docs/tutorial-basics/deploy-your-site.md b/docs/docs/tutorial-basics/deploy-your-site.md new file mode 100644 index 000000000..1c50ee063 --- /dev/null +++ b/docs/docs/tutorial-basics/deploy-your-site.md @@ -0,0 +1,31 @@ +--- +sidebar_position: 5 +--- + +# Deploy your site + +Docusaurus is a **static-site-generator** (also called **[Jamstack](https://jamstack.org/)**). + +It builds your site as simple **static HTML, JavaScript and CSS files**. + +## Build your site + +Build your site **for production**: + +```bash +npm run build +``` + +The static files are generated in the `build` folder. + +## Deploy your site + +Test your production build locally: + +```bash +npm run serve +``` + +The `build` folder is now served at [http://localhost:3000/](http://localhost:3000/). + +You can now deploy the `build` folder **almost anywhere** easily, **for free** or very small cost (read the **[Deployment Guide](https://docusaurus.io/docs/deployment)**). diff --git a/docs/docs/tutorial-basics/markdown-features.mdx b/docs/docs/tutorial-basics/markdown-features.mdx new file mode 100644 index 000000000..255f80e7e --- /dev/null +++ b/docs/docs/tutorial-basics/markdown-features.mdx @@ -0,0 +1,150 @@ +--- +sidebar_position: 4 +--- + +# Markdown Features + +Docusaurus supports **[Markdown](https://daringfireball.net/projects/markdown/syntax)** and a few **additional features**. + +## Front Matter + +Markdown documents have metadata at the top called [Front Matter](https://jekyllrb.com/docs/front-matter/): + +```text title="my-doc.md" +// highlight-start +--- +id: my-doc-id +title: My document title +description: My document description +slug: /my-custom-url +--- +// highlight-end + +## Markdown heading + +Markdown text with [links](./hello.md) +``` + +## Links + +Regular Markdown links are supported, using url paths or relative file paths. + +```md +Let's see how to [Create a page](/create-a-page). +``` + +```md +Let's see how to [Create a page](./create-a-page.md). +``` + +**Result:** Let's see how to [Create a page](./create-a-page.md). + +## Images + +Regular Markdown images are supported. + +You can use absolute paths to reference images in the static directory (`static/img/docusaurus.png`): + +```md +![Docusaurus logo](/img/docusaurus.png) +``` + +You can reference images relative to the current file as well. This is particularly useful to colocate images close to the Markdown files using them: + +```md +![Docusaurus logo](./img/docusaurus.png) +``` + +## Code Blocks + +Markdown code blocks are supported with Syntax highlighting. + +````md +```jsx title="src/components/HelloDocusaurus.js" +function HelloDocusaurus() { + return

Hello, Docusaurus!

; +} +``` +```` + +```jsx title="src/components/HelloDocusaurus.js" +function HelloDocusaurus() { + return

Hello, Docusaurus!

; +} +``` + +## Admonitions + +Docusaurus has a special syntax to create admonitions and callouts: + +```md +:::tip My tip + +Use this awesome feature option + +::: + +:::danger Take care + +This action is dangerous + +::: +``` + +:::tip My tip + +Use this awesome feature option + +::: + +:::danger Take care + +This action is dangerous + +::: + +## MDX and React Components + +[MDX](https://mdxjs.com/) can make your documentation more **interactive** and allows using any **React components inside Markdown**: + +```jsx +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`) + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! +``` + +export const Highlight = ({children, color}) => ( + { + alert(`You clicked the color ${color} with label ${children}`); + }}> + {children} + +); + +This is Docusaurus green ! + +This is Facebook blue ! diff --git a/docs/docs/tutorial-extras/_category_.json b/docs/docs/tutorial-extras/_category_.json new file mode 100644 index 000000000..a8ffcc193 --- /dev/null +++ b/docs/docs/tutorial-extras/_category_.json @@ -0,0 +1,7 @@ +{ + "label": "Tutorial - Extras", + "position": 3, + "link": { + "type": "generated-index" + } +} diff --git a/docs/docs/tutorial-extras/img/docsVersionDropdown.png b/docs/docs/tutorial-extras/img/docsVersionDropdown.png new file mode 100644 index 000000000..97e416461 Binary files /dev/null and b/docs/docs/tutorial-extras/img/docsVersionDropdown.png differ diff --git a/docs/docs/tutorial-extras/img/localeDropdown.png b/docs/docs/tutorial-extras/img/localeDropdown.png new file mode 100644 index 000000000..e257edc1f Binary files /dev/null and b/docs/docs/tutorial-extras/img/localeDropdown.png differ diff --git a/docs/docs/tutorial-extras/manage-docs-versions.md b/docs/docs/tutorial-extras/manage-docs-versions.md new file mode 100644 index 000000000..ccda0b907 --- /dev/null +++ b/docs/docs/tutorial-extras/manage-docs-versions.md @@ -0,0 +1,55 @@ +--- +sidebar_position: 1 +--- + +# Manage Docs Versions + +Docusaurus can manage multiple versions of your docs. + +## Create a docs version + +Release a version 1.0 of your project: + +```bash +npm run docusaurus docs:version 1.0 +``` + +The `docs` folder is copied into `versioned_docs/version-1.0` and `versions.json` is created. + +Your docs now have 2 versions: + +- `1.0` at `http://localhost:3000/docs/` for the version 1.0 docs +- `current` at `http://localhost:3000/docs/next/` for the **upcoming, unreleased docs** + +## Add a Version Dropdown + +To navigate seamlessly across versions, add a version dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +export default { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'docsVersionDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The docs version dropdown appears in your navbar: + +![Docs Version Dropdown](./img/docsVersionDropdown.png) + +## Update an existing version + +It is possible to edit versioned docs in their respective folder: + +- `versioned_docs/version-1.0/hello.md` updates `http://localhost:3000/docs/hello` +- `docs/hello.md` updates `http://localhost:3000/docs/next/hello` diff --git a/docs/docs/tutorial-extras/translate-your-site.md b/docs/docs/tutorial-extras/translate-your-site.md new file mode 100644 index 000000000..b5a644abd --- /dev/null +++ b/docs/docs/tutorial-extras/translate-your-site.md @@ -0,0 +1,88 @@ +--- +sidebar_position: 2 +--- + +# Translate your site + +Let's translate `docs/intro.md` to French. + +## Configure i18n + +Modify `docusaurus.config.js` to add support for the `fr` locale: + +```js title="docusaurus.config.js" +export default { + i18n: { + defaultLocale: 'en', + locales: ['en', 'fr'], + }, +}; +``` + +## Translate a doc + +Copy the `docs/intro.md` file to the `i18n/fr` folder: + +```bash +mkdir -p i18n/fr/docusaurus-plugin-content-docs/current/ + +cp docs/intro.md i18n/fr/docusaurus-plugin-content-docs/current/intro.md +``` + +Translate `i18n/fr/docusaurus-plugin-content-docs/current/intro.md` in French. + +## Start your localized site + +Start your site on the French locale: + +```bash +npm run start -- --locale fr +``` + +Your localized site is accessible at [http://localhost:3000/fr/](http://localhost:3000/fr/) and the `Getting Started` page is translated. + +:::caution + +In development, you can only use one locale at a time. + +::: + +## Add a Locale Dropdown + +To navigate seamlessly across languages, add a locale dropdown. + +Modify the `docusaurus.config.js` file: + +```js title="docusaurus.config.js" +export default { + themeConfig: { + navbar: { + items: [ + // highlight-start + { + type: 'localeDropdown', + }, + // highlight-end + ], + }, + }, +}; +``` + +The locale dropdown now appears in your navbar: + +![Locale Dropdown](./img/localeDropdown.png) + +## Build your localized site + +Build your site for a specific locale: + +```bash +npm run build -- --locale fr +``` + +Or build your site to include all the locales at once: + +```bash +npm run build +``` diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts new file mode 100644 index 000000000..4e9993166 --- /dev/null +++ b/docs/docusaurus.config.ts @@ -0,0 +1,142 @@ +import {themes as prismThemes} from 'prism-react-renderer'; +import type {Config} from '@docusaurus/types'; +import type * as Preset from '@docusaurus/preset-classic'; + +const config: Config = { + title: 'Nitro Modules', + tagline: 'A framework to build mindblowingly fast native modules with type-safe statically compiled JS bindings.', + favicon: 'img/favicon.ico', + + // Set the production url of your site here + url: 'https://mrousavy.github.io', + // Set the // pathname under which your site is served + // For GitHub pages deployment, it is often '//' + baseUrl: '/nitro/', + + // GitHub pages deployment config. + organizationName: 'mrousavy', + projectName: 'nitro', + deploymentBranch: 'gh-pages', + trailingSlash: false, + + onBrokenLinks: 'throw', + onBrokenMarkdownLinks: 'warn', + + // Even if you don't use internationalization, you can use this field to set + // useful metadata like html lang. For example, if your site is Chinese, you + // may want to replace "en" with "zh-Hans". + i18n: { + defaultLocale: 'en', + locales: ['en'], + }, + + presets: [ + [ + 'classic', + { + docs: { + sidebarPath: './sidebars.ts', + }, + blog: false, + theme: { + customCss: './src/css/custom.css', + }, + } satisfies Preset.Options, + ], + ], + + themeConfig: { + image: 'img/social-card.png', + colorMode: { + defaultMode: 'light', + disableSwitch: false, + respectPrefersColorScheme: true, + }, + navbar: { + title: 'Nitro', + logo: { + alt: 'Nitrous Logo', + src: 'img/nos.png', + }, + items: [ + { + type: 'docSidebar', + sidebarId: 'tutorialSidebar', + position: 'left', + label: 'Tutorial', + }, + { + href: 'https://github.com/facebook/docusaurus', + label: 'GitHub', + position: 'right', + }, + ], + }, + footer: { + style: 'dark', + links: [ + { + title: 'Docs', + items: [ + { + label: 'Tutorial', + to: '/docs/intro', + }, + ], + }, + { + title: 'Community', + items: [ + { + label: 'Stack Overflow', + href: 'https://stackoverflow.com/questions/tagged/docusaurus', + }, + { + label: 'Discord', + href: 'https://discordapp.com/invite/docusaurus', + }, + { + label: 'Twitter', + href: 'https://twitter.com/docusaurus', + }, + ], + }, + { + title: 'More', + items: [ + { + label: 'GitHub', + href: 'https://github.com/facebook/docusaurus', + }, + ], + }, + ], + copyright: `Copyright © ${new Date().getFullYear()} My Project, Inc. Built with Docusaurus.`, + }, + prism: { + theme: prismThemes.oneLight, + darkTheme: prismThemes.oneDark, + additionalLanguages: [ + 'bash', + 'json', + 'kotlin', + 'ruby', + 'cmake', + 'groovy', + 'java', + ], + magicComments: [ + { + className: 'code-block-diff-add-line', + line: 'diff-add' + }, + { + className: 'code-block-diff-remove-line', + line: 'diff-remove' + } + ], + }, + } satisfies Preset.ThemeConfig, +}; + +export default config; diff --git a/docs/img/blue-flame.png b/docs/img/blue-flame.png deleted file mode 100644 index f4c79fced..000000000 Binary files a/docs/img/blue-flame.png and /dev/null differ diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..977a1fb4d --- /dev/null +++ b/docs/package.json @@ -0,0 +1,47 @@ +{ + "name": "nitro", + "version": "0.0.0", + "private": true, + "scripts": { + "docusaurus": "docusaurus", + "start": "docusaurus start", + "build": "docusaurus build", + "swizzle": "docusaurus swizzle", + "deploy": "docusaurus deploy", + "clear": "docusaurus clear", + "serve": "docusaurus serve", + "write-translations": "docusaurus write-translations", + "write-heading-ids": "docusaurus write-heading-ids", + "typecheck": "tsc" + }, + "dependencies": { + "@docusaurus/core": "3.5.2", + "@docusaurus/preset-classic": "3.5.2", + "@mdx-js/react": "^3.0.0", + "clsx": "^2.0.0", + "prism-react-renderer": "^2.3.0", + "react": "^18.0.0", + "react-dom": "^18.0.0" + }, + "devDependencies": { + "@docusaurus/module-type-aliases": "3.5.2", + "@docusaurus/tsconfig": "3.5.2", + "@docusaurus/types": "3.5.2", + "typescript": "~5.5.2" + }, + "browserslist": { + "production": [ + ">0.5%", + "not dead", + "not op_mini all" + ], + "development": [ + "last 3 chrome version", + "last 3 firefox version", + "last 5 safari version" + ] + }, + "engines": { + "node": ">=18.0" + } +} diff --git a/docs/sidebars.ts b/docs/sidebars.ts new file mode 100644 index 000000000..acc7685ac --- /dev/null +++ b/docs/sidebars.ts @@ -0,0 +1,31 @@ +import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; + +/** + * Creating a sidebar enables you to: + - create an ordered group of docs + - render a sidebar for each doc of that group + - provide next/previous navigation + + The sidebars can be generated from the filesystem, or explicitly defined here. + + Create as many sidebars as you want. + */ +const sidebars: SidebarsConfig = { + // By default, Docusaurus generates a sidebar from the docs folder structure + tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], + + // But you can create a sidebar manually + /* + tutorialSidebar: [ + 'intro', + 'hello', + { + type: 'category', + label: 'Tutorial', + items: ['tutorial-basics/create-a-document'], + }, + ], + */ +}; + +export default sidebars; diff --git a/docs/src/components/HomepageFeatures/index.tsx b/docs/src/components/HomepageFeatures/index.tsx new file mode 100644 index 000000000..64d43735b --- /dev/null +++ b/docs/src/components/HomepageFeatures/index.tsx @@ -0,0 +1,73 @@ +import clsx from 'clsx'; +import Heading from '@theme/Heading'; +import styles from './styles.module.css'; + +type FeatureItem = { + title: string; + description: JSX.Element; + imageSource: any; +}; + +const FeatureList: FeatureItem[] = [ + { + title: 'Mindblowingly Fast', + imageSource: require('@site/static/img/graphic-rocket.png').default, + description: ( + <> + Nitro Modules are built ontop of a highly optimized JSI foundation + that handles caching and property lookup really well. + Nitro is up to 59x faster than ExpoModules and 15x faster than TurboModules. + + ), + }, + { + title: 'Statically Typed', + imageSource: require('@site/static/img/graphic-ladder.png').default, + description: ( + <> + Nitro's code-generator ("Nitrogen") statically generates type-safe C++/Swift/Kotlin + types from your TypeScript interfaces. + This way you'll never pass wrong types, nulls or undefined again! + + ), + }, + { + title: 'Powerful and Flexible', + imageSource: require('@site/static/img/graphic-spring.png').default, + description: ( + <> + Similar to pure JavaScript objects, a "HybridObject" in Nitro can + work with almost all JavaScript types such as primitives, typed- or untyped- + objects, arrays and even variants or other native objects. + + ), + }, +]; + +function Feature({title, imageSource, description}: FeatureItem) { + return ( +
+
+ +
+
+ {title} +

{description}

+
+
+ ); +} + +export default function HomepageFeatures(): JSX.Element { + return ( +
+
+
+ {FeatureList.map((props, idx) => ( + + ))} +
+
+
+ ); +} diff --git a/docs/src/components/HomepageFeatures/styles.module.css b/docs/src/components/HomepageFeatures/styles.module.css new file mode 100644 index 000000000..2f99780c6 --- /dev/null +++ b/docs/src/components/HomepageFeatures/styles.module.css @@ -0,0 +1,15 @@ +.features { + display: flex; + align-items: center; + padding: 2rem 0; + width: 100%; +} + +.featureSvg { + height: 200px; + width: 200px; +} + +.highlight { + color: var(--ifm-color-accent); +} diff --git a/docs/src/css/custom.css b/docs/src/css/custom.css new file mode 100644 index 000000000..0aef3cb87 --- /dev/null +++ b/docs/src/css/custom.css @@ -0,0 +1,85 @@ +/** + * Any CSS included here will be global. The classic template + * bundles Infima by default. Infima is a CSS framework designed to + * work well for content-centric websites. + */ + +/* You can override the default Infima variables here. */ +:root { + --ifm-color-primary: #006bb6; /* More vibrant, easier-to-read Blue */ + --ifm-color-primary-dark: #1560c4; /* Slightly darker, but still bright */ + --ifm-color-primary-darker: #124ca1; /* Darker Blue, but more legible */ + --ifm-color-primary-darkest: #0f3b7e; /* Darkest Blue, keeping it visible */ + --ifm-color-primary-light: #4a90e2; /* Lighter Blue for contrast */ + --ifm-color-primary-lighter: #6aa6f2; /* Even lighter for hover states, etc. */ + --ifm-color-primary-lightest: #8abcfb; /* Lightest Blue for backgrounds */ + --ifm-code-font-size: 95%; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.05); /* Reduced contrast for better readability */ + + /* Accent color for specific elements */ + --ifm-color-accent: #ff4c4c; /* Slightly brighter Red accent for better contrast */ + + --code-diff-add: #c8f2c299; + --code-diff-remove: #fcd4d499; +} + +/* For readability concerns, you should choose a lighter palette in dark mode. */ +[data-theme='dark'] { + --ifm-color-primary: #3399ff; /* Lighter Vibrant Blue */ + --ifm-color-primary-dark: #2e89e0; /* Slightly darker Blue */ + --ifm-color-primary-darker: #2877c7; /* Even darker Blue */ + --ifm-color-primary-darkest: #2064a8; /* Darker but still bright Blue */ + --ifm-color-primary-light: #66b2ff; /* Very Light Blue */ + --ifm-color-primary-lighter: #80c1ff; /* Lighter Blue */ + --ifm-color-primary-lightest: #99d1ff; /* Lightest Blue */ + --docusaurus-highlighted-code-line-bg: rgba(255, 255, 255, 0.2); /* Slightly more contrast */ + + /* Accent color for specific elements */ + --ifm-color-accent: #ff4c4c; /* Slightly brighter Red accent for better contrast */ + + --code-diff-add: #81c78466; + --code-diff-remove: #e5737366; +} + + +/* For adding diff + / - to prism codeblocks */ +.code-block-diff-add-line { + background-color: var(--code-diff-add); + display: block; + padding-left: 40px; + margin-left: -40px; + margin-right: -16px; +} + +.code-block-diff-add-line::before { + position: absolute; + left: 8px; + padding-right: 8px; + content: '+'; +} + +.code-block-diff-remove-line { + background-color: var(--code-diff-remove); + display: block; + padding-left: 40px; + margin-left: -40px; + margin-right: -16px; +} + +.code-block-diff-remove-line::before { + position: absolute; + left: 8px; + padding-right: 8px; + content: '-'; +} + +/** + * use magic comments to mark diff blocks + */ +pre code:has(.code-block-diff-add-line) { + padding-left: 40px!important; +} + +pre code:has(.code-block-diff-remove-line) { + padding-left: 40px!important; +} diff --git a/docs/src/pages/index.module.css b/docs/src/pages/index.module.css new file mode 100644 index 000000000..68db2e66b --- /dev/null +++ b/docs/src/pages/index.module.css @@ -0,0 +1,27 @@ +/** + * CSS files with the .module.css suffix will be treated as CSS modules + * and scoped locally. + */ + +.heroBanner { + padding: 4rem 0; + text-align: center; + position: relative; + overflow: hidden; +} + +@media screen and (max-width: 996px) { + .heroBanner { + padding: 2rem; + } +} + +.buttons { + display: flex; + align-items: center; + justify-content: center; +} + +.heroImage { + width: 10rem; +} diff --git a/docs/src/pages/index.tsx b/docs/src/pages/index.tsx new file mode 100644 index 000000000..25ac42fc8 --- /dev/null +++ b/docs/src/pages/index.tsx @@ -0,0 +1,45 @@ +import clsx from 'clsx'; +import Link from '@docusaurus/Link'; +import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; +import Layout from '@theme/Layout'; +import HomepageFeatures from '@site/src/components/HomepageFeatures'; +import Heading from '@theme/Heading'; + +import styles from './index.module.css'; + +const Icon = require('@site/static/img/nos.png').default + +function HomepageHeader() { + const {siteConfig} = useDocusaurusContext(); + return ( +
+
+ + + {siteConfig.title} + +

{siteConfig.tagline}

+
+ + Getting Started - 5min ⏱️ + +
+
+
+ ); +} + +export default function Home(): JSX.Element { + return ( + + +
+ +
+
+ ); +} diff --git a/docs/src/pages/markdown-page.md b/docs/src/pages/markdown-page.md new file mode 100644 index 000000000..9756c5b66 --- /dev/null +++ b/docs/src/pages/markdown-page.md @@ -0,0 +1,7 @@ +--- +title: Markdown page example +--- + +# Markdown page example + +You don't need React to write simple standalone pages. diff --git a/docs/static/.nojekyll b/docs/static/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/static/browserconfig.xml b/docs/static/browserconfig.xml new file mode 100644 index 000000000..1affccc5b --- /dev/null +++ b/docs/static/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/docs/static/img/android-chrome-192x192.png b/docs/static/img/android-chrome-192x192.png new file mode 100644 index 000000000..e65d411b1 Binary files /dev/null and b/docs/static/img/android-chrome-192x192.png differ diff --git a/docs/static/img/android-chrome-512x512.png b/docs/static/img/android-chrome-512x512.png new file mode 100644 index 000000000..d904c7c5a Binary files /dev/null and b/docs/static/img/android-chrome-512x512.png differ diff --git a/docs/static/img/apple-touch-icon.png b/docs/static/img/apple-touch-icon.png new file mode 100644 index 000000000..ef897bc52 Binary files /dev/null and b/docs/static/img/apple-touch-icon.png differ diff --git a/docs/img/banner-nitro-modules-dark.png b/docs/static/img/banner-nitro-modules-dark.png similarity index 100% rename from docs/img/banner-nitro-modules-dark.png rename to docs/static/img/banner-nitro-modules-dark.png diff --git a/docs/img/banner-nitro-modules-light.png b/docs/static/img/banner-nitro-modules-light.png similarity index 100% rename from docs/img/banner-nitro-modules-light.png rename to docs/static/img/banner-nitro-modules-light.png diff --git a/docs/img/banner-nitrogen-dark.png b/docs/static/img/banner-nitrogen-dark.png similarity index 100% rename from docs/img/banner-nitrogen-dark.png rename to docs/static/img/banner-nitrogen-dark.png diff --git a/docs/img/banner-nitrogen-light.png b/docs/static/img/banner-nitrogen-light.png similarity index 100% rename from docs/img/banner-nitrogen-light.png rename to docs/static/img/banner-nitrogen-light.png diff --git a/docs/img/banner-react-native-nitro-modules-dark.png b/docs/static/img/banner-react-native-nitro-modules-dark.png similarity index 100% rename from docs/img/banner-react-native-nitro-modules-dark.png rename to docs/static/img/banner-react-native-nitro-modules-dark.png diff --git a/docs/img/banner-react-native-nitro-modules-light.png b/docs/static/img/banner-react-native-nitro-modules-light.png similarity index 100% rename from docs/img/banner-react-native-nitro-modules-light.png rename to docs/static/img/banner-react-native-nitro-modules-light.png diff --git a/docs/static/img/docusaurus-social-card.jpg b/docs/static/img/docusaurus-social-card.jpg new file mode 100644 index 000000000..ffcb44821 Binary files /dev/null and b/docs/static/img/docusaurus-social-card.jpg differ diff --git a/docs/static/img/favicon-16x16.png b/docs/static/img/favicon-16x16.png new file mode 100644 index 000000000..606bb43f5 Binary files /dev/null and b/docs/static/img/favicon-16x16.png differ diff --git a/docs/static/img/favicon-32x32.png b/docs/static/img/favicon-32x32.png new file mode 100644 index 000000000..e55f25f47 Binary files /dev/null and b/docs/static/img/favicon-32x32.png differ diff --git a/docs/static/img/favicon.ico b/docs/static/img/favicon.ico new file mode 100644 index 000000000..30de46b42 Binary files /dev/null and b/docs/static/img/favicon.ico differ diff --git a/docs/static/img/graphic-ladder.png b/docs/static/img/graphic-ladder.png new file mode 100644 index 000000000..b0916b247 Binary files /dev/null and b/docs/static/img/graphic-ladder.png differ diff --git a/docs/static/img/graphic-rocket.png b/docs/static/img/graphic-rocket.png new file mode 100644 index 000000000..8df0b15e8 Binary files /dev/null and b/docs/static/img/graphic-rocket.png differ diff --git a/docs/static/img/graphic-spring.png b/docs/static/img/graphic-spring.png new file mode 100644 index 000000000..d97bc5121 Binary files /dev/null and b/docs/static/img/graphic-spring.png differ diff --git a/docs/static/img/mstile-150x150.png b/docs/static/img/mstile-150x150.png new file mode 100644 index 000000000..c4afa95e2 Binary files /dev/null and b/docs/static/img/mstile-150x150.png differ diff --git a/docs/static/img/nos.png b/docs/static/img/nos.png new file mode 100644 index 000000000..90102f653 Binary files /dev/null and b/docs/static/img/nos.png differ diff --git a/docs/static/img/safari-pinned-tab.svg b/docs/static/img/safari-pinned-tab.svg new file mode 100644 index 000000000..19d4f6a1f --- /dev/null +++ b/docs/static/img/safari-pinned-tab.svg @@ -0,0 +1,22 @@ + + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + diff --git a/docs/static/img/social-card.png b/docs/static/img/social-card.png new file mode 100644 index 000000000..13acfb5f3 Binary files /dev/null and b/docs/static/img/social-card.png differ diff --git a/docs/static/site.webmanifest b/docs/static/site.webmanifest new file mode 100644 index 000000000..b184f979c --- /dev/null +++ b/docs/static/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/img/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/img/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/docs/tsconfig.json b/docs/tsconfig.json new file mode 100644 index 000000000..314eab8a4 --- /dev/null +++ b/docs/tsconfig.json @@ -0,0 +1,7 @@ +{ + // This file is not used in compilation. It is here just for a nice editor experience. + "extends": "@docusaurus/tsconfig", + "compilerOptions": { + "baseUrl": "." + } +} diff --git a/package.json b/package.json index 18ca02406..c5410315b 100644 --- a/package.json +++ b/package.json @@ -9,8 +9,6 @@ "check-all": "./scripts/clang-format.sh", "bootstrap": "bun --filter=\"**\" install && bun tsc && bun --filter=\"react-native-nitro-example\" pods", "typescript": "bun --filter=\"**\" typescript", - "lint": "bun --filter=\"**\" lint", - "lint-fix": "bun --filter=\"**\" lint --fix", "release": "release-it", "clean": "rm -rf packages/**/tsconfig.tsbuildinfo packages/**/node_modules packages/**/lib" }, @@ -18,7 +16,8 @@ "packages/react-native-nitro-modules", "packages/nitrogen", "packages/react-native-nitro-image", - "example" + "example", + "docs" ], "devDependencies": { "@release-it/conventional-changelog": "^8.0.1", diff --git a/packages/nitrogen/README.md b/packages/nitrogen/README.md index b0fd4d6d9..94f7beb4c 100644 --- a/packages/nitrogen/README.md +++ b/packages/nitrogen/README.md @@ -1,8 +1,8 @@ - - - Nitrogen + + + Nitrogen diff --git a/packages/react-native-nitro-modules/README.md b/packages/react-native-nitro-modules/README.md index 05baaf6d5..d9a1f8cb0 100644 --- a/packages/react-native-nitro-modules/README.md +++ b/packages/react-native-nitro-modules/README.md @@ -1,8 +1,8 @@ - - - Nitrogen + + + Nitrogen