Make the ui package work for expo and next
Before Width: | Height: | Size: 17 KiB After Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 1.4 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 22 KiB After Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
@ -1,5 +1,5 @@
|
||||
{
|
||||
"name": "native",
|
||||
"name": "mobile",
|
||||
"version": "1.0.0",
|
||||
"main": "src/app.tsx",
|
||||
"scripts": {
|
||||
@ -9,7 +9,7 @@
|
||||
"web": "expo start --web"
|
||||
},
|
||||
"dependencies": {
|
||||
"app": "^0.1.0",
|
||||
"@kyoo/ui": "workspace:^",
|
||||
"expo": "~46.0.16",
|
||||
"expo-status-bar": "~1.4.0",
|
||||
"react": "18.0.0",
|
||||
@ -18,7 +18,7 @@
|
||||
"react-native-web": "~0.18.7"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.12.9",
|
||||
"@babel/core": "^7.19.6",
|
||||
"@types/react": "~18.0.14",
|
||||
"@types/react-native": "~0.69.1",
|
||||
"typescript": "~4.3.5"
|
@ -1,7 +1,7 @@
|
||||
import { StatusBar } from "expo-status-bar";
|
||||
import { StyleSheet, Text, View } from "react-native";
|
||||
import { registerRootComponent } from "expo";
|
||||
import { Toto } from "app";
|
||||
import { Toto } from "@kyoo/ui";
|
||||
|
||||
function App() {
|
||||
return (
|
@ -18,11 +18,10 @@
|
||||
* along with Kyoo. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
const path = require("path")
|
||||
const path = require("path");
|
||||
const CopyPlugin = require("copy-webpack-plugin");
|
||||
const withTM = require("next-transpile-modules")(["@kyoo/ui"]);
|
||||
|
||||
|
||||
const suboctopus = path.dirname(require.resolve("@jellyfin/libass-wasm"));
|
||||
|
||||
/**
|
||||
@ -45,6 +44,14 @@ const nextConfig = {
|
||||
],
|
||||
}),
|
||||
];
|
||||
config.resolve = {
|
||||
...config.resolve,
|
||||
alias: {
|
||||
...config.resolve.alias,
|
||||
"react-native$": "react-native-web",
|
||||
},
|
||||
extensions: [".web.tsx", ".tsx", ...config.resolve.extensions],
|
||||
};
|
||||
return config;
|
||||
},
|
||||
async redirects() {
|
||||
|
@ -29,6 +29,7 @@
|
||||
"react": "18.2.0",
|
||||
"react-dom": "18.2.0",
|
||||
"react-infinite-scroll-component": "^6.1.0",
|
||||
"react-native-web": "^0.18.9",
|
||||
"superjson": "^1.9.1",
|
||||
"zod": "^3.18.0"
|
||||
},
|
||||
|
@ -19,6 +19,48 @@
|
||||
*/
|
||||
|
||||
import { Html, Main, Head, NextScript } from "next/document";
|
||||
import { Children } from "react";
|
||||
import { AppRegistry } from "react-native";
|
||||
|
||||
export const style = `
|
||||
/**
|
||||
* Building on the RNWeb reset:
|
||||
* https://github.com/necolas/react-native-web/blob/master/packages/react-native-web/src/exports/StyleSheet/initialRules.js
|
||||
*/
|
||||
html, body, #__next {
|
||||
width: 100%;
|
||||
/* To smooth any scrolling behavior */
|
||||
-webkit-overflow-scrolling: touch;
|
||||
margin: 0px;
|
||||
padding: 0px;
|
||||
/* Allows content to fill the viewport and go beyond the bottom */
|
||||
min-height: 100%;
|
||||
}
|
||||
#__next {
|
||||
flex-shrink: 0;
|
||||
flex-basis: auto;
|
||||
flex-direction: column;
|
||||
flex-grow: 1;
|
||||
display: flex;
|
||||
flex: 1;
|
||||
}
|
||||
html {
|
||||
scroll-behavior: smooth;
|
||||
/* Prevent text size change on orientation change https://gist.github.com/tfausak/2222823#file-ios-8-web-app-html-L138 */
|
||||
-webkit-text-size-adjust: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
body {
|
||||
display: flex;
|
||||
/* Allows you to scroll below the viewport; default value is visible */
|
||||
overflow-y: auto;
|
||||
overscroll-behavior-y: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-ms-overflow-style: scrollbar;
|
||||
}
|
||||
`;
|
||||
|
||||
const Document = () => {
|
||||
return (
|
||||
@ -38,4 +80,14 @@ const Document = () => {
|
||||
);
|
||||
};
|
||||
|
||||
// Enables SSR for react-native-web styles.
|
||||
Document.getInitialProps = async ({ renderPage }: any) => {
|
||||
AppRegistry.registerComponent("Main", () => Main);
|
||||
// @ts-ignore
|
||||
const { getStyleElement } = AppRegistry.getApplication("Main");
|
||||
const page = await renderPage();
|
||||
const styles = [<style dangerouslySetInnerHTML={{ __html: style }} />, getStyleElement()];
|
||||
return { ...page, styles: Children.toArray(styles) };
|
||||
};
|
||||
|
||||
export default Document;
|
||||
|
@ -3,7 +3,7 @@
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"web": "yarn workspace web dev",
|
||||
"native": "yarn workspace native start",
|
||||
"mobile": "yarn workspace mobile start",
|
||||
"build:web": "yarn workspace web build",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
|
@ -8,7 +8,17 @@
|
||||
"typescript": "^4.8.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": "*"
|
||||
"react": "*",
|
||||
"react-native": "*",
|
||||
"react-native-web": "*"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"react-native": {
|
||||
"optional": true
|
||||
},
|
||||
"react-native-web": {
|
||||
"optional": true
|
||||
}
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.10.5"
|
||||
|
@ -1,3 +1,5 @@
|
||||
import { Button } from "react-native";
|
||||
|
||||
export const Toto = () => {
|
||||
return <button>tata</button>;
|
||||
return <Button title="tato"></Button>;
|
||||
}
|
||||
|