From d2df8fe7ee1bf09ecb1f097c5f0a50b8b99ebdff Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek Date: Mon, 15 Dec 2025 12:17:57 +0100 Subject: [PATCH 1/6] feat: initialize Vite + React web example - Create new web example in apps/example-web with React 19 and Vite - Configure Turbo with build:web task - Add workspace to monorepo configuration - Update ESLint and .gitignore for web build output - Update tsconfig files for monorepo setup --- .gitignore | 3 + apps/example-web/README.md | 60 ++ apps/example-web/eslint.config.mjs | 32 + apps/example-web/index.html | 15 + apps/example-web/package.json | 35 + apps/example-web/src/App.css | 5 + apps/example-web/src/App.tsx | 12 + apps/example-web/src/index.css | 11 + apps/example-web/src/main.tsx | 13 + apps/example-web/tsconfig.app.json | 8 + apps/example-web/tsconfig.json | 7 + apps/example-web/tsconfig.node.json | 9 + apps/example-web/vite.config.ts | 7 + eslint.config.mjs | 5 +- package.json | 3 +- tsconfig.base.json | 25 + tsconfig.build.json | 2 +- tsconfig.json | 24 +- turbo.json | 10 + yarn.lock | 1397 ++++++++++++++++++++++++++- 20 files changed, 1648 insertions(+), 35 deletions(-) create mode 100644 apps/example-web/README.md create mode 100644 apps/example-web/eslint.config.mjs create mode 100644 apps/example-web/index.html create mode 100644 apps/example-web/package.json create mode 100644 apps/example-web/src/App.css create mode 100644 apps/example-web/src/App.tsx create mode 100644 apps/example-web/src/index.css create mode 100644 apps/example-web/src/main.tsx create mode 100644 apps/example-web/tsconfig.app.json create mode 100644 apps/example-web/tsconfig.json create mode 100644 apps/example-web/tsconfig.node.json create mode 100644 apps/example-web/vite.config.ts create mode 100644 tsconfig.base.json diff --git a/.gitignore b/.gitignore index f6c7a174b..84f391a8f 100644 --- a/.gitignore +++ b/.gitignore @@ -79,6 +79,9 @@ android/keystores/debug.keystore # generated by bob lib/ +# Vite build output +dist/ + # React Native Codegen ios/generated android/generated diff --git a/apps/example-web/README.md b/apps/example-web/README.md new file mode 100644 index 000000000..a9f51482c --- /dev/null +++ b/apps/example-web/README.md @@ -0,0 +1,60 @@ +# React Native Enriched Web Example + +This is a [**Vite**](https://vite.dev) + [**React**](https://react.dev) web example for the React Native Enriched text input component, bootstrapped with Vite's React template. + +# Getting Started + +## Step 1: Install dependencies + +From the root of the monorepo, install all workspace dependencies: + +```sh +yarn install +``` + +## Step 2: Start the development server + +Run the following command from the root of the monorepo or from the `apps/example-web` directory: + +```sh +# From root - using Turbo +turbo run dev + +# OR directly in this workspace +yarn dev +``` + +The app should now be running at `http://localhost:5173`. + +## Step 3: Modify your app + +Now that you have the development server running, let's make changes! + +Open `src/App.tsx` in your text editor of choice and make some changes. When you save, your app will automatically update and reflect these changes. + +## Build for production + +To create an optimized production build: + +```sh +yarn build:web +``` + +The built files will be in the `dist/` directory. + +## Preview the production build + +To preview the production build locally: + +```sh +yarn preview +``` + +# Learn More + +To learn more about the tools and technologies used: + +- [Vite Documentation](https://vite.dev) - Learn more about Vite +- [React Documentation](https://react.dev) - Learn more about React +- [TypeScript Documentation](https://www.typescriptlang.org) - Learn more about TypeScript +- [Turbo Documentation](https://turbo.build) - Learn more about Turbo monorepo management diff --git a/apps/example-web/eslint.config.mjs b/apps/example-web/eslint.config.mjs new file mode 100644 index 000000000..ba3351ee0 --- /dev/null +++ b/apps/example-web/eslint.config.mjs @@ -0,0 +1,32 @@ +import js from '@eslint/js'; +import globals from 'globals'; +import reactHooks from 'eslint-plugin-react-hooks'; +import reactRefresh from 'eslint-plugin-react-refresh'; +import reactX from 'eslint-plugin-react-x'; +import reactDom from 'eslint-plugin-react-dom'; +import tseslint from 'typescript-eslint'; +import { defineConfig, globalIgnores } from 'eslint/config'; + +export default defineConfig([ + globalIgnores(['dist']), + { + files: ['**/*.{ts,tsx}'], + extends: [ + js.configs.recommended, + tseslint.configs.strictTypeChecked, + tseslint.configs.stylisticTypeChecked, + reactHooks.configs.flat.recommended, + reactRefresh.configs.vite, + reactX.configs['recommended-typescript'], + reactDom.configs.recommended, + ], + languageOptions: { + parserOptions: { + project: ['./tsconfig.node.json', './tsconfig.app.json'], + tsconfigRootDir: import.meta.dirname, + }, + ecmaVersion: 2020, + globals: globals.browser, + }, + }, +]); diff --git a/apps/example-web/index.html b/apps/example-web/index.html new file mode 100644 index 000000000..601bf5de6 --- /dev/null +++ b/apps/example-web/index.html @@ -0,0 +1,15 @@ + + + + + + + React Native Enriched Web Example + + + +
+ + + + \ No newline at end of file diff --git a/apps/example-web/package.json b/apps/example-web/package.json new file mode 100644 index 000000000..8914d6437 --- /dev/null +++ b/apps/example-web/package.json @@ -0,0 +1,35 @@ +{ + "name": "react-native-enriched-web-example", + "version": "0.0.1", + "private": true, + "type": "module", + "scripts": { + "dev": "vite", + "build:web": "tsc -b && vite build", + "preview": "vite preview", + "lint": "eslint . --ext ts,tsx" + }, + "dependencies": { + "react": "^19.1.0", + "react-dom": "^19.1.0" + }, + "devDependencies": { + "@eslint/js": "^9.39.1", + "@types/node": "^24.10.1", + "@types/react": "^19.1.0", + "@types/react-dom": "^19.2.3", + "@vitejs/plugin-react": "^5.1.1", + "eslint": "^9.22.0", + "eslint-plugin-react-dom": "^2.3.13", + "eslint-plugin-react-hooks": "^7.0.1", + "eslint-plugin-react-refresh": "^0.4.24", + "eslint-plugin-react-x": "^2.3.13", + "globals": "^16.5.0", + "typescript": "^5.8.3", + "typescript-eslint": "^8.46.4", + "vite": "^7.2.4" + }, + "engines": { + "node": ">=20" + } +} diff --git a/apps/example-web/src/App.css b/apps/example-web/src/App.css new file mode 100644 index 000000000..e624d07ac --- /dev/null +++ b/apps/example-web/src/App.css @@ -0,0 +1,5 @@ +.container { + max-width: 800px; + margin: 0 auto; + padding: 2rem; +} diff --git a/apps/example-web/src/App.tsx b/apps/example-web/src/App.tsx new file mode 100644 index 000000000..b6fa757c8 --- /dev/null +++ b/apps/example-web/src/App.tsx @@ -0,0 +1,12 @@ +import './App.css'; + +function App() { + return ( +
+
Text input
+ +
+ ); +} + +export default App; diff --git a/apps/example-web/src/index.css b/apps/example-web/src/index.css new file mode 100644 index 000000000..83d89e877 --- /dev/null +++ b/apps/example-web/src/index.css @@ -0,0 +1,11 @@ +:root { + color: rgba(255, 255, 255, 0.87); + background-color: #242424; +} + +@media (prefers-color-scheme: light) { + :root { + color: #213547; + background-color: #ffffff; + } +} diff --git a/apps/example-web/src/main.tsx b/apps/example-web/src/main.tsx new file mode 100644 index 000000000..df7cd406f --- /dev/null +++ b/apps/example-web/src/main.tsx @@ -0,0 +1,13 @@ +import { StrictMode } from 'react'; +import { createRoot } from 'react-dom/client'; +import './index.css'; +import App from './App'; + +const rootElement = document.getElementById('root'); +if (!rootElement) throw new Error('Root element "#root" not found'); + +createRoot(rootElement).render( + + + +); diff --git a/apps/example-web/tsconfig.app.json b/apps/example-web/tsconfig.app.json new file mode 100644 index 000000000..690114886 --- /dev/null +++ b/apps/example-web/tsconfig.app.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", + "types": ["vite/client"], + }, + "include": ["src"] +} diff --git a/apps/example-web/tsconfig.json b/apps/example-web/tsconfig.json new file mode 100644 index 000000000..1ffef600d --- /dev/null +++ b/apps/example-web/tsconfig.json @@ -0,0 +1,7 @@ +{ + "files": [], + "references": [ + { "path": "./tsconfig.app.json" }, + { "path": "./tsconfig.node.json" } + ] +} diff --git a/apps/example-web/tsconfig.node.json b/apps/example-web/tsconfig.node.json new file mode 100644 index 000000000..c31ba89ef --- /dev/null +++ b/apps/example-web/tsconfig.node.json @@ -0,0 +1,9 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", + "lib": ["ES2023"], + "types": ["node"], + }, + "include": ["vite.config.ts"] +} diff --git a/apps/example-web/vite.config.ts b/apps/example-web/vite.config.ts new file mode 100644 index 000000000..4a5def4c3 --- /dev/null +++ b/apps/example-web/vite.config.ts @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite'; +import react from '@vitejs/plugin-react'; + +// https://vite.dev/config/ +export default defineConfig({ + plugins: [react()], +}); diff --git a/eslint.config.mjs b/eslint.config.mjs index 84f2a4d11..86d53e7db 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -33,9 +33,6 @@ export default defineConfig([ }, }, { - ignores: [ - 'node_modules/', - 'lib/' - ], + ignores: ['node_modules/', 'lib/', 'apps/example-web/dist/'], }, ]); diff --git a/package.json b/package.json index 0ca5f4831..b1ae88b77 100644 --- a/package.json +++ b/package.json @@ -97,7 +97,8 @@ "react-native": "*" }, "workspaces": [ - "example" + "example", + "apps/example-web" ], "packageManager": "yarn@3.6.1", "jest": { diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 000000000..fe36c9f68 --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react-jsx", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "noEmit": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ESNext", + "verbatimModuleSyntax": true + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json index 3c0636adf..326236495 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig", - "exclude": ["example", "lib"] + "exclude": ["example", "apps", "lib"] } diff --git a/tsconfig.json b/tsconfig.json index f8d112b29..37038f647 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,29 +1,9 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { "rootDir": ".", "paths": { "react-native-enriched": ["./src/index"] - }, - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "jsx": "react-jsx", - "lib": ["ESNext"], - "module": "ESNext", - "moduleResolution": "bundler", - "noEmit": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitUseStrict": false, - "noStrictGenericChecks": false, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "ESNext", - "verbatimModuleSyntax": true + } } } diff --git a/turbo.json b/turbo.json index 405897eec..e490465c6 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,16 @@ { "$schema": "https://turbo.build/schema.json", "pipeline": { + "build:web": { + "outputs": ["dist/**"], + "inputs": [ + "package.json", + "src/**", + "tsconfig.json", + "vite.config.ts", + "index.html" + ] + }, "build:android": { "env": ["ORG_GRADLE_PROJECT_newArchEnabled"], "inputs": [ diff --git a/yarn.lock b/yarn.lock index b0c641bbc..4c717b651 100644 --- a/yarn.lock +++ b/yarn.lock @@ -42,6 +42,17 @@ __metadata: languageName: node linkType: hard +"@babel/code-frame@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/code-frame@npm:7.27.1" + dependencies: + "@babel/helper-validator-identifier": ^7.27.1 + js-tokens: ^4.0.0 + picocolors: ^1.1.1 + checksum: 5874edc5d37406c4a0bb14cf79c8e51ad412fb0423d176775ac14fc0259831be1bf95bdda9c2aa651126990505e09a9f0ed85deaa99893bc316d2682c5115bdc + languageName: node + linkType: hard + "@babel/compat-data@npm:^7.22.6, @babel/compat-data@npm:^7.26.8": version: 7.26.8 resolution: "@babel/compat-data@npm:7.26.8" @@ -49,6 +60,13 @@ __metadata: languageName: node linkType: hard +"@babel/compat-data@npm:^7.27.2": + version: 7.28.5 + resolution: "@babel/compat-data@npm:7.28.5" + checksum: d7bcb3ee713752dc27b89800bfb39f9ac5f3edc46b4f5bb9906e1fe6b6110c7b245dd502602ea66f93790480c228605e9a601f27c07016f24b56772e97bedbdf + languageName: node + linkType: hard + "@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.20.0, @babel/core@npm:^7.23.9, @babel/core@npm:^7.25.2": version: 7.26.10 resolution: "@babel/core@npm:7.26.10" @@ -72,6 +90,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.24.4, @babel/core@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/core@npm:7.28.5" + dependencies: + "@babel/code-frame": ^7.27.1 + "@babel/generator": ^7.28.5 + "@babel/helper-compilation-targets": ^7.27.2 + "@babel/helper-module-transforms": ^7.28.3 + "@babel/helpers": ^7.28.4 + "@babel/parser": ^7.28.5 + "@babel/template": ^7.27.2 + "@babel/traverse": ^7.28.5 + "@babel/types": ^7.28.5 + "@jridgewell/remapping": ^2.3.5 + convert-source-map: ^2.0.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.3 + semver: ^6.3.1 + checksum: 1ee35b20448f73e9d531091ad4f9e8198dc8f0cebb783263fbff1807342209882ddcaf419be04111326b6f0e494222f7055d71da316c437a6a784d230c11ab9f + languageName: node + linkType: hard + "@babel/eslint-parser@npm:^7.25.1": version: 7.27.0 resolution: "@babel/eslint-parser@npm:7.27.0" @@ -99,6 +140,19 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/generator@npm:7.28.5" + dependencies: + "@babel/parser": ^7.28.5 + "@babel/types": ^7.28.5 + "@jridgewell/gen-mapping": ^0.3.12 + "@jridgewell/trace-mapping": ^0.3.28 + jsesc: ^3.0.2 + checksum: 3e86fa0197bb33394a85a73dbbca92bb1b3f250a30294c7e327359c0978ad90f36f3d71c7f2965a3fc349cfa82becc8f87e7421c75796c8bc48dd9010dd866d1 + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-annotate-as-pure@npm:7.25.9" @@ -121,6 +175,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/helper-compilation-targets@npm:7.27.2" + dependencies: + "@babel/compat-data": ^7.27.2 + "@babel/helper-validator-option": ^7.27.1 + browserslist: ^4.24.0 + lru-cache: ^5.1.1 + semver: ^6.3.1 + checksum: 7b95328237de85d7af1dea010a4daa28e79f961dda48b652860d5893ce9b136fc8b9ea1f126d8e0a24963b09ba5c6631dcb907b4ce109b04452d34a6ae979807 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.25.9, @babel/helper-create-class-features-plugin@npm:^7.27.0": version: 7.27.0 resolution: "@babel/helper-create-class-features-plugin@npm:7.27.0" @@ -166,6 +233,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-globals@npm:^7.28.0": + version: 7.28.0 + resolution: "@babel/helper-globals@npm:7.28.0" + checksum: d8d7b91c12dad1ee747968af0cb73baf91053b2bcf78634da2c2c4991fb45ede9bd0c8f9b5f3254881242bc0921218fcb7c28ae885477c25177147e978ce4397 + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-member-expression-to-functions@npm:7.25.9" @@ -186,6 +260,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-imports@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-module-imports@npm:7.27.1" + dependencies: + "@babel/traverse": ^7.27.1 + "@babel/types": ^7.27.1 + checksum: 92d01c71c0e4aacdc2babce418a9a1a27a8f7d770a210ffa0f3933f321befab18b655bc1241bebc40767516731de0b85639140c42e45a8210abe1e792f115b28 + languageName: node + linkType: hard + "@babel/helper-module-transforms@npm:^7.25.9, @babel/helper-module-transforms@npm:^7.26.0": version: 7.26.0 resolution: "@babel/helper-module-transforms@npm:7.26.0" @@ -199,6 +283,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.28.3": + version: 7.28.3 + resolution: "@babel/helper-module-transforms@npm:7.28.3" + dependencies: + "@babel/helper-module-imports": ^7.27.1 + "@babel/helper-validator-identifier": ^7.27.1 + "@babel/traverse": ^7.28.3 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 7cf7b79da0fa626d6c84bfc7b35c079a2559caecaa2ff645b0f1db0d741507aa4df6b5b98a3283e8ac4e89094af271d805bf5701e5c4f916e622797b7c8cbb18 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-optimise-call-expression@npm:7.25.9" @@ -265,6 +362,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-string-parser@npm:7.27.1" + checksum: 0a8464adc4b39b138aedcb443b09f4005d86207d7126e5e079177e05c3116107d856ec08282b365e9a79a9872f40f4092a6127f8d74c8a01c1ef789dacfc25d6 + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-identifier@npm:7.25.9" @@ -272,6 +376,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/helper-validator-identifier@npm:7.28.5" + checksum: 5a251a6848e9712aea0338f659a1a3bd334d26219d5511164544ca8ec20774f098c3a6661e9da65a0d085c745c00bb62c8fada38a62f08fa1f8053bc0aeb57e4 + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-validator-option@npm:7.25.9" @@ -279,6 +390,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-option@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/helper-validator-option@npm:7.27.1" + checksum: db73e6a308092531c629ee5de7f0d04390835b21a263be2644276cb27da2384b64676cab9f22cd8d8dbd854c92b1d7d56fc8517cf0070c35d1c14a8c828b0903 + languageName: node + linkType: hard + "@babel/helper-wrap-function@npm:^7.25.9": version: 7.25.9 resolution: "@babel/helper-wrap-function@npm:7.25.9" @@ -300,6 +418,16 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.28.4": + version: 7.28.4 + resolution: "@babel/helpers@npm:7.28.4" + dependencies: + "@babel/template": ^7.27.2 + "@babel/types": ^7.28.4 + checksum: a8706219e0bd60c18bbb8e010aa122e9b14e7e7e67c21cc101e6f1b5e79dcb9a18d674f655997f85daaf421aa138cf284710bb04371a2255a0a3137f097430b4 + languageName: node + linkType: hard + "@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.20.0, @babel/parser@npm:^7.20.7, @babel/parser@npm:^7.23.9, @babel/parser@npm:^7.25.3, @babel/parser@npm:^7.26.10, @babel/parser@npm:^7.27.0": version: 7.27.0 resolution: "@babel/parser@npm:7.27.0" @@ -311,6 +439,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.24.4, @babel/parser@npm:^7.27.2, @babel/parser@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/parser@npm:7.28.5" + dependencies: + "@babel/types": ^7.28.5 + bin: + parser: ./bin/babel-parser.js + checksum: 5c2456e3f26c70d4a3ce1a220b529a91a2df26c54a2894fd0dea2342699ea1067ffdda9f0715eeab61da46ff546fd5661bc70be6d8d11977cbe21f5f0478819a + languageName: node + linkType: hard + "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-bugfix-firefox-class-in-computed-class-key@npm:7.25.9" @@ -1150,6 +1289,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-self@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-self@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 72cbae66a58c6c36f7e12e8ed79f292192d858dd4bb00e9e89d8b695e4c5cb6ef48eec84bffff421a5db93fd10412c581f1cccdb00264065df76f121995bdb68 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx-source@npm:^7.24.7": version: 7.25.9 resolution: "@babel/plugin-transform-react-jsx-source@npm:7.25.9" @@ -1161,6 +1311,17 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-transform-react-jsx-source@npm:^7.27.1": + version: 7.27.1 + resolution: "@babel/plugin-transform-react-jsx-source@npm:7.27.1" + dependencies: + "@babel/helper-plugin-utils": ^7.27.1 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: e2843362adb53692be5ee9fa07a386d2d8883daad2063a3575b3c373fc14cdf4ea7978c67a183cb631b4c9c8d77b2f48c24c088f8e65cc3600cb8e97d72a7161 + languageName: node + linkType: hard + "@babel/plugin-transform-react-jsx@npm:^7.25.2, @babel/plugin-transform-react-jsx@npm:^7.25.9": version: 7.25.9 resolution: "@babel/plugin-transform-react-jsx@npm:7.25.9" @@ -1524,6 +1685,17 @@ __metadata: languageName: node linkType: hard +"@babel/template@npm:^7.27.2": + version: 7.27.2 + resolution: "@babel/template@npm:7.27.2" + dependencies: + "@babel/code-frame": ^7.27.1 + "@babel/parser": ^7.27.2 + "@babel/types": ^7.27.1 + checksum: ff5628bc066060624afd970616090e5bba91c6240c2e4b458d13267a523572cbfcbf549391eec8217b94b064cf96571c6273f0c04b28a8567b96edc675c28e27 + languageName: node + linkType: hard + "@babel/traverse--for-generate-function-map@npm:@babel/traverse@^7.25.3, @babel/traverse@npm:^7.20.0, @babel/traverse@npm:^7.25.3, @babel/traverse@npm:^7.25.9, @babel/traverse@npm:^7.26.10, @babel/traverse@npm:^7.26.5, @babel/traverse@npm:^7.26.8, @babel/traverse@npm:^7.27.0": version: 7.27.0 resolution: "@babel/traverse@npm:7.27.0" @@ -1539,6 +1711,21 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.27.1, @babel/traverse@npm:^7.28.3, @babel/traverse@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/traverse@npm:7.28.5" + dependencies: + "@babel/code-frame": ^7.27.1 + "@babel/generator": ^7.28.5 + "@babel/helper-globals": ^7.28.0 + "@babel/parser": ^7.28.5 + "@babel/template": ^7.27.2 + "@babel/types": ^7.28.5 + debug: ^4.3.1 + checksum: e028ee9654f44be7c2a2df268455cee72d5c424c9ae536785f8f7c8680356f7b977c77ad76909d07eeed09ff1e125ce01cf783011f66b56c838791a85fa6af04 + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.7, @babel/types@npm:^7.25.2, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.10, @babel/types@npm:^7.27.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4": version: 7.27.0 resolution: "@babel/types@npm:7.27.0" @@ -1549,6 +1736,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.27.1, @babel/types@npm:^7.28.4, @babel/types@npm:^7.28.5": + version: 7.28.5 + resolution: "@babel/types@npm:7.28.5" + dependencies: + "@babel/helper-string-parser": ^7.27.1 + "@babel/helper-validator-identifier": ^7.28.5 + checksum: 5bc266af9e55ff92f9ddf33d83a42c9de1a87f9579d0ed62ef94a741a081692dd410a4fbbab18d514b83e135083ff05bc0e37003834801c9514b9d8ad748070d + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1765,6 +1962,188 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/aix-ppc64@npm:0.25.12" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/android-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm64@npm:0.25.12" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/android-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-arm@npm:0.25.12" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/android-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/android-x64@npm:0.25.12" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/darwin-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-arm64@npm:0.25.12" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/darwin-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/darwin-x64@npm:0.25.12" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/freebsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-arm64@npm:0.25.12" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/freebsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/freebsd-x64@npm:0.25.12" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/linux-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm64@npm:0.25.12" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/linux-arm@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-arm@npm:0.25.12" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ia32@npm:0.25.12" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-loong64@npm:0.25.12" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + +"@esbuild/linux-mips64el@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-mips64el@npm:0.25.12" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + +"@esbuild/linux-ppc64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-ppc64@npm:0.25.12" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + +"@esbuild/linux-riscv64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-riscv64@npm:0.25.12" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + +"@esbuild/linux-s390x@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-s390x@npm:0.25.12" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + +"@esbuild/linux-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/linux-x64@npm:0.25.12" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/netbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-arm64@npm:0.25.12" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/netbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/netbsd-x64@npm:0.25.12" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openbsd-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-arm64@npm:0.25.12" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/openbsd-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openbsd-x64@npm:0.25.12" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/openharmony-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/openharmony-arm64@npm:0.25.12" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/sunos-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/sunos-x64@npm:0.25.12" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + +"@esbuild/win32-arm64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-arm64@npm:0.25.12" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@esbuild/win32-ia32@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-ia32@npm:0.25.12" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@esbuild/win32-x64@npm:0.25.12": + version: 0.25.12 + resolution: "@esbuild/win32-x64@npm:0.25.12" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.2.0, @eslint-community/eslint-utils@npm:^4.4.0": version: 4.6.1 resolution: "@eslint-community/eslint-utils@npm:4.6.1" @@ -1776,6 +2155,17 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.7.0": + version: 4.9.0 + resolution: "@eslint-community/eslint-utils@npm:4.9.0" + dependencies: + eslint-visitor-keys: ^3.4.3 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: ae9b98eea006d1354368804b0116b8b45017a4e47b486d1b9cfa048a8ed3dc69b9b074eb2b2acb14034e6897c24048fd42b6a6816d9dc8bb9daad79db7d478d2 + languageName: node + linkType: hard + "@eslint-community/regexpp@npm:^4.10.0, @eslint-community/regexpp@npm:^4.12.1": version: 4.12.1 resolution: "@eslint-community/regexpp@npm:4.12.1" @@ -1783,6 +2173,81 @@ __metadata: languageName: node linkType: hard +"@eslint-react/ast@npm:2.3.13": + version: 2.3.13 + resolution: "@eslint-react/ast@npm:2.3.13" + dependencies: + "@eslint-react/eff": 2.3.13 + "@typescript-eslint/types": ^8.49.0 + "@typescript-eslint/typescript-estree": ^8.49.0 + "@typescript-eslint/utils": ^8.49.0 + string-ts: ^2.3.1 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: abe99c1a29bd3a94bec364982c08e9446681b6c4bb16d06a6d74c1517a333c872c2c0774c084fae9c58e3c8b8eabf357a6fce7eeac104bf8ba12cf5e20907304 + languageName: node + linkType: hard + +"@eslint-react/core@npm:2.3.13": + version: 2.3.13 + resolution: "@eslint-react/core@npm:2.3.13" + dependencies: + "@eslint-react/ast": 2.3.13 + "@eslint-react/eff": 2.3.13 + "@eslint-react/shared": 2.3.13 + "@eslint-react/var": 2.3.13 + "@typescript-eslint/scope-manager": ^8.49.0 + "@typescript-eslint/types": ^8.49.0 + "@typescript-eslint/utils": ^8.49.0 + birecord: ^0.1.1 + ts-pattern: ^5.9.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 3b28923543e59988ac8125c8d8a147bab1a86145e3ab9b1125665710031b7364a6b60ef413a81cf1760e3a0671d7b9e4ffe5976bc6712a95d3d1ac40028e4f4a + languageName: node + linkType: hard + +"@eslint-react/eff@npm:2.3.13": + version: 2.3.13 + resolution: "@eslint-react/eff@npm:2.3.13" + checksum: 3071491a3e76ce0b9adb6970a73a9f8c2226171e03f5826d8dbdefa04e23ac5bedd12c265596b5d2003e4102c8bde4407404de257024c9b489b047ddb6d1da60 + languageName: node + linkType: hard + +"@eslint-react/shared@npm:2.3.13": + version: 2.3.13 + resolution: "@eslint-react/shared@npm:2.3.13" + dependencies: + "@eslint-react/eff": 2.3.13 + "@typescript-eslint/utils": ^8.49.0 + ts-pattern: ^5.9.0 + zod: ^4.1.13 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 89afa3cfba767bef61e52442bd5632df13d63bdfafebb1077ac3181595830bcab68bcb7a2654eb6a28b46431fb72e6f9832dc91dc882595c79e308dce6959a78 + languageName: node + linkType: hard + +"@eslint-react/var@npm:2.3.13": + version: 2.3.13 + resolution: "@eslint-react/var@npm:2.3.13" + dependencies: + "@eslint-react/ast": 2.3.13 + "@eslint-react/eff": 2.3.13 + "@typescript-eslint/scope-manager": ^8.49.0 + "@typescript-eslint/types": ^8.49.0 + "@typescript-eslint/utils": ^8.49.0 + ts-pattern: ^5.9.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: cd39fde45cf110e87b27d10f704bdf03d9c108355013a4b1448553a6da381b1f451c7a99930b5bd32e62d93f8138c983619e4f10e5d5e3e39d7e61fe5e77ce18 + languageName: node + linkType: hard + "@eslint/compat@npm:^1.2.7": version: 1.2.8 resolution: "@eslint/compat@npm:1.2.8" @@ -1855,6 +2320,13 @@ __metadata: languageName: node linkType: hard +"@eslint/js@npm:^9.39.1": + version: 9.39.2 + resolution: "@eslint/js@npm:9.39.2" + checksum: 362aa447266fa5717e762b2b252f177345cb0d7b2954113db9773b3a28898f7cbbc807e07f8078995e6da3f62791f7c5fa2c03517b7170a8e76613cf7fd83c92 + languageName: node + linkType: hard + "@eslint/object-schema@npm:^2.1.6": version: 2.1.6 resolution: "@eslint/object-schema@npm:2.1.6" @@ -2246,6 +2718,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.12": + version: 0.3.13 + resolution: "@jridgewell/gen-mapping@npm:0.3.13" + dependencies: + "@jridgewell/sourcemap-codec": ^1.5.0 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: f2105acefc433337145caa3c84bba286de954f61c0bc46279bbd85a9e6a02871089717fa060413cfb6a9d44189fe8313b2d1cabf3a2eb3284d208fd5f75c54ff + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.5": version: 0.3.8 resolution: "@jridgewell/gen-mapping@npm:0.3.8" @@ -2257,6 +2739,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/remapping@npm:^2.3.5": + version: 2.3.5 + resolution: "@jridgewell/remapping@npm:2.3.5" + dependencies: + "@jridgewell/gen-mapping": ^0.3.5 + "@jridgewell/trace-mapping": ^0.3.24 + checksum: 4a66a7397c3dc9c6b5c14a0024b1f98c5e1d90a0dbc1e5955b5038f2db339904df2a0ee8a66559fafb4fc23ff33700a2639fd40bbdd2e9e82b58b3bdf83738e3 + languageName: node + linkType: hard + "@jridgewell/resolve-uri@npm:^3.1.0": version: 3.1.2 resolution: "@jridgewell/resolve-uri@npm:3.1.2" @@ -2288,6 +2780,13 @@ __metadata: languageName: node linkType: hard +"@jridgewell/sourcemap-codec@npm:^1.5.0": + version: 1.5.5 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.5" + checksum: c2e36e67971f719a8a3a85ef5a5f580622437cc723c35d03ebd0c9c0b06418700ef006f58af742791f71f6a4fc68fcfaf1f6a74ec2f9a3332860e9373459dae7 + languageName: node + linkType: hard + "@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.18, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": version: 0.3.25 resolution: "@jridgewell/trace-mapping@npm:0.3.25" @@ -2298,6 +2797,16 @@ __metadata: languageName: node linkType: hard +"@jridgewell/trace-mapping@npm:^0.3.28": + version: 0.3.31 + resolution: "@jridgewell/trace-mapping@npm:0.3.31" + dependencies: + "@jridgewell/resolve-uri": ^3.1.0 + "@jridgewell/sourcemap-codec": ^1.4.14 + checksum: af8fda2431348ad507fbddf8e25f5d08c79ecc94594061ce402cf41bc5aba1a7b3e59bf0fd70a619b35f33983a3f488ceeba8faf56bff784f98bb5394a8b7d47 + languageName: node + linkType: hard + "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": version: 5.1.1-v1 resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" @@ -3072,6 +3581,167 @@ __metadata: languageName: node linkType: hard +"@rolldown/pluginutils@npm:1.0.0-beta.53": + version: 1.0.0-beta.53 + resolution: "@rolldown/pluginutils@npm:1.0.0-beta.53" + checksum: ef4dbf6061620f5749879b09a990007ac4da32b92b830c46b8c3240675c7ea6e4cce80a2d0b5e23141eef055444f66cbe51382b7bd169aa63fcae5d07f8f9451 + languageName: node + linkType: hard + +"@rollup/rollup-android-arm-eabi@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.53.3" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@rollup/rollup-android-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-android-arm64@npm:4.53.3" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-darwin-arm64@npm:4.53.3" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-darwin-x64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-darwin-x64@npm:4.53.3" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.53.3" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-freebsd-x64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-freebsd-x64@npm:4.53.3" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-gnueabihf@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.53.3" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm-musleabihf@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.53.3" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.53.3" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-arm64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.53.3" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-loong64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.53.3" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-ppc64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.53.3" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.53.3" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-riscv64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.53.3" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-linux-s390x-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.53.3" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.53.3" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + +"@rollup/rollup-linux-x64-musl@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.53.3" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + +"@rollup/rollup-openharmony-arm64@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.53.3" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-arm64-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.53.3" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-ia32-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.53.3" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-gnu@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.53.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + +"@rollup/rollup-win32-x64-msvc@npm:4.53.3": + version: 4.53.3 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.53.3" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@sideway/address@npm:^4.1.5": version: 4.1.5 resolution: "@sideway/address@npm:4.1.5" @@ -3134,7 +3804,7 @@ __metadata: languageName: node linkType: hard -"@types/babel__core@npm:^7.1.14": +"@types/babel__core@npm:^7.1.14, @types/babel__core@npm:^7.20.5": version: 7.20.5 resolution: "@types/babel__core@npm:7.20.5" dependencies: @@ -3184,6 +3854,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:1.0.8": + version: 1.0.8 + resolution: "@types/estree@npm:1.0.8" + checksum: bd93e2e415b6f182ec4da1074e1f36c480f1d26add3e696d54fb30c09bc470897e41361c8fd957bf0985024f8fbf1e6e2aff977d79352ef7eb93a5c6dcff6c11 + languageName: node + linkType: hard + "@types/estree@npm:^1.0.6": version: 1.0.7 resolution: "@types/estree@npm:1.0.7" @@ -3258,6 +3935,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^24.10.1": + version: 24.10.4 + resolution: "@types/node@npm:24.10.4" + dependencies: + undici-types: ~7.16.0 + checksum: 27db63085116aec2b92a36405ab4e8838eafd361ab05ba043e16b70e58b41572145b8078244aa5fd51b1f80076b2e7422c848c31c5a0df0dc5e20053e24720d3 + languageName: node + linkType: hard + "@types/normalize-package-data@npm:^2.4.0, @types/normalize-package-data@npm:^2.4.3": version: 2.4.4 resolution: "@types/normalize-package-data@npm:2.4.4" @@ -3265,6 +3951,15 @@ __metadata: languageName: node linkType: hard +"@types/react-dom@npm:^19.2.3": + version: 19.2.3 + resolution: "@types/react-dom@npm:19.2.3" + peerDependencies: + "@types/react": ^19.2.0 + checksum: b9c548f7378979cd8384444ae6c96f7a933b98e341c271c33e74231f27bf3082f04ad7c2927f1b1e6d8af35ccf83e549fce4978ebe0a02ded5a8803aa5f80e06 + languageName: node + linkType: hard + "@types/react@npm:^19.1.0": version: 19.1.11 resolution: "@types/react@npm:19.1.11" @@ -3313,6 +4008,26 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/eslint-plugin@npm:8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/eslint-plugin@npm:8.49.0" + dependencies: + "@eslint-community/regexpp": ^4.10.0 + "@typescript-eslint/scope-manager": 8.49.0 + "@typescript-eslint/type-utils": 8.49.0 + "@typescript-eslint/utils": 8.49.0 + "@typescript-eslint/visitor-keys": 8.49.0 + ignore: ^7.0.0 + natural-compare: ^1.4.0 + ts-api-utils: ^2.1.0 + peerDependencies: + "@typescript-eslint/parser": ^8.49.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 0bae18dda8e8c86d8da311c382642e4e321e708ca7bad1ae86e43981b1679e99e7d9bd4e32d4874e8016cbe2e39f5a255a71f16cc2c64ec3471b23161e51afec + languageName: node + linkType: hard + "@typescript-eslint/eslint-plugin@npm:^7.1.1": version: 7.18.0 resolution: "@typescript-eslint/eslint-plugin@npm:7.18.0" @@ -3336,6 +4051,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/parser@npm:8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/parser@npm:8.49.0" + dependencies: + "@typescript-eslint/scope-manager": 8.49.0 + "@typescript-eslint/types": 8.49.0 + "@typescript-eslint/typescript-estree": 8.49.0 + "@typescript-eslint/visitor-keys": 8.49.0 + debug: ^4.3.4 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: 27a157372fec09d72b9d3b266ca18cc6d4db040df6d507c5c9d30f97375e0be373d5fde9d02bcd997e40f21738edcc7a2e51d5a56e3cdd600147637bc96d920b + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^7.1.1": version: 7.18.0 resolution: "@typescript-eslint/parser@npm:7.18.0" @@ -3354,6 +4085,19 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/project-service@npm:8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/project-service@npm:8.49.0" + dependencies: + "@typescript-eslint/tsconfig-utils": ^8.49.0 + "@typescript-eslint/types": ^8.49.0 + debug: ^4.3.4 + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: 378cd7e6982820aa0bb1dfe78a8cf133dc8192ad68b4e2a3ed1615a1a1b4542a1a20da08de6f5dee2a5804192aeceabe06e6c16a0453a8aaa43e495527e6af6a + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/scope-manager@npm:5.62.0" @@ -3368,9 +4112,28 @@ __metadata: version: 7.18.0 resolution: "@typescript-eslint/scope-manager@npm:7.18.0" dependencies: - "@typescript-eslint/types": 7.18.0 - "@typescript-eslint/visitor-keys": 7.18.0 - checksum: b982c6ac13d8c86bb3b949c6b4e465f3f60557c2ccf4cc229799827d462df56b9e4d3eaed7711d79b875422fc3d71ec1ebcb5195db72134d07c619e3c5506b57 + "@typescript-eslint/types": 7.18.0 + "@typescript-eslint/visitor-keys": 7.18.0 + checksum: b982c6ac13d8c86bb3b949c6b4e465f3f60557c2ccf4cc229799827d462df56b9e4d3eaed7711d79b875422fc3d71ec1ebcb5195db72134d07c619e3c5506b57 + languageName: node + linkType: hard + +"@typescript-eslint/scope-manager@npm:8.49.0, @typescript-eslint/scope-manager@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/scope-manager@npm:8.49.0" + dependencies: + "@typescript-eslint/types": 8.49.0 + "@typescript-eslint/visitor-keys": 8.49.0 + checksum: 85aae146729547df03a2ffdb4e447a10023e7c71b426a2a5d7eb3b2a82ec1bbd8ba214d619363994c500a4cf742fbb3f3743723aa13784649e0b9e909ab4529f + languageName: node + linkType: hard + +"@typescript-eslint/tsconfig-utils@npm:8.49.0, @typescript-eslint/tsconfig-utils@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/tsconfig-utils@npm:8.49.0" + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: be26283df8cf05a3a8d17596ac52e51ec27017f27ec5588e2fa3b804c31758864732a24e1ab777ac3e3567dda9b55de5b18d318b6a6e56025baa4f117f371804 languageName: node linkType: hard @@ -3391,6 +4154,22 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/type-utils@npm:8.49.0, @typescript-eslint/type-utils@npm:^8.0.0, @typescript-eslint/type-utils@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/type-utils@npm:8.49.0" + dependencies: + "@typescript-eslint/types": 8.49.0 + "@typescript-eslint/typescript-estree": 8.49.0 + "@typescript-eslint/utils": 8.49.0 + debug: ^4.3.4 + ts-api-utils: ^2.1.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: ce5795464be57b0a1cf5970103547a148e8971fe7cf1aafb9a62b40251c670fd1b03535edfc4622c520112705cd6ee5efd88124a7432d2fbbcfc5be54fbf131f + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/types@npm:5.62.0" @@ -3405,6 +4184,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.49.0, @typescript-eslint/types@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/types@npm:8.49.0" + checksum: e604e27f9ff7dd4c7ae0060db5f506338b64cc302563841e729f4da7730a1e94176db8ae1f1c4c0c0c8df5086f127408dc050f27595a36d412f60ed0e09f5a64 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" @@ -3442,6 +4228,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.49.0, @typescript-eslint/typescript-estree@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.49.0" + dependencies: + "@typescript-eslint/project-service": 8.49.0 + "@typescript-eslint/tsconfig-utils": 8.49.0 + "@typescript-eslint/types": 8.49.0 + "@typescript-eslint/visitor-keys": 8.49.0 + debug: ^4.3.4 + minimatch: ^9.0.4 + semver: ^7.6.0 + tinyglobby: ^0.2.15 + ts-api-utils: ^2.1.0 + peerDependencies: + typescript: ">=4.8.4 <6.0.0" + checksum: a03545eefdf2487172602930fdd27c8810dc775bdfa4d9c3a45651c5f5465c5e1fc652f318c61ece7f4f35425231961434e96d4ffca84f10149fca111e1fc520 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:7.18.0": version: 7.18.0 resolution: "@typescript-eslint/utils@npm:7.18.0" @@ -3456,6 +4261,21 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:8.49.0, @typescript-eslint/utils@npm:^8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/utils@npm:8.49.0" + dependencies: + "@eslint-community/eslint-utils": ^4.7.0 + "@typescript-eslint/scope-manager": 8.49.0 + "@typescript-eslint/types": 8.49.0 + "@typescript-eslint/typescript-estree": 8.49.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: be1bdf2e4a8bb56bb0c39ba8b8a5f1fc187fb17a53af0ef4d50be95914027076dfac385b54d969fdaa2a42fa8a95f31d105457a3768875054a5507ebe6f6257a + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:^5.10.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" @@ -3494,6 +4314,32 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.49.0": + version: 8.49.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.49.0" + dependencies: + "@typescript-eslint/types": 8.49.0 + eslint-visitor-keys: ^4.2.1 + checksum: 446d6345d9702bcdf8713a47561ea52657bbec1c8170b1559d9462e1d815b122adff35f1cc778ecb94f4459d51ac7aac7cafe9ec8d8319b2c7d7984a0edee6ba + languageName: node + linkType: hard + +"@vitejs/plugin-react@npm:^5.1.1": + version: 5.1.2 + resolution: "@vitejs/plugin-react@npm:5.1.2" + dependencies: + "@babel/core": ^7.28.5 + "@babel/plugin-transform-react-jsx-self": ^7.27.1 + "@babel/plugin-transform-react-jsx-source": ^7.27.1 + "@rolldown/pluginutils": 1.0.0-beta.53 + "@types/babel__core": ^7.20.5 + react-refresh: ^0.18.0 + peerDependencies: + vite: ^4.2.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + checksum: 57f4b54d60c30943befe5e2e2a67e9601611a1ae38fc886aeedc18f6fbab008c9afc2f8adf62d1e59b22946de73e2352d0f741a5e5c82c2f4db8998d5c9b8259 + languageName: node + linkType: hard + "@vscode/sudo-prompt@npm:^9.0.0": version: 9.3.1 resolution: "@vscode/sudo-prompt@npm:9.3.1" @@ -4122,6 +4968,13 @@ __metadata: languageName: node linkType: hard +"birecord@npm:^0.1.1": + version: 0.1.1 + resolution: "birecord@npm:0.1.1" + checksum: 08a77636913171d274abd3c68d0a0d8352964c912cbc92b609151e2e097bb696e16289f6b7f5566921287892bbc5bcdae33b3a342438961792203d0d4ff73037 + languageName: node + linkType: hard + "bl@npm:^4.1.0": version: 4.1.0 resolution: "bl@npm:4.1.0" @@ -4673,6 +5526,13 @@ __metadata: languageName: node linkType: hard +"compare-versions@npm:^6.1.1": + version: 6.1.1 + resolution: "compare-versions@npm:6.1.1" + checksum: 73fe6c4f52d22efe28f0a3be10df2afd704e10b3593360cd963e86b33a7a263c263b41a1361b69c30a0fe68bfa70fef90860c1cf2ef41502629d4402890fcd57 + languageName: node + linkType: hard + "compressible@npm:~2.0.18": version: 2.0.18 resolution: "compressible@npm:2.0.18" @@ -5665,6 +6525,95 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.25.0": + version: 0.25.12 + resolution: "esbuild@npm:0.25.12" + dependencies: + "@esbuild/aix-ppc64": 0.25.12 + "@esbuild/android-arm": 0.25.12 + "@esbuild/android-arm64": 0.25.12 + "@esbuild/android-x64": 0.25.12 + "@esbuild/darwin-arm64": 0.25.12 + "@esbuild/darwin-x64": 0.25.12 + "@esbuild/freebsd-arm64": 0.25.12 + "@esbuild/freebsd-x64": 0.25.12 + "@esbuild/linux-arm": 0.25.12 + "@esbuild/linux-arm64": 0.25.12 + "@esbuild/linux-ia32": 0.25.12 + "@esbuild/linux-loong64": 0.25.12 + "@esbuild/linux-mips64el": 0.25.12 + "@esbuild/linux-ppc64": 0.25.12 + "@esbuild/linux-riscv64": 0.25.12 + "@esbuild/linux-s390x": 0.25.12 + "@esbuild/linux-x64": 0.25.12 + "@esbuild/netbsd-arm64": 0.25.12 + "@esbuild/netbsd-x64": 0.25.12 + "@esbuild/openbsd-arm64": 0.25.12 + "@esbuild/openbsd-x64": 0.25.12 + "@esbuild/openharmony-arm64": 0.25.12 + "@esbuild/sunos-x64": 0.25.12 + "@esbuild/win32-arm64": 0.25.12 + "@esbuild/win32-ia32": 0.25.12 + "@esbuild/win32-x64": 0.25.12 + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 3d1dc181338e2c44f4374508e9d0da3e7ae90f65d7f3f5d8076ff401a1726c5c9ecc86cfc825249349f1652e12d5ae13f02bcaa4d9487c88c7a11167f52ba353 + languageName: node + linkType: hard + "escalade@npm:^3.1.1, escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -5817,6 +6766,28 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-dom@npm:^2.3.13": + version: 2.3.13 + resolution: "eslint-plugin-react-dom@npm:2.3.13" + dependencies: + "@eslint-react/ast": 2.3.13 + "@eslint-react/core": 2.3.13 + "@eslint-react/eff": 2.3.13 + "@eslint-react/shared": 2.3.13 + "@eslint-react/var": 2.3.13 + "@typescript-eslint/scope-manager": ^8.49.0 + "@typescript-eslint/types": ^8.49.0 + "@typescript-eslint/utils": ^8.49.0 + compare-versions: ^6.1.1 + string-ts: ^2.3.1 + ts-pattern: ^5.9.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: ddd11e33d11c9ff9d6aa5437fe7798d22dca2359997d975fcbb3ca83e1113bae4bc7fb0e43bbbf338a576160d8fb2a900d4b8b818521c21c1c06e2523300ae3c + languageName: node + linkType: hard + "eslint-plugin-react-hooks@npm:^5.2.0": version: 5.2.0 resolution: "eslint-plugin-react-hooks@npm:5.2.0" @@ -5826,6 +6797,21 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-hooks@npm:^7.0.1": + version: 7.0.1 + resolution: "eslint-plugin-react-hooks@npm:7.0.1" + dependencies: + "@babel/core": ^7.24.4 + "@babel/parser": ^7.24.4 + hermes-parser: ^0.25.1 + zod: ^3.25.0 || ^4.0.0 + zod-validation-error: ^3.5.0 || ^4.0.0 + peerDependencies: + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 + checksum: d2216919137e6593309640c47d5cbeb903a2989b2ddc1197107b4b1967a8ec2e696d9586015c02cfa2468bdb4ce28b6866f9fd2b555ccbec635556f0a4e1f434 + languageName: node + linkType: hard + "eslint-plugin-react-native-globals@npm:^0.1.1": version: 0.1.2 resolution: "eslint-plugin-react-native-globals@npm:0.1.2" @@ -5844,6 +6830,40 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-react-refresh@npm:^0.4.24": + version: 0.4.25 + resolution: "eslint-plugin-react-refresh@npm:0.4.25" + peerDependencies: + eslint: ">=8.40" + checksum: 173175819b6e8b1f2cc6ac87084f5f1e99b3f57999fb5a3a91f176af669f3fec38dd17bfd6ddc5bbc529c3fece0802bbfa51995ff3f84d430fef5ad36c91b1ce + languageName: node + linkType: hard + +"eslint-plugin-react-x@npm:^2.3.13": + version: 2.3.13 + resolution: "eslint-plugin-react-x@npm:2.3.13" + dependencies: + "@eslint-react/ast": 2.3.13 + "@eslint-react/core": 2.3.13 + "@eslint-react/eff": 2.3.13 + "@eslint-react/shared": 2.3.13 + "@eslint-react/var": 2.3.13 + "@typescript-eslint/scope-manager": ^8.49.0 + "@typescript-eslint/type-utils": ^8.49.0 + "@typescript-eslint/types": ^8.49.0 + "@typescript-eslint/utils": ^8.49.0 + compare-versions: ^6.1.1 + is-immutable-type: ^5.0.1 + string-ts: ^2.3.1 + ts-api-utils: ^2.1.0 + ts-pattern: ^5.9.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: ef0319bc78cdac2c710e5535e11567cbe98eb26b31ca9d07806f6190e306842d90f3ea13cba140f5bec731d712da7d5e17881769aee900d7a8dc8d57391e4a52 + languageName: node + linkType: hard + "eslint-plugin-react@npm:^7.30.1": version: 7.37.5 resolution: "eslint-plugin-react@npm:7.37.5" @@ -5913,6 +6933,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.2.1": + version: 4.2.1 + resolution: "eslint-visitor-keys@npm:4.2.1" + checksum: 3a77e3f99a49109f6fb2c5b7784bc78f9743b834d238cdba4d66c602c6b52f19ed7bcd0a5c5dbbeae3a8689fd785e76c001799f53d2228b278282cf9f699fff5 + languageName: node + linkType: hard + "eslint@npm:^9.22.0": version: 9.24.0 resolution: "eslint@npm:9.24.0" @@ -6224,6 +7251,18 @@ __metadata: languageName: node linkType: hard +"fdir@npm:^6.5.0": + version: 6.5.0 + resolution: "fdir@npm:6.5.0" + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + checksum: bd537daa9d3cd53887eed35efa0eab2dbb1ca408790e10e024120e7a36c6e9ae2b33710cb8381e35def01bc9c1d7eaba746f886338413e68ff6ebaee07b9a6e8 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -6401,7 +7440,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:^2.3.2": +"fsevents@npm:^2.3.2, fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -6411,7 +7450,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@^2.3.2#~builtin": +"fsevents@patch:fsevents@^2.3.2#~builtin, fsevents@patch:fsevents@~2.3.2#~builtin, fsevents@patch:fsevents@~2.3.3#~builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#~builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -6701,6 +7740,13 @@ __metadata: languageName: node linkType: hard +"globals@npm:^16.5.0": + version: 16.5.0 + resolution: "globals@npm:16.5.0" + checksum: e0363245cfc6e36ac6bf940415160a05d66e7985fa3856d5383ad49292b6d249d80fd03759e09d6491109648a121849b23b77c7391a11862923e6995268a7cd6 + languageName: node + linkType: hard + "globalthis@npm:^1.0.4": version: 1.0.4 resolution: "globalthis@npm:1.0.4" @@ -6876,6 +7922,13 @@ __metadata: languageName: node linkType: hard +"hermes-estree@npm:0.25.1": + version: 0.25.1 + resolution: "hermes-estree@npm:0.25.1" + checksum: 97f42e9178dff61db017810b4f79f5a2cdbb3cde94b7d99ba84ed632ee2adfcae2244555587951b3151fc036676c68f48f57fbe2b49e253eb1f3f904d284a8b0 + languageName: node + linkType: hard + "hermes-estree@npm:0.28.1": version: 0.28.1 resolution: "hermes-estree@npm:0.28.1" @@ -6933,6 +7986,15 @@ __metadata: languageName: node linkType: hard +"hermes-parser@npm:^0.25.1": + version: 0.25.1 + resolution: "hermes-parser@npm:0.25.1" + dependencies: + hermes-estree: 0.25.1 + checksum: 4edcfaa3030931343b540182b83c432aba4cdcb1925952521ab4cfb7ab90c2c1543dfcb042ccd51d5e81e4bfe2809420e85902c2ff95ef7c6c64644ce17138ea + languageName: node + linkType: hard + "hosted-git-info@npm:^4.0.1": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" @@ -7051,6 +8113,13 @@ __metadata: languageName: node linkType: hard +"ignore@npm:^7.0.0": + version: 7.0.5 + resolution: "ignore@npm:7.0.5" + checksum: d0862bf64d3d58bf34d5fb0a9f725bec9ca5ce8cd1aecc8f28034269e8f69b8009ffd79ca3eda96962a6a444687781cd5efdb8c7c8ddc0a6996e36d31c217f14 + languageName: node + linkType: hard + "image-size@npm:^1.0.2": version: 1.2.1 resolution: "image-size@npm:1.2.1" @@ -7417,6 +8486,20 @@ __metadata: languageName: node linkType: hard +"is-immutable-type@npm:^5.0.1": + version: 5.0.1 + resolution: "is-immutable-type@npm:5.0.1" + dependencies: + "@typescript-eslint/type-utils": ^8.0.0 + ts-api-utils: ^2.0.0 + ts-declaration-location: ^1.0.4 + peerDependencies: + eslint: "*" + typescript: ">=4.7.4" + checksum: ff9c6fabdfcf159c2931360e5f9a1cc1ed5577c4b0dc16b3c6fca178edb1f7a4932b6bb53955ccaac790865b3d90401940d565e5eee32bd2f88f4f0af36b7863 + languageName: node + linkType: hard + "is-in-ci@npm:^1.0.0": version: 1.0.0 resolution: "is-in-ci@npm:1.0.0" @@ -9858,6 +10941,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.11": + version: 3.3.11 + resolution: "nanoid@npm:3.3.11" + bin: + nanoid: bin/nanoid.cjs + checksum: 3be20d8866a57a6b6d218e82549711c8352ed969f9ab3c45379da28f405363ad4c9aeb0b39e9abc101a529ca65a72ff9502b00bf74a912c4b64a9d62dfd26c29 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -10597,6 +11689,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.3": + version: 4.0.3 + resolution: "picomatch@npm:4.0.3" + checksum: 6817fb74eb745a71445debe1029768de55fd59a42b75606f478ee1d0dc1aa6e78b711d041a7c9d5550e042642029b7f373dc1a43b224c4b7f12d23436735dba0 + languageName: node + linkType: hard + "pirates@npm:^4.0.4": version: 4.0.7 resolution: "pirates@npm:4.0.7" @@ -10629,6 +11728,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.5.6": + version: 8.5.6 + resolution: "postcss@npm:8.5.6" + dependencies: + nanoid: ^3.3.11 + picocolors: ^1.1.1 + source-map-js: ^1.2.1 + checksum: 20f3b5d673ffeec2b28d65436756d31ee33f65b0a8bedb3d32f556fbd5973be38c3a7fb5b959a5236c60a5db7b91b0a6b14ffaac0d717dce1b903b964ee1c1bb + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -10864,6 +11974,17 @@ __metadata: languageName: node linkType: hard +"react-dom@npm:^19.1.0": + version: 19.2.3 + resolution: "react-dom@npm:19.2.3" + dependencies: + scheduler: ^0.27.0 + peerDependencies: + react: ^19.2.3 + checksum: cb1f95df052802f5332cae78303b7fc6f58092d5c7f8d01f0401188b2e0157c1d273a041b900fcc4801f730c70ed17249bd5af170038692878ebe257f641488b + languageName: node + linkType: hard + "react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" @@ -10963,6 +12084,29 @@ __metadata: languageName: unknown linkType: soft +"react-native-enriched-web-example@workspace:apps/example-web": + version: 0.0.0-use.local + resolution: "react-native-enriched-web-example@workspace:apps/example-web" + dependencies: + "@eslint/js": ^9.39.1 + "@types/node": ^24.10.1 + "@types/react": ^19.1.0 + "@types/react-dom": ^19.2.3 + "@vitejs/plugin-react": ^5.1.1 + eslint: ^9.22.0 + eslint-plugin-react-dom: ^2.3.13 + eslint-plugin-react-hooks: ^7.0.1 + eslint-plugin-react-refresh: ^0.4.24 + eslint-plugin-react-x: ^2.3.13 + globals: ^16.5.0 + react: ^19.1.0 + react-dom: ^19.1.0 + typescript: ^5.8.3 + typescript-eslint: ^8.46.4 + vite: ^7.2.4 + languageName: unknown + linkType: soft + "react-native-enriched@workspace:.": version: 0.0.0-use.local resolution: "react-native-enriched@workspace:." @@ -11125,6 +12269,13 @@ __metadata: languageName: node linkType: hard +"react-refresh@npm:^0.18.0": + version: 0.18.0 + resolution: "react-refresh@npm:0.18.0" + checksum: c27d236e7b38f4a09c2b0134e6227fa62e2b71edad5f22bab40962fc0deba9e0f16930609a82b6a021ef4b4f0a4d405cf0fbb2b51a0f478809619a8226f20379 + languageName: node + linkType: hard + "react@npm:19.1.0": version: 19.1.0 resolution: "react@npm:19.1.0" @@ -11139,6 +12290,13 @@ __metadata: languageName: node linkType: hard +"react@npm:^19.1.0": + version: 19.2.3 + resolution: "react@npm:19.2.3" + checksum: 506e369ae13cb46b7f303c0201aadf856642f482cdf5b1c3730c3a6d1762fd5a3ae1dd31196a4686bfbbe56456dcd0c48a4656c75cbcb45620e3028c54789ae9 + languageName: node + linkType: hard + "read-package-up@npm:^11.0.0": version: 11.0.0 resolution: "read-package-up@npm:11.0.0" @@ -11553,6 +12711,87 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.43.0": + version: 4.53.3 + resolution: "rollup@npm:4.53.3" + dependencies: + "@rollup/rollup-android-arm-eabi": 4.53.3 + "@rollup/rollup-android-arm64": 4.53.3 + "@rollup/rollup-darwin-arm64": 4.53.3 + "@rollup/rollup-darwin-x64": 4.53.3 + "@rollup/rollup-freebsd-arm64": 4.53.3 + "@rollup/rollup-freebsd-x64": 4.53.3 + "@rollup/rollup-linux-arm-gnueabihf": 4.53.3 + "@rollup/rollup-linux-arm-musleabihf": 4.53.3 + "@rollup/rollup-linux-arm64-gnu": 4.53.3 + "@rollup/rollup-linux-arm64-musl": 4.53.3 + "@rollup/rollup-linux-loong64-gnu": 4.53.3 + "@rollup/rollup-linux-ppc64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-gnu": 4.53.3 + "@rollup/rollup-linux-riscv64-musl": 4.53.3 + "@rollup/rollup-linux-s390x-gnu": 4.53.3 + "@rollup/rollup-linux-x64-gnu": 4.53.3 + "@rollup/rollup-linux-x64-musl": 4.53.3 + "@rollup/rollup-openharmony-arm64": 4.53.3 + "@rollup/rollup-win32-arm64-msvc": 4.53.3 + "@rollup/rollup-win32-ia32-msvc": 4.53.3 + "@rollup/rollup-win32-x64-gnu": 4.53.3 + "@rollup/rollup-win32-x64-msvc": 4.53.3 + "@types/estree": 1.0.8 + fsevents: ~2.3.2 + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 7c5ed8f30285c731e00007726c99c6ad1f07e398d09afad53c648f32017b22b9f5d60ac99c65d60ad5334e69ffeeaa835fff88d26f21c8f1237e3d936a664056 + languageName: node + linkType: hard + "run-applescript@npm:^7.0.0": version: 7.0.0 resolution: "run-applescript@npm:7.0.0" @@ -11647,7 +12886,7 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:0.27.0": +"scheduler@npm:0.27.0, scheduler@npm:^0.27.0": version: 0.27.0 resolution: "scheduler@npm:0.27.0" checksum: 92644ead0a9443e20f9d24132fe93675b156209b9eeb35ea245f8a86768d0cc0fcca56f341eeef21d9b6dd8e72d6d5e260eb5a41d34b05cd605dd45a29f572ef @@ -11937,6 +13176,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.1": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 4eb0cd997cdf228bc253bcaff9340afeb706176e64868ecd20efbe6efea931465f43955612346d6b7318789e5265bdc419bc7669c1cebe3db0eb255f57efa76b + languageName: node + linkType: hard + "source-map-support@npm:0.5.13": version: 0.5.13 resolution: "source-map-support@npm:0.5.13" @@ -12098,6 +13344,13 @@ __metadata: languageName: node linkType: hard +"string-ts@npm:^2.3.1": + version: 2.3.1 + resolution: "string-ts@npm:2.3.1" + checksum: a8b653bb916c6ca56a958e6c73ddb9d54009ff252208e8a7f30fe8a77019a1e1c4bb25d58f75ad0964d4198986707378a59213e83465c019e87ae5322ba215b6 + languageName: node + linkType: hard + "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": version: 4.2.3 resolution: "string-width@npm:4.2.3" @@ -12425,6 +13678,16 @@ __metadata: languageName: node linkType: hard +"tinyglobby@npm:^0.2.15": + version: 0.2.15 + resolution: "tinyglobby@npm:0.2.15" + dependencies: + fdir: ^6.5.0 + picomatch: ^4.0.3 + checksum: 0e33b8babff966c6ab86e9b825a350a6a98a63700fa0bb7ae6cf36a7770a508892383adc272f7f9d17aaf46a9d622b455e775b9949a3f951eaaf5dfb26331d44 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -12473,6 +13736,33 @@ __metadata: languageName: node linkType: hard +"ts-api-utils@npm:^2.0.0, ts-api-utils@npm:^2.1.0": + version: 2.1.0 + resolution: "ts-api-utils@npm:2.1.0" + peerDependencies: + typescript: ">=4.8.4" + checksum: 5b1ef89105654d93d67582308bd8dfe4bbf6874fccbcaa729b08fbb00a940fd4c691ca6d0d2b18c3c70878d9a7e503421b7cc473dbc3d0d54258b86401d4b15d + languageName: node + linkType: hard + +"ts-declaration-location@npm:^1.0.4": + version: 1.0.7 + resolution: "ts-declaration-location@npm:1.0.7" + dependencies: + picomatch: ^4.0.2 + peerDependencies: + typescript: ">=4.0.0" + checksum: d1bfa610fae8175389af580f25e8aab5dd5c7fb8daf83560fa8d555da8ef03542dde8552a9c3d1fb4beaed8670db863083c61413846d91cb3e5caea6636e45f7 + languageName: node + linkType: hard + +"ts-pattern@npm:^5.9.0": + version: 5.9.0 + resolution: "ts-pattern@npm:5.9.0" + checksum: cc2bce3fb99cf20a1b6640b44a086b936c1b366ea59ed700069e9540d2b1b98a103deeb8777a7996f40e461b0bb5abfab613d8423635debf25a294d4cc7d153b + languageName: node + linkType: hard + "tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -12690,6 +13980,21 @@ __metadata: languageName: node linkType: hard +"typescript-eslint@npm:^8.46.4": + version: 8.49.0 + resolution: "typescript-eslint@npm:8.49.0" + dependencies: + "@typescript-eslint/eslint-plugin": 8.49.0 + "@typescript-eslint/parser": 8.49.0 + "@typescript-eslint/typescript-estree": 8.49.0 + "@typescript-eslint/utils": 8.49.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: ">=4.8.4 <6.0.0" + checksum: fd91cffcf3c5de73a9ead2253dcb8516ed664fc9179d26c019e6be53f4d4429e280dd5c783c68789a4a2db34712e569468a6c9c7613fc918a310687ca53b91b1 + languageName: node + linkType: hard + "typescript@npm:^5.8.3": version: 5.9.2 resolution: "typescript@npm:5.9.2" @@ -12745,6 +14050,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~7.16.0": + version: 7.16.0 + resolution: "undici-types@npm:7.16.0" + checksum: 1ef68fc6c5bad200c8b6f17de8e5bc5cfdcadc164ba8d7208cd087cfa8583d922d8316a7fd76c9a658c22b4123d3ff847429185094484fbc65377d695c905857 + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.1 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.1" @@ -12919,6 +14231,61 @@ __metadata: languageName: node linkType: hard +"vite@npm:^7.2.4": + version: 7.2.7 + resolution: "vite@npm:7.2.7" + dependencies: + esbuild: ^0.25.0 + fdir: ^6.5.0 + fsevents: ~2.3.3 + picomatch: ^4.0.3 + postcss: ^8.5.6 + rollup: ^4.43.0 + tinyglobby: ^0.2.15 + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 181b04ef3baad6c2aa452861c1f0885a39445bcb84369e63a5e2b864b9a4c9a4b301c457cca4169f18076cf9ff8e5ab986f2d6c361f9d8fb1110e51b96d18866 + languageName: node + linkType: hard + "vlq@npm:^1.0.0": version: 1.0.1 resolution: "vlq@npm:1.0.1" @@ -13317,3 +14684,19 @@ __metadata: checksum: 1c474d4b30a8c130e679279c5c2c33a0d48eba9684ffa0252cc64846c121fb56c3f25457fef902edbe1e2d7a7872130073a9fc8e795299d75e13fa3f5f548f1b languageName: node linkType: hard + +"zod-validation-error@npm:^3.5.0 || ^4.0.0": + version: 4.0.2 + resolution: "zod-validation-error@npm:4.0.2" + peerDependencies: + zod: ^3.25.0 || ^4.0.0 + checksum: f16ccbc08c5345f28788beea814d82e1f047978414f1511bd97a171580d7dbe63cecc368caa352c1391e201539288c241d61145e57c6b84cb19112dc88a72098 + languageName: node + linkType: hard + +"zod@npm:^3.25.0 || ^4.0.0, zod@npm:^4.1.13": + version: 4.1.13 + resolution: "zod@npm:4.1.13" + checksum: e5459280d46567df0adc188b0c687d425e616a206d4a73ee3bacf62d246f5546e24ef45790c7c4762d3ce7659c5e41052a29445d32d0d272410be9fe23162d03 + languageName: node + linkType: hard From 98723879e9bbf3ce0f107c5123a06b3d7275abe7 Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek Date: Tue, 16 Dec 2025 10:33:00 +0100 Subject: [PATCH 2/6] feat: add CI job for example web build --- .github/workflows/ci.yml | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 354001449..70ddc92a0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -53,6 +53,37 @@ jobs: - name: Build package run: yarn prepare + build-web: + runs-on: ubuntu-latest + env: + TURBO_CACHE_DIR: .turbo/web + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup + uses: ./.github/actions/setup + + - name: Cache turborepo for Web + uses: actions/cache@v4 + with: + path: ${{ env.TURBO_CACHE_DIR }} + key: ${{ runner.os }}-turborepo-web-${{ hashFiles('yarn.lock') }} + restore-keys: | + ${{ runner.os }}-turborepo-web- + + - name: Check turborepo cache for Web + run: | + TURBO_CACHE_STATUS=$(node -p "($(yarn turbo run build:web --cache-dir="${{ env.TURBO_CACHE_DIR }}" --dry=json)).tasks.find(t => t.task === 'build:web').cache.status") + + if [[ $TURBO_CACHE_STATUS == "HIT" ]]; then + echo "turbo_cache_hit=1" >> $GITHUB_ENV + fi + + - name: Build example for Web + run: | + yarn turbo run build:web --cache-dir="${{ env.TURBO_CACHE_DIR }}" + build-android: runs-on: ubuntu-latest env: From 5a618256c96ecfcdf893fdab1618dc82824d9ffb Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek Date: Tue, 16 Dec 2025 10:38:51 +0100 Subject: [PATCH 3/6] feat: update README and package.json for example-web script --- apps/example-web/README.md | 2 +- package.json | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/example-web/README.md b/apps/example-web/README.md index a9f51482c..2b6b456df 100644 --- a/apps/example-web/README.md +++ b/apps/example-web/README.md @@ -18,7 +18,7 @@ Run the following command from the root of the monorepo or from the `apps/exampl ```sh # From root - using Turbo -turbo run dev +yarn example-web dev # OR directly in this workspace yarn dev diff --git a/package.json b/package.json index b1ae88b77..94de32cf7 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ ], "scripts": { "example": "yarn workspace react-native-enriched-example", + "example-web": "yarn workspace react-native-enriched-web-example", "test": "jest --passWithNoTests", "typecheck": "tsc", "lint": "eslint \"**/*.{js,ts,tsx}\"", From db6c72591334b8eeee2d04aa37722c9a4b9f4df1 Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek Date: Tue, 16 Dec 2025 11:29:57 +0100 Subject: [PATCH 4/6] feat: move example to apps folder --- .github/workflows/ci.yml | 8 +- .gitignore | 6 +- CONTRIBUTING.md | 8 +- {example => apps/example}/.bundle/config | 0 {example => apps/example}/.watchmanconfig | 0 {example => apps/example}/Gemfile | 0 {example => apps/example}/Gemfile.lock | 0 {example => apps/example}/README.md | 0 .../example}/android/app/build.gradle | 0 .../example}/android/app/debug.keystore | Bin .../example}/android/app/proguard-rules.pro | 0 .../android/app/src/debug/AndroidManifest.xml | 0 .../android/app/src/main/AndroidManifest.xml | 0 .../src/main/assets/custom/FontAwesome.json | 0 .../app/src/main/assets/custom/OFL.txt | 188 +++++++++--------- .../app/src/main/assets/custom/README.txt | 0 .../main/assets/fonts/CascadiaCode-Bold.ttf | Bin .../assets/fonts/CascadiaCode-BoldItalic.ttf | Bin .../assets/fonts/CascadiaCode-ExtraLight.ttf | Bin .../fonts/CascadiaCode-ExtraLightItalic.ttf | Bin .../CascadiaCode-Italic-VariableFont_wght.ttf | Bin .../main/assets/fonts/CascadiaCode-Italic.ttf | Bin .../main/assets/fonts/CascadiaCode-Light.ttf | Bin .../assets/fonts/CascadiaCode-LightItalic.ttf | Bin .../main/assets/fonts/CascadiaCode-Medium.ttf | Bin .../fonts/CascadiaCode-MediumItalic.ttf | Bin .../assets/fonts/CascadiaCode-Regular.ttf | Bin .../assets/fonts/CascadiaCode-SemiBold.ttf | Bin .../fonts/CascadiaCode-SemiBoldItalic.ttf | Bin .../fonts/CascadiaCode-VariableFont_wght.ttf | Bin .../app/src/main/assets/fonts/FontAwesome.ttf | Bin .../src/main/assets/fonts/Nunito-Black.ttf | Bin .../main/assets/fonts/Nunito-BlackItalic.ttf | Bin .../app/src/main/assets/fonts/Nunito-Bold.ttf | Bin .../main/assets/fonts/Nunito-BoldItalic.ttf | Bin .../main/assets/fonts/Nunito-ExtraBold.ttf | Bin .../assets/fonts/Nunito-ExtraBoldItalic.ttf | Bin .../main/assets/fonts/Nunito-ExtraLight.ttf | Bin .../assets/fonts/Nunito-ExtraLightItalic.ttf | Bin .../fonts/Nunito-Italic-VariableFont_wght.ttf | Bin .../src/main/assets/fonts/Nunito-Italic.ttf | Bin .../src/main/assets/fonts/Nunito-Light.ttf | Bin .../main/assets/fonts/Nunito-LightItalic.ttf | Bin .../src/main/assets/fonts/Nunito-Medium.ttf | Bin .../main/assets/fonts/Nunito-MediumItalic.ttf | Bin .../src/main/assets/fonts/Nunito-Regular.ttf | Bin .../src/main/assets/fonts/Nunito-SemiBold.ttf | Bin .../assets/fonts/Nunito-SemiBoldItalic.ttf | Bin .../assets/fonts/Nunito-VariableFont_wght.ttf | Bin .../enriched/example/MainActivity.kt | 0 .../enriched/example/MainApplication.kt | 0 .../res/drawable/rn_edit_text_material.xml | 0 .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin .../res/mipmap-hdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin .../res/mipmap-mdpi/ic_launcher_round.png | Bin .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin .../res/mipmap-xhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin .../app/src/main/res/values/strings.xml | 0 .../app/src/main/res/values/styles.xml | 0 .../example}/android/build.gradle | 0 .../example}/android/gradle.properties | 0 .../android/gradle/wrapper/gradle-wrapper.jar | Bin .../gradle/wrapper/gradle-wrapper.properties | 0 {example => apps/example}/android/gradlew | 0 {example => apps/example}/android/gradlew.bat | 0 .../android/link-assets-manifest.json | 0 .../example}/android/settings.gradle | 0 {example => apps/example}/app.json | 0 .../CascadiaCode-Italic-VariableFont_wght.ttf | Bin .../CascadiaCode-VariableFont_wght.ttf | Bin .../assets/fonts/Cascadia_Code/OFL.txt | 188 +++++++++--------- .../assets/fonts/Cascadia_Code/README.txt | 0 .../static/CascadiaCode-Bold.ttf | Bin .../static/CascadiaCode-BoldItalic.ttf | Bin .../static/CascadiaCode-ExtraLight.ttf | Bin .../static/CascadiaCode-ExtraLightItalic.ttf | Bin .../static/CascadiaCode-Italic.ttf | Bin .../static/CascadiaCode-Light.ttf | Bin .../static/CascadiaCode-LightItalic.ttf | Bin .../static/CascadiaCode-Medium.ttf | Bin .../static/CascadiaCode-MediumItalic.ttf | Bin .../static/CascadiaCode-Regular.ttf | Bin .../static/CascadiaCode-SemiBold.ttf | Bin .../static/CascadiaCode-SemiBoldItalic.ttf | Bin .../Nunito-Italic-VariableFont_wght.ttf | Bin .../fonts/Nunito/Nunito-VariableFont_wght.ttf | Bin .../example}/assets/fonts/Nunito/OFL.txt | 186 ++++++++--------- .../example}/assets/fonts/Nunito/README.txt | 0 .../fonts/Nunito/static/Nunito-Black.ttf | Bin .../Nunito/static/Nunito-BlackItalic.ttf | Bin .../fonts/Nunito/static/Nunito-Bold.ttf | Bin .../fonts/Nunito/static/Nunito-BoldItalic.ttf | Bin .../fonts/Nunito/static/Nunito-ExtraBold.ttf | Bin .../Nunito/static/Nunito-ExtraBoldItalic.ttf | Bin .../fonts/Nunito/static/Nunito-ExtraLight.ttf | Bin .../Nunito/static/Nunito-ExtraLightItalic.ttf | Bin .../fonts/Nunito/static/Nunito-Italic.ttf | Bin .../fonts/Nunito/static/Nunito-Light.ttf | Bin .../Nunito/static/Nunito-LightItalic.ttf | Bin .../fonts/Nunito/static/Nunito-Medium.ttf | Bin .../Nunito/static/Nunito-MediumItalic.ttf | Bin .../fonts/Nunito/static/Nunito-Regular.ttf | Bin .../fonts/Nunito/static/Nunito-SemiBold.ttf | Bin .../Nunito/static/Nunito-SemiBoldItalic.ttf | Bin .../example}/assets/icons/FontAwesome.json | 0 .../example}/assets/icons/FontAwesome.ttf | Bin {example => apps/example}/babel.config.js | 4 +- {example => apps/example}/index.js | 0 {example => apps/example}/ios/.xcode.env | 0 .../project.pbxproj | 0 .../EnrichedTextInputExample.xcscheme | 0 .../ReactNativeRichTextEditorExample.xcscheme | 0 .../contents.xcworkspacedata | 0 .../AppDelegate.swift | 0 .../AppIcon.appiconset/Contents.json | 0 .../Images.xcassets/Contents.json | 0 .../ios/EnrichedTextInputExample/Info.plist | 0 .../LaunchScreen.storyboard | 0 .../PrivacyInfo.xcprivacy | 0 {example => apps/example}/ios/Podfile | 0 {example => apps/example}/ios/Podfile.lock | 0 .../example}/ios/link-assets-manifest.json | 0 {example => apps/example}/jest.config.js | 0 {example => apps/example}/metro.config.js | 4 +- {example => apps/example}/package.json | 0 .../example}/react-native.config.js | 4 +- {example => apps/example}/src/App.tsx | 0 .../example}/src/components/Button.tsx | 0 .../example}/src/components/HtmlSection.tsx | 0 .../example}/src/components/Icon.tsx | 0 .../example}/src/components/ImageModal.tsx | 0 .../example}/src/components/LinkModal.tsx | 0 .../example}/src/components/MentionPopup.tsx | 0 .../example}/src/components/Toolbar.tsx | 0 .../example}/src/components/ToolbarButton.tsx | 0 .../example}/src/components/ValueModal.tsx | 0 .../example}/src/hooks/useChannelMention.ts | 0 .../example}/src/hooks/useUserMention.ts | 0 .../src/utils/prepareImageDimensions.ts | 0 package.json | 10 +- tsconfig.build.json | 2 +- turbo.json | 18 +- 147 files changed, 313 insertions(+), 313 deletions(-) rename {example => apps/example}/.bundle/config (100%) rename {example => apps/example}/.watchmanconfig (100%) rename {example => apps/example}/Gemfile (100%) rename {example => apps/example}/Gemfile.lock (100%) rename {example => apps/example}/README.md (100%) rename {example => apps/example}/android/app/build.gradle (100%) rename {example => apps/example}/android/app/debug.keystore (100%) rename {example => apps/example}/android/app/proguard-rules.pro (100%) rename {example => apps/example}/android/app/src/debug/AndroidManifest.xml (100%) rename {example => apps/example}/android/app/src/main/AndroidManifest.xml (100%) rename {example => apps/example}/android/app/src/main/assets/custom/FontAwesome.json (100%) rename {example => apps/example}/android/app/src/main/assets/custom/OFL.txt (97%) rename {example => apps/example}/android/app/src/main/assets/custom/README.txt (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Bold.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-BoldItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-ExtraLight.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-ExtraLightItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Italic-VariableFont_wght.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Italic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Light.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-LightItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Medium.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-MediumItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-Regular.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-SemiBold.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-SemiBoldItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/CascadiaCode-VariableFont_wght.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/FontAwesome.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Black.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Bold.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Italic-VariableFont_wght.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Italic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Light.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Medium.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-Regular.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf (100%) rename {example => apps/example}/android/app/src/main/assets/fonts/Nunito-VariableFont_wght.ttf (100%) rename {example => apps/example}/android/app/src/main/java/swmansion/enriched/example/MainActivity.kt (100%) rename {example => apps/example}/android/app/src/main/java/swmansion/enriched/example/MainApplication.kt (100%) rename {example => apps/example}/android/app/src/main/res/drawable/rn_edit_text_material.xml (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-hdpi/ic_launcher.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-mdpi/ic_launcher.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png (100%) rename {example => apps/example}/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png (100%) rename {example => apps/example}/android/app/src/main/res/values/strings.xml (100%) rename {example => apps/example}/android/app/src/main/res/values/styles.xml (100%) rename {example => apps/example}/android/build.gradle (100%) rename {example => apps/example}/android/gradle.properties (100%) rename {example => apps/example}/android/gradle/wrapper/gradle-wrapper.jar (100%) rename {example => apps/example}/android/gradle/wrapper/gradle-wrapper.properties (100%) rename {example => apps/example}/android/gradlew (100%) rename {example => apps/example}/android/gradlew.bat (100%) rename {example => apps/example}/android/link-assets-manifest.json (100%) rename {example => apps/example}/android/settings.gradle (100%) rename {example => apps/example}/app.json (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/OFL.txt (97%) rename {example => apps/example}/assets/fonts/Cascadia_Code/README.txt (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-Bold.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-BoldItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLight.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLightItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-Italic.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-Light.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-LightItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-Medium.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-MediumItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-Regular.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBold.ttf (100%) rename {example => apps/example}/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBoldItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/Nunito-Italic-VariableFont_wght.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/Nunito-VariableFont_wght.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/OFL.txt (97%) rename {example => apps/example}/assets/fonts/Nunito/README.txt (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Black.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-BlackItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Bold.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-BoldItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-ExtraBold.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-ExtraBoldItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-ExtraLight.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-ExtraLightItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Italic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Light.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-LightItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Medium.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-MediumItalic.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-Regular.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-SemiBold.ttf (100%) rename {example => apps/example}/assets/fonts/Nunito/static/Nunito-SemiBoldItalic.ttf (100%) rename {example => apps/example}/assets/icons/FontAwesome.json (100%) rename {example => apps/example}/assets/icons/FontAwesome.ttf (100%) rename {example => apps/example}/babel.config.js (70%) rename {example => apps/example}/index.js (100%) rename {example => apps/example}/ios/.xcode.env (100%) rename {example => apps/example}/ios/EnrichedTextInputExample.xcodeproj/project.pbxproj (100%) rename {example => apps/example}/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/EnrichedTextInputExample.xcscheme (100%) rename {example => apps/example}/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/ReactNativeRichTextEditorExample.xcscheme (100%) rename {example => apps/example}/ios/EnrichedTextInputExample.xcworkspace/contents.xcworkspacedata (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/AppDelegate.swift (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/Images.xcassets/AppIcon.appiconset/Contents.json (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/Images.xcassets/Contents.json (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/Info.plist (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/LaunchScreen.storyboard (100%) rename {example => apps/example}/ios/EnrichedTextInputExample/PrivacyInfo.xcprivacy (100%) rename {example => apps/example}/ios/Podfile (100%) rename {example => apps/example}/ios/Podfile.lock (100%) rename {example => apps/example}/ios/link-assets-manifest.json (100%) rename {example => apps/example}/jest.config.js (100%) rename {example => apps/example}/metro.config.js (81%) rename {example => apps/example}/package.json (100%) rename {example => apps/example}/react-native.config.js (82%) rename {example => apps/example}/src/App.tsx (100%) rename {example => apps/example}/src/components/Button.tsx (100%) rename {example => apps/example}/src/components/HtmlSection.tsx (100%) rename {example => apps/example}/src/components/Icon.tsx (100%) rename {example => apps/example}/src/components/ImageModal.tsx (100%) rename {example => apps/example}/src/components/LinkModal.tsx (100%) rename {example => apps/example}/src/components/MentionPopup.tsx (100%) rename {example => apps/example}/src/components/Toolbar.tsx (100%) rename {example => apps/example}/src/components/ToolbarButton.tsx (100%) rename {example => apps/example}/src/components/ValueModal.tsx (100%) rename {example => apps/example}/src/hooks/useChannelMention.ts (100%) rename {example => apps/example}/src/hooks/useUserMention.ts (100%) rename {example => apps/example}/src/utils/prepareImageDimensions.ts (100%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 70ddc92a0..10677e05b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -130,7 +130,7 @@ jobs: path: | ~/.gradle/wrapper ~/.gradle/caches - key: ${{ runner.os }}-gradle-${{ hashFiles('example/android/gradle/wrapper/gradle-wrapper.properties') }} + key: ${{ runner.os }}-gradle-${{ hashFiles('apps/example/android/gradle/wrapper/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- @@ -157,7 +157,7 @@ jobs: xcode-version: '16.4' - name: Reset build folder and pods - run: rm -rf example/build example/ios/Pods example/ios/Podfile.lock + run: rm -rf apps/example/build apps/example/ios/Pods apps/example/ios/Podfile.lock - name: Cache turborepo for iOS uses: actions/cache@v4 @@ -182,14 +182,14 @@ jobs: with: path: | **/ios/Pods - key: ${{ runner.os }}-cocoapods-${{ hashFiles('example/ios/Podfile.lock') }} + key: ${{ runner.os }}-cocoapods-${{ hashFiles('apps/example/ios/Podfile.lock') }} restore-keys: | ${{ runner.os }}-cocoapods- - name: Install cocoapods if: env.turbo_cache_hit != 1 && steps.cocoapods-cache.outputs.cache-hit != 'true' run: | - cd example/ios + cd apps/example/ios pod install env: NO_FLIPPER: 1 diff --git a/.gitignore b/.gitignore index 84f391a8f..0488c12fd 100644 --- a/.gitignore +++ b/.gitignore @@ -40,14 +40,14 @@ project.xcworkspace .settings local.properties android.iml -example/android/.kotlin/ +apps/example/android/.kotlin/ # Cocoapods # -example/ios/Pods +apps/example/ios/Pods # Ruby -example/vendor/ +apps/example/vendor/ # node.js # diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 64fd2d736..cb1931ac3 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -9,7 +9,7 @@ We want this community to be friendly and respectful to each other. Please follo This project is a monorepo managed using [Yarn workspaces](https://yarnpkg.com/features/workspaces). It contains the following packages: - The library package in the root directory. -- An example app in the `example/` directory. +- An example app in the `apps/example/` directory. To get started with the project, run `yarn` in the root directory to install the required dependencies for each package: @@ -19,13 +19,13 @@ yarn > Since the project relies on Yarn workspaces, you cannot use [`npm`](https://github.com/npm/cli) for development. -The [example app](/example/) demonstrates usage of the library. You need to run it to test any changes you make. +The [example app](/apps/example/) demonstrates usage of the library. You need to run it to test any changes you make. It is configured to use the local version of the library, so any changes you make to the library's source code will be reflected in the example app. Changes to the library's JavaScript code will be reflected in the example app without a rebuild, but native code changes will require a rebuild of the example app. -If you want to use Android Studio or Xcode to edit the native code, you can open the `example/android` or `example/ios` directories respectively in those editors. To edit the Objective-C or Swift files, open `example/ios/EnrichedTextInputExample.xcworkspace` in Xcode and find the source files at `Pods > Development Pods > ReactNativeEnriched`. +If you want to use Android Studio or Xcode to edit the native code, you can open the `apps/example/android` or `apps/example/ios` directories respectively in those editors. To edit the Objective-C or Swift files, open `apps/example/ios/EnrichedTextInputExample.xcworkspace` in Xcode and find the source files at `Pods > Development Pods > ReactNativeEnriched`. -To edit the Java or Kotlin files, open `example/android` in Android studio and find the source files at `react-native-enriched` under `Android`. +To edit the Java or Kotlin files, open `apps/example/android` in Android studio and find the source files at `react-native-enriched` under `Android`. You can use various commands from the root directory to work with the project. diff --git a/example/.bundle/config b/apps/example/.bundle/config similarity index 100% rename from example/.bundle/config rename to apps/example/.bundle/config diff --git a/example/.watchmanconfig b/apps/example/.watchmanconfig similarity index 100% rename from example/.watchmanconfig rename to apps/example/.watchmanconfig diff --git a/example/Gemfile b/apps/example/Gemfile similarity index 100% rename from example/Gemfile rename to apps/example/Gemfile diff --git a/example/Gemfile.lock b/apps/example/Gemfile.lock similarity index 100% rename from example/Gemfile.lock rename to apps/example/Gemfile.lock diff --git a/example/README.md b/apps/example/README.md similarity index 100% rename from example/README.md rename to apps/example/README.md diff --git a/example/android/app/build.gradle b/apps/example/android/app/build.gradle similarity index 100% rename from example/android/app/build.gradle rename to apps/example/android/app/build.gradle diff --git a/example/android/app/debug.keystore b/apps/example/android/app/debug.keystore similarity index 100% rename from example/android/app/debug.keystore rename to apps/example/android/app/debug.keystore diff --git a/example/android/app/proguard-rules.pro b/apps/example/android/app/proguard-rules.pro similarity index 100% rename from example/android/app/proguard-rules.pro rename to apps/example/android/app/proguard-rules.pro diff --git a/example/android/app/src/debug/AndroidManifest.xml b/apps/example/android/app/src/debug/AndroidManifest.xml similarity index 100% rename from example/android/app/src/debug/AndroidManifest.xml rename to apps/example/android/app/src/debug/AndroidManifest.xml diff --git a/example/android/app/src/main/AndroidManifest.xml b/apps/example/android/app/src/main/AndroidManifest.xml similarity index 100% rename from example/android/app/src/main/AndroidManifest.xml rename to apps/example/android/app/src/main/AndroidManifest.xml diff --git a/example/android/app/src/main/assets/custom/FontAwesome.json b/apps/example/android/app/src/main/assets/custom/FontAwesome.json similarity index 100% rename from example/android/app/src/main/assets/custom/FontAwesome.json rename to apps/example/android/app/src/main/assets/custom/FontAwesome.json diff --git a/example/android/app/src/main/assets/custom/OFL.txt b/apps/example/android/app/src/main/assets/custom/OFL.txt similarity index 97% rename from example/android/app/src/main/assets/custom/OFL.txt rename to apps/example/android/app/src/main/assets/custom/OFL.txt index fef6daa2f..f647b52b8 100644 --- a/example/android/app/src/main/assets/custom/OFL.txt +++ b/apps/example/android/app/src/main/assets/custom/OFL.txt @@ -1,94 +1,94 @@ -Copyright (c) 2019 - Present, Microsoft Corporation, -with Reserved Font Name Cascadia Code. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright (c) 2019 - Present, Microsoft Corporation, +with Reserved Font Name Cascadia Code. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/example/android/app/src/main/assets/custom/README.txt b/apps/example/android/app/src/main/assets/custom/README.txt similarity index 100% rename from example/android/app/src/main/assets/custom/README.txt rename to apps/example/android/app/src/main/assets/custom/README.txt diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Bold.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Bold.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Bold.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Bold.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-BoldItalic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-BoldItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-BoldItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-BoldItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLight.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLight.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLight.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLight.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLightItalic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLightItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLightItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-ExtraLightItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Italic-VariableFont_wght.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Italic-VariableFont_wght.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Italic-VariableFont_wght.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Italic-VariableFont_wght.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Italic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Italic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Italic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Italic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Light.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Light.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Light.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Light.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-LightItalic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-LightItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-LightItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-LightItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Medium.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Medium.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Medium.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Medium.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-MediumItalic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-MediumItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-MediumItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-MediumItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-Regular.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-Regular.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-Regular.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-Regular.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBold.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBold.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-SemiBold.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBold.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBoldItalic.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBoldItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-SemiBoldItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-SemiBoldItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/CascadiaCode-VariableFont_wght.ttf b/apps/example/android/app/src/main/assets/fonts/CascadiaCode-VariableFont_wght.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/CascadiaCode-VariableFont_wght.ttf rename to apps/example/android/app/src/main/assets/fonts/CascadiaCode-VariableFont_wght.ttf diff --git a/example/android/app/src/main/assets/fonts/FontAwesome.ttf b/apps/example/android/app/src/main/assets/fonts/FontAwesome.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/FontAwesome.ttf rename to apps/example/android/app/src/main/assets/fonts/FontAwesome.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Black.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Black.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Black.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Black.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-BlackItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Bold.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Bold.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Bold.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Bold.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-BoldItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-ExtraBold.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-ExtraBoldItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-ExtraLight.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-ExtraLightItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Italic-VariableFont_wght.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Italic-VariableFont_wght.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Italic-VariableFont_wght.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Italic-VariableFont_wght.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Italic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Italic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Italic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Italic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Light.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Light.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Light.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Light.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-LightItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Medium.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Medium.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Medium.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Medium.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-MediumItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-Regular.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-Regular.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-Regular.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-Regular.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-SemiBold.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-SemiBoldItalic.ttf diff --git a/example/android/app/src/main/assets/fonts/Nunito-VariableFont_wght.ttf b/apps/example/android/app/src/main/assets/fonts/Nunito-VariableFont_wght.ttf similarity index 100% rename from example/android/app/src/main/assets/fonts/Nunito-VariableFont_wght.ttf rename to apps/example/android/app/src/main/assets/fonts/Nunito-VariableFont_wght.ttf diff --git a/example/android/app/src/main/java/swmansion/enriched/example/MainActivity.kt b/apps/example/android/app/src/main/java/swmansion/enriched/example/MainActivity.kt similarity index 100% rename from example/android/app/src/main/java/swmansion/enriched/example/MainActivity.kt rename to apps/example/android/app/src/main/java/swmansion/enriched/example/MainActivity.kt diff --git a/example/android/app/src/main/java/swmansion/enriched/example/MainApplication.kt b/apps/example/android/app/src/main/java/swmansion/enriched/example/MainApplication.kt similarity index 100% rename from example/android/app/src/main/java/swmansion/enriched/example/MainApplication.kt rename to apps/example/android/app/src/main/java/swmansion/enriched/example/MainApplication.kt diff --git a/example/android/app/src/main/res/drawable/rn_edit_text_material.xml b/apps/example/android/app/src/main/res/drawable/rn_edit_text_material.xml similarity index 100% rename from example/android/app/src/main/res/drawable/rn_edit_text_material.xml rename to apps/example/android/app/src/main/res/drawable/rn_edit_text_material.xml diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/apps/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png rename to apps/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/apps/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png rename to apps/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/apps/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png rename to apps/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/apps/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png rename to apps/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/apps/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png rename to apps/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/apps/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png rename to apps/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/apps/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png rename to apps/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/apps/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png rename to apps/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/apps/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png rename to apps/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/apps/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png similarity index 100% rename from example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png rename to apps/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png diff --git a/example/android/app/src/main/res/values/strings.xml b/apps/example/android/app/src/main/res/values/strings.xml similarity index 100% rename from example/android/app/src/main/res/values/strings.xml rename to apps/example/android/app/src/main/res/values/strings.xml diff --git a/example/android/app/src/main/res/values/styles.xml b/apps/example/android/app/src/main/res/values/styles.xml similarity index 100% rename from example/android/app/src/main/res/values/styles.xml rename to apps/example/android/app/src/main/res/values/styles.xml diff --git a/example/android/build.gradle b/apps/example/android/build.gradle similarity index 100% rename from example/android/build.gradle rename to apps/example/android/build.gradle diff --git a/example/android/gradle.properties b/apps/example/android/gradle.properties similarity index 100% rename from example/android/gradle.properties rename to apps/example/android/gradle.properties diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/apps/example/android/gradle/wrapper/gradle-wrapper.jar similarity index 100% rename from example/android/gradle/wrapper/gradle-wrapper.jar rename to apps/example/android/gradle/wrapper/gradle-wrapper.jar diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/apps/example/android/gradle/wrapper/gradle-wrapper.properties similarity index 100% rename from example/android/gradle/wrapper/gradle-wrapper.properties rename to apps/example/android/gradle/wrapper/gradle-wrapper.properties diff --git a/example/android/gradlew b/apps/example/android/gradlew similarity index 100% rename from example/android/gradlew rename to apps/example/android/gradlew diff --git a/example/android/gradlew.bat b/apps/example/android/gradlew.bat similarity index 100% rename from example/android/gradlew.bat rename to apps/example/android/gradlew.bat diff --git a/example/android/link-assets-manifest.json b/apps/example/android/link-assets-manifest.json similarity index 100% rename from example/android/link-assets-manifest.json rename to apps/example/android/link-assets-manifest.json diff --git a/example/android/settings.gradle b/apps/example/android/settings.gradle similarity index 100% rename from example/android/settings.gradle rename to apps/example/android/settings.gradle diff --git a/example/app.json b/apps/example/app.json similarity index 100% rename from example/app.json rename to apps/example/app.json diff --git a/example/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf b/apps/example/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf rename to apps/example/assets/fonts/Cascadia_Code/CascadiaCode-Italic-VariableFont_wght.ttf diff --git a/example/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf b/apps/example/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf rename to apps/example/assets/fonts/Cascadia_Code/CascadiaCode-VariableFont_wght.ttf diff --git a/example/assets/fonts/Cascadia_Code/OFL.txt b/apps/example/assets/fonts/Cascadia_Code/OFL.txt similarity index 97% rename from example/assets/fonts/Cascadia_Code/OFL.txt rename to apps/example/assets/fonts/Cascadia_Code/OFL.txt index fef6daa2f..f647b52b8 100644 --- a/example/assets/fonts/Cascadia_Code/OFL.txt +++ b/apps/example/assets/fonts/Cascadia_Code/OFL.txt @@ -1,94 +1,94 @@ -Copyright (c) 2019 - Present, Microsoft Corporation, -with Reserved Font Name Cascadia Code. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright (c) 2019 - Present, Microsoft Corporation, +with Reserved Font Name Cascadia Code. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/example/assets/fonts/Cascadia_Code/README.txt b/apps/example/assets/fonts/Cascadia_Code/README.txt similarity index 100% rename from example/assets/fonts/Cascadia_Code/README.txt rename to apps/example/assets/fonts/Cascadia_Code/README.txt diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Bold.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Bold.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-Bold.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Bold.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-BoldItalic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-BoldItalic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-BoldItalic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-BoldItalic.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLight.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLight.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLight.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLight.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLightItalic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLightItalic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLightItalic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-ExtraLightItalic.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Italic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Italic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-Italic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Italic.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Light.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Light.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-Light.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Light.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-LightItalic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-LightItalic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-LightItalic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-LightItalic.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Medium.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Medium.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-Medium.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Medium.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-MediumItalic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-MediumItalic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-MediumItalic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-MediumItalic.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Regular.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Regular.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-Regular.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-Regular.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBold.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBold.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBold.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBold.ttf diff --git a/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBoldItalic.ttf b/apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBoldItalic.ttf similarity index 100% rename from example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBoldItalic.ttf rename to apps/example/assets/fonts/Cascadia_Code/static/CascadiaCode-SemiBoldItalic.ttf diff --git a/example/assets/fonts/Nunito/Nunito-Italic-VariableFont_wght.ttf b/apps/example/assets/fonts/Nunito/Nunito-Italic-VariableFont_wght.ttf similarity index 100% rename from example/assets/fonts/Nunito/Nunito-Italic-VariableFont_wght.ttf rename to apps/example/assets/fonts/Nunito/Nunito-Italic-VariableFont_wght.ttf diff --git a/example/assets/fonts/Nunito/Nunito-VariableFont_wght.ttf b/apps/example/assets/fonts/Nunito/Nunito-VariableFont_wght.ttf similarity index 100% rename from example/assets/fonts/Nunito/Nunito-VariableFont_wght.ttf rename to apps/example/assets/fonts/Nunito/Nunito-VariableFont_wght.ttf diff --git a/example/assets/fonts/Nunito/OFL.txt b/apps/example/assets/fonts/Nunito/OFL.txt similarity index 97% rename from example/assets/fonts/Nunito/OFL.txt rename to apps/example/assets/fonts/Nunito/OFL.txt index 8f5b7e218..c2c50cd9e 100644 --- a/example/assets/fonts/Nunito/OFL.txt +++ b/apps/example/assets/fonts/Nunito/OFL.txt @@ -1,93 +1,93 @@ -Copyright 2014 The Nunito Project Authors (https://github.com/googlefonts/nunito) - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -https://openfontlicense.org - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. +Copyright 2014 The Nunito Project Authors (https://github.com/googlefonts/nunito) + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +https://openfontlicense.org + + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/example/assets/fonts/Nunito/README.txt b/apps/example/assets/fonts/Nunito/README.txt similarity index 100% rename from example/assets/fonts/Nunito/README.txt rename to apps/example/assets/fonts/Nunito/README.txt diff --git a/example/assets/fonts/Nunito/static/Nunito-Black.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Black.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Black.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Black.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-BlackItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-BlackItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-BlackItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-BlackItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-Bold.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Bold.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Bold.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Bold.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-BoldItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-BoldItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-BoldItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-BoldItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-ExtraBold.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-ExtraBold.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-ExtraBold.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-ExtraBold.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-ExtraBoldItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-ExtraBoldItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-ExtraBoldItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-ExtraBoldItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-ExtraLight.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-ExtraLight.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-ExtraLight.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-ExtraLight.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-ExtraLightItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-ExtraLightItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-ExtraLightItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-ExtraLightItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-Italic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Italic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Italic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Italic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-Light.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Light.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Light.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Light.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-LightItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-LightItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-LightItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-LightItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-Medium.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Medium.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Medium.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Medium.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-MediumItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-MediumItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-MediumItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-MediumItalic.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-Regular.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-Regular.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-Regular.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-Regular.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-SemiBold.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-SemiBold.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-SemiBold.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-SemiBold.ttf diff --git a/example/assets/fonts/Nunito/static/Nunito-SemiBoldItalic.ttf b/apps/example/assets/fonts/Nunito/static/Nunito-SemiBoldItalic.ttf similarity index 100% rename from example/assets/fonts/Nunito/static/Nunito-SemiBoldItalic.ttf rename to apps/example/assets/fonts/Nunito/static/Nunito-SemiBoldItalic.ttf diff --git a/example/assets/icons/FontAwesome.json b/apps/example/assets/icons/FontAwesome.json similarity index 100% rename from example/assets/icons/FontAwesome.json rename to apps/example/assets/icons/FontAwesome.json diff --git a/example/assets/icons/FontAwesome.ttf b/apps/example/assets/icons/FontAwesome.ttf similarity index 100% rename from example/assets/icons/FontAwesome.ttf rename to apps/example/assets/icons/FontAwesome.ttf diff --git a/example/babel.config.js b/apps/example/babel.config.js similarity index 70% rename from example/babel.config.js rename to apps/example/babel.config.js index 486a09304..0431c77bd 100644 --- a/example/babel.config.js +++ b/apps/example/babel.config.js @@ -1,8 +1,8 @@ const path = require('path'); const { getConfig } = require('react-native-builder-bob/babel-config'); -const pkg = require('../package.json'); +const pkg = require('../../package.json'); -const root = path.resolve(__dirname, '..'); +const root = path.resolve(__dirname, '../..'); module.exports = getConfig( { diff --git a/example/index.js b/apps/example/index.js similarity index 100% rename from example/index.js rename to apps/example/index.js diff --git a/example/ios/.xcode.env b/apps/example/ios/.xcode.env similarity index 100% rename from example/ios/.xcode.env rename to apps/example/ios/.xcode.env diff --git a/example/ios/EnrichedTextInputExample.xcodeproj/project.pbxproj b/apps/example/ios/EnrichedTextInputExample.xcodeproj/project.pbxproj similarity index 100% rename from example/ios/EnrichedTextInputExample.xcodeproj/project.pbxproj rename to apps/example/ios/EnrichedTextInputExample.xcodeproj/project.pbxproj diff --git a/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/EnrichedTextInputExample.xcscheme b/apps/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/EnrichedTextInputExample.xcscheme similarity index 100% rename from example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/EnrichedTextInputExample.xcscheme rename to apps/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/EnrichedTextInputExample.xcscheme diff --git a/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/ReactNativeRichTextEditorExample.xcscheme b/apps/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/ReactNativeRichTextEditorExample.xcscheme similarity index 100% rename from example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/ReactNativeRichTextEditorExample.xcscheme rename to apps/example/ios/EnrichedTextInputExample.xcodeproj/xcshareddata/xcschemes/ReactNativeRichTextEditorExample.xcscheme diff --git a/example/ios/EnrichedTextInputExample.xcworkspace/contents.xcworkspacedata b/apps/example/ios/EnrichedTextInputExample.xcworkspace/contents.xcworkspacedata similarity index 100% rename from example/ios/EnrichedTextInputExample.xcworkspace/contents.xcworkspacedata rename to apps/example/ios/EnrichedTextInputExample.xcworkspace/contents.xcworkspacedata diff --git a/example/ios/EnrichedTextInputExample/AppDelegate.swift b/apps/example/ios/EnrichedTextInputExample/AppDelegate.swift similarity index 100% rename from example/ios/EnrichedTextInputExample/AppDelegate.swift rename to apps/example/ios/EnrichedTextInputExample/AppDelegate.swift diff --git a/example/ios/EnrichedTextInputExample/Images.xcassets/AppIcon.appiconset/Contents.json b/apps/example/ios/EnrichedTextInputExample/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 100% rename from example/ios/EnrichedTextInputExample/Images.xcassets/AppIcon.appiconset/Contents.json rename to apps/example/ios/EnrichedTextInputExample/Images.xcassets/AppIcon.appiconset/Contents.json diff --git a/example/ios/EnrichedTextInputExample/Images.xcassets/Contents.json b/apps/example/ios/EnrichedTextInputExample/Images.xcassets/Contents.json similarity index 100% rename from example/ios/EnrichedTextInputExample/Images.xcassets/Contents.json rename to apps/example/ios/EnrichedTextInputExample/Images.xcassets/Contents.json diff --git a/example/ios/EnrichedTextInputExample/Info.plist b/apps/example/ios/EnrichedTextInputExample/Info.plist similarity index 100% rename from example/ios/EnrichedTextInputExample/Info.plist rename to apps/example/ios/EnrichedTextInputExample/Info.plist diff --git a/example/ios/EnrichedTextInputExample/LaunchScreen.storyboard b/apps/example/ios/EnrichedTextInputExample/LaunchScreen.storyboard similarity index 100% rename from example/ios/EnrichedTextInputExample/LaunchScreen.storyboard rename to apps/example/ios/EnrichedTextInputExample/LaunchScreen.storyboard diff --git a/example/ios/EnrichedTextInputExample/PrivacyInfo.xcprivacy b/apps/example/ios/EnrichedTextInputExample/PrivacyInfo.xcprivacy similarity index 100% rename from example/ios/EnrichedTextInputExample/PrivacyInfo.xcprivacy rename to apps/example/ios/EnrichedTextInputExample/PrivacyInfo.xcprivacy diff --git a/example/ios/Podfile b/apps/example/ios/Podfile similarity index 100% rename from example/ios/Podfile rename to apps/example/ios/Podfile diff --git a/example/ios/Podfile.lock b/apps/example/ios/Podfile.lock similarity index 100% rename from example/ios/Podfile.lock rename to apps/example/ios/Podfile.lock diff --git a/example/ios/link-assets-manifest.json b/apps/example/ios/link-assets-manifest.json similarity index 100% rename from example/ios/link-assets-manifest.json rename to apps/example/ios/link-assets-manifest.json diff --git a/example/jest.config.js b/apps/example/jest.config.js similarity index 100% rename from example/jest.config.js rename to apps/example/jest.config.js diff --git a/example/metro.config.js b/apps/example/metro.config.js similarity index 81% rename from example/metro.config.js rename to apps/example/metro.config.js index 78e4f819a..94b3f571e 100644 --- a/example/metro.config.js +++ b/apps/example/metro.config.js @@ -1,9 +1,9 @@ const path = require('path'); const { getDefaultConfig } = require('@react-native/metro-config'); const { getConfig } = require('react-native-builder-bob/metro-config'); -const pkg = require('../package.json'); +const pkg = require('../../package.json'); -const root = path.resolve(__dirname, '..'); +const root = path.resolve(__dirname, '../..'); /** * Metro configuration diff --git a/example/package.json b/apps/example/package.json similarity index 100% rename from example/package.json rename to apps/example/package.json diff --git a/example/react-native.config.js b/apps/example/react-native.config.js similarity index 82% rename from example/react-native.config.js rename to apps/example/react-native.config.js index 93f6e7f5f..ddf96d606 100644 --- a/example/react-native.config.js +++ b/apps/example/react-native.config.js @@ -1,5 +1,5 @@ const path = require('path'); -const pkg = require('../package.json'); +const pkg = require('../../package.json'); module.exports = { project: { @@ -9,7 +9,7 @@ module.exports = { }, dependencies: { [pkg.name]: { - root: path.join(__dirname, '..'), + root: path.join(__dirname, '../..'), platforms: { // Codegen script incorrectly fails without this // So we explicitly specify the platforms with empty object diff --git a/example/src/App.tsx b/apps/example/src/App.tsx similarity index 100% rename from example/src/App.tsx rename to apps/example/src/App.tsx diff --git a/example/src/components/Button.tsx b/apps/example/src/components/Button.tsx similarity index 100% rename from example/src/components/Button.tsx rename to apps/example/src/components/Button.tsx diff --git a/example/src/components/HtmlSection.tsx b/apps/example/src/components/HtmlSection.tsx similarity index 100% rename from example/src/components/HtmlSection.tsx rename to apps/example/src/components/HtmlSection.tsx diff --git a/example/src/components/Icon.tsx b/apps/example/src/components/Icon.tsx similarity index 100% rename from example/src/components/Icon.tsx rename to apps/example/src/components/Icon.tsx diff --git a/example/src/components/ImageModal.tsx b/apps/example/src/components/ImageModal.tsx similarity index 100% rename from example/src/components/ImageModal.tsx rename to apps/example/src/components/ImageModal.tsx diff --git a/example/src/components/LinkModal.tsx b/apps/example/src/components/LinkModal.tsx similarity index 100% rename from example/src/components/LinkModal.tsx rename to apps/example/src/components/LinkModal.tsx diff --git a/example/src/components/MentionPopup.tsx b/apps/example/src/components/MentionPopup.tsx similarity index 100% rename from example/src/components/MentionPopup.tsx rename to apps/example/src/components/MentionPopup.tsx diff --git a/example/src/components/Toolbar.tsx b/apps/example/src/components/Toolbar.tsx similarity index 100% rename from example/src/components/Toolbar.tsx rename to apps/example/src/components/Toolbar.tsx diff --git a/example/src/components/ToolbarButton.tsx b/apps/example/src/components/ToolbarButton.tsx similarity index 100% rename from example/src/components/ToolbarButton.tsx rename to apps/example/src/components/ToolbarButton.tsx diff --git a/example/src/components/ValueModal.tsx b/apps/example/src/components/ValueModal.tsx similarity index 100% rename from example/src/components/ValueModal.tsx rename to apps/example/src/components/ValueModal.tsx diff --git a/example/src/hooks/useChannelMention.ts b/apps/example/src/hooks/useChannelMention.ts similarity index 100% rename from example/src/hooks/useChannelMention.ts rename to apps/example/src/hooks/useChannelMention.ts diff --git a/example/src/hooks/useUserMention.ts b/apps/example/src/hooks/useUserMention.ts similarity index 100% rename from example/src/hooks/useUserMention.ts rename to apps/example/src/hooks/useUserMention.ts diff --git a/example/src/utils/prepareImageDimensions.ts b/apps/example/src/utils/prepareImageDimensions.ts similarity index 100% rename from example/src/utils/prepareImageDimensions.ts rename to apps/example/src/utils/prepareImageDimensions.ts diff --git a/package.json b/package.json index 94de32cf7..feffab5ea 100644 --- a/package.json +++ b/package.json @@ -43,11 +43,11 @@ "lint-clang:android:fix": "find android/ \\( -iname \"*.h\" -o -iname \"*.cpp\" \\) | grep -v -e build | xargs npx clang-format -i", "lint-clang": "yarn lint-clang:ios && yarn lint-clang:android", "lint-clang:fix": "yarn lint-clang:ios:fix && yarn lint-clang:android:fix", - "clean": "del-cli android/build example/android/build example/android/app/build example/ios/build lib", + "clean": "del-cli android/build apps/example/android/build apps/example/android/app/build apps/example/ios/build lib", "prepare": "bob build", "release": "release-it", - "android-studio": "open -a 'Android Studio' example/android", - "xcode": "open -a 'Xcode' example/ios/EnrichedTextInputExample.xcworkspace" + "android-studio": "open -a 'Android Studio' apps/example/android", + "xcode": "open -a 'Xcode' apps/example/ios/EnrichedTextInputExample.xcworkspace" }, "keywords": [ "react-native", @@ -98,14 +98,14 @@ "react-native": "*" }, "workspaces": [ - "example", + "apps/example", "apps/example-web" ], "packageManager": "yarn@3.6.1", "jest": { "preset": "react-native", "modulePathIgnorePatterns": [ - "/example/node_modules", + "/apps/example/node_modules", "/lib/" ] }, diff --git a/tsconfig.build.json b/tsconfig.build.json index 326236495..ef65e3df0 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,4 +1,4 @@ { "extends": "./tsconfig", - "exclude": ["example", "apps", "lib"] + "exclude": ["apps", "lib"] } diff --git a/turbo.json b/turbo.json index e490465c6..7e1575db9 100644 --- a/turbo.json +++ b/turbo.json @@ -19,11 +19,11 @@ "!android/build", "src/*.ts", "src/*.tsx", - "example/package.json", - "example/android", - "!example/android/.gradle", - "!example/android/build", - "!example/android/app/build" + "apps/example/package.json", + "apps/example/android", + "!apps/example/android/.gradle", + "!apps/example/android/build", + "!apps/example/android/app/build" ], "outputs": [] }, @@ -35,10 +35,10 @@ "ios", "src/*.ts", "src/*.tsx", - "example/package.json", - "example/ios", - "!example/ios/build", - "!example/ios/Pods" + "apps/example/package.json", + "apps/example/ios", + "!apps/example/ios/build", + "!apps/example/ios/Pods" ], "outputs": [] } From 329b23dae0bf4d419ab748e76cf833538a4e5be9 Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek Date: Wed, 17 Dec 2025 13:40:38 +0100 Subject: [PATCH 5/6] feat: set up project for web + native - update typescript configuration - update pre-commit hook to run typescript check with correct config in package and each example - update package.json: added "sideEffects" field to support tree-shaking, updated "exports" to support native and web build --- apps/example-web/src/App.tsx | 3 ++- apps/example-web/tsconfig.app.json | 5 +++- apps/example-web/tsconfig.node.json | 5 +++- apps/example-web/vite.config.ts | 6 +++++ apps/example/tsconfig.json | 8 ++++++ lefthook.yml | 2 +- package.json | 13 ++++++++-- src/index.native.tsx | 9 +++++++ src/index.tsx | 10 +------- src/{ => native}/EnrichedTextInput.tsx | 0 .../EnrichedTextInputNativeComponent.ts | 0 src/{ => native}/normalizeHtmlStyle.ts | 0 src/web/EnrichedTextInput.tsx | 3 +++ tsconfig.base.json | 25 ------------------- tsconfig.json | 25 ++++++++++++++++--- yarn.lock | 4 +-- 16 files changed, 72 insertions(+), 46 deletions(-) create mode 100644 apps/example/tsconfig.json create mode 100644 src/index.native.tsx rename src/{ => native}/EnrichedTextInput.tsx (100%) rename src/{ => native}/EnrichedTextInputNativeComponent.ts (100%) rename src/{ => native}/normalizeHtmlStyle.ts (100%) create mode 100644 src/web/EnrichedTextInput.tsx delete mode 100644 tsconfig.base.json diff --git a/apps/example-web/src/App.tsx b/apps/example-web/src/App.tsx index b6fa757c8..d050def55 100644 --- a/apps/example-web/src/App.tsx +++ b/apps/example-web/src/App.tsx @@ -1,10 +1,11 @@ import './App.css'; +import { EnrichedTextInput } from 'react-native-enriched'; function App() { return (
Text input
- +
); } diff --git a/apps/example-web/tsconfig.app.json b/apps/example-web/tsconfig.app.json index 690114886..1108d2773 100644 --- a/apps/example-web/tsconfig.app.json +++ b/apps/example-web/tsconfig.app.json @@ -1,8 +1,11 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", "types": ["vite/client"], + "paths": { + "react-native-enriched": ["../../src/index"] + } }, "include": ["src"] } diff --git a/apps/example-web/tsconfig.node.json b/apps/example-web/tsconfig.node.json index c31ba89ef..89fbc7609 100644 --- a/apps/example-web/tsconfig.node.json +++ b/apps/example-web/tsconfig.node.json @@ -1,9 +1,12 @@ { - "extends": "../../tsconfig.base.json", + "extends": "../../tsconfig.json", "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", "lib": ["ES2023"], "types": ["node"], + "paths": { + "react-native-enriched": ["../../src/index"] + } }, "include": ["vite.config.ts"] } diff --git a/apps/example-web/vite.config.ts b/apps/example-web/vite.config.ts index 4a5def4c3..b5d8bc646 100644 --- a/apps/example-web/vite.config.ts +++ b/apps/example-web/vite.config.ts @@ -1,7 +1,13 @@ import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; +import path from 'path'; // https://vite.dev/config/ export default defineConfig({ plugins: [react()], + resolve: { + alias: { + 'react-native-enriched': path.resolve(__dirname, '../../src/index.tsx'), + }, + }, }); diff --git a/apps/example/tsconfig.json b/apps/example/tsconfig.json new file mode 100644 index 000000000..8a06dd54a --- /dev/null +++ b/apps/example/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "paths": { + "react-native-enriched": ["../../src/index.native"] + } + } +} diff --git a/lefthook.yml b/lefthook.yml index d0aa2bbde..9bb548917 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -6,7 +6,7 @@ pre-commit: run: npx eslint {staged_files} types: glob: "*.{js,ts, jsx, tsx}" - run: npx tsc + run: yarn typecheck:all clang-format: glob: "*.{h,m,mm,cpp}" exclude: "(Pods|build|node_modules)" diff --git a/package.json b/package.json index feffab5ea..17d1f9551 100644 --- a/package.json +++ b/package.json @@ -2,11 +2,17 @@ "name": "react-native-enriched", "version": "0.2.0", "description": "Rich Text Editor component for React Native", - "source": "./src/index.tsx", "main": "./lib/module/index.js", + "module": "./lib/module/index.js", "types": "./lib/typescript/src/index.d.ts", + "react-native": "./lib/module/index.native.js", + "sideEffects": false, "exports": { ".": { + "react-native": { + "types": "./lib/typescript/src/index.native.d.ts", + "default": "./lib/module/index.native.js" + }, "types": "./lib/typescript/src/index.d.ts", "default": "./lib/module/index.js" }, @@ -35,7 +41,10 @@ "example": "yarn workspace react-native-enriched-example", "example-web": "yarn workspace react-native-enriched-web-example", "test": "jest --passWithNoTests", - "typecheck": "tsc", + "typecheck": "tsc -p tsconfig.build.json", + "typecheck:example": "tsc -p apps/example/tsconfig.json", + "typecheck:example-web": "tsc -p apps/example-web/tsconfig.json", + "typecheck:all": "yarn typecheck && yarn typecheck:example && yarn typecheck:example-web", "lint": "eslint \"**/*.{js,ts,tsx}\"", "lint-clang:ios": "find ios/ \\( -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" \\) | grep -v -e Pods -e build | xargs npx clang-format -i -n --Werror", "lint-clang:ios:fix": "find ios/ \\( -iname \"*.h\" -o -iname \"*.m\" -o -iname \"*.mm\" \\) | grep -v -e Pods -e build | xargs npx clang-format -i", diff --git a/src/index.native.tsx b/src/index.native.tsx new file mode 100644 index 000000000..92aa3862e --- /dev/null +++ b/src/index.native.tsx @@ -0,0 +1,9 @@ +export * from './native/EnrichedTextInput'; +export type { + OnChangeTextEvent, + OnChangeHtmlEvent, + OnChangeStateEvent, + OnLinkDetected, + OnMentionDetected, + OnChangeSelectionEvent, +} from './native/EnrichedTextInputNativeComponent'; diff --git a/src/index.tsx b/src/index.tsx index 82b37a072..85f527f6a 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,9 +1 @@ -export * from './EnrichedTextInput'; -export type { - OnChangeTextEvent, - OnChangeHtmlEvent, - OnChangeStateEvent, - OnLinkDetected, - OnMentionDetected, - OnChangeSelectionEvent, -} from './EnrichedTextInputNativeComponent'; +export * from './web/EnrichedTextInput'; diff --git a/src/EnrichedTextInput.tsx b/src/native/EnrichedTextInput.tsx similarity index 100% rename from src/EnrichedTextInput.tsx rename to src/native/EnrichedTextInput.tsx diff --git a/src/EnrichedTextInputNativeComponent.ts b/src/native/EnrichedTextInputNativeComponent.ts similarity index 100% rename from src/EnrichedTextInputNativeComponent.ts rename to src/native/EnrichedTextInputNativeComponent.ts diff --git a/src/normalizeHtmlStyle.ts b/src/native/normalizeHtmlStyle.ts similarity index 100% rename from src/normalizeHtmlStyle.ts rename to src/native/normalizeHtmlStyle.ts diff --git a/src/web/EnrichedTextInput.tsx b/src/web/EnrichedTextInput.tsx new file mode 100644 index 000000000..5c06b3e7a --- /dev/null +++ b/src/web/EnrichedTextInput.tsx @@ -0,0 +1,3 @@ +export const EnrichedTextInput = () => { + return ; +}; diff --git a/tsconfig.base.json b/tsconfig.base.json deleted file mode 100644 index fe36c9f68..000000000 --- a/tsconfig.base.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "compilerOptions": { - "allowUnreachableCode": false, - "allowUnusedLabels": false, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "jsx": "react-jsx", - "lib": ["ESNext", "DOM", "DOM.Iterable"], - "module": "ESNext", - "moduleResolution": "bundler", - "noEmit": true, - "noFallthroughCasesInSwitch": true, - "noImplicitReturns": true, - "noImplicitUseStrict": false, - "noStrictGenericChecks": false, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "resolveJsonModule": true, - "skipLibCheck": true, - "strict": true, - "target": "ESNext", - "verbatimModuleSyntax": true - } -} diff --git a/tsconfig.json b/tsconfig.json index 37038f647..3ea92004b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,9 +1,26 @@ { - "extends": "./tsconfig.base.json", "compilerOptions": { "rootDir": ".", - "paths": { - "react-native-enriched": ["./src/index"] - } + "allowUnreachableCode": false, + "allowUnusedLabels": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "jsx": "react-jsx", + "lib": ["ESNext", "DOM", "DOM.Iterable"], + "module": "ESNext", + "moduleResolution": "bundler", + "noEmit": true, + "noFallthroughCasesInSwitch": true, + "noImplicitReturns": true, + "noImplicitUseStrict": false, + "noStrictGenericChecks": false, + "noUncheckedIndexedAccess": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "strict": true, + "target": "ESNext", + "verbatimModuleSyntax": true } } diff --git a/yarn.lock b/yarn.lock index 4c717b651..b27cd81d5 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12063,9 +12063,9 @@ __metadata: languageName: node linkType: hard -"react-native-enriched-example@workspace:example": +"react-native-enriched-example@workspace:apps/example": version: 0.0.0-use.local - resolution: "react-native-enriched-example@workspace:example" + resolution: "react-native-enriched-example@workspace:apps/example" dependencies: "@babel/core": ^7.25.2 "@babel/preset-env": ^7.25.3 From 33a6c9a06cd8c28155478b066358b1fd5a56f251 Mon Sep 17 00:00:00 2001 From: Maksymilian Rojek <58428606+maksymilianrojek@users.noreply.github.com> Date: Mon, 2 Feb 2026 11:43:04 +0100 Subject: [PATCH 6/6] feat: add types to web implementation, extract common types (#357) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Summary Changes: - added types to web implementation - extracted common types to /common/types.ts file ## Test Plan - both example and example-web works correctly (no lint or typecheck issues) ## Compatibility | OS | Implemented | | ------- | :---------: | | iOS | ✅ | | Android | ✅ | | Web | ✅ | This PR will be merged to a collective [PR](https://github.com/software-mansion/react-native-enriched/pull/331) where all web-related changes will be kept until the implementation is complete. --- apps/example-web/src/App.tsx | 2 +- apps/example/src/App.tsx | 10 +- src/common/defaultProps.ts | 8 + src/common/types.ts | 67 +++++++ src/index.native.tsx | 9 +- src/index.tsx | 11 ++ src/native/EnrichedTextInput.tsx | 168 ++++++++--------- src/{ => native}/types.ts | 0 src/spec/EnrichedTextInputNativeComponent.ts | 23 +-- src/utils/normalizeHtmlStyle.ts | 2 +- src/web/EnrichedTextInput.tsx | 184 ++++++++++++++++++- 11 files changed, 365 insertions(+), 119 deletions(-) create mode 100644 src/common/defaultProps.ts create mode 100644 src/common/types.ts rename src/{ => native}/types.ts (100%) diff --git a/apps/example-web/src/App.tsx b/apps/example-web/src/App.tsx index d050def55..9e52b8955 100644 --- a/apps/example-web/src/App.tsx +++ b/apps/example-web/src/App.tsx @@ -5,7 +5,7 @@ function App() { return (
Text input
- +
); } diff --git a/apps/example/src/App.tsx b/apps/example/src/App.tsx index 2d8a92db6..c9115030e 100644 --- a/apps/example/src/App.tsx +++ b/apps/example/src/App.tsx @@ -318,9 +318,9 @@ export default function App() { cursorColor="dodgerblue" autoCapitalize="sentences" linkRegex={LINK_REGEX} - onChangeText={(e) => handleChangeText(e.nativeEvent)} - onChangeHtml={(e) => handleChangeHtml(e.nativeEvent)} - onChangeState={(e) => handleChangeState(e.nativeEvent)} + onChangeText={handleChangeText} + onChangeHtml={handleChangeHtml} + onChangeState={handleChangeState} onLinkDetected={handleLinkDetected} onMentionDetected={console.log} onStartMention={handleStartMention} @@ -328,8 +328,8 @@ export default function App() { onEndMention={handleEndMention} onFocus={handleFocusEvent} onBlur={handleBlurEvent} - onChangeSelection={(e) => handleSelectionChangeEvent(e.nativeEvent)} - onKeyPress={(e) => handleKeyPress(e.nativeEvent)} + onChangeSelection={handleSelectionChangeEvent} + onKeyPress={handleKeyPress} androidExperimentalSynchronousEvents={ ANDROID_EXPERIMENTAL_SYNCHRONOUS_EVENTS } diff --git a/src/common/defaultProps.ts b/src/common/defaultProps.ts new file mode 100644 index 000000000..ec0f473ca --- /dev/null +++ b/src/common/defaultProps.ts @@ -0,0 +1,8 @@ +export const ENRICHED_TEXT_INPUT_DEFAULTS = { + editable: true, + mentionIndicators: ['@'], + autoCapitalize: 'sentences' as const, + htmlStyle: {}, + androidExperimentalSynchronousEvents: false, + scrollEnabled: true, +}; diff --git a/src/common/types.ts b/src/common/types.ts new file mode 100644 index 000000000..31c775bc2 --- /dev/null +++ b/src/common/types.ts @@ -0,0 +1,67 @@ +// Re-export event types from the NativeComponent spec file (source of truth for Codegen) +export type { + OnChangeTextEvent, + OnChangeHtmlEvent, + OnChangeStateEvent, + OnChangeStateDeprecatedEvent, + OnKeyPressEvent, +} from '../spec/EnrichedTextInputNativeComponent'; + +export interface OnMentionDetected { + text: string; + indicator: string; + attributes: Record; +} + +export interface OnLinkDetected { + text: string; + url: string; + start: number; + end: number; +} + +export interface OnChangeSelectionEvent { + start: number; + end: number; + text: string; +} + +export interface OnChangeMentionEvent { + indicator: string; + text: string; +} + +export interface EnrichedTextInputInstanceBase { + // General commands + focus: () => void; + blur: () => void; + setValue: (value: string) => void; + setSelection: (start: number, end: number) => void; + getHTML: () => Promise; + + // Text formatting commands + toggleBold: () => void; + toggleItalic: () => void; + toggleUnderline: () => void; + toggleStrikeThrough: () => void; + toggleInlineCode: () => void; + toggleH1: () => void; + toggleH2: () => void; + toggleH3: () => void; + toggleH4: () => void; + toggleH5: () => void; + toggleH6: () => void; + toggleCodeBlock: () => void; + toggleBlockQuote: () => void; + toggleOrderedList: () => void; + toggleUnorderedList: () => void; + toggleCheckboxList: (checked: boolean) => void; + setLink: (start: number, end: number, text: string, url: string) => void; + setImage: (src: string, width: number, height: number) => void; + startMention: (indicator: string) => void; + setMention: ( + indicator: string, + text: string, + attributes?: Record + ) => void; +} diff --git a/src/index.native.tsx b/src/index.native.tsx index 7435fe303..2fcdef1b1 100644 --- a/src/index.native.tsx +++ b/src/index.native.tsx @@ -2,11 +2,12 @@ export * from './native/EnrichedTextInput'; export type { OnChangeTextEvent, OnChangeHtmlEvent, + OnChangeMentionEvent, + OnChangeSelectionEvent, OnChangeStateEvent, OnChangeStateDeprecatedEvent, + OnKeyPressEvent, OnLinkDetected, OnMentionDetected, - OnChangeSelectionEvent, - OnKeyPressEvent, -} from './spec/EnrichedTextInputNativeComponent'; -export type { HtmlStyle, MentionStyleProperties } from './types'; +} from './common/types'; +export type { HtmlStyle, MentionStyleProperties } from './native/types'; diff --git a/src/index.tsx b/src/index.tsx index 85f527f6a..8aed07c53 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1 +1,12 @@ export * from './web/EnrichedTextInput'; +export type { + OnChangeTextEvent, + OnChangeHtmlEvent, + OnChangeMentionEvent, + OnChangeSelectionEvent, + OnChangeStateEvent, + OnChangeStateDeprecatedEvent, + OnKeyPressEvent, + OnLinkDetected, + OnMentionDetected, +} from './common/types'; diff --git a/src/native/EnrichedTextInput.tsx b/src/native/EnrichedTextInput.tsx index 595bac126..7c2ae264b 100644 --- a/src/native/EnrichedTextInput.tsx +++ b/src/native/EnrichedTextInput.tsx @@ -9,13 +9,9 @@ import { import EnrichedTextInputNativeComponent, { Commands, type NativeProps, - type OnChangeHtmlEvent, - type OnChangeSelectionEvent, - type OnChangeStateEvent, - type OnChangeTextEvent, - type OnLinkDetected, + type OnChangeSelectionNativeEvent, + type OnLinkDetectedNativeEvent, type OnMentionEvent, - type OnMentionDetected, type OnMentionDetectedInternal, type OnRequestHtmlResultEvent, type OnChangeStateDeprecatedEvent, @@ -36,52 +32,27 @@ import type { } from 'react-native'; import { normalizeHtmlStyle } from '../utils/normalizeHtmlStyle'; import { toNativeRegexConfig } from '../utils/regexParser'; +import type { + OnChangeTextEvent, + OnChangeHtmlEvent, + OnChangeStateEvent, + OnMentionDetected, + OnLinkDetected, + OnChangeSelectionEvent, + OnChangeMentionEvent, + EnrichedTextInputInstanceBase, +} from '../common/types'; +import { ENRICHED_TEXT_INPUT_DEFAULTS } from '../common/defaultProps'; import { nullthrows } from '../utils/nullthrows'; -import type { HtmlStyle } from '../types'; +import type { HtmlStyle } from './types'; + +export interface EnrichedTextInputInstance + extends EnrichedTextInputInstanceBase, + NativeMethods {} export type FocusEvent = NativeSyntheticEvent; export type BlurEvent = NativeSyntheticEvent; -export interface EnrichedTextInputInstance extends NativeMethods { - // General commands - focus: () => void; - blur: () => void; - setValue: (value: string) => void; - setSelection: (start: number, end: number) => void; - getHTML: () => Promise; - - // Text formatting commands - toggleBold: () => void; - toggleItalic: () => void; - toggleUnderline: () => void; - toggleStrikeThrough: () => void; - toggleInlineCode: () => void; - toggleH1: () => void; - toggleH2: () => void; - toggleH3: () => void; - toggleH4: () => void; - toggleH5: () => void; - toggleH6: () => void; - toggleCodeBlock: () => void; - toggleBlockQuote: () => void; - toggleOrderedList: () => void; - toggleUnorderedList: () => void; - toggleCheckboxList: (checked: boolean) => void; - setLink: (start: number, end: number, text: string, url: string) => void; - setImage: (src: string, width: number, height: number) => void; - startMention: (indicator: string) => void; - setMention: ( - indicator: string, - text: string, - attributes?: Record - ) => void; -} - -export interface OnChangeMentionEvent { - indicator: string; - text: string; -} - export interface EnrichedTextInputProps extends Omit { ref?: RefObject; autoFocus?: boolean; @@ -99,22 +70,20 @@ export interface EnrichedTextInputProps extends Omit { linkRegex?: RegExp | null; onFocus?: (e: FocusEvent) => void; onBlur?: (e: BlurEvent) => void; - onChangeText?: (e: NativeSyntheticEvent) => void; - onChangeHtml?: (e: NativeSyntheticEvent) => void; - onChangeState?: (e: NativeSyntheticEvent) => void; + onChangeText?: (e: OnChangeTextEvent) => void; + onChangeHtml?: (e: OnChangeHtmlEvent) => void; + onChangeState?: (e: OnChangeStateEvent) => void; /** * @deprecated Use onChangeState prop instead. */ - onChangeStateDeprecated?: ( - e: NativeSyntheticEvent - ) => void; + onChangeStateDeprecated?: (e: OnChangeStateDeprecatedEvent) => void; onLinkDetected?: (e: OnLinkDetected) => void; onMentionDetected?: (e: OnMentionDetected) => void; onStartMention?: (indicator: string) => void; onChangeMention?: (e: OnChangeMentionEvent) => void; onEndMention?: (indicator: string) => void; - onChangeSelection?: (e: NativeSyntheticEvent) => void; - onKeyPress?: (e: NativeSyntheticEvent) => void; + onChangeSelection?: (e: OnChangeSelectionEvent) => void; + onKeyPress?: (e: OnKeyPressEvent) => void; /** * If true, Android will use experimental synchronous events. * This will prevent from input flickering when updating component size. @@ -125,7 +94,7 @@ export interface EnrichedTextInputProps extends Omit { androidExperimentalSynchronousEvents?: boolean; } -const warnAboutMissconfiguredMentions = (indicator: string) => { +const warnAboutMisconfiguredMentions = (indicator: string) => { console.warn( `Looks like you are trying to set a "${indicator}" but it's not in the mentionIndicators prop` ); @@ -141,16 +110,16 @@ type HtmlRequest = { export const EnrichedTextInput = ({ ref, autoFocus, - editable = true, - mentionIndicators = ['@'], + editable = ENRICHED_TEXT_INPUT_DEFAULTS.editable, + mentionIndicators = ENRICHED_TEXT_INPUT_DEFAULTS.mentionIndicators, defaultValue, placeholder, placeholderTextColor, cursorColor, selectionColor, style, - autoCapitalize = 'sentences', - htmlStyle = {}, + autoCapitalize = ENRICHED_TEXT_INPUT_DEFAULTS.autoCapitalize, + htmlStyle = ENRICHED_TEXT_INPUT_DEFAULTS.htmlStyle, linkRegex: _linkRegex, onFocus, onBlur, @@ -165,8 +134,8 @@ export const EnrichedTextInput = ({ onEndMention, onChangeSelection, onKeyPress, - androidExperimentalSynchronousEvents = false, - scrollEnabled = true, + androidExperimentalSynchronousEvents = ENRICHED_TEXT_INPUT_DEFAULTS.androidExperimentalSynchronousEvents, + scrollEnabled = ENRICHED_TEXT_INPUT_DEFAULTS.scrollEnabled, ...rest }: EnrichedTextInputProps) => { const nativeRef = useRef(null); @@ -302,7 +271,7 @@ export const EnrichedTextInput = ({ }, startMention: (indicator: string) => { if (!mentionIndicators?.includes(indicator)) { - warnAboutMissconfiguredMentions(indicator); + warnAboutMisconfiguredMentions(indicator); } Commands.startMention(nullthrows(nativeRef.current), indicator); @@ -327,11 +296,31 @@ export const EnrichedTextInput = ({ } }; - const handleLinkDetected = (e: NativeSyntheticEvent) => { + const handleLinkDetected = ( + e: NativeSyntheticEvent + ) => { const { text, url, start, end } = e.nativeEvent; onLinkDetected?.({ text, url, start, end }); }; + const handleChangeText = (e: NativeSyntheticEvent) => { + onChangeText?.(e.nativeEvent); + }; + + const handleChangeHtml = (e: NativeSyntheticEvent) => { + onChangeHtml?.(e.nativeEvent); + }; + + const handleKeyPress = (e: NativeSyntheticEvent) => { + onKeyPress?.(e.nativeEvent); + }; + + const handleChangeSelection = ( + e: NativeSyntheticEvent + ) => { + onChangeSelection?.(e.nativeEvent); + }; + const handleMentionDetected = ( e: NativeSyntheticEvent ) => { @@ -359,31 +348,28 @@ export const EnrichedTextInput = ({ const onChangeStateWithDeprecated = ( e: NativeSyntheticEvent ) => { - onChangeState?.(e); + onChangeState?.(e.nativeEvent); // TODO: remove in 0.5.0 release onChangeStateDeprecated?.({ - ...e, - nativeEvent: { - isBold: e.nativeEvent.bold.isActive, - isItalic: e.nativeEvent.italic.isActive, - isUnderline: e.nativeEvent.underline.isActive, - isStrikeThrough: e.nativeEvent.strikeThrough.isActive, - isInlineCode: e.nativeEvent.inlineCode.isActive, - isH1: e.nativeEvent.h1.isActive, - isH2: e.nativeEvent.h2.isActive, - isH3: e.nativeEvent.h3.isActive, - isH4: e.nativeEvent.h4.isActive, - isH5: e.nativeEvent.h5.isActive, - isH6: e.nativeEvent.h6.isActive, - isCodeBlock: e.nativeEvent.codeBlock.isActive, - isBlockQuote: e.nativeEvent.blockQuote.isActive, - isOrderedList: e.nativeEvent.orderedList.isActive, - isUnorderedList: e.nativeEvent.unorderedList.isActive, - isCheckboxList: e.nativeEvent.checkboxList.isActive, - isLink: e.nativeEvent.link.isActive, - isImage: e.nativeEvent.image.isActive, - isMention: e.nativeEvent.mention.isActive, - }, + isBold: e.nativeEvent.bold.isActive, + isItalic: e.nativeEvent.italic.isActive, + isUnderline: e.nativeEvent.underline.isActive, + isStrikeThrough: e.nativeEvent.strikeThrough.isActive, + isInlineCode: e.nativeEvent.inlineCode.isActive, + isH1: e.nativeEvent.h1.isActive, + isH2: e.nativeEvent.h2.isActive, + isH3: e.nativeEvent.h3.isActive, + isH4: e.nativeEvent.h4.isActive, + isH5: e.nativeEvent.h5.isActive, + isH6: e.nativeEvent.h6.isActive, + isCodeBlock: e.nativeEvent.codeBlock.isActive, + isBlockQuote: e.nativeEvent.blockQuote.isActive, + isOrderedList: e.nativeEvent.orderedList.isActive, + isUnorderedList: e.nativeEvent.unorderedList.isActive, + isCheckboxList: e.nativeEvent.checkboxList.isActive, + isLink: e.nativeEvent.link.isActive, + isImage: e.nativeEvent.image.isActive, + isMention: e.nativeEvent.mention.isActive, }); }; @@ -404,17 +390,17 @@ export const EnrichedTextInput = ({ linkRegex={linkRegex} onInputFocus={onFocus} onInputBlur={onBlur} - onChangeText={onChangeText} - onChangeHtml={onChangeHtml} + onChangeText={handleChangeText} + onChangeHtml={handleChangeHtml} isOnChangeHtmlSet={onChangeHtml !== undefined} isOnChangeTextSet={onChangeText !== undefined} onChangeState={onChangeStateWithDeprecated} onLinkDetected={handleLinkDetected} onMentionDetected={handleMentionDetected} onMention={handleMentionEvent} - onChangeSelection={onChangeSelection} + onChangeSelection={handleChangeSelection} onRequestHtmlResult={handleRequestHtmlResult} - onInputKeyPress={onKeyPress} + onInputKeyPress={handleKeyPress} androidExperimentalSynchronousEvents={ androidExperimentalSynchronousEvents } diff --git a/src/types.ts b/src/native/types.ts similarity index 100% rename from src/types.ts rename to src/native/types.ts diff --git a/src/spec/EnrichedTextInputNativeComponent.ts b/src/spec/EnrichedTextInputNativeComponent.ts index f7ce7b833..6228fc02c 100644 --- a/src/spec/EnrichedTextInputNativeComponent.ts +++ b/src/spec/EnrichedTextInputNativeComponent.ts @@ -146,7 +146,11 @@ export interface OnChangeStateDeprecatedEvent { isMention: boolean; } -export interface OnLinkDetected { +export interface OnKeyPressEvent { + key: string; +} + +export interface OnLinkDetectedNativeEvent { text: string; url: string; start: Int32; @@ -158,19 +162,12 @@ export interface OnMentionDetectedInternal { indicator: string; payload: string; } - -export interface OnMentionDetected { - text: string; - indicator: string; - attributes: Record; -} - export interface OnMentionEvent { indicator: string; text: UnsafeMixed; } -export interface OnChangeSelectionEvent { +export interface OnChangeSelectionNativeEvent { start: Int32; end: Int32; text: string; @@ -181,10 +178,6 @@ export interface OnRequestHtmlResultEvent { html: UnsafeMixed; } -export interface OnKeyPressEvent { - key: string; -} - interface TargetedEvent { target: Int32; } @@ -264,10 +257,10 @@ export interface NativeProps extends ViewProps { onChangeText?: DirectEventHandler; onChangeHtml?: DirectEventHandler; onChangeState?: DirectEventHandler; - onLinkDetected?: DirectEventHandler; + onLinkDetected?: DirectEventHandler; onMentionDetected?: DirectEventHandler; onMention?: DirectEventHandler; - onChangeSelection?: DirectEventHandler; + onChangeSelection?: DirectEventHandler; onRequestHtmlResult?: DirectEventHandler; onInputKeyPress?: DirectEventHandler; diff --git a/src/utils/normalizeHtmlStyle.ts b/src/utils/normalizeHtmlStyle.ts index 3392d080e..629815980 100644 --- a/src/utils/normalizeHtmlStyle.ts +++ b/src/utils/normalizeHtmlStyle.ts @@ -1,6 +1,6 @@ import { type ColorValue, processColor } from 'react-native'; import type { HtmlStyleInternal } from '../spec/EnrichedTextInputNativeComponent'; -import type { HtmlStyle, MentionStyleProperties } from '../types'; +import type { HtmlStyle, MentionStyleProperties } from '../native/types'; const defaultStyle: Required = { h1: { diff --git a/src/web/EnrichedTextInput.tsx b/src/web/EnrichedTextInput.tsx index 5c06b3e7a..f3a13b766 100644 --- a/src/web/EnrichedTextInput.tsx +++ b/src/web/EnrichedTextInput.tsx @@ -1,3 +1,183 @@ -export const EnrichedTextInput = () => { - return ; +import { + useImperativeHandle, + useRef, + type CSSProperties, + type RefObject, +} from 'react'; + +import type { + EnrichedTextInputInstanceBase, + OnChangeHtmlEvent, + OnChangeMentionEvent, + OnChangeStateDeprecatedEvent, + OnChangeStateEvent, + OnChangeTextEvent, + OnLinkDetected, + OnMentionDetected, + OnChangeSelectionEvent, + OnKeyPressEvent, +} from '../common/types'; +import { ENRICHED_TEXT_INPUT_DEFAULTS } from '../common/defaultProps'; + +export type EnrichedTextInputInstance = EnrichedTextInputInstanceBase; + +export interface MentionStyleProperties { + color?: string; + backgroundColor?: string; + textDecorationLine?: 'underline' | 'none'; +} + +type HeadingStyle = { + fontSize?: number; + bold?: boolean; +}; + +export interface HtmlStyle { + h1?: HeadingStyle; + h2?: HeadingStyle; + h3?: HeadingStyle; + h4?: HeadingStyle; + h5?: HeadingStyle; + h6?: HeadingStyle; + blockquote?: { + borderColor?: string; + borderWidth?: number; + gapWidth?: number; + color?: string; + }; + codeblock?: { + color?: string; + borderRadius?: number; + backgroundColor?: string; + }; + code?: { + color?: string; + backgroundColor?: string; + }; + a?: { + color?: string; + textDecorationLine?: 'underline' | 'none'; + }; + mention?: Record | MentionStyleProperties; + ol?: { + gapWidth?: number; + marginLeft?: number; + markerFontWeight?: string | number; + markerColor?: string; + }; + ul?: { + bulletColor?: string; + bulletSize?: number; + marginLeft?: number; + gapWidth?: number; + }; + ulCheckbox?: { + boxSize?: number; + gapWidth?: number; + marginLeft?: number; + boxColor?: string; + }; +} + +export interface EnrichedTextInputProps { + ref?: RefObject; + autoFocus?: boolean; + editable?: boolean; + mentionIndicators?: string[]; + defaultValue?: string; + placeholder?: string; + placeholderTextColor?: string; + cursorColor?: string; + selectionColor?: string; + autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters'; + htmlStyle?: HtmlStyle; + style?: CSSProperties; + scrollEnabled?: boolean; + linkRegex?: RegExp | null; + onFocus?: () => void; + onBlur?: () => void; + onChangeText?: (e: OnChangeTextEvent) => void; + onChangeHtml?: (e: OnChangeHtmlEvent) => void; + onChangeState?: (e: OnChangeStateEvent) => void; + /** + * @deprecated Use onChangeState prop instead. + */ + onChangeStateDeprecated?: (e: OnChangeStateDeprecatedEvent) => void; + onLinkDetected?: (e: OnLinkDetected) => void; + onMentionDetected?: (e: OnMentionDetected) => void; + onStartMention?: (indicator: string) => void; + onChangeMention?: (e: OnChangeMentionEvent) => void; + onEndMention?: (indicator: string) => void; + onChangeSelection?: (e: OnChangeSelectionEvent) => void; + onKeyPress?: (e: OnKeyPressEvent) => void; + /** + * Unused for web, but kept for parity with native + */ + androidExperimentalSynchronousEvents?: boolean; +} + +export const EnrichedTextInput = ({ + ref, + autoFocus, + editable = ENRICHED_TEXT_INPUT_DEFAULTS.editable, + defaultValue, + placeholder, + style, +}: EnrichedTextInputProps) => { + const inputRef = useRef(null); + + useImperativeHandle(ref, () => ({ + // General commands + focus: () => { + inputRef.current?.focus(); + }, + blur: () => { + inputRef.current?.blur(); + }, + setValue: (value: string) => { + if (inputRef.current) { + inputRef.current.value = value; + } + }, + setSelection: (start: number, end: number) => { + inputRef.current?.setSelectionRange(start, end); + }, + getHTML: () => { + return Promise.resolve(''); + }, + + // Text formatting commands + toggleBold: () => {}, + toggleItalic: () => {}, + toggleUnderline: () => {}, + toggleStrikeThrough: () => {}, + toggleInlineCode: () => {}, + toggleH1: () => {}, + toggleH2: () => {}, + toggleH3: () => {}, + toggleH4: () => {}, + toggleH5: () => {}, + toggleH6: () => {}, + toggleCodeBlock: () => {}, + toggleBlockQuote: () => {}, + toggleOrderedList: () => {}, + toggleUnorderedList: () => {}, + toggleCheckboxList: () => {}, + setLink: () => {}, + setImage: () => {}, + startMention: () => {}, + setMention: () => {}, + })); + + return ( + + ); };