diff --git a/.changeset/absorb-mobile-subpath.md b/.changeset/absorb-mobile-subpath.md new file mode 100644 index 00000000..f0d54a26 --- /dev/null +++ b/.changeset/absorb-mobile-subpath.md @@ -0,0 +1,5 @@ +--- +'react-simplikit': patch +--- + +Absorb `@react-simplikit/mobile` into the root export of `react-simplikit`. Update imports from `@react-simplikit/mobile` to `react-simplikit`; the exported APIs are unchanged. The `@react-simplikit/mobile` npm package will be deprecated with a pointer to `react-simplikit` after this release. diff --git a/.cursorrules b/.cursorrules index 176305ae..f88c4f5b 100644 --- a/.cursorrules +++ b/.cursorrules @@ -4,12 +4,12 @@ ## Project -React hooks/components library. Monorepo: `packages/react-simplikit` + `packages/mobile`. +React hooks/components library. Monorepo with a single package: `packages/react-simplikit` (mobile web utilities in `src/mobile`, exported from the root entry). ## Architecture Unidirectional layers: `components → hooks → utils → _internal` -Core and mobile are independent packages. No cross-package dependencies. +Root exports must NOT import from `src/mobile`; `src/mobile` may use core utils and `_internal` (test infrastructure is exempt). ## Code Style diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md index 743942e0..ec5c7ed9 100644 --- a/.github/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -4,9 +4,9 @@ ## Quick Reference -- Monorepo: `packages/react-simplikit` (react-simplikit) + `packages/mobile` (@react-simplikit/mobile) +- Monorepo: `packages/react-simplikit` (react-simplikit), with mobile web utilities in `src/mobile` exported from the root entry - Architecture: `components → hooks → utils → _internal` (unidirectional, no circular imports) -- Core and mobile are independent packages — no cross-package dependencies +- Root exports must NOT import from `src/mobile`; `src/mobile` may use core utils and `_internal` (test infrastructure is exempt) ## Code Style Rules diff --git a/.github/workflows/integration.yml b/.github/workflows/integration.yml index ff855747..b53e589b 100644 --- a/.github/workflows/integration.yml +++ b/.github/workflows/integration.yml @@ -67,7 +67,7 @@ jobs: uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 with: token: ${{ secrets.CODECOV_TOKEN }} - files: ./packages/react-simplikit/coverage/coverage-final.json,./packages/mobile/coverage/coverage-final.json + files: ./packages/react-simplikit/coverage/coverage-final.json spec-compiled: name: spec (react compiler compiled) @@ -125,6 +125,10 @@ jobs: - 'packages/*/src/hooks/**/!(*.spec|*.test).tsx' - 'packages/*/src/utils/**/!(index|*.spec|*.test).ts' - 'packages/*/src/utils/**/!(*.spec|*.test).tsx' + - 'packages/*/src/mobile/hooks/**/!(index|*.spec|*.test).ts' + - 'packages/*/src/mobile/hooks/**/!(*.spec|*.test).tsx' + - 'packages/*/src/mobile/utils/**/!(index|*.spec|*.test).ts' + - 'packages/*/src/mobile/utils/**/!(*.spec|*.test).tsx' verify-test: runs-on: ubuntu-latest @@ -338,6 +342,8 @@ jobs: HAS_ERROR=0 FOUND=0 + # Every implementation — including the absorbed src/mobile tree — must be + # exported from the package root barrel: it is the only public entry. for pkg in packages/*/; do ROOT_INDEX="${pkg}src/index.ts" @@ -345,8 +351,13 @@ jobs: continue fi + for prefix in "" "mobile/"; do + if [ -n "$prefix" ] && [ ! -d "${pkg}src/$prefix" ]; then + continue + fi + for dir in "${IMPL_DIRS[@]}"; do - for impl_dir in ${pkg}src/$dir/*/; do + for impl_dir in ${pkg}src/$prefix$dir/*/; do if [ ! -d "$impl_dir" ]; then continue fi @@ -380,13 +391,14 @@ jobs: HAS_ERROR=1 fi - relative_path="./$dir/$impl_name/index.ts" + relative_path="./$prefix$dir/$impl_name/index.ts" if ! grep -q "from.*['\"]$relative_path['\"]" "$ROOT_INDEX"; then ERROR_LOG+="❌ $impl_name is not exported in $ROOT_INDEX\n" HAS_ERROR=1 fi done done + done done if [ "$FOUND" -eq 0 ]; then @@ -475,17 +487,14 @@ jobs: run: | yarn workspaces foreach -Apt --include 'packages/*' run build CORE_TGZ=$(cd packages/react-simplikit && npm pack --pack-destination "$RUNNER_TEMP" | tail -1) - MOBILE_TGZ=$(cd packages/mobile && npm pack --pack-destination "$RUNNER_TEMP" | tail -1) echo "CORE_TGZ=$RUNNER_TEMP/$CORE_TGZ" >> "$GITHUB_ENV" - echo "MOBILE_TGZ=$RUNNER_TEMP/$MOBILE_TGZ" >> "$GITHUB_ENV" - name: Point examples at tarballs run: | for example in examples/with-vite examples/with-nextjs; do - jq --arg core "file:$CORE_TGZ" --arg mobile "file:$MOBILE_TGZ" \ + jq --arg core "file:$CORE_TGZ" \ '.dependencies |= with_entries( if .key == "react-simplikit" then .value = $core - elif .key == "@react-simplikit/mobile" then .value = $mobile else . end)' \ "$example/package.json" > "$example/package.json.tmp" mv "$example/package.json.tmp" "$example/package.json" diff --git a/.pnp.cjs b/.pnp.cjs index fa00bc39..3006c172 100755 --- a/.pnp.cjs +++ b/.pnp.cjs @@ -26,10 +26,6 @@ const RAW_RUNTIME_STATE = "name": "with-vite",\ "reference": "workspace:examples/with-vite"\ },\ - {\ - "name": "@react-simplikit/mobile",\ - "reference": "workspace:packages/mobile"\ - },\ {\ "name": "react-simplikit",\ "reference": "workspace:packages/react-simplikit"\ @@ -40,7 +36,6 @@ const RAW_RUNTIME_STATE = "pnpZipBackend": "libzip",\ "fallbackExclusionList": [\ ["@examples/shared", ["virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#workspace:examples/shared", "workspace:examples/shared"]],\ - ["@react-simplikit/mobile", ["virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile", "workspace:packages/mobile"]],\ ["@react-simplikit/root", ["workspace:."]],\ ["react-simplikit", ["virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/react-simplikit", "workspace:packages/react-simplikit"]],\ ["with-nextjs", ["workspace:examples/with-nextjs"]],\ @@ -620,18 +615,18 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-ad4a84205d/0/cache/@babel-helper-create-class-features-plugin-npm-7.29.7-d2ad5f51e0-75f34905b5.zip/node_modules/@babel/helper-create-class-features-plugin/",\ + ["virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-90d75268e5/0/cache/@babel-helper-create-class-features-plugin-npm-7.29.7-d2ad5f51e0-75f34905b5.zip/node_modules/@babel/helper-create-class-features-plugin/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ - ["@babel/helper-create-class-features-plugin", "virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7"],\ + ["@babel/helper-create-class-features-plugin", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ ["@babel/helper-member-expression-to-functions", "npm:7.29.7"],\ ["@babel/helper-optimise-call-expression", "npm:7.29.7"],\ - ["@babel/helper-replace-supers", "virtual:ad4a84205d7645fc724b9bb3e6c2b5c74026778b21723f5e78a2020fca1fe24918c318656920ea4b18832ba421ad7a5ca994ed5647090d9e247a9cca239d0c50#npm:7.29.7"],\ + ["@babel/helper-replace-supers", "virtual:90d75268e5ac7ddaa9c237e3e429c2608fd0bca11bfc2901f68ec981aba219fb19eb2c287211868dbfe63b991a41589f4af572c5b5d22b6c03c0228a18d0bfa2#npm:7.29.7"],\ ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.29.7"],\ ["@babel/traverse", "npm:7.29.8"],\ - ["@types/babel__core", null],\ + ["@types/babel__core", "npm:7.20.5"],\ ["semver", "npm:6.3.1"]\ ],\ "packagePeers": [\ @@ -640,18 +635,18 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-90d75268e5/0/cache/@babel-helper-create-class-features-plugin-npm-7.29.7-d2ad5f51e0-75f34905b5.zip/node_modules/@babel/helper-create-class-features-plugin/",\ + ["virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-create-class-features-plugin-virtual-f23faf0c17/0/cache/@babel-helper-create-class-features-plugin-npm-7.29.7-d2ad5f51e0-75f34905b5.zip/node_modules/@babel/helper-create-class-features-plugin/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ - ["@babel/helper-create-class-features-plugin", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ + ["@babel/helper-create-class-features-plugin", "virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7"],\ ["@babel/helper-member-expression-to-functions", "npm:7.29.7"],\ ["@babel/helper-optimise-call-expression", "npm:7.29.7"],\ - ["@babel/helper-replace-supers", "virtual:90d75268e5ac7ddaa9c237e3e429c2608fd0bca11bfc2901f68ec981aba219fb19eb2c287211868dbfe63b991a41589f4af572c5b5d22b6c03c0228a18d0bfa2#npm:7.29.7"],\ + ["@babel/helper-replace-supers", "virtual:f23faf0c17c9ad6e32ece22e0df01b59e275e95b59dce0762a470e215681667230cd6517602e76835349d8421b96ac6b6cd5e0cd780540d91d54ee7507f99d29#npm:7.29.7"],\ ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.29.7"],\ ["@babel/traverse", "npm:7.29.8"],\ - ["@types/babel__core", "npm:7.20.5"],\ + ["@types/babel__core", null],\ ["semver", "npm:6.3.1"]\ ],\ "packagePeers": [\ @@ -822,13 +817,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:ad4a84205d7645fc724b9bb3e6c2b5c74026778b21723f5e78a2020fca1fe24918c318656920ea4b18832ba421ad7a5ca994ed5647090d9e247a9cca239d0c50#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-helper-replace-supers-virtual-02e0dfe7a0/0/cache/@babel-helper-replace-supers-npm-7.29.7-d22238da67-1c7ae37797.zip/node_modules/@babel/helper-replace-supers/",\ + ["virtual:f23faf0c17c9ad6e32ece22e0df01b59e275e95b59dce0762a470e215681667230cd6517602e76835349d8421b96ac6b6cd5e0cd780540d91d54ee7507f99d29#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-helper-replace-supers-virtual-64e436c6aa/0/cache/@babel-helper-replace-supers-npm-7.29.7-d22238da67-1c7ae37797.zip/node_modules/@babel/helper-replace-supers/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-member-expression-to-functions", "npm:7.29.7"],\ ["@babel/helper-optimise-call-expression", "npm:7.29.7"],\ - ["@babel/helper-replace-supers", "virtual:ad4a84205d7645fc724b9bb3e6c2b5c74026778b21723f5e78a2020fca1fe24918c318656920ea4b18832ba421ad7a5ca994ed5647090d9e247a9cca239d0c50#npm:7.29.7"],\ + ["@babel/helper-replace-supers", "virtual:f23faf0c17c9ad6e32ece22e0df01b59e275e95b59dce0762a470e215681667230cd6517602e76835349d8421b96ac6b6cd5e0cd780540d91d54ee7507f99d29#npm:7.29.7"],\ ["@babel/traverse", "npm:7.29.8"],\ ["@types/babel__core", null]\ ],\ @@ -966,12 +961,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:4f8100dbb1babd8104b466133bc9179f1c9b2048041c4bbe17d0d99800913f18e7301306aae202c9a1e8102b77f9365b568a723b473c66cc860022414a62f9e3#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-jsx-virtual-d7240f601c/0/cache/@babel-plugin-syntax-jsx-npm-7.29.7-887bb0abd4-1736000de1.zip/node_modules/@babel/plugin-syntax-jsx/",\ + ["virtual:b932ee7502fdfd0fa35248550706c050320603b886bacb9bbbf3bc85adea31bcce12d1efd0ca1104790df5a2cb661a9f35db3dd47d81ea006fdb1304c5154f9c#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-jsx-virtual-217c0b7246/0/cache/@babel-plugin-syntax-jsx-npm-7.29.7-887bb0abd4-1736000de1.zip/node_modules/@babel/plugin-syntax-jsx/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-syntax-jsx", "virtual:4f8100dbb1babd8104b466133bc9179f1c9b2048041c4bbe17d0d99800913f18e7301306aae202c9a1e8102b77f9365b568a723b473c66cc860022414a62f9e3#npm:7.29.7"],\ + ["@babel/plugin-syntax-jsx", "virtual:b932ee7502fdfd0fa35248550706c050320603b886bacb9bbbf3bc85adea31bcce12d1efd0ca1104790df5a2cb661a9f35db3dd47d81ea006fdb1304c5154f9c#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -1003,13 +998,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-typescript-virtual-e26c5d9123/0/cache/@babel-plugin-syntax-typescript-npm-7.29.7-4784fd3786-c49883b032.zip/node_modules/@babel/plugin-syntax-typescript/",\ + ["virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-typescript-virtual-f7142e3af8/0/cache/@babel-plugin-syntax-typescript-npm-7.29.7-4784fd3786-c49883b032.zip/node_modules/@babel/plugin-syntax-typescript/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-syntax-typescript", "virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7"],\ - ["@types/babel__core", null]\ + ["@babel/plugin-syntax-typescript", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ + ["@types/babel__core", "npm:7.20.5"]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1017,13 +1012,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-typescript-virtual-f7142e3af8/0/cache/@babel-plugin-syntax-typescript-npm-7.29.7-4784fd3786-c49883b032.zip/node_modules/@babel/plugin-syntax-typescript/",\ + ["virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-syntax-typescript-virtual-2116fc4e41/0/cache/@babel-plugin-syntax-typescript-npm-7.29.7-4784fd3786-c49883b032.zip/node_modules/@babel/plugin-syntax-typescript/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-syntax-typescript", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ - ["@types/babel__core", "npm:7.20.5"]\ + ["@babel/plugin-syntax-typescript", "virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7"],\ + ["@types/babel__core", null]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1040,14 +1035,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-f1d34424ae/0/cache/@babel-plugin-transform-modules-commonjs-npm-7.29.7-4e669a8fff-9791cb5244.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ + ["virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-c86ce3ed87/0/cache/@babel-plugin-transform-modules-commonjs-npm-7.29.7-4e669a8fff-9791cb5244.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ - ["@babel/helper-module-transforms", "virtual:f1d34424aecddff209b0b071259a33354390234e95ada5fef86726b698b184185503c3f74fb1bfab06161426b7f4b5a7b2b833267e28e2e925beb8e8afd6d8e4#npm:7.29.7"],\ + ["@babel/helper-module-transforms", "virtual:78bc20dbf78cba6c65082eb5aff7e39fb1e65131367642c1c1f56d438aa3485100ac20e632291bf65b59c8dc6f30cf02e3c6b442edd0c12f687c22a4080aa3a2#npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7"],\ - ["@types/babel__core", "npm:7.20.5"]\ + ["@babel/plugin-transform-modules-commonjs", "virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7"],\ + ["@types/babel__core", null]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1055,14 +1050,14 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-0ca4168c25/0/cache/@babel-plugin-transform-modules-commonjs-npm-7.29.7-4e669a8fff-9791cb5244.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ + ["virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-modules-commonjs-virtual-f1d34424ae/0/cache/@babel-plugin-transform-modules-commonjs-npm-7.29.7-4e669a8fff-9791cb5244.zip/node_modules/@babel/plugin-transform-modules-commonjs/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ - ["@babel/helper-module-transforms", "virtual:78bc20dbf78cba6c65082eb5aff7e39fb1e65131367642c1c1f56d438aa3485100ac20e632291bf65b59c8dc6f30cf02e3c6b442edd0c12f687c22a4080aa3a2#npm:7.29.7"],\ + ["@babel/helper-module-transforms", "virtual:f1d34424aecddff209b0b071259a33354390234e95ada5fef86726b698b184185503c3f74fb1bfab06161426b7f4b5a7b2b833267e28e2e925beb8e8afd6d8e4#npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7"],\ - ["@types/babel__core", null]\ + ["@babel/plugin-transform-modules-commonjs", "virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7"],\ + ["@types/babel__core", "npm:7.20.5"]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1093,12 +1088,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-display-name-virtual-7f5bd68631/0/cache/@babel-plugin-transform-react-display-name-npm-7.29.7-e5a79de884-0a3b2461b1.zip/node_modules/@babel/plugin-transform-react-display-name/",\ + ["virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-display-name-virtual-efea6444ab/0/cache/@babel-plugin-transform-react-display-name-npm-7.29.7-e5a79de884-0a3b2461b1.zip/node_modules/@babel/plugin-transform-react-display-name/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-transform-react-display-name", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ + ["@babel/plugin-transform-react-display-name", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -1134,15 +1129,15 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-jsx-virtual-4f8100dbb1/0/cache/@babel-plugin-transform-react-jsx-npm-7.29.7-b5550a3619-ae6487c3de.zip/node_modules/@babel/plugin-transform-react-jsx/",\ + ["virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-jsx-virtual-b932ee7502/0/cache/@babel-plugin-transform-react-jsx-npm-7.29.7-b5550a3619-ae6487c3de.zip/node_modules/@babel/plugin-transform-react-jsx/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ ["@babel/helper-module-imports", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-syntax-jsx", "virtual:4f8100dbb1babd8104b466133bc9179f1c9b2048041c4bbe17d0d99800913f18e7301306aae202c9a1e8102b77f9365b568a723b473c66cc860022414a62f9e3#npm:7.29.7"],\ - ["@babel/plugin-transform-react-jsx", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ + ["@babel/plugin-syntax-jsx", "virtual:b932ee7502fdfd0fa35248550706c050320603b886bacb9bbbf3bc85adea31bcce12d1efd0ca1104790df5a2cb661a9f35db3dd47d81ea006fdb1304c5154f9c#npm:7.29.7"],\ + ["@babel/plugin-transform-react-jsx", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ ["@babel/types", "npm:7.29.8"],\ ["@types/babel__core", null]\ ],\ @@ -1175,12 +1170,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-jsx-development-virtual-62bcabaa9a/0/cache/@babel-plugin-transform-react-jsx-development-npm-7.29.7-a6ca3acfbf-a2d44d068d.zip/node_modules/@babel/plugin-transform-react-jsx-development/",\ + ["virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-jsx-development-virtual-10d6cd48b1/0/cache/@babel-plugin-transform-react-jsx-development-npm-7.29.7-a6ca3acfbf-a2d44d068d.zip/node_modules/@babel/plugin-transform-react-jsx-development/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ - ["@babel/plugin-transform-react-jsx", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ - ["@babel/plugin-transform-react-jsx-development", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ + ["@babel/plugin-transform-react-jsx", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ + ["@babel/plugin-transform-react-jsx-development", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -1259,13 +1254,13 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-pure-annotations-virtual-54854242dd/0/cache/@babel-plugin-transform-react-pure-annotations-npm-7.29.7-ffad7e39da-ad85d57dfa.zip/node_modules/@babel/plugin-transform-react-pure-annotations/",\ + ["virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-react-pure-annotations-virtual-0ea92739de/0/cache/@babel-plugin-transform-react-pure-annotations-npm-7.29.7-ffad7e39da-ad85d57dfa.zip/node_modules/@babel/plugin-transform-react-pure-annotations/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ - ["@babel/plugin-transform-react-pure-annotations", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ + ["@babel/plugin-transform-react-pure-annotations", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -1283,17 +1278,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typescript-virtual-65b457c958/0/cache/@babel-plugin-transform-typescript-npm-7.29.7-2404b035ea-8bf6a89c68.zip/node_modules/@babel/plugin-transform-typescript/",\ + ["virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typescript-virtual-e7c551a16c/0/cache/@babel-plugin-transform-typescript-npm-7.29.7-2404b035ea-8bf6a89c68.zip/node_modules/@babel/plugin-transform-typescript/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ - ["@babel/helper-create-class-features-plugin", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ + ["@babel/helper-create-class-features-plugin", "virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.29.7"],\ - ["@babel/plugin-syntax-typescript", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ - ["@babel/plugin-transform-typescript", "virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7"],\ - ["@types/babel__core", "npm:7.20.5"]\ + ["@babel/plugin-syntax-typescript", "virtual:e7c551a16c57969ebf8096aada1d823164eb010d59db092ec51aec254b2c39f856a8faaac18027b9f7ab95c9fbebfda01f9949bde984ae5e8481ce822eddad0b#npm:7.29.7"],\ + ["@babel/plugin-transform-typescript", "virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7"],\ + ["@types/babel__core", null]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1301,17 +1296,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typescript-virtual-2f955769f6/0/cache/@babel-plugin-transform-typescript-npm-7.29.7-2404b035ea-8bf6a89c68.zip/node_modules/@babel/plugin-transform-typescript/",\ + ["virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-plugin-transform-typescript-virtual-65b457c958/0/cache/@babel-plugin-transform-typescript-npm-7.29.7-2404b035ea-8bf6a89c68.zip/node_modules/@babel/plugin-transform-typescript/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-annotate-as-pure", "npm:7.29.7"],\ - ["@babel/helper-create-class-features-plugin", "virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7"],\ + ["@babel/helper-create-class-features-plugin", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ ["@babel/helper-skip-transparent-expression-wrappers", "npm:7.29.7"],\ - ["@babel/plugin-syntax-typescript", "virtual:2f955769f634e5fe046758387837c897f516a4522045525bc8d4c40d2c2fb85b29b7345daa3c1dfd922b3801754ecbe1b6cdf52665ec8c617d534bc87305e34b#npm:7.29.7"],\ - ["@babel/plugin-transform-typescript", "virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7"],\ - ["@types/babel__core", null]\ + ["@babel/plugin-syntax-typescript", "virtual:65b457c958c1b0ab1232285afe5ed4ac405eb84b5ceb678adc05b2cfa735d95361ab1b499b9853a173b8bdecbf9e1526599751c89efb7109417b4964ce0542e6#npm:7.29.7"],\ + ["@babel/plugin-transform-typescript", "virtual:4ed55789f63e46ba8460b3fa8f019340d65a6f9b6212ad1393a056c258b4a99946d903b43dd4b1406eda4a07bf4a242fc4f0a31069742c8c6934201ef27e956d#npm:7.29.7"],\ + ["@types/babel__core", "npm:7.20.5"]\ ],\ "packagePeers": [\ "@babel/core",\ @@ -1347,17 +1342,17 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-preset-react-virtual-f6f3928020/0/cache/@babel-preset-react-npm-7.29.7-63f809c996-a84e90805c.zip/node_modules/@babel/preset-react/",\ + ["virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-preset-react-virtual-7f92a3e332/0/cache/@babel-preset-react-npm-7.29.7-63f809c996-a84e90805c.zip/node_modules/@babel/preset-react/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ ["@babel/helper-validator-option", "npm:7.29.7"],\ - ["@babel/plugin-transform-react-display-name", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ - ["@babel/plugin-transform-react-jsx", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ - ["@babel/plugin-transform-react-jsx-development", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ - ["@babel/plugin-transform-react-pure-annotations", "virtual:f6f39280204e910d364d25c9127b24d2db8d362400658381b635ce2c5b94173bd255e629d41047a984d71588d95f57f38508226d6304deebd22ad3bf24bf15d4#npm:7.29.7"],\ - ["@babel/preset-react", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ + ["@babel/plugin-transform-react-display-name", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ + ["@babel/plugin-transform-react-jsx", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ + ["@babel/plugin-transform-react-jsx-development", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ + ["@babel/plugin-transform-react-pure-annotations", "virtual:7f92a3e332481f2f9b60ef967aca9ec685a38af5567922a561df2ba82c73ada08e09b65f618e56778cb2318a98c3932747b0ea40b67ddf8483f3b4906a26d280#npm:7.29.7"],\ + ["@babel/preset-react", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -1393,16 +1388,16 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7", {\ - "packageLocation": "./.yarn/__virtual__/@babel-preset-typescript-virtual-6bcb1b8fbc/0/cache/@babel-preset-typescript-npm-7.29.7-2dbc1e1fa1-40746a23a7.zip/node_modules/@babel/preset-typescript/",\ + ["virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7", {\ + "packageLocation": "./.yarn/__virtual__/@babel-preset-typescript-virtual-09b2e858e0/0/cache/@babel-preset-typescript-npm-7.29.7-2dbc1e1fa1-40746a23a7.zip/node_modules/@babel/preset-typescript/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ ["@babel/helper-plugin-utils", "npm:7.29.7"],\ ["@babel/helper-validator-option", "npm:7.29.7"],\ - ["@babel/plugin-syntax-jsx", "virtual:4f8100dbb1babd8104b466133bc9179f1c9b2048041c4bbe17d0d99800913f18e7301306aae202c9a1e8102b77f9365b568a723b473c66cc860022414a62f9e3#npm:7.29.7"],\ - ["@babel/plugin-transform-modules-commonjs", "virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7"],\ - ["@babel/plugin-transform-typescript", "virtual:6bcb1b8fbc430e6d6b86ebf08477b15cc64cec05e0aede6513aa46fde0546bdc0dfe686f26053d1165edde4613da5916e7fdc3924b380863e2f0a319d8ea24b8#npm:7.29.7"],\ - ["@babel/preset-typescript", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ + ["@babel/plugin-syntax-jsx", "virtual:b932ee7502fdfd0fa35248550706c050320603b886bacb9bbbf3bc85adea31bcce12d1efd0ca1104790df5a2cb661a9f35db3dd47d81ea006fdb1304c5154f9c#npm:7.29.7"],\ + ["@babel/plugin-transform-modules-commonjs", "virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7"],\ + ["@babel/plugin-transform-typescript", "virtual:09b2e858e042ab0909b2b53976458bacdfd5bc8962a436a81277d4792a36ac18494757fa44a1a01c64671cf11df1579849ba694b7ec22f583f38c9f6a85d0452#npm:7.29.7"],\ + ["@babel/preset-typescript", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ ["@types/babel__core", null]\ ],\ "packagePeers": [\ @@ -2748,12 +2743,12 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:93ff544b7704c56a2834c6c6a7b5bd153e72137ce13d2edeb76a1ca89d092b876af4017742134d228534b4d86ebd6a1eed39bcdd4bad1c1cf8bbe9346303ab76#npm:4.5.1", {\ - "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-f1b376cbf1/0/cache/@eslint-community-eslint-utils-npm-4.5.1-88d38a08f4-b520ae1b7b.zip/node_modules/@eslint-community/eslint-utils/",\ + ["virtual:82f2125d8a4c97bd677579da2382ad36563ca325d3c1a9e192ec8436b04e8b129f8cd989c06edfd86eb953482555ff796ed42aa3536fc7598636373cfce9591a#npm:4.5.1", {\ + "packageLocation": "./.yarn/__virtual__/@eslint-community-eslint-utils-virtual-c3e3e657f0/0/cache/@eslint-community-eslint-utils-npm-4.5.1-88d38a08f4-b520ae1b7b.zip/node_modules/@eslint-community/eslint-utils/",\ "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:93ff544b7704c56a2834c6c6a7b5bd153e72137ce13d2edeb76a1ca89d092b876af4017742134d228534b4d86ebd6a1eed39bcdd4bad1c1cf8bbe9346303ab76#npm:4.5.1"],\ + ["@eslint-community/eslint-utils", "virtual:82f2125d8a4c97bd677579da2382ad36563ca325d3c1a9e192ec8436b04e8b129f8cd989c06edfd86eb953482555ff796ed42aa3536fc7598636373cfce9591a#npm:4.5.1"],\ ["@types/eslint", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-visitor-keys", "npm:3.4.3"]\ ],\ "packagePeers": [\ @@ -2914,17 +2909,13 @@ const RAW_RUNTIME_STATE = ["@examples/shared", "virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#workspace:examples/shared"],\ ["@radix-ui/react-icons", "virtual:bf7881012b9d95437e2cf9dd232d141195f3d5fbd9a1fe5e334bce7403ebecb6ba270c7e2437fa2d4f2a99a342d0ef20b9b1ad176e08a3bcef9393619e4102d1#npm:1.3.2"],\ ["@radix-ui/themes", "virtual:bf7881012b9d95437e2cf9dd232d141195f3d5fbd9a1fe5e334bce7403ebecb6ba270c7e2437fa2d4f2a99a342d0ef20b9b1ad176e08a3bcef9393619e4102d1#npm:3.2.1"],\ - ["@react-simplikit/mobile", "virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile"],\ ["@types/react", "npm:19.1.0"],\ ["@types/react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.2"],\ - ["@types/react-simplikit__mobile", null],\ ["react", "npm:19.1.0"],\ ["react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.0"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ ],\ "packagePeers": [\ - "@react-simplikit/mobile",\ - "@types/react-simplikit__mobile",\ "react-dom",\ "react"\ ],\ @@ -5484,59 +5475,6 @@ const RAW_RUNTIME_STATE = "linkType": "HARD"\ }]\ ]],\ - ["@react-simplikit/mobile", [\ - ["virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile", {\ - "packageLocation": "./.yarn/__virtual__/@react-simplikit-mobile-virtual-b8ca648f23/1/packages/mobile/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.29.7"],\ - ["@babel/preset-react", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@babel/preset-typescript", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@react-simplikit/mobile", "virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile"],\ - ["@testing-library/dom", "npm:10.4.0"],\ - ["@testing-library/jest-dom", "npm:6.6.3"],\ - ["@testing-library/react", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:16.3.0"],\ - ["@types/react", "npm:19.1.0"],\ - ["@types/react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.2"],\ - ["@vitest/coverage-v8", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"],\ - ["babel-plugin-react-compiler", "npm:1.0.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ - ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.0"],\ - ["rimraf", "npm:6.0.1"],\ - ["tsdown", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:0.22.14"],\ - ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"],\ - ["vitest", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"]\ - ],\ - "packagePeers": [\ - "react"\ - ],\ - "linkType": "SOFT"\ - }],\ - ["workspace:packages/mobile", {\ - "packageLocation": "./packages/mobile/",\ - "packageDependencies": [\ - ["@babel/core", "npm:7.29.7"],\ - ["@babel/preset-react", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@babel/preset-typescript", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@react-simplikit/mobile", "workspace:packages/mobile"],\ - ["@testing-library/dom", "npm:10.4.0"],\ - ["@testing-library/jest-dom", "npm:6.6.3"],\ - ["@testing-library/react", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:16.3.0"],\ - ["@types/react", "npm:19.1.0"],\ - ["@types/react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.2"],\ - ["@vitest/coverage-v8", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"],\ - ["babel-plugin-react-compiler", "npm:1.0.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ - ["react", "npm:19.1.0"],\ - ["react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.0"],\ - ["rimraf", "npm:6.0.1"],\ - ["tsdown", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:0.22.14"],\ - ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"],\ - ["vitest", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"]\ - ],\ - "linkType": "SOFT"\ - }]\ - ]],\ ["@react-simplikit/root", [\ ["workspace:.", {\ "packageLocation": "./",\ @@ -6593,7 +6531,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/type-utils", "virtual:27db0c8d1a0e04a671d3823c1e8b144897050f17666d44176f0e9360f054c06a56fdef112a92e5dfd521704a8cfc451162e49003e4bb72706237958a2c3b975f#npm:8.29.1"],\ ["@typescript-eslint/utils", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ ["@typescript-eslint/visitor-keys", "npm:8.29.1"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["graphemer", "npm:1.4.0"],\ ["ignore", "npm:5.3.2"],\ ["natural-compare", "npm:1.4.0"],\ @@ -6660,7 +6598,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/typescript-estree", "virtual:531dc209f09aa498fab10ce7142c2bc8a5f68d0a9543247d59c4cce730b6880a1f9f8fece29ee1acd018d814aea0811b5c24467f4c8eb8dde3fda630b5a97ba8#npm:8.29.1"],\ ["@typescript-eslint/visitor-keys", "npm:8.29.1"],\ ["debug", "virtual:58d4eddcdc0ee4d794e83431bdb8379b5cdb1cb447327371fa6788426546f859224b451f3786f45cf7d5e32704eff5b143722c948eb1c4c79c95d68fed8731a4#npm:4.4.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ ],\ "packagePeers": [\ @@ -6722,7 +6660,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/typescript-estree", "virtual:531dc209f09aa498fab10ce7142c2bc8a5f68d0a9543247d59c4cce730b6880a1f9f8fece29ee1acd018d814aea0811b5c24467f4c8eb8dde3fda630b5a97ba8#npm:8.29.1"],\ ["@typescript-eslint/utils", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ ["debug", "virtual:58d4eddcdc0ee4d794e83431bdb8379b5cdb1cb447327371fa6788426546f859224b451f3786f45cf7d5e32704eff5b143722c948eb1c4c79c95d68fed8731a4#npm:4.4.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["ts-api-utils", "virtual:ea022f16ef188dc2b53464158ccbd2b56e4799b701147f41b612fe560b929c31f538a18bc09c3ea15e429d76044385486e953eca84b3806119c3413e29103dae#npm:2.1.0"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ ],\ @@ -6806,14 +6744,14 @@ const RAW_RUNTIME_STATE = ["virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1", {\ "packageLocation": "./.yarn/__virtual__/@typescript-eslint-utils-virtual-7b155e21b4/0/cache/@typescript-eslint-utils-npm-8.29.1-f2b2f4a68d-1b2704b769.zip/node_modules/@typescript-eslint/utils/",\ "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:93ff544b7704c56a2834c6c6a7b5bd153e72137ce13d2edeb76a1ca89d092b876af4017742134d228534b4d86ebd6a1eed39bcdd4bad1c1cf8bbe9346303ab76#npm:4.5.1"],\ + ["@eslint-community/eslint-utils", "virtual:82f2125d8a4c97bd677579da2382ad36563ca325d3c1a9e192ec8436b04e8b129f8cd989c06edfd86eb953482555ff796ed42aa3536fc7598636373cfce9591a#npm:4.5.1"],\ ["@types/eslint", null],\ ["@types/typescript", null],\ ["@typescript-eslint/scope-manager", "npm:8.29.1"],\ ["@typescript-eslint/types", "npm:8.29.1"],\ ["@typescript-eslint/typescript-estree", "virtual:531dc209f09aa498fab10ce7142c2bc8a5f68d0a9543247d59c4cce730b6880a1f9f8fece29ee1acd018d814aea0811b5c24467f4c8eb8dde3fda630b5a97ba8#npm:8.29.1"],\ ["@typescript-eslint/utils", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"]\ ],\ "packagePeers": [\ @@ -6956,35 +6894,6 @@ const RAW_RUNTIME_STATE = "vitest"\ ],\ "linkType": "HARD"\ - }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9", {\ - "packageLocation": "./.yarn/__virtual__/@vitest-coverage-v8-virtual-5fcb5057e8/0/cache/@vitest-coverage-v8-npm-2.1.9-95e7812374-ccf5871954.zip/node_modules/@vitest/coverage-v8/",\ - "packageDependencies": [\ - ["@ampproject/remapping", "npm:2.3.0"],\ - ["@bcoe/v8-coverage", "npm:0.2.3"],\ - ["@types/vitest", null],\ - ["@types/vitest__browser", null],\ - ["@vitest/browser", null],\ - ["@vitest/coverage-v8", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"],\ - ["debug", "virtual:58d4eddcdc0ee4d794e83431bdb8379b5cdb1cb447327371fa6788426546f859224b451f3786f45cf7d5e32704eff5b143722c948eb1c4c79c95d68fed8731a4#npm:4.4.0"],\ - ["istanbul-lib-coverage", "npm:3.2.2"],\ - ["istanbul-lib-report", "npm:3.0.1"],\ - ["istanbul-lib-source-maps", "npm:5.0.6"],\ - ["istanbul-reports", "npm:3.1.7"],\ - ["magic-string", "npm:0.30.17"],\ - ["magicast", "npm:0.3.5"],\ - ["std-env", "npm:3.9.0"],\ - ["test-exclude", "npm:7.0.1"],\ - ["tinyrainbow", "npm:1.2.0"],\ - ["vitest", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"]\ - ],\ - "packagePeers": [\ - "@types/vitest",\ - "@types/vitest__browser",\ - "@vitest/browser",\ - "vitest"\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["@vitest/expect", [\ @@ -7008,26 +6917,6 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "SOFT"\ }],\ - ["virtual:423b9a6ace2bd918b4b597aa98f0f600755f8a0a285c0c99bc0f8056fb5e45b4daf15ed3117bfa81c8b1a5a92e84fdf1aadde2e2276ce4b48103698da8012572#npm:2.1.9", {\ - "packageLocation": "./.yarn/__virtual__/@vitest-mocker-virtual-a54e040387/0/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-f734490d8d.zip/node_modules/@vitest/mocker/",\ - "packageDependencies": [\ - ["@types/msw", null],\ - ["@types/vite", null],\ - ["@vitest/mocker", "virtual:423b9a6ace2bd918b4b597aa98f0f600755f8a0a285c0c99bc0f8056fb5e45b4daf15ed3117bfa81c8b1a5a92e84fdf1aadde2e2276ce4b48103698da8012572#npm:2.1.9"],\ - ["@vitest/spy", "npm:2.1.9"],\ - ["estree-walker", "npm:3.0.3"],\ - ["magic-string", "npm:0.30.17"],\ - ["msw", null],\ - ["vite", "virtual:38a643a725da2fcef9701229c9dadb4c7aa2ee77979e858149775e1fc67473ba62389426845fb70e5abbdf1b49b4bb8b34ed9e2b6934e8d2c31d845f00d9fa21#npm:5.4.18"]\ - ],\ - "packagePeers": [\ - "@types/msw",\ - "@types/vite",\ - "msw",\ - "vite"\ - ],\ - "linkType": "HARD"\ - }],\ ["virtual:ccf0e2d0eac3795ab66e6a4c9ff7b7003116638fc068b9d64678f895760944d6a3593bbc1528b322f00ad7bfcf13dc1be6761cc90f0095ba1e674b7015e97bbb#npm:2.1.9", {\ "packageLocation": "./.yarn/__virtual__/@vitest-mocker-virtual-d3afe3af91/0/cache/@vitest-mocker-npm-2.1.9-2c6df8716a-f734490d8d.zip/node_modules/@vitest/mocker/",\ "packageDependencies": [\ @@ -9290,10 +9179,10 @@ const RAW_RUNTIME_STATE = ],\ "linkType": "HARD"\ }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0", {\ - "packageLocation": "./.yarn/__virtual__/eslint-virtual-93ff544b77/0/cache/eslint-npm-9.24.0-4c9da5b490-f758ff1b9d.zip/node_modules/eslint/",\ + ["virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0", {\ + "packageLocation": "./.yarn/__virtual__/eslint-virtual-82f2125d8a/0/cache/eslint-npm-9.24.0-4c9da5b490-f758ff1b9d.zip/node_modules/eslint/",\ "packageDependencies": [\ - ["@eslint-community/eslint-utils", "virtual:93ff544b7704c56a2834c6c6a7b5bd153e72137ce13d2edeb76a1ca89d092b876af4017742134d228534b4d86ebd6a1eed39bcdd4bad1c1cf8bbe9346303ab76#npm:4.5.1"],\ + ["@eslint-community/eslint-utils", "virtual:82f2125d8a4c97bd677579da2382ad36563ca325d3c1a9e192ec8436b04e8b129f8cd989c06edfd86eb953482555ff796ed42aa3536fc7598636373cfce9591a#npm:4.5.1"],\ ["@eslint-community/regexpp", "npm:4.12.1"],\ ["@eslint/config-array", "npm:0.20.0"],\ ["@eslint/config-helpers", "npm:0.2.1"],\ @@ -9312,7 +9201,7 @@ const RAW_RUNTIME_STATE = ["cross-spawn", "npm:7.0.6"],\ ["debug", "virtual:58d4eddcdc0ee4d794e83431bdb8379b5cdb1cb447327371fa6788426546f859224b451f3786f45cf7d5e32704eff5b143722c948eb1c4c79c95d68fed8731a4#npm:4.4.0"],\ ["escape-string-regexp", "npm:4.0.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-scope", "npm:8.3.0"],\ ["eslint-visitor-keys", "npm:4.2.0"],\ ["espree", "npm:10.3.0"],\ @@ -9364,7 +9253,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/eslint-config-prettier-virtual-2f4b8aeb8a/0/cache/eslint-config-prettier-npm-9.1.0-0e1fd42d7d-6d332694b3.zip/node_modules/eslint-config-prettier/",\ "packageDependencies": [\ ["@types/eslint", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-config-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.1.0"]\ ],\ "packagePeers": [\ @@ -9404,7 +9293,7 @@ const RAW_RUNTIME_STATE = ["@types/typescript-eslint__parser", null],\ ["@typescript-eslint/parser", null],\ ["debug", "virtual:2a426afc4b2eef43db12a540d29c2b5476640459bfcd5c24f86bb401cf8cce97e63bd81794d206a5643057e7f662643afd5ce3dfc4d4bfd8e706006c6309c5fa#npm:3.2.7"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-import-resolver-node", "npm:0.3.9"],\ ["eslint-import-resolver-typescript", null],\ ["eslint-import-resolver-webpack", null],\ @@ -9512,7 +9401,7 @@ const RAW_RUNTIME_STATE = ["array.prototype.flatmap", "npm:1.3.3"],\ ["debug", "virtual:2a426afc4b2eef43db12a540d29c2b5476640459bfcd5c24f86bb401cf8cce97e63bd81794d206a5643057e7f662643afd5ce3dfc4d4bfd8e706006c6309c5fa#npm:3.2.7"],\ ["doctrine", "npm:2.1.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-import-resolver-node", "npm:0.3.9"],\ ["eslint-module-utils", "virtual:3aa409af43c8cfda5d60c9c2ea883ad73388cd12b901d1afc5f0e22e8ac52c5f36696f2111f8c01b61520c43ec27f8fa4a05f4c8f22b35b04bf55aba18d12456#npm:2.12.0"],\ ["eslint-plugin-import", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:2.31.0"],\ @@ -9573,7 +9462,7 @@ const RAW_RUNTIME_STATE = ["@types/eslint", null],\ ["@types/eslint-config-prettier", null],\ ["@types/prettier", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-config-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.1.0"],\ ["eslint-plugin-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:5.2.6"],\ ["prettier", "npm:3.5.3"],\ @@ -9640,7 +9529,7 @@ const RAW_RUNTIME_STATE = ["array.prototype.tosorted", "npm:1.1.4"],\ ["doctrine", "npm:2.1.0"],\ ["es-iterator-helpers", "npm:1.2.1"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-plugin-react", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.37.5"],\ ["estraverse", "npm:5.3.0"],\ ["hasown", "npm:2.0.2"],\ @@ -9694,7 +9583,7 @@ const RAW_RUNTIME_STATE = ["@babel/core", "npm:7.29.7"],\ ["@babel/parser", "npm:7.29.8"],\ ["@types/eslint", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-plugin-react-hooks", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.1.1"],\ ["hermes-parser", "npm:0.25.1"],\ ["zod", "npm:4.4.3"],\ @@ -9732,7 +9621,7 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/eslint-plugin-simple-import-sort-virtual-8e67ef5377/0/cache/eslint-plugin-simple-import-sort-npm-12.1.1-179ee2216e-0ad1907ad9.zip/node_modules/eslint-plugin-simple-import-sort/",\ "packageDependencies": [\ ["@types/eslint", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-plugin-simple-import-sort", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:12.1.1"]\ ],\ "packagePeers": [\ @@ -9773,7 +9662,7 @@ const RAW_RUNTIME_STATE = ["@types/eslint", null],\ ["@types/typescript-eslint__eslint-plugin", null],\ ["@typescript-eslint/eslint-plugin", null],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-plugin-unused-imports", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:4.1.4"]\ ],\ "packagePeers": [\ @@ -12957,8 +12846,8 @@ const RAW_RUNTIME_STATE = "packageLocation": "./.yarn/__virtual__/react-simplikit-virtual-b56f0089fd/1/packages/react-simplikit/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ - ["@babel/preset-react", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@babel/preset-typescript", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ + ["@babel/preset-react", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ + ["@babel/preset-typescript", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ ["@changesets/changelog-github", "npm:1.0.0"],\ ["@changesets/cli", "npm:3.0.1"],\ ["@eslint/js", "npm:9.24.0"],\ @@ -12975,7 +12864,7 @@ const RAW_RUNTIME_STATE = ["comment-parser", "npm:1.4.1"],\ ["corepack", "npm:0.30.0"],\ ["dotenv", "npm:16.5.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-config-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.1.0"],\ ["eslint-plugin-import", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:2.31.0"],\ ["eslint-plugin-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:5.2.6"],\ @@ -13013,8 +12902,8 @@ const RAW_RUNTIME_STATE = "packageLocation": "./packages/react-simplikit/",\ "packageDependencies": [\ ["@babel/core", "npm:7.29.7"],\ - ["@babel/preset-react", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ - ["@babel/preset-typescript", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:7.29.7"],\ + ["@babel/preset-react", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ + ["@babel/preset-typescript", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:7.29.7"],\ ["@changesets/changelog-github", "npm:1.0.0"],\ ["@changesets/cli", "npm:3.0.1"],\ ["@eslint/js", "npm:9.24.0"],\ @@ -13031,7 +12920,7 @@ const RAW_RUNTIME_STATE = ["comment-parser", "npm:1.4.1"],\ ["corepack", "npm:0.30.0"],\ ["dotenv", "npm:16.5.0"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["eslint-config-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.1.0"],\ ["eslint-plugin-import", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:2.31.0"],\ ["eslint-plugin-prettier", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:5.2.6"],\ @@ -14502,66 +14391,6 @@ const RAW_RUNTIME_STATE = "unrun"\ ],\ "linkType": "HARD"\ - }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:0.22.14", {\ - "packageLocation": "./.yarn/__virtual__/tsdown-virtual-ee4d152abe/0/cache/tsdown-npm-0.22.14-7b27e81b56-d299516472.zip/node_modules/tsdown/",\ - "packageDependencies": [\ - ["@arethetypeswrong/core", null],\ - ["@tsdown/css", null],\ - ["@tsdown/exe", null],\ - ["@types/arethetypeswrong__core", null],\ - ["@types/publint", null],\ - ["@types/tsdown__css", null],\ - ["@types/tsdown__exe", null],\ - ["@types/tsx", null],\ - ["@types/typescript", null],\ - ["@types/unplugin-unused", null],\ - ["@types/unrun", null],\ - ["@types/vitejs__devtools", null],\ - ["@vitejs/devtools", null],\ - ["ansis", "npm:4.3.1"],\ - ["cac", "npm:7.0.0"],\ - ["defu", "npm:6.1.7"],\ - ["empathic", "npm:2.0.1"],\ - ["hookable", "npm:6.1.1"],\ - ["import-without-cache", "npm:0.4.0"],\ - ["obug", "npm:2.1.4"],\ - ["picomatch", "npm:4.0.5"],\ - ["publint", null],\ - ["rolldown", "npm:1.2.3"],\ - ["rolldown-plugin-dts", "virtual:9b2026e2a5c195a2a5556b41c45b99fc716e5f23011bb5566a3500d2b09f1817c312a85dcc93e569164970677831e4e18893629dc7110f3cf1c8cb32ef4a2222#npm:0.27.14"],\ - ["tinyexec", "npm:1.3.0"],\ - ["tinyglobby", "npm:0.2.17"],\ - ["tree-kill", "npm:1.2.2"],\ - ["tsdown", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:0.22.14"],\ - ["tsx", null],\ - ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"],\ - ["unconfig-core", "npm:7.5.0"],\ - ["unplugin-unused", null],\ - ["unrun", null],\ - ["verkit", "npm:0.3.2"]\ - ],\ - "packagePeers": [\ - "@arethetypeswrong/core",\ - "@tsdown/css",\ - "@tsdown/exe",\ - "@types/arethetypeswrong__core",\ - "@types/publint",\ - "@types/tsdown__css",\ - "@types/tsdown__exe",\ - "@types/tsx",\ - "@types/typescript",\ - "@types/unplugin-unused",\ - "@types/unrun",\ - "@types/vitejs__devtools",\ - "@vitejs/devtools",\ - "publint",\ - "tsx",\ - "typescript",\ - "unplugin-unused",\ - "unrun"\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["tslib", [\ @@ -14704,7 +14533,7 @@ const RAW_RUNTIME_STATE = ["@typescript-eslint/eslint-plugin", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ ["@typescript-eslint/parser", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ ["@typescript-eslint/utils", "virtual:4e4fd824789cdc4a5def475861b0fe6ffbe97d993239b4631eb7843b0d3c1b987668a41a182e12242b01eb499e0ad20aae7acfba68a431e7edc805e7db9cba73#npm:8.29.1"],\ - ["eslint", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:9.24.0"],\ + ["eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:9.24.0"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"],\ ["typescript-eslint", "virtual:b56f0089fd6bbc50c1ee8b8d8292f9775083cd3f4a49b1638a575e3e5b72c85e2feb87e77cd91c36e2981f2ec9d091c75dbf7357203484f4404306471644e05b#npm:8.29.1"]\ ],\ @@ -15265,57 +15094,6 @@ const RAW_RUNTIME_STATE = "jsdom"\ ],\ "linkType": "HARD"\ - }],\ - ["virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9", {\ - "packageLocation": "./.yarn/__virtual__/vitest-virtual-423b9a6ace/0/cache/vitest-npm-2.1.9-da245b091d-e339e16dcc.zip/node_modules/vitest/",\ - "packageDependencies": [\ - ["@edge-runtime/vm", null],\ - ["@types/edge-runtime__vm", null],\ - ["@types/happy-dom", null],\ - ["@types/jsdom", null],\ - ["@types/node", null],\ - ["@types/vitest__browser", null],\ - ["@types/vitest__ui", null],\ - ["@vitest/browser", null],\ - ["@vitest/expect", "npm:2.1.9"],\ - ["@vitest/mocker", "virtual:423b9a6ace2bd918b4b597aa98f0f600755f8a0a285c0c99bc0f8056fb5e45b4daf15ed3117bfa81c8b1a5a92e84fdf1aadde2e2276ce4b48103698da8012572#npm:2.1.9"],\ - ["@vitest/pretty-format", "npm:2.1.9"],\ - ["@vitest/runner", "npm:2.1.9"],\ - ["@vitest/snapshot", "npm:2.1.9"],\ - ["@vitest/spy", "npm:2.1.9"],\ - ["@vitest/ui", null],\ - ["@vitest/utils", "npm:2.1.9"],\ - ["chai", "npm:5.2.0"],\ - ["debug", "virtual:58d4eddcdc0ee4d794e83431bdb8379b5cdb1cb447327371fa6788426546f859224b451f3786f45cf7d5e32704eff5b143722c948eb1c4c79c95d68fed8731a4#npm:4.4.0"],\ - ["expect-type", "npm:1.2.1"],\ - ["happy-dom", null],\ - ["jsdom", null],\ - ["magic-string", "npm:0.30.17"],\ - ["pathe", "npm:1.1.2"],\ - ["std-env", "npm:3.9.0"],\ - ["tinybench", "npm:2.9.0"],\ - ["tinyexec", "npm:0.3.2"],\ - ["tinypool", "npm:1.0.2"],\ - ["tinyrainbow", "npm:1.2.0"],\ - ["vite", "virtual:38a643a725da2fcef9701229c9dadb4c7aa2ee77979e858149775e1fc67473ba62389426845fb70e5abbdf1b49b4bb8b34ed9e2b6934e8d2c31d845f00d9fa21#npm:5.4.18"],\ - ["vite-node", "npm:2.1.9"],\ - ["vitest", "virtual:b8ca648f23ac8db9e48f501f3417b5d22664f520096d4c3f324c7f27acb059637b178631fb2aa9474c5307a2c176eb80c2a4069538d26cb000262efba27773fe#npm:2.1.9"],\ - ["why-is-node-running", "npm:2.3.0"]\ - ],\ - "packagePeers": [\ - "@edge-runtime/vm",\ - "@types/edge-runtime__vm",\ - "@types/happy-dom",\ - "@types/jsdom",\ - "@types/node",\ - "@types/vitest__browser",\ - "@types/vitest__ui",\ - "@vitest/browser",\ - "@vitest/ui",\ - "happy-dom",\ - "jsdom"\ - ],\ - "linkType": "HARD"\ }]\ ]],\ ["vue", [\ @@ -15535,7 +15313,6 @@ const RAW_RUNTIME_STATE = ["workspace:examples/with-nextjs", {\ "packageLocation": "./examples/with-nextjs/",\ "packageDependencies": [\ - ["@react-simplikit/mobile", "virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile"],\ ["@types/node", "npm:24.13.3"],\ ["@types/react", "npm:19.1.0"],\ ["@types/react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.2"],\ @@ -15555,7 +15332,6 @@ const RAW_RUNTIME_STATE = "packageDependencies": [\ ["@examples/shared", "virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#workspace:examples/shared"],\ ["@radix-ui/themes", "virtual:bf7881012b9d95437e2cf9dd232d141195f3d5fbd9a1fe5e334bce7403ebecb6ba270c7e2437fa2d4f2a99a342d0ef20b9b1ad176e08a3bcef9393619e4102d1#npm:3.2.1"],\ - ["@react-simplikit/mobile", "virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/mobile"],\ ["@suspensive/react", "virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#npm:3.18.0"],\ ["@types/react", "npm:19.1.0"],\ ["@types/react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.2"],\ @@ -15563,6 +15339,7 @@ const RAW_RUNTIME_STATE = ["react", "npm:19.1.0"],\ ["react-dom", "virtual:539b451571f0988c0af51257f55a5a782178df937d372062375b750931875a6facac716a154eb2b4aa1e0ffc809cf9d1dd6a0b387bd1b99854bdf0c986f9a560#npm:19.1.0"],\ ["react-router-dom", "virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#npm:7.12.0"],\ + ["react-simplikit", "virtual:f9522faed4c7e558462ef89aa232afe8b28f40173b914f756ee38b21c9ce10bf830de8334e264bc007ff37043ac2a4f134dac81249be2bcb7033ff024ce27466#workspace:packages/react-simplikit"],\ ["typescript", "patch:typescript@npm%3A5.8.3#optional!builtin::version=5.8.3&hash=5786d5"],\ ["vite", "virtual:4859486b80a38e1e55778596b129478b56d21224c49a057e6f204bd0ef112f450c0ab6db41bd028bc885a6d06a104f1faffa30cd30b973c26726b0fe33e03341#npm:7.3.1"],\ ["with-vite", "workspace:examples/with-vite"]\ diff --git a/.scripts/verify-pack/fixtures/consumer/cjs-consumer.cjs b/.scripts/verify-pack/fixtures/consumer/cjs-consumer.cjs index ccabcbda..49730d40 100644 --- a/.scripts/verify-pack/fixtures/consumer/cjs-consumer.cjs +++ b/.scripts/verify-pack/fixtures/consumer/cjs-consumer.cjs @@ -1,9 +1,8 @@ const assert = require('node:assert'); const core = require('react-simplikit'); -const mobile = require('@react-simplikit/mobile'); assert.strictEqual(typeof core.useToggle, 'function'); assert.ok(core.ImpressionArea != null); -assert.strictEqual(typeof mobile.useNetworkStatus, 'function'); +assert.strictEqual(typeof core.useNetworkStatus, 'function'); console.log('CJS smoke OK'); diff --git a/.scripts/verify-pack/fixtures/consumer/esm-consumer.mjs b/.scripts/verify-pack/fixtures/consumer/esm-consumer.mjs index 380fee92..26957b82 100644 --- a/.scripts/verify-pack/fixtures/consumer/esm-consumer.mjs +++ b/.scripts/verify-pack/fixtures/consumer/esm-consumer.mjs @@ -1,7 +1,6 @@ import assert from 'node:assert'; -import { useNetworkStatus } from '@react-simplikit/mobile'; -import { ImpressionArea, useToggle } from 'react-simplikit'; +import { ImpressionArea, useNetworkStatus, useToggle } from 'react-simplikit'; assert.strictEqual(typeof useToggle, 'function'); assert.ok(ImpressionArea != null); diff --git a/.scripts/verify-pack/fixtures/consumer/types-consumer.ts b/.scripts/verify-pack/fixtures/consumer/types-consumer.ts index 09b70784..8961b502 100644 --- a/.scripts/verify-pack/fixtures/consumer/types-consumer.ts +++ b/.scripts/verify-pack/fixtures/consumer/types-consumer.ts @@ -1,5 +1,4 @@ -import { useNetworkStatus } from '@react-simplikit/mobile'; -import { useToggle } from 'react-simplikit'; +import { useNetworkStatus, useToggle } from 'react-simplikit'; type UseToggleReturn = ReturnType; const toggleReturn: [boolean, () => void] = undefined as unknown as UseToggleReturn; diff --git a/.scripts/verify-pack/index.ts b/.scripts/verify-pack/index.ts index d681ead7..78eab443 100644 --- a/.scripts/verify-pack/index.ts +++ b/.scripts/verify-pack/index.ts @@ -83,12 +83,14 @@ async function main() { ]); } else { for (const pkg of TARGET_PACKAGES) { - try { - const bytes = await measureImportCost(pkg.sizeEntry, consumerDir); - console.log(`[${pkg.name}] single-export import cost: ${bytes}B (limit ${pkg.sizeLimitBytes}B)`); - report(pkg.name, 'tree-shaking size gate', checkSizeLimit(bytes, pkg.sizeLimitBytes)); - } catch (error) { - report(pkg.name, 'tree-shaking size gate', [describeExecError(error)]); + for (const gate of pkg.sizeGates) { + try { + const bytes = await measureImportCost(gate.entry, consumerDir); + console.log(`[${pkg.name}] ${gate.label} single-export import cost: ${bytes}B (limit ${gate.limitBytes}B)`); + report(pkg.name, `tree-shaking size gate (${gate.label})`, checkSizeLimit(bytes, gate.limitBytes)); + } catch (error) { + report(pkg.name, `tree-shaking size gate (${gate.label})`, [describeExecError(error)]); + } } } } diff --git a/.scripts/verify-pack/packages.ts b/.scripts/verify-pack/packages.ts index 9b6e7e3e..370d57ad 100644 --- a/.scripts/verify-pack/packages.ts +++ b/.scripts/verify-pack/packages.ts @@ -1,25 +1,35 @@ -export type TargetPackage = { - name: string; - dir: string; - sizeEntry: string; +export type SizeGate = { + // Names the gate in output: one package can carry several entry points now. + label: string; + entry: string; // Per-module output means adding hooks never moves this number — only the // measured export's own code or cross-module leakage does — so the budget can // stay tight without taxing ordinary feature work. Set relative to the current - // measured size per package, not a shared flat ceiling. - sizeLimitBytes: number; + // measured size per entry, not a shared flat ceiling. + limitBytes: number; +}; + +export type TargetPackage = { + name: string; + dir: string; + sizeGates: SizeGate[]; }; export const TARGET_PACKAGES: TargetPackage[] = [ { name: 'react-simplikit', dir: 'packages/react-simplikit', - sizeEntry: `export { useToggle } from 'react-simplikit';`, - sizeLimitBytes: 256, - }, - { - name: '@react-simplikit/mobile', - dir: 'packages/mobile', - sizeEntry: `export { useNetworkStatus } from '@react-simplikit/mobile';`, - sizeLimitBytes: 768, + sizeGates: [ + { + label: 'root', + entry: `export { useToggle } from 'react-simplikit';`, + limitBytes: 256, + }, + { + label: 'mobile hook via root', + entry: `export { useNetworkStatus } from 'react-simplikit';`, + limitBytes: 768, + }, + ], }, ]; diff --git a/.vitepress/locales.mts b/.vitepress/locales.mts index 0042c7fc..a10e949b 100644 --- a/.vitepress/locales.mts +++ b/.vitepress/locales.mts @@ -119,15 +119,15 @@ const routeDefinitions: RouteDefinition[] = [ localizedDestination: ':locale/core/utils/:util.md', }, { - source: 'packages/mobile/src/hooks/:hook/:hook.md', + source: 'packages/react-simplikit/src/mobile/hooks/:hook/:hook.md', destination: 'mobile/hooks/:hook.md', - localizedSource: 'packages/mobile/src/hooks/:hook/:locale/:hook.md', + localizedSource: 'packages/react-simplikit/src/mobile/hooks/:hook/:locale/:hook.md', localizedDestination: ':locale/mobile/hooks/:hook.md', }, { - source: 'packages/mobile/src/utils/:util/:util.md', + source: 'packages/react-simplikit/src/mobile/utils/:util/:util.md', destination: 'mobile/utils/:util.md', - localizedSource: 'packages/mobile/src/utils/:util/:locale/:util.md', + localizedSource: 'packages/react-simplikit/src/mobile/utils/:util/:locale/:util.md', localizedDestination: ':locale/mobile/utils/:util.md', }, ]; diff --git a/.vitepress/shared.mts b/.vitepress/shared.mts index 18e1d75d..ddce7819 100644 --- a/.vitepress/shared.mts +++ b/.vitepress/shared.mts @@ -2,5 +2,5 @@ import path from 'path'; export const projectRoot = path.resolve(import.meta.dirname, '..'); export const corePackageRoot = path.join(projectRoot, 'packages/react-simplikit/src'); -export const mobilePackageRoot = path.join(projectRoot, 'packages/mobile/src'); +export const mobilePackageRoot = path.join(projectRoot, 'packages/react-simplikit/src/mobile'); export const docsRoot = path.join(projectRoot, 'docs'); diff --git a/AGENTS.md b/AGENTS.md index 97496b32..d5c55dce 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -5,10 +5,10 @@ ## Project Overview -React utility hooks/components library. Monorepo with two packages: +React utility hooks/components library. Single package monorepo: - `react-simplikit` (`packages/react-simplikit`) — Platform-independent React hooks & components -- `@react-simplikit/mobile` (`packages/mobile`) — Mobile web utilities (viewport, keyboard, layout) +- Mobile web utilities (viewport, keyboard, layout) live in `packages/react-simplikit/src/mobile` and are exported from the root entry ## Architecture @@ -21,7 +21,7 @@ components → hooks → utils → _internal - Components may use hooks, utils, \_internal - Hooks may use utils, \_internal - Utils may use \_internal only -- Core and mobile are independent packages — no cross-package dependencies +- Root exports must NOT import from `src/mobile`; `src/mobile` may use core utils and `_internal` (test infrastructure is exempt) ## File Structure diff --git a/CLAUDE.md b/CLAUDE.md index 6e6f1cc6..c1e8191f 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -2,10 +2,9 @@ ## Project Overview -React utility hooks/components library. Monorepo with two packages: +React utility hooks/components library. Single package monorepo: -- `react-simplikit` (`packages/react-simplikit`) — Platform-independent React hooks & components -- `@react-simplikit/mobile` (`packages/mobile`) — Mobile web utilities (viewport, keyboard, layout) +- `react-simplikit` (`packages/react-simplikit`) — React hooks & components plus mobile web utilities (viewport, keyboard, layout), all exported from the single root entry (mobile source lives in `src/mobile`) ## Development Quick Start @@ -30,7 +29,7 @@ components → hooks → utils → _internal - Hooks may use utils, \_internal - Utils may use \_internal only - \_internal has no internal dependencies -- Mobile may depend on core; core must NOT depend on mobile +- `src/mobile` may use core utils and `_internal`; root exports must NOT import from `src/mobile` (test infrastructure like `_internal/test-utils` is exempt) ## File Structure Convention @@ -183,13 +182,10 @@ yarn changeset publish --tag canary # Requires npm login + OTP ``` packages/ -├── core/ # react-simplikit -│ ├── src/ # Source (hooks, components, utils) -│ ├── dist/ # Build output (per-module, mirrors src/) -│ └── package.json -└── mobile/ # @react-simplikit/mobile - ├── src/ - ├── dist/ # Build output (per-module, mirrors src/) +└── react-simplikit/ # react-simplikit + ├── src/ # Source (hooks, components, utils) + │ └── mobile/ # Mobile web utilities (exported from the root entry) + ├── dist/ # Build output (per-module, mirrors src/) └── package.json ``` diff --git a/README-ja_jp.md b/README-ja_jp.md index 9c10ced8..3438467a 100644 --- a/README-ja_jp.md +++ b/README-ja_jp.md @@ -8,12 +8,11 @@ ## パッケージ -| パッケージ | 説明 | バージョン | -| --------------------------------------------- | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| [react-simplikit](./packages/react-simplikit) | Universal hooks - 純粋な状態/ロジック用フック(プラットフォームに依存しない) | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -| [@react-simplikit/mobile](./packages/mobile) | モバイル Web ユーティリティ(viewport、keyboard、scroll) | [![npm](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) | +| パッケージ | 説明 | バージョン | +| --------------------------------------------- | ------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------- | +| [react-simplikit](./packages/react-simplikit) | Universal hooks - 状態/ロジック用フックとモバイル Web ユーティリティを単一のエントリで提供 | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -> **注記**: `react-simplikit` は現在、Web とモバイル(React Native)の両方で動作する純粋な状態/ロジック用フックのみを提供する Universal Hook Library として維持されています。ブラウザ/プラットフォームに依存するフックは非推奨です。詳しくは [packages/react-simplikit/README-ja_jp.md](./packages/react-simplikit/README-ja_jp.md) を参照してください。 +> **注記**: すべてのフックは単一の `react-simplikit` エントリから提供されます — モバイル Web ユーティリティ(viewport、keyboard、scroll)も含みます。非推奨となった `@react-simplikit/mobile` パッケージを置き換えます。フックがブラウザ API に触れるのはインポート時ではなくフック本体の中だけなので、React Native や SSR でもルートからのインポートは安全です。 ## 特長 @@ -26,11 +25,8 @@ ## インストール ```bash -# Core utilities +# 1 回のインストールで、ルート export のフックとモバイルサブパスの両方を利用できます npm install react-simplikit - -# Mobile web utilities -npm install @react-simplikit/mobile ``` ## クイックスタート @@ -64,10 +60,10 @@ function SearchInput() { デバウンスされた関数は `.cancel()` を提供し、コンポーネントがアンマウントされると保留中の呼び出しは自動的にキャンセルされます。 -### @react-simplikit/mobile +### モバイル Web ユーティリティ ```tsx -import { useAvoidKeyboard, useBodyScrollLock } from '@react-simplikit/mobile'; +import { useAvoidKeyboard, useBodyScrollLock } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -95,8 +91,7 @@ function BodyScrollLock() { ``` packages/ -├── core/ # react-simplikit (hooks, components, utils) -└── mobile/ # @react-simplikit/mobile (mobile web utilities) +└── react-simplikit/ # react-simplikit (hooks, components, utils; モバイル Web ユーティリティは src/mobile 配下) ``` ## 貢献 diff --git a/README-ko_kr.md b/README-ko_kr.md index 4fab6842..f32a499c 100644 --- a/README-ko_kr.md +++ b/README-ko_kr.md @@ -8,12 +8,11 @@ ## 패키지 -| 패키지 | 설명 | 버전 | -| --------------------------------------------- | --------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| [react-simplikit](./packages/react-simplikit) | Universal hooks - 순수 상태/로직 훅 (플랫폼 독립적) | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -| [@react-simplikit/mobile](./packages/mobile) | 모바일 웹 유틸리티 (viewport, keyboard, scroll) | [![npm](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) | +| 패키지 | 설명 | 버전 | +| --------------------------------------------- | ---------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| [react-simplikit](./packages/react-simplikit) | Universal hooks - 상태/로직 훅과 모바일 웹 유틸리티를 하나의 진입점에서 제공 | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -> **참고**: `react-simplikit`은 이제 웹과 모바일(React Native)에서 모두 동작하는 순수 상태/로직 훅만을 제공하는 Universal Hook Library로 유지됩니다. 브라우저/플랫폼 종속 훅들은 Deprecated 처리됩니다. 자세한 내용은 [packages/react-simplikit/README-ko_kr.md](./packages/react-simplikit/README-ko_kr.md)를 참고하세요. +> **참고**: 모든 훅은 `react-simplikit` 단일 진입점에서 제공됩니다 — 모바일 웹 유틸리티(viewport, keyboard, scroll)도 포함해서요. 기존 `@react-simplikit/mobile` 패키지를 대체합니다. 훅은 브라우저 API를 임포트 시점이 아니라 훅 본문 안에서만 사용하므로, React Native와 SSR에서도 루트 임포트가 안전합니다. ## 특징 @@ -26,11 +25,8 @@ ## 설치 ```bash -# Core utilities +# One install covers both the root hooks and the mobile subpath npm install react-simplikit - -# Mobile web utilities -npm install @react-simplikit/mobile ``` ## 빠른 시작 @@ -64,10 +60,10 @@ function SearchInput() { 디바운스된 함수는 `.cancel()` 메서드를 제공하고, 컴포넌트가 언마운트되면 대기 중인 호출을 자동으로 취소해요. -### @react-simplikit/mobile +### 모바일 웹 유틸리티 ```tsx -import { useAvoidKeyboard, useBodyScrollLock } from '@react-simplikit/mobile'; +import { useAvoidKeyboard, useBodyScrollLock } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -95,8 +91,7 @@ function BodyScrollLock() { ``` packages/ -├── core/ # react-simplikit (hooks, components, utils) -└── mobile/ # @react-simplikit/mobile (mobile web utilities) +└── react-simplikit/ # react-simplikit (hooks, components, utils; 모바일 웹 유틸리티는 src/mobile) ``` ## 기여하기 diff --git a/README.md b/README.md index ed65a106..b8db0ff5 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,11 @@ A collection of lightweight, zero-dependency React utilities for building robust ## Packages -| Package | Description | Version | -| --------------------------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | -| [react-simplikit](./packages/react-simplikit) | Universal hooks - pure state/logic hooks (platform-independent) | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -| [@react-simplikit/mobile](./packages/mobile) | Mobile web utilities (viewport, keyboard, scroll) | [![npm](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) | +| Package | Description | Version | +| --------------------------------------------- | --------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | +| [react-simplikit](./packages/react-simplikit) | Universal hooks - state/logic hooks plus mobile web utilities, all from one entry | [![npm](https://img.shields.io/npm/v/react-simplikit.svg)](https://www.npmjs.com/package/react-simplikit) | -> **Note**: `react-simplikit` is now maintained as a Universal Hook Library providing only pure state/logic hooks that work across web and mobile (React Native). Browser/platform-dependent hooks are deprecated. See [packages/react-simplikit/README.md](./packages/react-simplikit/README.md) for details. +> **Note**: every hook ships from the single `react-simplikit` entry — mobile web utilities (viewport, keyboard, scroll) included. This replaces the deprecated `@react-simplikit/mobile` package. Hooks touch browser APIs only inside their bodies, so importing the root stays safe on React Native and SSR. ## Features @@ -26,11 +25,8 @@ A collection of lightweight, zero-dependency React utilities for building robust ## Installation ```bash -# Core utilities +# One install covers both the root hooks and the mobile subpath npm install react-simplikit - -# Mobile web utilities -npm install @react-simplikit/mobile ``` ## Quick Start @@ -64,10 +60,10 @@ function SearchInput() { The debounced function exposes `.cancel()`, and pending calls are cancelled automatically when the component unmounts. -### @react-simplikit/mobile +### Mobile web utilities ```tsx -import { useAvoidKeyboard, useBodyScrollLock } from '@react-simplikit/mobile'; +import { useAvoidKeyboard, useBodyScrollLock } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -95,8 +91,7 @@ Visit [react-simplikit.slash.page](https://react-simplikit.slash.page) for full ``` packages/ -├── core/ # react-simplikit (hooks, components, utils) -└── mobile/ # @react-simplikit/mobile (mobile web utilities) +└── react-simplikit/ # react-simplikit (hooks, components, utils; mobile web utilities in src/mobile) ``` ## Contributing diff --git a/docs/core/contributing.md b/docs/core/contributing.md index 6ee615bc..52575613 100644 --- a/docs/core/contributing.md +++ b/docs/core/contributing.md @@ -8,10 +8,10 @@ Before contributing, check which package your implementation belongs to: -| Package | Scope | Examples | -| ------------------------- | -------------------------------------- | ------------------------------------------------------------ | -| `react-simplikit` | Platform-independent pure state/logic | `useToggle`, `useAsyncEffect`, `useLoading` | -| `@react-simplikit/mobile` | Solving mobile web-specific challenges | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | +| Package | Scope | Examples | +| ------------------------------- | -------------------------------------- | ------------------------------------------------------------ | +| `react-simplikit` | Platform-independent pure state/logic | `useToggle`, `useAsyncEffect`, `useLoading` | +| Mobile utilities (`src/mobile`) | Solving mobile web-specific challenges | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | ::: tip The mobile package is **not** for all browser API-dependent hooks. It specifically targets **problems encountered in mobile web environments** (viewport management, keyboard handling, layout issues on iOS Safari and Android Chrome). For example, a keyboard shortcut hook uses browser APIs but doesn't belong in the mobile package. diff --git a/docs/index.md b/docs/index.md index 56e5e32e..b96b2842 100644 --- a/docs/index.md +++ b/docs/index.md @@ -9,11 +9,11 @@ hero: alt: react-simplikit actions: - theme: brand - text: Mobile (Recommended) - link: /mobile/intro - - theme: alt - text: Core + text: Get Started link: /core/intro + - theme: alt + text: Mobile Utilities + link: /mobile/intro features: - title: 'Zero dependencies' diff --git a/docs/ja/core/contributing.md b/docs/ja/core/contributing.md index a5666603..cc1dd391 100644 --- a/docs/ja/core/contributing.md +++ b/docs/ja/core/contributing.md @@ -8,10 +8,10 @@ 貢献する前に、実装がどのパッケージに属するかを確認してください。 -| パッケージ | スコープ | 例 | -| ------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | -| `react-simplikit` | プラットフォームに依存しない純粋な状態・ロジック | `useToggle`, `useAsyncEffect`, `useLoading` | -| `@react-simplikit/mobile` | モバイル Web 特有の課題を解決する | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | +| パッケージ | スコープ | 例 | +| ------------------------------------- | ------------------------------------------------ | ------------------------------------------------------------ | +| `react-simplikit` | プラットフォームに依存しない純粋な状態・ロジック | `useToggle`, `useAsyncEffect`, `useLoading` | +| モバイルユーティリティ (`src/mobile`) | モバイル Web 特有の課題を解決する | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | ::: tip mobile パッケージは、ブラウザ API に依存するすべてのフックのためのものでは**ありません**。**モバイル Web 環境で直面する問題**(ビューポート管理、キーボード処理、iOS Safari や Android Chrome でのレイアウトの問題)に限定して対象とします。たとえば、キーボードショートカットのフックはブラウザ API を使用しますが、mobile パッケージには属しません。 diff --git a/docs/ja/index.md b/docs/ja/index.md index 0c90a9c2..1826f503 100644 --- a/docs/ja/index.md +++ b/docs/ja/index.md @@ -9,11 +9,11 @@ hero: alt: react-simplikit actions: - theme: brand - text: Mobile (推奨) - link: /ja/mobile/intro - - theme: alt - text: Core + text: はじめる link: /ja/core/intro + - theme: alt + text: モバイルユーティリティ + link: /ja/mobile/intro features: - title: '依存関係ゼロ' diff --git a/docs/ja/mobile/contributing.md b/docs/ja/mobile/contributing.md index b76359bd..c51082a5 100644 --- a/docs/ja/mobile/contributing.md +++ b/docs/ja/mobile/contributing.md @@ -1,10 +1,10 @@ -# @react-simplikit/mobile への貢献 +# モバイルユーティリティへの貢献 このガイドは [core の貢献ガイド](/ja/core/contributing) を拡張したものです。 ## パッケージのスコープ -`@react-simplikit/mobile` は、**モバイル Web 環境で直面する問題を解決する**ための専用パッケージです。 +`react-simplikit` のモバイルユーティリティは、**モバイル Web 環境で直面する問題の解決**に焦点を当てています。 以下のような領域を扱います。 diff --git a/docs/ja/mobile/design-principles.md b/docs/ja/mobile/design-principles.md index e9d4ce5f..b2e57895 100644 --- a/docs/ja/mobile/design-principles.md +++ b/docs/ja/mobile/design-principles.md @@ -1,26 +1,26 @@ # 設計原則 -`@react-simplikit/mobile` は `react-simplikit` のコア原則を踏襲しつつ、モバイル特有の課題に合わせて拡張しています。 +モバイルユーティリティは `react-simplikit` のコア原則を踏襲しつつ、モバイル特有の課題に合わせて拡張しています。 ## コア原則 ### React のライフサイクルを尊重し、干渉しない -`@react-simplikit/mobile` は、React のライフサイクルに直接干渉する実装を含みません。 +`react-simplikit` は、React のライフサイクルに直接干渉する実装を含みません。 たとえば、`useMount` や `useLifecycles` のようなフックは提供せず、代わりに React のデフォルトの挙動を尊重し、活用するアプローチを採ります。 ### 依存関係ゼロによる軽量さと高速さ -`@react-simplikit/mobile` には依存関係が一切ありません。追加のライブラリに依存しないことで、プロジェクトに組み込む際のバンドルサイズを最小化し、パフォーマンス低下への懸念をなくします。 +`react-simplikit` には依存関係が一切ありません。追加のライブラリに依存しないことで、プロジェクトに組み込む際のバンドルサイズを最小化し、パフォーマンス低下への懸念をなくします。 ### 100% テストカバレッジによる信頼性の確保 -`@react-simplikit/mobile` は、すべての関数と分岐を徹底的にテストします。 +`react-simplikit` は、すべての関数と分岐を徹底的にテストします。 基本機能だけでなく、各実装の SSR 環境における考慮事項も含めた包括的なテストを書くことで、予期しない挙動による問題を防いでいます。 ### わかりやすく使いやすい包括的なドキュメント -`@react-simplikit/mobile` は、ユーザーが各機能を素早く理解し活用できるよう、詳細なドキュメントを提供します。ドキュメントには以下が含まれます。 +`react-simplikit` は、ユーザーが各機能を素早く理解し活用できるよう、詳細なドキュメントを提供します。ドキュメントには以下が含まれます。 - **JSDoc コメント**: 各関数の挙動、パラメータ、戻り値についての詳しい説明。 - **使用ガイド**: すぐに始められる、明確でわかりやすい手順。 @@ -28,7 +28,7 @@ ### 完全な TypeScript サポートによる型安全性 -`@react-simplikit/mobile` は、最初から TypeScript で構築されています。すべてのフックとユーティリティには、以下が備わっています。 +`react-simplikit` は、最初から TypeScript で構築されています。すべてのフックとユーティリティには、以下が備わっています。 - **厳密な型定義**: すべてのパラメータ、戻り値、オプションが完全に型付けされています - **IntelliSense サポート**: IDE で自動補完とインラインドキュメントを利用できます diff --git a/docs/ja/mobile/installation.md b/docs/ja/mobile/installation.md index da1e4e77..6339566a 100644 --- a/docs/ja/mobile/installation.md +++ b/docs/ja/mobile/installation.md @@ -1,27 +1,27 @@ --- -description: '@react-simplikit/mobile のインストール方法' +description: 'モバイル Web 向け react-simplikit のインストール方法' --- # インストール -お好みのパッケージマネージャーを使って、[npm](https://npmjs.com/package/@react-simplikit/mobile) から `@react-simplikit/mobile` をインストールできます。 +お好みのパッケージマネージャーを使って、[npm](https://npmjs.com/package/react-simplikit) から `react-simplikit` をインストールできます。モバイルユーティリティも同じパッケージに含まれています。 ::: code-group ```sh [npm] -npm install @react-simplikit/mobile +npm install react-simplikit ``` ```sh [pnpm] -pnpm add @react-simplikit/mobile +pnpm add react-simplikit ``` ```sh [yarn] -yarn add @react-simplikit/mobile +yarn add react-simplikit ``` ```sh [bun] -bun add @react-simplikit/mobile +bun add react-simplikit ``` ::: @@ -36,7 +36,7 @@ bun add @react-simplikit/mobile パッケージから直接フックを import してください。 ```tsx -import { useKeyboardHeight, useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useKeyboardHeight, useAvoidKeyboard } from 'react-simplikit'; ``` すべてのフックはツリーシェイキング対応なので、実際に使用するものだけがバンドルに含まれます。 diff --git a/docs/ja/mobile/intro.md b/docs/ja/mobile/intro.md index 7143888d..b07d3df8 100644 --- a/docs/ja/mobile/intro.md +++ b/docs/ja/mobile/intro.md @@ -1,8 +1,8 @@ -# @react-simplikit/mobile +# モバイルユーティリティ モバイル Web 環境でよくある UI の課題を解決する React フック集です。 -## なぜ @react-simplikit/mobile なのか +## なぜモバイルユーティリティなのか モバイル Web 開発には、デスクトップにはない固有の課題があります。 @@ -12,12 +12,12 @@ - **ページ可視性の追跡**: アプリがバックグラウンドに移動したときに動画や計測を一時停止します - **ビジュアルビューポートの変化**: モバイルブラウザでのズーム、キーボード、ビューポートのリサイズに対応します -`@react-simplikit/mobile` は、これらのシナリオを最小限の設定で扱える実績のあるフックを提供します。 +`react-simplikit` は、これらのシナリオを最小限の設定で扱える実績のあるフックを提供します。 ## クイックスタート ```bash -npm install @react-simplikit/mobile +npm install react-simplikit ``` ### CTA ボタンの例 @@ -25,7 +25,7 @@ npm install @react-simplikit/mobile もっとも一般的なモバイル UI パターンです。キーボードの上に移動する下部固定ボタンです。 ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard(); @@ -52,7 +52,7 @@ function FixedBottomCTA() { ```tsx import { useState } from 'react'; -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -89,7 +89,7 @@ function ChatInput() { ホームインジケーターを備えた端末(iPhone など)では、セーフエリアのオフセットを追加できます。 ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard({ safeAreaBottom: 34 }); diff --git a/docs/ja/mobile/roadmap.md b/docs/ja/mobile/roadmap.md index 637d7f6b..bc33c44f 100644 --- a/docs/ja/mobile/roadmap.md +++ b/docs/ja/mobile/roadmap.md @@ -14,7 +14,7 @@ ## 私たちのアプローチ: ビジュアルビューポートに焦点を当てる -`@react-simplikit/mobile` は、これらの問題を解決するために焦点を絞ったアプローチを取ります。もろいハックでブラウザの癖を回避しようとするのではなく、**ビジュアルビューポート** — ユーザーがある瞬間に実際に見ている画面領域 — を中心に設計しています。 +`react-simplikit` のモバイルユーティリティは、これらの問題を解決するために焦点を絞ったアプローチを取ります。もろいハックでブラウザの癖を回避しようとするのではなく、**ビジュアルビューポート** — ユーザーがある瞬間に実際に見ている画面領域 — を中心に設計しています。 [Visual Viewport API](https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API) をベースに構築することで、以下のようなことができるフックを提供します。 @@ -26,7 +26,7 @@ ## クロスプラットフォーム、クロスデバイス -特定の OS や端末モデルに限定されないことを目指しています。モバイル Web は本質的にクロスプラットフォームであり、`@react-simplikit/mobile` はそれを受け入れています。 +特定の OS や端末モデルに限定されないことを目指しています。モバイル Web は本質的にクロスプラットフォームであり、`react-simplikit` はそれを受け入れています。 私たちのフックは、以下の環境で一貫して動作するように設計されています。 @@ -38,4 +38,4 @@ ## 今後の展開 -`@react-simplikit/mobile` で提供するフックのラインナップを、常に同じ原則に基づいて拡張し続けています。**端末や OS を問わず、モバイル UI 開発を予測可能で信頼できるものにする**という原則です。よくあるモバイル UI の悩みがあれば、私たちはそのためのクリーンで宣言的な解決策に取り組んでいる可能性が高いです。 +`react-simplikit` で提供するモバイルフックのラインナップを、常に同じ原則に基づいて拡張し続けています。**端末や OS を問わず、モバイル UI 開発を予測可能で信頼できるものにする**という原則です。よくあるモバイル UI の悩みがあれば、私たちはそのためのクリーンで宣言的な解決策に取り組んでいる可能性が高いです。 diff --git a/docs/ko/core/contributing.md b/docs/ko/core/contributing.md index ea150dcb..725d89a5 100644 --- a/docs/ko/core/contributing.md +++ b/docs/ko/core/contributing.md @@ -8,10 +8,10 @@ 기여하기 전에, 구현체가 어떤 패키지에 속하는지 확인해 주세요: -| 패키지 | 범위 | 예시 | -| ------------------------- | ------------------------------ | ------------------------------------------------------------ | -| `react-simplikit` | 플랫폼 독립적인 순수 상태/로직 | `useToggle`, `useAsyncEffect`, `useLoading` | -| `@react-simplikit/mobile` | 모바일 웹 환경의 문제 해결 | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | +| 패키지 | 범위 | 예시 | +| ------------------------------ | ------------------------------ | ------------------------------------------------------------ | +| `react-simplikit` | 플랫폼 독립적인 순수 상태/로직 | `useToggle`, `useAsyncEffect`, `useLoading` | +| 모바일 유틸리티 (`src/mobile`) | 모바일 웹 환경의 문제 해결 | `useAvoidKeyboard`, `useBodyScrollLock`, `useVisualViewport` | ::: tip mobile 패키지는 모든 브라우저 API 의존 훅을 위한 것이 **아니에요**. **모바일 웹 환경에서 겪는 문제**를 해결하는 훅/유틸리티만 해당돼요(뷰포트 관리, 키보드 처리, iOS Safari/Android Chrome의 레이아웃 이슈 등). 예를 들어, 키보드 단축키 훅은 브라우저 API를 사용하지만 mobile 패키지에 속하지 않아요. diff --git a/docs/ko/index.md b/docs/ko/index.md index 86400238..e1d1455e 100644 --- a/docs/ko/index.md +++ b/docs/ko/index.md @@ -9,11 +9,11 @@ hero: alt: react-simplikit actions: - theme: brand - text: Mobile (권장) - link: /ko/mobile/intro - - theme: alt - text: Core + text: 시작하기 link: /ko/core/intro + - theme: alt + text: 모바일 유틸리티 + link: /ko/mobile/intro features: - title: '의존성이 전혀 없어요' diff --git a/docs/ko/mobile/contributing.md b/docs/ko/mobile/contributing.md index ad62b724..c3fa7b0e 100644 --- a/docs/ko/mobile/contributing.md +++ b/docs/ko/mobile/contributing.md @@ -4,7 +4,7 @@ ## 패키지 범위 -`@react-simplikit/mobile`은 **모바일 웹 환경에서 겪는 문제를 해결**하기 위한 전용 패키지예요. +`react-simplikit`의 모바일 유틸리티는 **모바일 웹 환경에서 겪는 문제 해결**에 집중해요. 다음과 같은 영역을 다뤄요: diff --git a/docs/ko/mobile/design-principles.md b/docs/ko/mobile/design-principles.md index cd1d4a94..1fbb23f7 100644 --- a/docs/ko/mobile/design-principles.md +++ b/docs/ko/mobile/design-principles.md @@ -1,26 +1,26 @@ # 설계 원칙 -`@react-simplikit/mobile`은 `react-simplikit`의 핵심 원칙을 따르면서, 모바일 환경에 특화된 고려사항을 추가로 다루고 있어요. +모바일 유틸리티는 `react-simplikit`의 핵심 원칙을 따르면서, 모바일 환경에 특화된 고려사항을 추가로 다루고 있어요. ## 핵심 원칙 ### React의 생명주기를 존중하고 간섭하지 않기 -`@react-simplikit/mobile`은 React의 생명주기에 직접적으로 간섭하는 구현체를 포함하지 않아요. +`react-simplikit`은 React의 생명주기에 직접적으로 간섭하는 구현체를 포함하지 않아요. 예를 들어, `useMount`나 `useLifecycles`와 같은 훅을 제공하지 않고, React의 기본 동작을 존중하고 활용하는 접근 방식을 선호해요. ### 의존성 없음을 통한 가볍고 빠른 성능 -`@react-simplikit/mobile`은 의존성이 전혀 없어요. 추가 라이브러리에 의존하지 않음으로써 프로젝트에 통합할 때 번들 크기를 최소화하고 성능 저하에 대한 우려를 없애요. +`react-simplikit`은 의존성이 전혀 없어요. 추가 라이브러리에 의존하지 않음으로써 프로젝트에 통합할 때 번들 크기를 최소화하고 성능 저하에 대한 우려를 없애요. ### 100% 테스트 커버리지를 통한 신뢰성 보장 -`@react-simplikit/mobile`은 모든 함수와 분기를 철저하게 테스트해요. +`react-simplikit`은 모든 함수와 분기를 철저하게 테스트해요. 기본 기능뿐만 아니라 각 구현체의 SSR 환경 고려사항도 포함하는 포괄적인 테스트를 작성하여, 예상치 못한 동작으로 인한 문제를 방지해요. ### 쉬운 이해와 사용을 위한 포괄적인 문서 -`@react-simplikit/mobile`은 사용자가 각 기능을 빠르게 이해하고 활용할 수 있도록 상세한 문서를 제공해요. 문서에는 다음이 포함돼요: +`react-simplikit`은 사용자가 각 기능을 빠르게 이해하고 활용할 수 있도록 상세한 문서를 제공해요. 문서에는 다음이 포함돼요: - **JSDoc 주석**: 각 함수의 동작, 매개변수, 반환 값에 대한 자세한 설명. - **사용 가이드**: 즉시 시작할 수 있는 명확하고 따라하기 쉬운 지침. @@ -28,7 +28,7 @@ ### 완전한 TypeScript 지원을 통한 타입 안전성 -`@react-simplikit/mobile`은 처음부터 TypeScript로 구축되었어요. 모든 훅과 유틸리티는 다음을 제공해요: +`react-simplikit`은 처음부터 TypeScript로 구축되었어요. 모든 훅과 유틸리티는 다음을 제공해요: - **엄격한 타입 정의**: 모든 매개변수, 반환 값, 옵션이 완전히 타입화되어 있어요 - **IntelliSense 지원**: IDE에서 자동완성과 인라인 문서를 제공받을 수 있어요 diff --git a/docs/ko/mobile/installation.md b/docs/ko/mobile/installation.md index db12b7dd..98021804 100644 --- a/docs/ko/mobile/installation.md +++ b/docs/ko/mobile/installation.md @@ -1,27 +1,27 @@ --- -description: '@react-simplikit/mobile 설치 방법' +description: '모바일 웹을 위한 react-simplikit 설치 방법' --- # 설치하기 -좋아하는 패키지 매니저를 사용하여 [npm](https://npmjs.com/package/@react-simplikit/mobile)에서 `@react-simplikit/mobile`을 설치할 수 있어요. +좋아하는 패키지 매니저를 사용하여 [npm](https://npmjs.com/package/react-simplikit)에서 `react-simplikit`을 설치할 수 있어요. 모바일 유틸리티도 같은 패키지에 포함돼 있어요. ::: code-group ```sh [npm] -npm install @react-simplikit/mobile +npm install react-simplikit ``` ```sh [pnpm] -pnpm add @react-simplikit/mobile +pnpm add react-simplikit ``` ```sh [yarn] -yarn add @react-simplikit/mobile +yarn add react-simplikit ``` ```sh [bun] -bun add @react-simplikit/mobile +bun add react-simplikit ``` ::: @@ -36,7 +36,7 @@ bun add @react-simplikit/mobile 패키지에서 직접 훅을 import하세요: ```tsx -import { useKeyboardHeight, useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useKeyboardHeight, useAvoidKeyboard } from 'react-simplikit'; ``` 모든 훅은 트리 쉐이킹이 가능하므로, 번들에는 사용하는 것만 포함돼요. diff --git a/docs/ko/mobile/intro.md b/docs/ko/mobile/intro.md index 02fdde05..6fe05e2c 100644 --- a/docs/ko/mobile/intro.md +++ b/docs/ko/mobile/intro.md @@ -1,8 +1,8 @@ -# @react-simplikit/mobile +# 모바일 유틸리티 모바일 웹 환경에서 발생하는 다양한 UI 문제를 해결하는 React 훅 모음이에요. -## Why @react-simplikit/mobile? +## 왜 모바일 유틸리티인가요? 모바일 웹 개발에는 데스크톱에서는 없는 고유한 문제들이 있어요: @@ -12,12 +12,12 @@ - **페이지 가시성 추적**: 앱이 백그라운드로 갈 때 비디오나 분석 일시정지하기 - **Visual Viewport 변화**: 모바일 브라우저에서 줌, 키보드, 뷰포트 리사이즈 처리하기 -`@react-simplikit/mobile`은 이러한 시나리오를 최소한의 설정으로 처리할 수 있는 검증된 훅들을 제공해요. +`react-simplikit`은 이러한 시나리오를 최소한의 설정으로 처리할 수 있는 검증된 훅들을 제공해요. ## Quick Start ```bash -npm install @react-simplikit/mobile +npm install react-simplikit ``` ### Button CTA 예제 @@ -25,7 +25,7 @@ npm install @react-simplikit/mobile 가장 흔한 모바일 UI 패턴 - 키보드 위로 이동하는 하단 고정 버튼: ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard(); @@ -52,7 +52,7 @@ function FixedBottomCTA() { ```tsx import { useState } from 'react'; -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -89,7 +89,7 @@ function ChatInput() { 홈 인디케이터가 있는 기기(예: iPhone)의 경우 safe area 오프셋을 추가할 수 있어요: ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard({ safeAreaBottom: 34 }); diff --git a/docs/ko/mobile/roadmap.md b/docs/ko/mobile/roadmap.md index e5fd4765..0bb052de 100644 --- a/docs/ko/mobile/roadmap.md +++ b/docs/ko/mobile/roadmap.md @@ -14,7 +14,7 @@ ## 우리의 접근: 비주얼 뷰포트에 집중 -`@react-simplikit/mobile`은 이러한 문제들을 해결하기 위해 명확한 접근 방식을 취해요. 브라우저의 특이한 동작을 불안정한 우회 방법으로 처리하는 대신, **비주얼 뷰포트(Visual Viewport)** — 사용자가 특정 순간에 실제로 볼 수 있는 화면 영역 — 를 중심으로 설계해요. +`react-simplikit`의 모바일 유틸리티는 이러한 문제들을 해결하기 위해 명확한 접근 방식을 취해요. 브라우저의 특이한 동작을 불안정한 우회 방법으로 처리하는 대신, **비주얼 뷰포트(Visual Viewport)** — 사용자가 특정 순간에 실제로 볼 수 있는 화면 영역 — 를 중심으로 설계해요. [Visual Viewport API](https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API)를 기반으로, 다음과 같은 훅들을 제공해요: @@ -26,7 +26,7 @@ ## 크로스 플랫폼, 크로스 디바이스 -특정 OS나 기기 모델에 국한되고 싶지 않아요. 모바일 웹은 본질적으로 크로스 플랫폼이고, `@react-simplikit/mobile`은 이를 지향해요. +특정 OS나 기기 모델에 국한되고 싶지 않아요. 모바일 웹은 본질적으로 크로스 플랫폼이고, `react-simplikit`은 이를 지향해요. 우리의 훅들은 다음 환경에서 일관되게 동작하도록 설계되었어요: @@ -38,4 +38,4 @@ ## 앞으로의 방향 -`@react-simplikit/mobile`에서 제공하는 훅들을 계속 확장해 나갈 예정이에요. 항상 같은 원칙에 따라: **기기나 OS에 관계없이 모바일 UI 개발을 예측 가능하고 안정적으로 만드는 것**이에요. 모바일 UI에서 흔히 겪는 불편함이 있다면, 우리는 그것에 대한 깔끔하고 선언적인 해결책을 만들고 있을 거예요. +`react-simplikit`에서 제공하는 모바일 훅들을 계속 확장해 나갈 예정이에요. 항상 같은 원칙에 따라: **기기나 OS에 관계없이 모바일 UI 개발을 예측 가능하고 안정적으로 만드는 것**이에요. 모바일 UI에서 흔히 겪는 불편함이 있다면, 우리는 그것에 대한 깔끔하고 선언적인 해결책을 만들고 있을 거예요. diff --git a/docs/mobile/contributing.md b/docs/mobile/contributing.md index 6f68f882..91b76992 100644 --- a/docs/mobile/contributing.md +++ b/docs/mobile/contributing.md @@ -1,10 +1,10 @@ -# Contributing to @react-simplikit/mobile +# Contributing to the Mobile Utilities This guide extends the [core contributing guide](/core/contributing). ## Package Scope -`@react-simplikit/mobile` is a dedicated package for **solving problems encountered in mobile web environments**. +The mobile utilities in `react-simplikit` focus on **solving problems encountered in mobile web environments**. This includes: diff --git a/docs/mobile/design-principles.md b/docs/mobile/design-principles.md index 8a206397..5f5e72ae 100644 --- a/docs/mobile/design-principles.md +++ b/docs/mobile/design-principles.md @@ -1,26 +1,26 @@ # Design Principles -`@react-simplikit/mobile` follows the core principles of `react-simplikit`, extended for mobile-specific challenges. +The mobile utilities follow the core principles of `react-simplikit`, extended for mobile-specific challenges. ## Core Principles ### Respect React's Lifecycle Without Interference -`@react-simplikit/mobile` does not include implementations that directly interfere with React's lifecycle. +`react-simplikit` does not include implementations that directly interfere with React's lifecycle. For example, it doesn't provide hooks like `useMount` or `useLifecycles`, instead favoring approaches that respect and utilize React's default behaviors. ### Lightweight and Fast Through Zero Dependencies -`@react-simplikit/mobile` has absolutely no dependencies. By not relying on additional libraries, it minimizes bundle size when integrated into projects and eliminates concerns about performance degradation. +`react-simplikit` has absolutely no dependencies. By not relying on additional libraries, it minimizes bundle size when integrated into projects and eliminates concerns about performance degradation. ### Ensures Reliability Through 100% Test Coverage -`@react-simplikit/mobile` thoroughly tests every function and branch. +`react-simplikit` thoroughly tests every function and branch. We write comprehensive tests that include not only basic functionality but also SSR environment considerations for each implementation, preventing issues caused by unexpected behavior. ### Comprehensive Documentation for Easy Understanding and Use -`@react-simplikit/mobile` provides detailed documentation to help users quickly understand and utilize each feature. The documentation includes: +`react-simplikit` provides detailed documentation to help users quickly understand and utilize each feature. The documentation includes: - **JSDoc Comments**: Detailed explanations of each function's behavior, parameters, and return values. - **Usage Guides**: Clear and easy-to-follow instructions to get started immediately. @@ -28,7 +28,7 @@ We write comprehensive tests that include not only basic functionality but also ### Type Safe with Full TypeScript Support -`@react-simplikit/mobile` is built with TypeScript from the ground up. Every hook and utility comes with: +`react-simplikit` is built with TypeScript from the ground up. Every hook and utility comes with: - **Strict Type Definitions**: All parameters, return values, and options are fully typed - **IntelliSense Support**: Get autocompletion and inline documentation in your IDE diff --git a/docs/mobile/installation.md b/docs/mobile/installation.md index 93d76475..aa51ab57 100644 --- a/docs/mobile/installation.md +++ b/docs/mobile/installation.md @@ -1,27 +1,27 @@ --- -description: How to install @react-simplikit/mobile +description: How to install react-simplikit for mobile web --- # Installation -You can install `@react-simplikit/mobile` from [npm](https://npmjs.com/package/@react-simplikit/mobile) using your favorite package manager. +You can install `react-simplikit` from [npm](https://npmjs.com/package/react-simplikit) using your favorite package manager. ::: code-group ```sh [npm] -npm install @react-simplikit/mobile +npm install react-simplikit ``` ```sh [pnpm] -pnpm add @react-simplikit/mobile +pnpm add react-simplikit ``` ```sh [yarn] -yarn add @react-simplikit/mobile +yarn add react-simplikit ``` ```sh [bun] -bun add @react-simplikit/mobile +bun add react-simplikit ``` ::: @@ -36,7 +36,7 @@ bun add @react-simplikit/mobile Import hooks directly from the package: ```tsx -import { useKeyboardHeight, useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useKeyboardHeight, useAvoidKeyboard } from 'react-simplikit'; ``` All hooks are tree-shakeable, so you only include what you use in your bundle. diff --git a/docs/mobile/intro.md b/docs/mobile/intro.md index 1b794d74..22d5264c 100644 --- a/docs/mobile/intro.md +++ b/docs/mobile/intro.md @@ -1,8 +1,8 @@ -# @react-simplikit/mobile +# Mobile Utilities A collection of React hooks that solve common UI challenges in mobile web environments. -## Why @react-simplikit/mobile? +## Why mobile utilities? Mobile web development comes with unique challenges that don't exist on desktop: @@ -12,12 +12,12 @@ Mobile web development comes with unique challenges that don't exist on desktop: - **Page visibility tracking**: Pausing videos or analytics when the app goes to background - **Visual viewport changes**: Handling zoom, keyboard, and viewport resize on mobile browsers -`@react-simplikit/mobile` provides battle-tested hooks to handle these scenarios with minimal configuration. +`react-simplikit` provides battle-tested mobile hooks to handle these scenarios with minimal configuration. ## Quick Start ```bash -npm install @react-simplikit/mobile +npm install react-simplikit ``` ### Button CTA Example @@ -25,7 +25,7 @@ npm install @react-simplikit/mobile The most common mobile UI pattern - a fixed bottom button that moves above the keyboard: ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard(); @@ -52,7 +52,7 @@ A chat interface with an input field that stays above the keyboard: ```tsx import { useState } from 'react'; -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function ChatInput() { const { style } = useAvoidKeyboard(); @@ -89,7 +89,7 @@ function ChatInput() { For devices with home indicators (like iPhone), you can add a safe area offset: ```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; +import { useAvoidKeyboard } from 'react-simplikit'; function FixedBottomCTA() { const { style } = useAvoidKeyboard({ safeAreaBottom: 34 }); diff --git a/docs/mobile/roadmap.md b/docs/mobile/roadmap.md index 7c82536a..681ec7ad 100644 --- a/docs/mobile/roadmap.md +++ b/docs/mobile/roadmap.md @@ -14,7 +14,7 @@ These issues are not specific to any single OS or device. Whether it's iOS Safar ## Our Approach: Focus on the Visual Viewport -`@react-simplikit/mobile` takes a focused approach to solving these problems. Rather than trying to work around browser quirks with brittle hacks, we center our design around the **visual viewport** — the area of the screen that the user can actually see at any given moment. +The mobile utilities in `react-simplikit` take a focused approach to solving these problems. Rather than trying to work around browser quirks with brittle hacks, we center our design around the **visual viewport** — the area of the screen that the user can actually see at any given moment. By building on the [Visual Viewport API](https://developer.mozilla.org/en-US/docs/Web/API/Visual_Viewport_API), we provide hooks that let you: @@ -26,7 +26,7 @@ The goal is simple: **within the visual viewport, UI should render reliably and ## Cross-Platform, Cross-Device -We don't want to be limited to a specific OS or device model. Mobile web is inherently cross-platform, and `@react-simplikit/mobile` embraces that. +We don't want to be limited to a specific OS or device model. Mobile web is inherently cross-platform, and `react-simplikit` embraces that. Our hooks are designed to work consistently across: @@ -38,4 +38,4 @@ Where a specific API is unavailable (e.g., `window.visualViewport` in older brow ## What's Next -We're continuing to expand the set of hooks available in `@react-simplikit/mobile`, always guided by the same principle: **make mobile UI development predictable and reliable, regardless of device or OS**. If there's a common mobile UI pain point, chances are we're working on a clean, declarative solution for it. +We're continuing to expand the set of mobile hooks available in `react-simplikit`, always guided by the same principle: **make mobile UI development predictable and reliable, regardless of device or OS**. If there's a common mobile UI pain point, chances are we're working on a clean, declarative solution for it. diff --git a/examples/DEMO_GUIDELINES.md b/examples/DEMO_GUIDELINES.md index 128e762d..8cffd2b8 100644 --- a/examples/DEMO_GUIDELINES.md +++ b/examples/DEMO_GUIDELINES.md @@ -19,11 +19,11 @@ import { StatusCard, StatusRow, } from '@examples/shared'; -import { useMyHook } from '@react-simplikit/mobile'; +import { useMyHook } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout'; // 1. Code example constants (separated at top) -const EXAMPLE_CODE = `import { useMyHook } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { useMyHook } from 'react-simplikit'; ...`; export function MyHookDemo() { diff --git a/examples/shared/package.json b/examples/shared/package.json index d169a0a6..debcfba0 100644 --- a/examples/shared/package.json +++ b/examples/shared/package.json @@ -13,7 +13,6 @@ "@radix-ui/themes": "^3.2.1" }, "peerDependencies": { - "@react-simplikit/mobile": "workspace:*", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/examples/with-nextjs/app/demos/is-server/page.tsx b/examples/with-nextjs/app/demos/is-server/page.tsx index e66efd7d..9efe4cc4 100644 --- a/examples/with-nextjs/app/demos/is-server/page.tsx +++ b/examples/with-nextjs/app/demos/is-server/page.tsx @@ -1,7 +1,7 @@ 'use client'; import { useEffect, useState } from 'react'; -import { isServer } from '@react-simplikit/mobile'; +import { isServer } from 'react-simplikit'; import { DemoLayout } from '../../../components/DemoLayout.tsx'; diff --git a/examples/with-nextjs/app/layout.tsx b/examples/with-nextjs/app/layout.tsx index 240295d0..8ce5ad71 100644 --- a/examples/with-nextjs/app/layout.tsx +++ b/examples/with-nextjs/app/layout.tsx @@ -2,8 +2,8 @@ import type { ReactNode } from 'react'; import type { Metadata } from 'next'; export const metadata: Metadata = { - title: 'with-nextjs | @react-simplikit/mobile', - description: 'Next.js example for @react-simplikit/mobile', + title: 'with-nextjs | react-simplikit/mobile', + description: 'Next.js example for react-simplikit/mobile', }; export default function RootLayout({ children }: { children: ReactNode }) { diff --git a/examples/with-nextjs/next.config.ts b/examples/with-nextjs/next.config.ts index 020f6f1d..b22af960 100644 --- a/examples/with-nextjs/next.config.ts +++ b/examples/with-nextjs/next.config.ts @@ -1,7 +1,5 @@ import type { NextConfig } from 'next'; -const nextConfig: NextConfig = { - transpilePackages: ['@react-simplikit/mobile'], -}; +const nextConfig: NextConfig = {}; export default nextConfig; diff --git a/examples/with-nextjs/package.json b/examples/with-nextjs/package.json index 00073e24..2abab127 100644 --- a/examples/with-nextjs/package.json +++ b/examples/with-nextjs/package.json @@ -8,7 +8,6 @@ "start": "next start" }, "dependencies": { - "@react-simplikit/mobile": "workspace:*", "next": "^15.0.0", "react": "^19.0.0", "react-dom": "^19.0.0", diff --git a/examples/with-vite/index.html b/examples/with-vite/index.html index 2bba8adf..fc64bac9 100644 --- a/examples/with-vite/index.html +++ b/examples/with-vite/index.html @@ -3,7 +3,7 @@ - with-react | @react-simplikit/mobile + with-react | react-simplikit/mobile
diff --git a/examples/with-vite/package.json b/examples/with-vite/package.json index 3fceaf3c..4e369401 100644 --- a/examples/with-vite/package.json +++ b/examples/with-vite/package.json @@ -11,11 +11,11 @@ "dependencies": { "@examples/shared": "workspace:^", "@radix-ui/themes": "^3.2.1", - "@react-simplikit/mobile": "workspace:^", "@suspensive/react": "^3.18.0", "react": "^19.0.0", "react-dom": "^19.0.0", - "react-router-dom": "^7.0.0" + "react-router-dom": "^7.0.0", + "react-simplikit": "workspace:^" }, "devDependencies": { "@types/react": "^19.0.0", diff --git a/examples/with-vite/src/pages/Home.tsx b/examples/with-vite/src/pages/Home.tsx index 9f4fe935..6fb902cb 100644 --- a/examples/with-vite/src/pages/Home.tsx +++ b/examples/with-vite/src/pages/Home.tsx @@ -4,7 +4,7 @@ export function Home() { return (
-

@react-simplikit/mobile

+

react-simplikit/mobile

Mobile Examples Playground - Test on your mobile device!

diff --git a/examples/with-vite/src/pages/demos/BodyScrollLockUtilDemo.tsx b/examples/with-vite/src/pages/demos/BodyScrollLockUtilDemo.tsx index 9d0e5eb0..105fcd04 100644 --- a/examples/with-vite/src/pages/demos/BodyScrollLockUtilDemo.tsx +++ b/examples/with-vite/src/pages/demos/BodyScrollLockUtilDemo.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { Button, Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { disableBodyScrollLock, enableBodyScrollLock } from '@react-simplikit/mobile'; +import { disableBodyScrollLock, enableBodyScrollLock } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; diff --git a/examples/with-vite/src/pages/demos/GetSafeAreaInsetDemo.tsx b/examples/with-vite/src/pages/demos/GetSafeAreaInsetDemo.tsx index 78f7627c..a9d4998a 100644 --- a/examples/with-vite/src/pages/demos/GetSafeAreaInsetDemo.tsx +++ b/examples/with-vite/src/pages/demos/GetSafeAreaInsetDemo.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { getSafeAreaInset } from '@react-simplikit/mobile'; +import { getSafeAreaInset } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; @@ -11,7 +11,7 @@ type SafeAreaValues = { right: number; }; -const USAGE_CODE = `import { getSafeAreaInset } from '@react-simplikit/mobile'; +const USAGE_CODE = `import { getSafeAreaInset } from 'react-simplikit'; // Get all insets at once const { top, bottom, left, right } = getSafeAreaInset(); diff --git a/examples/with-vite/src/pages/demos/IsServerDemo.tsx b/examples/with-vite/src/pages/demos/IsServerDemo.tsx index a165b6a5..352239ce 100644 --- a/examples/with-vite/src/pages/demos/IsServerDemo.tsx +++ b/examples/with-vite/src/pages/demos/IsServerDemo.tsx @@ -1,10 +1,10 @@ import { useEffect, useState } from 'react'; import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { isServer } from '@react-simplikit/mobile'; +import { isServer } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const EXAMPLE_CODE = `import { isServer } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { isServer } from 'react-simplikit'; // Check environment if (isServer()) { diff --git a/examples/with-vite/src/pages/demos/UseBodyScrollLockDemo.tsx b/examples/with-vite/src/pages/demos/UseBodyScrollLockDemo.tsx index 4c9783a9..e0167616 100644 --- a/examples/with-vite/src/pages/demos/UseBodyScrollLockDemo.tsx +++ b/examples/with-vite/src/pages/demos/UseBodyScrollLockDemo.tsx @@ -1,6 +1,6 @@ import { useEffect, useState } from 'react'; import { Button, Card, CodeBlock, Dialog, StatusCard, StatusRow } from '@examples/shared'; -import { useBodyScrollLock } from '@react-simplikit/mobile'; +import { useBodyScrollLock } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; @@ -64,7 +64,7 @@ export function UseBodyScrollLockDemo() { ); } -const EXAMPLE_CODE = `import { useBodyScrollLock } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { useBodyScrollLock } from 'react-simplikit'; function Modal({ onClose }) { // Lock body scroll when modal mounts diff --git a/examples/with-vite/src/pages/demos/UseNetworkStatusDemo.tsx b/examples/with-vite/src/pages/demos/UseNetworkStatusDemo.tsx index 138e0930..46939aab 100644 --- a/examples/with-vite/src/pages/demos/UseNetworkStatusDemo.tsx +++ b/examples/with-vite/src/pages/demos/UseNetworkStatusDemo.tsx @@ -1,10 +1,10 @@ import { useEffect, useState } from 'react'; import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { useNetworkStatus } from '@react-simplikit/mobile'; +import { useNetworkStatus } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const EXAMPLE_CODE = `import { useNetworkStatus } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { useNetworkStatus } from 'react-simplikit'; function AdaptiveMedia() { const { effectiveType, saveData, downlink } = useNetworkStatus(); diff --git a/examples/with-vite/src/pages/demos/UsePageVisibilityDemo.tsx b/examples/with-vite/src/pages/demos/UsePageVisibilityDemo.tsx index 8e9a5c2e..a7f29bb1 100644 --- a/examples/with-vite/src/pages/demos/UsePageVisibilityDemo.tsx +++ b/examples/with-vite/src/pages/demos/UsePageVisibilityDemo.tsx @@ -1,10 +1,10 @@ import { useEffect, useRef, useState } from 'react'; import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { usePageVisibility } from '@react-simplikit/mobile'; +import { usePageVisibility } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const EXAMPLE_CODE = `import { usePageVisibility } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { usePageVisibility } from 'react-simplikit'; function VideoPlayer() { const { isVisible } = usePageVisibility(); diff --git a/examples/with-vite/src/pages/demos/UseSafeAreaInsetDemo.tsx b/examples/with-vite/src/pages/demos/UseSafeAreaInsetDemo.tsx index 45cb9392..8cbdc4b0 100644 --- a/examples/with-vite/src/pages/demos/UseSafeAreaInsetDemo.tsx +++ b/examples/with-vite/src/pages/demos/UseSafeAreaInsetDemo.tsx @@ -1,9 +1,9 @@ import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { useSafeAreaInset } from '@react-simplikit/mobile'; +import { useSafeAreaInset } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const USAGE_CODE = `import { useSafeAreaInset } from '@react-simplikit/mobile'; +const USAGE_CODE = `import { useSafeAreaInset } from 'react-simplikit'; function MyComponent() { // Automatically updates on orientation change! diff --git a/examples/with-vite/src/pages/demos/UseScrollDirectionDemo.tsx b/examples/with-vite/src/pages/demos/UseScrollDirectionDemo.tsx index 059bbd69..2d381858 100644 --- a/examples/with-vite/src/pages/demos/UseScrollDirectionDemo.tsx +++ b/examples/with-vite/src/pages/demos/UseScrollDirectionDemo.tsx @@ -1,9 +1,9 @@ import { Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { useScrollDirection } from '@react-simplikit/mobile'; +import { useScrollDirection } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const EXAMPLE_CODE = `import { useScrollDirection } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { useScrollDirection } from 'react-simplikit'; function Header() { const { direction, position } = useScrollDirection(); diff --git a/examples/with-vite/src/pages/demos/UseVisualViewportDemo.tsx b/examples/with-vite/src/pages/demos/UseVisualViewportDemo.tsx index 0db1edea..d67defd2 100644 --- a/examples/with-vite/src/pages/demos/UseVisualViewportDemo.tsx +++ b/examples/with-vite/src/pages/demos/UseVisualViewportDemo.tsx @@ -1,10 +1,10 @@ import { useState } from 'react'; import { Button, Card, CodeBlock, InfoBox, StatusCard, StatusRow } from '@examples/shared'; -import { useVisualViewport } from '@react-simplikit/mobile'; +import { useVisualViewport } from 'react-simplikit'; import { DemoLayout } from '../../components/DemoLayout.tsx'; -const EXAMPLE_CODE = `import { useVisualViewport } from '@react-simplikit/mobile'; +const EXAMPLE_CODE = `import { useVisualViewport } from 'react-simplikit'; function CustomLayout() { const { viewport } = useVisualViewport(); diff --git a/llms.txt b/llms.txt index 278318a0..475c0e0e 100644 --- a/llms.txt +++ b/llms.txt @@ -39,9 +39,9 @@ npm install react-simplikit - `useTimeout`: Declarative hook for setting up timeouts safely. - `useToggle`: Hook to toggle boolean values. -## Available Mobile Hooks (@react-simplikit/mobile) +## Available Mobile Hooks (mobile web) -The `@react-simplikit/mobile` package is designed for **mobile web** (iOS Safari, Android Chrome), providing viewport management, keyboard handling, and layout utilities. See docs: https://react-simplikit.slash.page/mobile/intro.html +The mobile utilities in `react-simplikit` are designed for **mobile web** (iOS Safari, Android Chrome), providing viewport management, keyboard handling, and layout utilities. See docs: https://react-simplikit.slash.page/mobile/intro.html - `useAvoidKeyboard`: Hook to adjust layouts to avoid the on-screen keyboard. - `useBodyScrollLock`: Hook to temporarily lock body scrolling. @@ -55,4 +55,4 @@ The `@react-simplikit/mobile` package is designed for **mobile web** (iOS Safari ## Usage Guidelines for AI Agents - When you are writing React components, prefer using these hooks over reinventing the logic manually. - This library handles SSR and edge cases automatically. -- Import hooks from `react-simplikit` (or `@react-simplikit/mobile` for mobile web). +- Import every hook — mobile web utilities included — from `react-simplikit`. diff --git a/packages/mobile/CHANGELOG.md b/packages/mobile/CHANGELOG.md deleted file mode 100644 index 6845af90..00000000 --- a/packages/mobile/CHANGELOG.md +++ /dev/null @@ -1,31 +0,0 @@ -# @react-simplikit/mobile - -## 0.1.1 - -### Patch Changes - -- [#401](https://github.com/toss/react-simplikit/pull/401) [`9b93d29`](https://github.com/toss/react-simplikit/commit/9b93d299e9b105d060f2700b27ffb63001b88de3) Thanks [@hyesungoh](https://github.com/hyesungoh)! - Switched the build output from a single bundled file per package to per-module files, so bundlers can tree-shake unused exports at file granularity instead of relying on dead-code elimination inside one large bundle. - - The public API and runtime behavior are unchanged. For an app importing a single hook, this cuts the amount of code a bundler has to include: `react-simplikit`'s `useToggle` drops from 5363 B to 102 B minified, and `@react-simplikit/mobile`'s `useNetworkStatus` drops from 981 B to 570 B minified. - - The only user-visible change is packaging: output files are now `.mjs`/`.cjs` with `.d.mts`/`.d.cts` type declarations instead of a flat bundle, and for `react-simplikit` the `esm/` directory has been removed (`@react-simplikit/mobile` never had one — it always emitted to `dist/`). This does not affect the published `exports` map, so `import`/`require` usage is unaffected — only projects that deep-imported internal build paths (which were never part of the public `exports`) would be impacted. - -## 0.1.0 - -### Minor Changes - -- [#393](https://github.com/toss/react-simplikit/pull/393) [`a01348f`](https://github.com/toss/react-simplikit/commit/a01348f3921485d936bfc4bb4ab55a55b752fa0e) Thanks [@hyesungoh](https://github.com/hyesungoh)! - Export `useKeyboardHeight` from the package entry. The hook was documented but not importable: its folder was named `keyboardHeight`, breaking the folder-name convention, and the re-export was missing from `src/index.ts`. The folder is renamed to `useKeyboardHeight` and the hook is now part of the public API. - -## 0.0.2 - -### Patch Changes - -- [#318](https://github.com/toss/react-simplikit/pull/318) [`466e3ce`](https://github.com/toss/react-simplikit/commit/466e3ceab51a499abb141bc1fe138d9109cc0df5) Thanks [@kimyouknow](https://github.com/kimyouknow)! - Fix broken package exports by moving main/types/module/exports from publishConfig to top-level package.json fields - - npm does not support publishConfig field overrides for manifest fields like main, types, and exports. The previous versions (react-simplikit@0.0.47, @react-simplikit/mobile@0.0.1) were published with incorrect entry points because publishConfig overrides were not applied during `npm publish`. - -## 0.0.1 - -### Patch Changes - -- [#313](https://github.com/toss/react-simplikit/pull/313) [`347ed21`](https://github.com/toss/react-simplikit/commit/347ed216155d6a22239ce6d9b778d8e3242f80c1) Thanks [@kimyouknow](https://github.com/kimyouknow)! - Add `@react-simplikit/mobile` package with monorepo structure. Mobile web utilities (viewport, keyboard, body scroll lock, safe area, etc.). [#308](https://github.com/toss/react-simplikit/pull/308) diff --git a/packages/mobile/README-ja_jp.md b/packages/mobile/README-ja_jp.md deleted file mode 100644 index e39b76b2..00000000 --- a/packages/mobile/README-ja_jp.md +++ /dev/null @@ -1,140 +0,0 @@ -# @react-simplikit/mobile - -[![npm version](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/react-simplikit/blob/main/LICENSE) - -[English](./README.md) | [한국어](./README-ko_kr.md) | 日本語 - -iOS Safari と Android Chrome の viewport、キーボード、レイアウトの問題を解決する React 向けモバイル Web ユーティリティです。 - -## なぜ必要なのか - -モバイル Web 開発は難しいものです。iOS Safari と Android Chrome には、以下のような問題を引き起こす癖があります。 - -- キーボードが開いたときの viewport の高さの変化 -- モーダルでの body スクロールの問題 -- Safe area inset の処理 -- Visual viewport の不整合 - -`@react-simplikit/mobile` は、こうしたよくある問題に対する実績のある解決策を提供します。 - -## 特長 - -- **キーボード処理** - 仮想キーボードによってコンテンツが隠れるのを防ぐ -- **Body scroll lock** - モーダルでの背景スクロールを防ぐ -- **Visual viewport** - 実際に見える領域を追跡 -- **Safe area** - ノッチとホームインジケーターを処理 -- **端末の検出** - iOS、Android、ブラウザの種類を検出 -- **SSR 安全** - Next.js などの SSR フレームワークで動作 - -## インストール - -```bash -npm install @react-simplikit/mobile -# or -yarn add @react-simplikit/mobile -# or -pnpm add @react-simplikit/mobile -``` - -## クイックスタート - -### キーボード回避ビュー - -```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; - -function ChatInput() { - const { style } = useAvoidKeyboard(); - - return ( -
- -
- ); -} -``` - -### Body Scroll Lock - -`useBodyScrollLock` は、コンポーネントがマウントされている間 body のスクロールをロックし、アンマウント時に自動的に解除します。ロックのタイミングを制御するには、このフックを呼び出すコンポーネントを条件付きでレンダリングしてください。 - -```tsx -import { useBodyScrollLock } from '@react-simplikit/mobile'; - -function BodyScrollLock() { - useBodyScrollLock(); - return null; -} - -function ModalContainer({ isOpen, children }) { - return ( - <> - {isOpen && } - {isOpen &&
{children}
} - - ); -} -``` - -### Visual Viewport - -```tsx -import { useVisualViewport } from '@react-simplikit/mobile'; - -function Component() { - const { viewport } = useVisualViewport(); - - // 必ず最初に null チェックを行ってください - if (!viewport) { - return null; - } - - return ( -
- 実際に見える高さ: {viewport.height}px -
- ); -} -``` - -## 提供している機能 - -### Hooks - -| Hook | 説明 | -| -------------------- | -------------------------------------------- | -| `useAvoidKeyboard` | キーボードによってコンテンツが隠れるのを防ぐ | -| `useBodyScrollLock` | body スクロールをロック(モーダル用) | -| `useVisualViewport` | visual viewport のサイズを追跡 | -| `useScrollDirection` | スクロール方向を検知 | -| `useNetworkStatus` | ネットワーク接続状態を監視 | -| `usePageVisibility` | ページの可視性の状態を追跡 | - -### Utilities - -| Utility | 説明 | -| ------------------------------------------------ | ------------------------------ | -| `enableBodyScrollLock` / `disableBodyScrollLock` | 命令的なスクロールロックの制御 | -| `getSafeAreaInset` | Safe area inset を取得 | -| `getKeyboardHeight` | キーボードの高さを推定 | -| `isIOS` / `isAndroid` | 端末の検出 | -| `isServer` | SSR 環境かどうかを判定 | - -## 対応ブラウザ - -- iOS Safari 13+ -- Android Chrome 80+ -- デスクトップブラウザ(graceful fallback) - -## 関連パッケージ - -- [react-simplikit](https://www.npmjs.com/package/react-simplikit) - Core hooks & utilities - -## 貢献 - -貢献を歓迎します![貢献ガイド](https://github.com/toss/react-simplikit/blob/main/CONTRIBUTING.md) をご確認ください。 - -## ライセンス - -MIT © Viva Republica, Inc. 詳しくは [LICENSE](https://github.com/toss/react-simplikit/blob/main/LICENSE) を参照してください。 diff --git a/packages/mobile/README-ko_kr.md b/packages/mobile/README-ko_kr.md deleted file mode 100644 index 4a026bc0..00000000 --- a/packages/mobile/README-ko_kr.md +++ /dev/null @@ -1,140 +0,0 @@ -# @react-simplikit/mobile - -[![npm version](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/react-simplikit/blob/main/LICENSE) - -[English](./README.md) | 한국어 | [日本語](./README-ja_jp.md) - -모바일 웹을 위한 React 유틸리티 - iOS Safari와 Android Chrome의 뷰포트, 키보드, 레이아웃 문제를 해결해요. - -## 왜 필요한가요? - -모바일 웹 개발은 어려워요. iOS Safari와 Android Chrome에는 다음과 같은 문제가 있어요: - -- 키보드가 열릴 때 뷰포트 높이 변경 -- 모달에서 body 스크롤 문제 -- Safe area inset 처리 -- Visual viewport 불일치 - -`@react-simplikit/mobile`은 이러한 일반적인 문제에 대한 검증된 솔루션을 제공해요. - -## 특징 - -- **키보드 처리** - 가상 키보드에 의해 콘텐츠가 가려지는 것을 방지 -- **Body scroll lock** - 모달에서 배경 스크롤 방지 -- **Visual viewport** - 실제 보이는 영역 추적 -- **Safe area** - 노치와 홈 인디케이터 처리 -- **기기 감지** - iOS, Android, 브라우저 타입 감지 -- **SSR 안전** - Next.js 등 SSR 프레임워크에서 동작 - -## 설치 - -```bash -npm install @react-simplikit/mobile -# or -yarn add @react-simplikit/mobile -# or -pnpm add @react-simplikit/mobile -``` - -## 빠른 시작 - -### 키보드 회피 - -```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; - -function ChatInput() { - const { style } = useAvoidKeyboard(); - - return ( -
- -
- ); -} -``` - -### Body Scroll Lock - -`useBodyScrollLock`은 컴포넌트가 마운트될 때 body 스크롤을 잠그고, 언마운트될 때 자동으로 해제해요. 잠그는 시점을 제어하려면 이 훅을 호출하는 컴포넌트를 조건부로 렌더링하세요. - -```tsx -import { useBodyScrollLock } from '@react-simplikit/mobile'; - -function BodyScrollLock() { - useBodyScrollLock(); - return null; -} - -function ModalContainer({ isOpen, children }) { - return ( - <> - {isOpen && } - {isOpen &&
{children}
} - - ); -} -``` - -### Visual Viewport - -```tsx -import { useVisualViewport } from '@react-simplikit/mobile'; - -function Component() { - const { viewport } = useVisualViewport(); - - // viewport 속성에 접근하기 전에 항상 null 체크를 해야 해요 - if (!viewport) { - return null; - } - - return ( -
- 실제 보이는 높이: {viewport.height}px -
- ); -} -``` - -## 포함된 기능 - -### Hooks - -| Hook | 설명 | -| -------------------- | ----------------------------------------- | -| `useAvoidKeyboard` | 키보드에 의해 콘텐츠가 가려지는 것을 방지 | -| `useBodyScrollLock` | body 스크롤 잠금 (모달용) | -| `useVisualViewport` | visual viewport 크기 추적 | -| `useScrollDirection` | 스크롤 방향 감지 | -| `useNetworkStatus` | 네트워크 연결 상태 모니터링 | -| `usePageVisibility` | 페이지 가시성 상태 추적 | - -### Utilities - -| Utility | 설명 | -| ------------------------------------------------ | ------------------------- | -| `enableBodyScrollLock` / `disableBodyScrollLock` | 명령형 스크롤 잠금 제어 | -| `getSafeAreaInset` | safe area insets 가져오기 | -| `getKeyboardHeight` | 키보드 높이 추정 | -| `isIOS` / `isAndroid` | 기기 감지 | -| `isServer` | SSR 환경 체크 | - -## 브라우저 지원 - -- iOS Safari 13+ -- Android Chrome 80+ -- 데스크톱 브라우저 (graceful fallback) - -## 관련 패키지 - -- [react-simplikit](https://www.npmjs.com/package/react-simplikit) - Core hooks & utilities - -## 기여하기 - -기여를 환영해요! [기여 가이드](https://github.com/toss/react-simplikit/blob/main/CONTRIBUTING.md)를 확인하세요. - -## 라이선스 - -MIT © Viva Republica, Inc. 자세한 내용은 [LICENSE](https://github.com/toss/react-simplikit/blob/main/LICENSE)를 참고하세요. diff --git a/packages/mobile/README.md b/packages/mobile/README.md deleted file mode 100644 index d35e36cf..00000000 --- a/packages/mobile/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# @react-simplikit/mobile - -[![npm version](https://img.shields.io/npm/v/@react-simplikit/mobile.svg)](https://www.npmjs.com/package/@react-simplikit/mobile) -[![MIT License](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/toss/react-simplikit/blob/main/LICENSE) - -English | [한국어](./README-ko_kr.md) | [日本語](./README-ja_jp.md) - -Mobile web utilities for React - fixing viewport, keyboard, and layout issues on iOS Safari and Android Chrome. - -## Why? - -Mobile web development is hard. iOS Safari and Android Chrome have quirks that cause: - -- Viewport height changes when keyboard opens -- Body scroll issues with modals -- Safe area inset handling -- Visual viewport inconsistencies - -`@react-simplikit/mobile` provides battle-tested solutions for these common problems. - -## Features - -- **Keyboard handling** - Avoid content being hidden by virtual keyboard -- **Body scroll lock** - Prevent background scroll in modals -- **Visual viewport** - Track actual visible area -- **Safe area** - Handle notch and home indicator -- **Device detection** - Detect iOS, Android, and browser types -- **SSR-safe** - Works with Next.js and other SSR frameworks - -## Installation - -```bash -npm install @react-simplikit/mobile -# or -yarn add @react-simplikit/mobile -# or -pnpm add @react-simplikit/mobile -``` - -## Quick Start - -### Keyboard Avoiding View - -```tsx -import { useAvoidKeyboard } from '@react-simplikit/mobile'; - -function ChatInput() { - const { style } = useAvoidKeyboard(); - - return ( -
- -
- ); -} -``` - -### Body Scroll Lock - -`useBodyScrollLock` locks body scroll while the component is mounted, and unlocks it automatically on unmount. To control when the lock applies, conditionally render a component that calls it. - -```tsx -import { useBodyScrollLock } from '@react-simplikit/mobile'; - -function BodyScrollLock() { - useBodyScrollLock(); - return null; -} - -function ModalContainer({ isOpen, children }) { - return ( - <> - {isOpen && } - {isOpen &&
{children}
} - - ); -} -``` - -### Visual Viewport - -```tsx -import { useVisualViewport } from '@react-simplikit/mobile'; - -function Component() { - const { viewport } = useVisualViewport(); - - // Always check for null first - if (!viewport) { - return null; - } - - return ( -
- Actual visible height: {viewport.height}px -
- ); -} -``` - -## What's Included - -### Hooks - -| Hook | Description | -| -------------------- | -------------------------------------- | -| `useAvoidKeyboard` | Avoid content being hidden by keyboard | -| `useBodyScrollLock` | Lock body scroll (for modals) | -| `useVisualViewport` | Track visual viewport size | -| `useScrollDirection` | Detect scroll direction | -| `useNetworkStatus` | Monitor network connectivity | -| `usePageVisibility` | Track page visibility state | - -### Utilities - -| Utility | Description | -| ------------------------------------------------ | ------------------------------ | -| `enableBodyScrollLock` / `disableBodyScrollLock` | Imperative scroll lock control | -| `getSafeAreaInset` | Get safe area insets | -| `getKeyboardHeight` | Estimate keyboard height | -| `isIOS` / `isAndroid` | Device detection | -| `isServer` | SSR environment check | - -## Browser Support - -- iOS Safari 13+ -- Android Chrome 80+ -- Desktop browsers (graceful fallback) - -## Related Packages - -- [react-simplikit](https://www.npmjs.com/package/react-simplikit) - Core hooks & utilities - -## Contributing - -We welcome contributions! Please see our [Contributing Guide](https://github.com/toss/react-simplikit/blob/main/CONTRIBUTING.md). - -## License - -MIT © Viva Republica, Inc. See [LICENSE](https://github.com/toss/react-simplikit/blob/main/LICENSE) for details. diff --git a/packages/mobile/package.json b/packages/mobile/package.json deleted file mode 100644 index ff9d3f9d..00000000 --- a/packages/mobile/package.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "name": "@react-simplikit/mobile", - "version": "0.1.1", - "description": "Mobile web utilities for React - fixing viewport, keyboard, and layout issues", - "type": "module", - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", - "types": "./dist/index.d.cts", - "exports": { - ".": { - "import": { - "types": "./dist/index.d.mts", - "default": "./dist/index.mjs" - }, - "require": { - "types": "./dist/index.d.cts", - "default": "./dist/index.cjs" - } - }, - "./package.json": "./package.json" - }, - "files": [ - "dist/**/*" - ], - "sideEffects": false, - "keywords": [ - "react", - "mobile", - "viewport", - "keyboard", - "mobile-web", - "ios-safari", - "android-chrome", - "visual-viewport", - "keyboard-avoiding", - "safe-area" - ], - "homepage": "https://react-simplikit.slash.page", - "bugs": "https://github.com/toss/react-simplikit/issues", - "repository": { - "type": "git", - "url": "git+https://github.com/toss/react-simplikit.git", - "directory": "packages/mobile" - }, - "license": "MIT", - "scripts": { - "build": "tsdown", - "clean": "rimraf ./dist", - "lint": "eslint src", - "typecheck": "tsc --noEmit", - "test": "vitest run", - "test:watch": "vitest", - "test:coverage": "vitest run --coverage", - "test:compiled": "vitest run -c vitest.compiled.config.ts" - }, - "peerDependencies": { - "react": ">=18.0.0" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/preset-react": "^7.27.0", - "@babel/preset-typescript": "^7.28.0", - "@testing-library/dom": "^10.4.0", - "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.1.0", - "@types/react": "^19.0.0", - "@types/react-dom": "^19.0.0", - "@vitest/coverage-v8": "^2.1.8", - "babel-plugin-react-compiler": "1.0.0", - "eslint": "^9.16.0", - "react": "^19.0.0", - "react-dom": "^19.0.0", - "rimraf": "^6.0.1", - "tsdown": "^0.22.14", - "typescript": "^5.7.2", - "vitest": "^2.1.8" - }, - "publishConfig": { - "access": "public" - } -} diff --git a/packages/mobile/src/index.ts b/packages/mobile/src/index.ts deleted file mode 100644 index f78110fe..00000000 --- a/packages/mobile/src/index.ts +++ /dev/null @@ -1,26 +0,0 @@ -// Hooks -export { useAvoidKeyboard } from './hooks/useAvoidKeyboard/index.ts'; -export { useBodyScrollLock } from './hooks/useBodyScrollLock/index.ts'; -export { useKeyboardHeight } from './hooks/useKeyboardHeight/index.ts'; -export { - type ConnectionType, - type EffectiveConnectionType, - type NetworkStatus, - useNetworkStatus, -} from './hooks/useNetworkStatus/index.ts'; -export { type PageVisibility, usePageVisibility, type VisibilityState } from './hooks/usePageVisibility/index.ts'; -export { useSafeAreaInset } from './hooks/useSafeAreaInset/index.ts'; -export { useScrollDirection } from './hooks/useScrollDirection/index.ts'; -export { useVisualViewport } from './hooks/useVisualViewport/index.ts'; - -// Utils -export { disableBodyScrollLock } from './utils/disableBodyScrollLock/index.ts'; -export { enableBodyScrollLock } from './utils/enableBodyScrollLock/index.ts'; -export { getKeyboardHeight } from './utils/getKeyboardHeight/index.ts'; -export type { SafeAreaInset } from './utils/getSafeAreaInset/index.ts'; -export { getSafeAreaInset } from './utils/getSafeAreaInset/index.ts'; -export { isAndroid } from './utils/isAndroid/index.ts'; -export { isIOS } from './utils/isIOS/index.ts'; -export { isKeyboardVisible } from './utils/isKeyboardVisible/index.ts'; -export { isServer } from './utils/isServer/index.ts'; -export { subscribeKeyboardHeight } from './utils/subscribeKeyboardHeight/index.ts'; diff --git a/packages/mobile/src/test/reactCompilerCanary.ts b/packages/mobile/src/test/reactCompilerCanary.ts deleted file mode 100644 index 1832ced0..00000000 --- a/packages/mobile/src/test/reactCompilerCanary.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { describe, expect, it } from 'vitest'; - -import { useNetworkStatus } from '../hooks/useNetworkStatus/useNetworkStatus.ts'; - -// `$[n]` is the React Compiler's memo-cache slot access. Unlike the `_c` import binding, -// which Vitest's SSR module transform renames, it survives into Function.prototype.toString(). -const MEMO_CACHE_ACCESS = /\$\[\d+\]/; - -// Guards the compiled suite against silently degrading into a duplicate of the uncompiled -// run (e.g. the plugin filter no longer matching source files). Only the compiled config -// includes this file — under the base config, the assertion would not hold. -describe('react compiler canary', () => { - it('runs against compiled source', () => { - expect(useNetworkStatus.toString()).toMatch(MEMO_CACHE_ACCESS); - }); -}); diff --git a/packages/mobile/src/test/renderHookSSR.tsx b/packages/mobile/src/test/renderHookSSR.tsx deleted file mode 100644 index 4e966bf3..00000000 --- a/packages/mobile/src/test/renderHookSSR.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { createRef, RefObject } from 'react'; -import { renderToString } from 'react-dom/server'; -import { render, renderHook, RenderHookOptions } from '@testing-library/react'; - -import { serverEnvironments } from './serverEnvironments.ts'; - -export function renderHookSSR

, Hook extends (props: P) => any>( - useHook: Hook, - options: RenderHookOptions

= {} -) { - const result = renderHook, P>(useHook, { - ...options, - hydrate: true, - }); - - return result; -} - -renderHookSSR.serverOnly = any>(useHook: Hook) => { - const result = createRef>(); - - const Component = () => { - const hookResult = useHook(); - result.current = hookResult; - return

; - }; - - const stringified = serverEnvironments(() => renderToString()); - render(
); - - return result as RefObject>; -}; diff --git a/packages/mobile/src/test/serverEnvironments.ts b/packages/mobile/src/test/serverEnvironments.ts deleted file mode 100644 index 5ffc0c06..00000000 --- a/packages/mobile/src/test/serverEnvironments.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -const KEYS = [ - 'window', - 'document', - 'navigator', - 'location', - 'history', - 'localStorage', - 'sessionStorage', - 'requestAnimationFrame', - 'cancelAnimationFrame', - 'matchMedia', - 'ResizeObserver', - 'IntersectionObserver', - 'MutationObserver', - 'performance', - 'Event', - 'CustomEvent', - 'screen', -]; - -export function serverEnvironments(callback: () => T) { - const origins = KEYS.map(key => [key, globalThis[key as keyof typeof globalThis]]); - - try { - origins.forEach(([key]) => { - delete globalThis[key as keyof typeof globalThis]; - }); - - return callback(); - } finally { - origins.forEach(([key, value]) => { - (globalThis as any)[key] = value; - }); - } -} diff --git a/packages/mobile/test/renderHookSSR.tsx b/packages/mobile/test/renderHookSSR.tsx deleted file mode 100644 index 4e966bf3..00000000 --- a/packages/mobile/test/renderHookSSR.tsx +++ /dev/null @@ -1,33 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -import { createRef, RefObject } from 'react'; -import { renderToString } from 'react-dom/server'; -import { render, renderHook, RenderHookOptions } from '@testing-library/react'; - -import { serverEnvironments } from './serverEnvironments.ts'; - -export function renderHookSSR

, Hook extends (props: P) => any>( - useHook: Hook, - options: RenderHookOptions

= {} -) { - const result = renderHook, P>(useHook, { - ...options, - hydrate: true, - }); - - return result; -} - -renderHookSSR.serverOnly = any>(useHook: Hook) => { - const result = createRef>(); - - const Component = () => { - const hookResult = useHook(); - result.current = hookResult; - return

; - }; - - const stringified = serverEnvironments(() => renderToString()); - render(
); - - return result as RefObject>; -}; diff --git a/packages/mobile/test/renderSSR.tsx b/packages/mobile/test/renderSSR.tsx deleted file mode 100644 index fe70b6c8..00000000 --- a/packages/mobile/test/renderSSR.tsx +++ /dev/null @@ -1,56 +0,0 @@ -import { type ReactNode } from 'react'; -import { renderToString } from 'react-dom/server'; -import { render, RenderOptions } from '@testing-library/react'; -import { expect } from 'vitest'; -import { vi } from 'vitest'; - -import { serverEnvironments } from './serverEnvironments.ts'; - -export async function renderSSR(renderer: () => ReactNode, options: RenderOptions = {}) { - const errorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); - - const ui = renderer(); - const serverUi = renderer(); - - const container = document.createElement('div'); - - container.innerHTML = renderToString(serverUi); - - document.body.appendChild(container); - - const result = render(ui, { - ...options, - container, - hydrate: true, - onRecoverableError: err => { - if (!(err instanceof Error)) { - console.warn(err); - return; - } - - console.warn(err.message); - - if (err instanceof Error && err.message.includes('Hydration failed')) { - console.error('Hydration failed'); - } - }, - }); - - await vi.waitFor( - () => { - expect(errorSpy).not.toHaveBeenCalledWith('Hydration failed'); - }, - { timeout: 1000 } - ); - - return result; -} - -renderSSR.serverOnly = (renderer: () => ReactNode) => { - const ui = renderer(); - const stringified = serverEnvironments(() => renderToString(ui)); - - const renderResult = render(
); - - return renderResult; -}; diff --git a/packages/mobile/test/serverEnvironments.ts b/packages/mobile/test/serverEnvironments.ts deleted file mode 100644 index 5ffc0c06..00000000 --- a/packages/mobile/test/serverEnvironments.ts +++ /dev/null @@ -1,36 +0,0 @@ -/* eslint-disable @typescript-eslint/no-explicit-any */ -const KEYS = [ - 'window', - 'document', - 'navigator', - 'location', - 'history', - 'localStorage', - 'sessionStorage', - 'requestAnimationFrame', - 'cancelAnimationFrame', - 'matchMedia', - 'ResizeObserver', - 'IntersectionObserver', - 'MutationObserver', - 'performance', - 'Event', - 'CustomEvent', - 'screen', -]; - -export function serverEnvironments(callback: () => T) { - const origins = KEYS.map(key => [key, globalThis[key as keyof typeof globalThis]]); - - try { - origins.forEach(([key]) => { - delete globalThis[key as keyof typeof globalThis]; - }); - - return callback(); - } finally { - origins.forEach(([key, value]) => { - (globalThis as any)[key] = value; - }); - } -} diff --git a/packages/mobile/tsconfig.json b/packages/mobile/tsconfig.json deleted file mode 100644 index 56d2de1b..00000000 --- a/packages/mobile/tsconfig.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "compilerOptions": { - "lib": ["ESNext", "DOM"], - "target": "ESNext", - "module": "ESNext", - "noEmit": true, - "allowImportingTsExtensions": true, - "moduleResolution": "Bundler", - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "strict": true, - "skipLibCheck": true, - "jsx": "react-jsx", - "types": ["@testing-library/jest-dom"] - }, - "include": ["src/**/*"], - "exclude": ["node_modules", "dist"] -} diff --git a/packages/mobile/tsdown.config.ts b/packages/mobile/tsdown.config.ts deleted file mode 100644 index f8fd9f19..00000000 --- a/packages/mobile/tsdown.config.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { defineConfig } from 'tsdown'; - -export default defineConfig({ - entry: ['src/index.ts'], - format: ['esm', 'cjs'], - // Per-module output lets a consumer's bundler drop whole files it never imports, - // instead of relying on it to prove top-level statements in one flat bundle are removable. - unbundle: true, - dts: true, - clean: true, - sourcemap: true, - // To support React Server Components - banner: { js: '"use client";' }, -}); diff --git a/packages/mobile/vitest.compiled.config.ts b/packages/mobile/vitest.compiled.config.ts deleted file mode 100644 index ac21f300..00000000 --- a/packages/mobile/vitest.compiled.config.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { configDefaults, defineConfig, mergeConfig } from 'vitest/config'; - -import { reactCompilerTestPlugin } from '../../.scripts/vitest/reactCompilerTestPlugin.ts'; -import baseConfig from './vitest.config.ts'; - -export default mergeConfig( - baseConfig, - defineConfig({ - plugins: [reactCompilerTestPlugin()], - test: { - name: 'compiled', - // The canary proves this run actually compiles the source. It deliberately does not - // match the default include, so the uncompiled run never executes it. - include: [...configDefaults.include, 'src/test/reactCompilerCanary.ts'], - }, - }) -); diff --git a/packages/mobile/vitest.config.ts b/packages/mobile/vitest.config.ts deleted file mode 100644 index 6a433129..00000000 --- a/packages/mobile/vitest.config.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { defineConfig } from 'vitest/config'; - -export default defineConfig({ - test: { - environment: 'jsdom', - setupFiles: ['./vitest.setup.ts'], - globals: true, - sequence: { - concurrent: false, - }, - coverage: { - provider: 'v8', - reporter: ['text', 'json'], - extension: ['.ts', '.tsx'], - include: ['src/**/*.ts?(x)'], - exclude: ['src/**/index.ts', 'src/**/*.{spec,test}.ts?(x)', 'src/test/**'], - thresholds: { statements: 100, branches: 100, functions: 100, lines: 100 }, - }, - }, -}); diff --git a/packages/mobile/vitest.setup.ts b/packages/mobile/vitest.setup.ts deleted file mode 100644 index 5b1c53e2..00000000 --- a/packages/mobile/vitest.setup.ts +++ /dev/null @@ -1,11 +0,0 @@ -import '@testing-library/jest-dom/vitest'; -import { cleanup } from '@testing-library/react'; -import { afterEach } from 'vitest'; - -import { TextEncoder } from 'util'; -global.TextEncoder = TextEncoder; - -// Cleanup after each test for @testing-library/react -afterEach(() => { - cleanup(); -}); diff --git a/packages/react-simplikit/README-ja_jp.md b/packages/react-simplikit/README-ja_jp.md index 0969ae57..245e82f5 100644 --- a/packages/react-simplikit/README-ja_jp.md +++ b/packages/react-simplikit/README-ja_jp.md @@ -132,7 +132,7 @@ function SearchInput() { ## 関連パッケージ -- [@react-simplikit/mobile](https://www.npmjs.com/package/@react-simplikit/mobile) - モバイル Web ユーティリティ +- [モバイル Web ユーティリティ](https://react-simplikit.slash.page/ja/mobile/intro.html) - `react-simplikit` に含まれます ## 貢献 diff --git a/packages/react-simplikit/README-ko_kr.md b/packages/react-simplikit/README-ko_kr.md index bfbbc85c..528e2fd3 100644 --- a/packages/react-simplikit/README-ko_kr.md +++ b/packages/react-simplikit/README-ko_kr.md @@ -132,7 +132,7 @@ function SearchInput() { ## 관련 패키지 -- [@react-simplikit/mobile](https://www.npmjs.com/package/@react-simplikit/mobile) - 모바일 웹 유틸리티 +- [모바일 웹 유틸리티](https://react-simplikit.slash.page/ko/mobile/intro.html) - `react-simplikit`에 포함 ## 기여하기 diff --git a/packages/react-simplikit/README.md b/packages/react-simplikit/README.md index 76e86541..f0cdd4d5 100644 --- a/packages/react-simplikit/README.md +++ b/packages/react-simplikit/README.md @@ -132,7 +132,7 @@ Visit [react-simplikit.slash.page](https://react-simplikit.slash.page) for full ## Related Packages -- [@react-simplikit/mobile](https://www.npmjs.com/package/@react-simplikit/mobile) - Mobile web utilities +- [Mobile web utilities](https://react-simplikit.slash.page/mobile/intro.html) - included in `react-simplikit` ## Contributing diff --git a/packages/react-simplikit/src/_internal/test-utils/reactCompilerCanary.ts b/packages/react-simplikit/src/_internal/test-utils/reactCompilerCanary.ts index 8b6cbcf2..7b145c90 100644 --- a/packages/react-simplikit/src/_internal/test-utils/reactCompilerCanary.ts +++ b/packages/react-simplikit/src/_internal/test-utils/reactCompilerCanary.ts @@ -2,6 +2,7 @@ import { describe, expect, it } from 'vitest'; import { useBooleanState } from '../../hooks/useBooleanState/useBooleanState.ts'; import { usePrevious } from '../../hooks/usePrevious/usePrevious.ts'; +import { useNetworkStatus } from '../../mobile/hooks/useNetworkStatus/useNetworkStatus.ts'; // `$[n]` is the React Compiler's memo-cache slot access. Unlike the `_c` import binding, // which Vitest's SSR module transform renames, it survives into Function.prototype.toString(). @@ -9,12 +10,16 @@ const MEMO_CACHE_ACCESS = /\$\[\d+\]/; // Guards the compiled suite against silently degrading into a duplicate of the uncompiled // run (e.g. the plugin filter no longer matching source files). Only the compiled config -// includes this file — under the base config, neither assertion would hold. +// includes this file — under the base config, none of these assertions would hold. describe('react compiler canary', () => { it('runs against compiled source', () => { expect(useBooleanState.toString()).toMatch(MEMO_CACHE_ACCESS); }); + it('runs against compiled mobile source', () => { + expect(useNetworkStatus.toString()).toMatch(MEMO_CACHE_ACCESS); + }); + it("skips functions opted out with 'use no memo'", () => { expect(usePrevious.toString()).not.toMatch(MEMO_CACHE_ACCESS); }); diff --git a/packages/react-simplikit/src/index.ts b/packages/react-simplikit/src/index.ts index 1a80465e..190190bb 100644 --- a/packages/react-simplikit/src/index.ts +++ b/packages/react-simplikit/src/index.ts @@ -33,6 +33,32 @@ export { useThrottledCallback } from './hooks/useThrottledCallback/index.ts'; export { useTimeout } from './hooks/useTimeout/index.ts'; export { useToggle } from './hooks/useToggle/index.ts'; export { useVisibilityEvent } from './hooks/useVisibilityEvent/index.ts'; +export { useAvoidKeyboard } from './mobile/hooks/useAvoidKeyboard/index.ts'; +export { useBodyScrollLock } from './mobile/hooks/useBodyScrollLock/index.ts'; +export { useKeyboardHeight } from './mobile/hooks/useKeyboardHeight/index.ts'; +export { + type ConnectionType, + type EffectiveConnectionType, + type NetworkStatus, + useNetworkStatus, +} from './mobile/hooks/useNetworkStatus/index.ts'; +export { + type PageVisibility, + usePageVisibility, + type VisibilityState, +} from './mobile/hooks/usePageVisibility/index.ts'; +export { useSafeAreaInset } from './mobile/hooks/useSafeAreaInset/index.ts'; +export { useScrollDirection } from './mobile/hooks/useScrollDirection/index.ts'; +export { useVisualViewport } from './mobile/hooks/useVisualViewport/index.ts'; +export { disableBodyScrollLock } from './mobile/utils/disableBodyScrollLock/index.ts'; +export { enableBodyScrollLock } from './mobile/utils/enableBodyScrollLock/index.ts'; +export { getKeyboardHeight } from './mobile/utils/getKeyboardHeight/index.ts'; +export { getSafeAreaInset } from './mobile/utils/getSafeAreaInset/index.ts'; +export { isAndroid } from './mobile/utils/isAndroid/index.ts'; +export { isIOS } from './mobile/utils/isIOS/index.ts'; +export { isKeyboardVisible } from './mobile/utils/isKeyboardVisible/index.ts'; +export { isServer } from './mobile/utils/isServer/index.ts'; +export { subscribeKeyboardHeight } from './mobile/utils/subscribeKeyboardHeight/index.ts'; export { buildContext } from './utils/buildContext/index.ts'; export { mergeProps } from './utils/mergeProps/index.ts'; export { mergeRefs } from './utils/mergeRefs/index.ts'; diff --git a/packages/mobile/src/hooks/index.ts b/packages/react-simplikit/src/mobile/hooks/index.ts similarity index 100% rename from packages/mobile/src/hooks/index.ts rename to packages/react-simplikit/src/mobile/hooks/index.ts diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/index.ts b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/index.ts similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/index.ts rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/index.ts diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/ko/useAvoidKeyboard.md b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/ko/useAvoidKeyboard.md similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/ko/useAvoidKeyboard.md rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/ko/useAvoidKeyboard.md diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.md b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.md similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.md rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.md diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.ssr.test.ts diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.test.ts b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.test.ts similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.test.ts rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.test.ts diff --git a/packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.ts b/packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.ts similarity index 100% rename from packages/mobile/src/hooks/useAvoidKeyboard/useAvoidKeyboard.ts rename to packages/react-simplikit/src/mobile/hooks/useAvoidKeyboard/useAvoidKeyboard.ts diff --git a/packages/mobile/src/hooks/useBodyScrollLock/index.ts b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/index.ts similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/index.ts rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/index.ts diff --git a/packages/mobile/src/hooks/useBodyScrollLock/ko/useBodyScrollLock.md b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/ko/useBodyScrollLock.md similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/ko/useBodyScrollLock.md rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/ko/useBodyScrollLock.md diff --git a/packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.md b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.md similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.md rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.md diff --git a/packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.ssr.test.ts diff --git a/packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.test.ts b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.test.ts similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.test.ts rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.test.ts diff --git a/packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.ts b/packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.ts similarity index 100% rename from packages/mobile/src/hooks/useBodyScrollLock/useBodyScrollLock.ts rename to packages/react-simplikit/src/mobile/hooks/useBodyScrollLock/useBodyScrollLock.ts diff --git a/packages/mobile/src/hooks/useKeyboardHeight/index.ts b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/index.ts similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/index.ts rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/index.ts diff --git a/packages/mobile/src/hooks/useKeyboardHeight/ko/useKeyboardHeight.md b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/ko/useKeyboardHeight.md similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/ko/useKeyboardHeight.md rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/ko/useKeyboardHeight.md diff --git a/packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.md b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.md similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.md rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.md diff --git a/packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.ssr.test.ts diff --git a/packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.test.ts b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.test.ts similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.test.ts rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.test.ts diff --git a/packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.ts b/packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.ts similarity index 100% rename from packages/mobile/src/hooks/useKeyboardHeight/useKeyboardHeight.ts rename to packages/react-simplikit/src/mobile/hooks/useKeyboardHeight/useKeyboardHeight.ts diff --git a/packages/mobile/src/hooks/useNetworkStatus/index.ts b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/index.ts similarity index 100% rename from packages/mobile/src/hooks/useNetworkStatus/index.ts rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/index.ts diff --git a/packages/mobile/src/hooks/useNetworkStatus/ko/useNetworkStatus.md b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/ko/useNetworkStatus.md similarity index 100% rename from packages/mobile/src/hooks/useNetworkStatus/ko/useNetworkStatus.md rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/ko/useNetworkStatus.md diff --git a/packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.md b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.md similarity index 100% rename from packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.md rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.md diff --git a/packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.spec.ts b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.spec.ts similarity index 98% rename from packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.spec.ts rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.spec.ts index 7d027330..58783d88 100644 --- a/packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.spec.ts +++ b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.spec.ts @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { renderHookSSR } from '../../../test/renderHookSSR.tsx'; +import { renderHookSSR } from '../../../_internal/test-utils/renderHookSSR.tsx'; import { useNetworkStatus } from './useNetworkStatus.ts'; diff --git a/packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.ssr.test.ts diff --git a/packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.ts b/packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.ts similarity index 100% rename from packages/mobile/src/hooks/useNetworkStatus/useNetworkStatus.ts rename to packages/react-simplikit/src/mobile/hooks/useNetworkStatus/useNetworkStatus.ts diff --git a/packages/mobile/src/hooks/usePageVisibility/index.ts b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/index.ts similarity index 100% rename from packages/mobile/src/hooks/usePageVisibility/index.ts rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/index.ts diff --git a/packages/mobile/src/hooks/usePageVisibility/ko/usePageVisibility.md b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/ko/usePageVisibility.md similarity index 100% rename from packages/mobile/src/hooks/usePageVisibility/ko/usePageVisibility.md rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/ko/usePageVisibility.md diff --git a/packages/mobile/src/hooks/usePageVisibility/usePageVisibility.md b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.md similarity index 100% rename from packages/mobile/src/hooks/usePageVisibility/usePageVisibility.md rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.md diff --git a/packages/mobile/src/hooks/usePageVisibility/usePageVisibility.spec.ts b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.spec.ts similarity index 97% rename from packages/mobile/src/hooks/usePageVisibility/usePageVisibility.spec.ts rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.spec.ts index 8bd5f5a0..761b7649 100644 --- a/packages/mobile/src/hooks/usePageVisibility/usePageVisibility.spec.ts +++ b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.spec.ts @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; -import { renderHookSSR } from '../../test/renderHookSSR.tsx'; +import { renderHookSSR } from '../../../_internal/test-utils/renderHookSSR.tsx'; import { usePageVisibility } from './usePageVisibility.ts'; diff --git a/packages/mobile/src/hooks/usePageVisibility/usePageVisibility.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/usePageVisibility/usePageVisibility.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.ssr.test.ts diff --git a/packages/mobile/src/hooks/usePageVisibility/usePageVisibility.ts b/packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.ts similarity index 100% rename from packages/mobile/src/hooks/usePageVisibility/usePageVisibility.ts rename to packages/react-simplikit/src/mobile/hooks/usePageVisibility/usePageVisibility.ts diff --git a/packages/mobile/src/hooks/useSafeAreaInset/index.ts b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/index.ts similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/index.ts rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/index.ts diff --git a/packages/mobile/src/hooks/useSafeAreaInset/ko/useSafeAreaInset.md b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/ko/useSafeAreaInset.md similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/ko/useSafeAreaInset.md rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/ko/useSafeAreaInset.md diff --git a/packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.md b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.md similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.md rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.md diff --git a/packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.ssr.test.ts diff --git a/packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.test.ts b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.test.ts similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.test.ts rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.test.ts diff --git a/packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.ts b/packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.ts similarity index 100% rename from packages/mobile/src/hooks/useSafeAreaInset/useSafeAreaInset.ts rename to packages/react-simplikit/src/mobile/hooks/useSafeAreaInset/useSafeAreaInset.ts diff --git a/packages/mobile/src/hooks/useScrollDirection/index.ts b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/index.ts similarity index 100% rename from packages/mobile/src/hooks/useScrollDirection/index.ts rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/index.ts diff --git a/packages/mobile/src/hooks/useScrollDirection/ko/useScrollDirection.md b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/ko/useScrollDirection.md similarity index 100% rename from packages/mobile/src/hooks/useScrollDirection/ko/useScrollDirection.md rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/ko/useScrollDirection.md diff --git a/packages/mobile/src/hooks/useScrollDirection/useScrollDirection.md b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.md similarity index 100% rename from packages/mobile/src/hooks/useScrollDirection/useScrollDirection.md rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.md diff --git a/packages/mobile/src/hooks/useScrollDirection/useScrollDirection.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useScrollDirection/useScrollDirection.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.ssr.test.ts diff --git a/packages/mobile/src/hooks/useScrollDirection/useScrollDirection.test.ts b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.test.ts similarity index 99% rename from packages/mobile/src/hooks/useScrollDirection/useScrollDirection.test.ts rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.test.ts index ed4c9eb5..ec8a3e5e 100644 --- a/packages/mobile/src/hooks/useScrollDirection/useScrollDirection.test.ts +++ b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.test.ts @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { renderHookSSR } from '../../../test/renderHookSSR.tsx'; +import { renderHookSSR } from '../../../_internal/test-utils/renderHookSSR.tsx'; import { useScrollDirection } from './useScrollDirection.ts'; diff --git a/packages/mobile/src/hooks/useScrollDirection/useScrollDirection.ts b/packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.ts similarity index 100% rename from packages/mobile/src/hooks/useScrollDirection/useScrollDirection.ts rename to packages/react-simplikit/src/mobile/hooks/useScrollDirection/useScrollDirection.ts diff --git a/packages/mobile/src/hooks/useVisualViewport/index.ts b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/index.ts similarity index 100% rename from packages/mobile/src/hooks/useVisualViewport/index.ts rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/index.ts diff --git a/packages/mobile/src/hooks/useVisualViewport/ko/useVisualViewport.md b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/ko/useVisualViewport.md similarity index 100% rename from packages/mobile/src/hooks/useVisualViewport/ko/useVisualViewport.md rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/ko/useVisualViewport.md diff --git a/packages/mobile/src/hooks/useVisualViewport/useVisualViewport.md b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.md similarity index 100% rename from packages/mobile/src/hooks/useVisualViewport/useVisualViewport.md rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.md diff --git a/packages/mobile/src/hooks/useVisualViewport/useVisualViewport.ssr.test.ts b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.ssr.test.ts similarity index 100% rename from packages/mobile/src/hooks/useVisualViewport/useVisualViewport.ssr.test.ts rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.ssr.test.ts diff --git a/packages/mobile/src/hooks/useVisualViewport/useVisualViewport.test.ts b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.test.ts similarity index 99% rename from packages/mobile/src/hooks/useVisualViewport/useVisualViewport.test.ts rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.test.ts index 9f4fc2ab..f15c966c 100644 --- a/packages/mobile/src/hooks/useVisualViewport/useVisualViewport.test.ts +++ b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.test.ts @@ -1,7 +1,7 @@ import { act, renderHook } from '@testing-library/react'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; -import { renderHookSSR } from '../../../test/renderHookSSR.tsx'; +import { renderHookSSR } from '../../../_internal/test-utils/renderHookSSR.tsx'; import { useVisualViewport } from './useVisualViewport.ts'; diff --git a/packages/mobile/src/hooks/useVisualViewport/useVisualViewport.ts b/packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.ts similarity index 100% rename from packages/mobile/src/hooks/useVisualViewport/useVisualViewport.ts rename to packages/react-simplikit/src/mobile/hooks/useVisualViewport/useVisualViewport.ts diff --git a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.md b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.md similarity index 100% rename from packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.md rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.md diff --git a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.ssr.test.ts diff --git a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts similarity index 95% rename from packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts index 5c8b63fc..4b2fdc54 100644 --- a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts +++ b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.test.ts @@ -78,7 +78,7 @@ describe('disableBodyScrollLock', () => { document.body.setAttribute(SCROLL_POSITION_ATTR, 'invalid'); disableBodyScrollLock(); - expect(consoleWarnSpy).toHaveBeenCalledWith('[@react-simplikit/mobile] Invalid scroll position, defaulting to 0'); + expect(consoleWarnSpy).toHaveBeenCalledWith('[react-simplikit] Invalid scroll position, defaulting to 0'); expect(window.scrollTo).toHaveBeenCalledWith(0, 0); consoleWarnSpy.mockRestore(); diff --git a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.ts b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.ts similarity index 94% rename from packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.ts rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.ts index f5987865..e6a5b4e9 100644 --- a/packages/mobile/src/utils/disableBodyScrollLock/disableBodyScrollLock.ts +++ b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/disableBodyScrollLock.ts @@ -52,7 +52,7 @@ function restoreScrollPosition(savedScrollY: string): void { const scrollY = Number(savedScrollY); if (Number.isNaN(scrollY)) { - console.warn('[@react-simplikit/mobile] Invalid scroll position, defaulting to 0'); + console.warn('[react-simplikit] Invalid scroll position, defaulting to 0'); window.scrollTo(0, 0); return; } diff --git a/packages/mobile/src/utils/disableBodyScrollLock/index.ts b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/index.ts similarity index 100% rename from packages/mobile/src/utils/disableBodyScrollLock/index.ts rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/index.ts diff --git a/packages/mobile/src/utils/disableBodyScrollLock/ko/disableBodyScrollLock.md b/packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/ko/disableBodyScrollLock.md similarity index 100% rename from packages/mobile/src/utils/disableBodyScrollLock/ko/disableBodyScrollLock.md rename to packages/react-simplikit/src/mobile/utils/disableBodyScrollLock/ko/disableBodyScrollLock.md diff --git a/packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.md b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.md similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.md rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.md diff --git a/packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.ssr.test.ts diff --git a/packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.test.ts b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.test.ts similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.test.ts rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.test.ts diff --git a/packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.ts b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.ts similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/enableBodyScrollLock.ts rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/enableBodyScrollLock.ts diff --git a/packages/mobile/src/utils/enableBodyScrollLock/index.ts b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/index.ts similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/index.ts rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/index.ts diff --git a/packages/mobile/src/utils/enableBodyScrollLock/ko/enableBodyScrollLock.md b/packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/ko/enableBodyScrollLock.md similarity index 100% rename from packages/mobile/src/utils/enableBodyScrollLock/ko/enableBodyScrollLock.md rename to packages/react-simplikit/src/mobile/utils/enableBodyScrollLock/ko/enableBodyScrollLock.md diff --git a/packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.md b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.md similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.md rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.md diff --git a/packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.ssr.test.ts diff --git a/packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.test.ts b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.test.ts similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.test.ts rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.test.ts diff --git a/packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.ts b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.ts similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/getKeyboardHeight.ts rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/getKeyboardHeight.ts diff --git a/packages/mobile/src/utils/getKeyboardHeight/index.ts b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/index.ts similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/index.ts rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/index.ts diff --git a/packages/mobile/src/utils/getKeyboardHeight/ko/getKeyboardHeight.md b/packages/react-simplikit/src/mobile/utils/getKeyboardHeight/ko/getKeyboardHeight.md similarity index 100% rename from packages/mobile/src/utils/getKeyboardHeight/ko/getKeyboardHeight.md rename to packages/react-simplikit/src/mobile/utils/getKeyboardHeight/ko/getKeyboardHeight.md diff --git a/packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.md b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.md similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.md rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.md diff --git a/packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.ssr.test.ts diff --git a/packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.test.ts b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.test.ts similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.test.ts rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.test.ts diff --git a/packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.ts b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.ts similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/getSafeAreaInset.ts rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/getSafeAreaInset.ts diff --git a/packages/mobile/src/utils/getSafeAreaInset/index.ts b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/index.ts similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/index.ts rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/index.ts diff --git a/packages/mobile/src/utils/getSafeAreaInset/ko/getSafeAreaInset.md b/packages/react-simplikit/src/mobile/utils/getSafeAreaInset/ko/getSafeAreaInset.md similarity index 100% rename from packages/mobile/src/utils/getSafeAreaInset/ko/getSafeAreaInset.md rename to packages/react-simplikit/src/mobile/utils/getSafeAreaInset/ko/getSafeAreaInset.md diff --git a/packages/mobile/src/utils/index.ts b/packages/react-simplikit/src/mobile/utils/index.ts similarity index 100% rename from packages/mobile/src/utils/index.ts rename to packages/react-simplikit/src/mobile/utils/index.ts diff --git a/packages/mobile/src/utils/isAndroid/index.ts b/packages/react-simplikit/src/mobile/utils/isAndroid/index.ts similarity index 100% rename from packages/mobile/src/utils/isAndroid/index.ts rename to packages/react-simplikit/src/mobile/utils/isAndroid/index.ts diff --git a/packages/mobile/src/utils/isAndroid/isAndroid.md b/packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.md similarity index 100% rename from packages/mobile/src/utils/isAndroid/isAndroid.md rename to packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.md diff --git a/packages/mobile/src/utils/isAndroid/isAndroid.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/isAndroid/isAndroid.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.ssr.test.ts diff --git a/packages/mobile/src/utils/isAndroid/isAndroid.test.ts b/packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.test.ts similarity index 100% rename from packages/mobile/src/utils/isAndroid/isAndroid.test.ts rename to packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.test.ts diff --git a/packages/mobile/src/utils/isAndroid/isAndroid.ts b/packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.ts similarity index 100% rename from packages/mobile/src/utils/isAndroid/isAndroid.ts rename to packages/react-simplikit/src/mobile/utils/isAndroid/isAndroid.ts diff --git a/packages/mobile/src/utils/isAndroid/ko/isAndroid.md b/packages/react-simplikit/src/mobile/utils/isAndroid/ko/isAndroid.md similarity index 100% rename from packages/mobile/src/utils/isAndroid/ko/isAndroid.md rename to packages/react-simplikit/src/mobile/utils/isAndroid/ko/isAndroid.md diff --git a/packages/mobile/src/utils/isIOS/index.ts b/packages/react-simplikit/src/mobile/utils/isIOS/index.ts similarity index 100% rename from packages/mobile/src/utils/isIOS/index.ts rename to packages/react-simplikit/src/mobile/utils/isIOS/index.ts diff --git a/packages/mobile/src/utils/isIOS/isIOS.md b/packages/react-simplikit/src/mobile/utils/isIOS/isIOS.md similarity index 100% rename from packages/mobile/src/utils/isIOS/isIOS.md rename to packages/react-simplikit/src/mobile/utils/isIOS/isIOS.md diff --git a/packages/mobile/src/utils/isIOS/isIOS.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/isIOS/isIOS.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/isIOS/isIOS.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/isIOS/isIOS.ssr.test.ts diff --git a/packages/mobile/src/utils/isIOS/isIOS.test.ts b/packages/react-simplikit/src/mobile/utils/isIOS/isIOS.test.ts similarity index 100% rename from packages/mobile/src/utils/isIOS/isIOS.test.ts rename to packages/react-simplikit/src/mobile/utils/isIOS/isIOS.test.ts diff --git a/packages/mobile/src/utils/isIOS/isIOS.ts b/packages/react-simplikit/src/mobile/utils/isIOS/isIOS.ts similarity index 100% rename from packages/mobile/src/utils/isIOS/isIOS.ts rename to packages/react-simplikit/src/mobile/utils/isIOS/isIOS.ts diff --git a/packages/mobile/src/utils/isIOS/ko/isIOS.md b/packages/react-simplikit/src/mobile/utils/isIOS/ko/isIOS.md similarity index 100% rename from packages/mobile/src/utils/isIOS/ko/isIOS.md rename to packages/react-simplikit/src/mobile/utils/isIOS/ko/isIOS.md diff --git a/packages/mobile/src/utils/isKeyboardVisible/index.ts b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/index.ts similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/index.ts rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/index.ts diff --git a/packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.md b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.md similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.md rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.md diff --git a/packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.ssr.test.ts diff --git a/packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.test.ts b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.test.ts similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.test.ts rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.test.ts diff --git a/packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.ts b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.ts similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/isKeyboardVisible.ts rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/isKeyboardVisible.ts diff --git a/packages/mobile/src/utils/isKeyboardVisible/ko/isKeyboardVisible.md b/packages/react-simplikit/src/mobile/utils/isKeyboardVisible/ko/isKeyboardVisible.md similarity index 100% rename from packages/mobile/src/utils/isKeyboardVisible/ko/isKeyboardVisible.md rename to packages/react-simplikit/src/mobile/utils/isKeyboardVisible/ko/isKeyboardVisible.md diff --git a/packages/mobile/src/utils/isServer/index.ts b/packages/react-simplikit/src/mobile/utils/isServer/index.ts similarity index 100% rename from packages/mobile/src/utils/isServer/index.ts rename to packages/react-simplikit/src/mobile/utils/isServer/index.ts diff --git a/packages/mobile/src/utils/isServer/isServer.md b/packages/react-simplikit/src/mobile/utils/isServer/isServer.md similarity index 100% rename from packages/mobile/src/utils/isServer/isServer.md rename to packages/react-simplikit/src/mobile/utils/isServer/isServer.md diff --git a/packages/mobile/src/utils/isServer/isServer.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/isServer/isServer.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/isServer/isServer.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/isServer/isServer.ssr.test.ts diff --git a/packages/mobile/src/utils/isServer/isServer.test.ts b/packages/react-simplikit/src/mobile/utils/isServer/isServer.test.ts similarity index 100% rename from packages/mobile/src/utils/isServer/isServer.test.ts rename to packages/react-simplikit/src/mobile/utils/isServer/isServer.test.ts diff --git a/packages/mobile/src/utils/isServer/isServer.ts b/packages/react-simplikit/src/mobile/utils/isServer/isServer.ts similarity index 100% rename from packages/mobile/src/utils/isServer/isServer.ts rename to packages/react-simplikit/src/mobile/utils/isServer/isServer.ts diff --git a/packages/mobile/src/utils/isServer/ko/isServer.md b/packages/react-simplikit/src/mobile/utils/isServer/ko/isServer.md similarity index 100% rename from packages/mobile/src/utils/isServer/ko/isServer.md rename to packages/react-simplikit/src/mobile/utils/isServer/ko/isServer.md diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/index.ts b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/index.ts similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/index.ts rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/index.ts diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/ko/subscribeKeyboardHeight.md b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/ko/subscribeKeyboardHeight.md similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/ko/subscribeKeyboardHeight.md rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/ko/subscribeKeyboardHeight.md diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.md b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.md similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.md rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.md diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ssr.test.ts b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ssr.test.ts similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ssr.test.ts rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ssr.test.ts diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.test.ts b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.test.ts similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.test.ts rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.test.ts diff --git a/packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ts b/packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ts similarity index 100% rename from packages/mobile/src/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ts rename to packages/react-simplikit/src/mobile/utils/subscribeKeyboardHeight/subscribeKeyboardHeight.ts diff --git a/packages/react-simplikit/vitest.setup.ts b/packages/react-simplikit/vitest.setup.ts index 396423dd..5b1c53e2 100644 --- a/packages/react-simplikit/vitest.setup.ts +++ b/packages/react-simplikit/vitest.setup.ts @@ -1,4 +1,11 @@ import '@testing-library/jest-dom/vitest'; +import { cleanup } from '@testing-library/react'; +import { afterEach } from 'vitest'; import { TextEncoder } from 'util'; global.TextEncoder = TextEncoder; + +// Cleanup after each test for @testing-library/react +afterEach(() => { + cleanup(); +}); diff --git a/yarn.lock b/yarn.lock index 5cbb7843..e130f8de 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2149,7 +2149,6 @@ __metadata: react-dom: "npm:^19.0.0" typescript: "npm:^5.7.2" peerDependencies: - "@react-simplikit/mobile": "workspace:*" react: ^19.0.0 react-dom: ^19.0.0 languageName: unknown @@ -4106,32 +4105,6 @@ __metadata: languageName: node linkType: hard -"@react-simplikit/mobile@workspace:*, @react-simplikit/mobile@workspace:^, @react-simplikit/mobile@workspace:packages/mobile": - version: 0.0.0-use.local - resolution: "@react-simplikit/mobile@workspace:packages/mobile" - dependencies: - "@babel/core": "npm:^7.29.0" - "@babel/preset-react": "npm:^7.27.0" - "@babel/preset-typescript": "npm:^7.28.0" - "@testing-library/dom": "npm:^10.4.0" - "@testing-library/jest-dom": "npm:^6.6.3" - "@testing-library/react": "npm:^16.1.0" - "@types/react": "npm:^19.0.0" - "@types/react-dom": "npm:^19.0.0" - "@vitest/coverage-v8": "npm:^2.1.8" - babel-plugin-react-compiler: "npm:1.0.0" - eslint: "npm:^9.16.0" - react: "npm:^19.0.0" - react-dom: "npm:^19.0.0" - rimraf: "npm:^6.0.1" - tsdown: "npm:^0.22.14" - typescript: "npm:^5.7.2" - vitest: "npm:^2.1.8" - peerDependencies: - react: ">=18.0.0" - languageName: unknown - linkType: soft - "@react-simplikit/root@workspace:.": version: 0.0.0-use.local resolution: "@react-simplikit/root@workspace:." @@ -10218,7 +10191,7 @@ __metadata: languageName: node linkType: hard -"react-simplikit@workspace:*, react-simplikit@workspace:packages/react-simplikit": +"react-simplikit@workspace:*, react-simplikit@workspace:^, react-simplikit@workspace:packages/react-simplikit": version: 0.0.0-use.local resolution: "react-simplikit@workspace:packages/react-simplikit" dependencies: @@ -12429,7 +12402,6 @@ __metadata: version: 0.0.0-use.local resolution: "with-nextjs@workspace:examples/with-nextjs" dependencies: - "@react-simplikit/mobile": "workspace:*" "@types/node": "npm:^24.13.3" "@types/react": "npm:^19.0.0" "@types/react-dom": "npm:^19.0.0" @@ -12447,7 +12419,6 @@ __metadata: dependencies: "@examples/shared": "workspace:^" "@radix-ui/themes": "npm:^3.2.1" - "@react-simplikit/mobile": "workspace:^" "@suspensive/react": "npm:^3.18.0" "@types/react": "npm:^19.0.0" "@types/react-dom": "npm:^19.0.0" @@ -12455,6 +12426,7 @@ __metadata: react: "npm:^19.0.0" react-dom: "npm:^19.0.0" react-router-dom: "npm:^7.0.0" + react-simplikit: "workspace:^" typescript: "npm:^5.7.2" vite: "npm:^7.0.0" languageName: unknown