diff --git a/.editorconfig b/.editorconfig
deleted file mode 100644
index 6e87a00..0000000
--- a/.editorconfig
+++ /dev/null
@@ -1,13 +0,0 @@
-# Editor configuration, see http://editorconfig.org
-root = true
-
-[*]
-charset = utf-8
-indent_style = space
-indent_size = 2
-insert_final_newline = true
-trim_trailing_whitespace = true
-
-[*.md]
-max_line_length = off
-trim_trailing_whitespace = false
diff --git a/.eslintignore b/.eslintignore
deleted file mode 100644
index 3c3629e..0000000
--- a/.eslintignore
+++ /dev/null
@@ -1 +0,0 @@
-node_modules
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index 155eafd..0000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "root": true,
- "ignorePatterns": ["**/*"],
- "plugins": ["@nrwl/nx"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {
- "@nrwl/nx/enforce-module-boundaries": [
- "error",
- {
- "enforceBuildableLibDependency": true,
- "allow": [],
- "depConstraints": [
- {
- "sourceTag": "*",
- "onlyDependOnLibsWithTags": ["*"]
- }
- ]
- }
- ]
- }
- },
- {
- "files": ["*.ts", "*.tsx"],
- "extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended", "prettier", "plugin:@nrwl/nx/typescript"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "extends": ["plugin:@nrwl/nx/javascript"],
- "rules": {}
- },
- {
- "files": ["references.d.ts"],
- "rules": {
- "@typescript-eslint/triple-slash-reference": "off"
- }
- }
- ]
-}
diff --git a/.gitignore b/.gitignore
index 742dab1..a3ab1f3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,49 +1,13 @@
-# See http://help.github.com/ignore-files/ for more about ignoring files.
-/apps/demo-vue
-/packages/vue/.vitepress/cache
-/apps/NativeScriptVueUse-demo
-# compiled output
-/dist
-/tmp
-/out-tsc
-
-# dependencies
node_modules
-package-lock.json
-yarn.lock
-
-# IDEs and editors
-/.idea
-.project
-.classpath
-.c9/
-*.launch
-.settings/
-*.sublime-workspace
-
-# IDE - VSCode
-.vscode/*
-!.vscode/settings.json
-!.vscode/tasks.json
-!.vscode/launch.json
-!.vscode/extensions.json
-
-# misc
-/.sass-cache
-/connect.lock
-/coverage
-/libpeerconnection.log
-npm-debug.log
-yarn-error.log
-testem.log
-/typings
-
-# System Files
+/**/*.js
+types
+dist
+publish
+.idea
.DS_Store
-Thumbs.db
-
-*.tgz
-packages/**/angular/dist
-.nx/cache
-.nx/workspace-data
\ No newline at end of file
+demo/node_modules
+demo/hooks
+demo/platforms
+demo
+/demo/
diff --git a/.husky/.gitignore b/.husky/.gitignore
deleted file mode 100644
index 31354ec..0000000
--- a/.husky/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-_
diff --git a/.husky/pre-commit b/.husky/pre-commit
deleted file mode 100755
index 146c0df..0000000
--- a/.husky/pre-commit
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-. "$(dirname "$0")/_/husky.sh"
-
-npx lint-staged --allow-empty
diff --git a/.npmignore b/.npmignore
new file mode 100644
index 0000000..b59d6a7
--- /dev/null
+++ b/.npmignore
@@ -0,0 +1,8 @@
+global_types
+packages
+.idea
+.DS_Store
+dist
+rollup.config.js
+tsconfig.json
+demo
\ No newline at end of file
diff --git a/.npsrc b/.npsrc
deleted file mode 100644
index 12f87dc..0000000
--- a/.npsrc
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "config": "./tools/workspace-scripts.js"
-}
\ No newline at end of file
diff --git a/.nxignore b/.nxignore
deleted file mode 100644
index 80a8f0e..0000000
--- a/.nxignore
+++ /dev/null
@@ -1 +0,0 @@
-apps/**/*_off
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
deleted file mode 100644
index 342760a..0000000
--- a/.prettierignore
+++ /dev/null
@@ -1,8 +0,0 @@
-# Add files here to ignore them from prettier formatting
-
-/dist
-/coverage
-native-src
-
-/.nx/cache
-/.nx/workspace-data
\ No newline at end of file
diff --git a/.prettierrc b/.prettierrc
deleted file mode 100644
index c5f2587..0000000
--- a/.prettierrc
+++ /dev/null
@@ -1,6 +0,0 @@
-{
- "useTabs": false,
- "printWidth": 800,
- "tabWidth": 2,
- "singleQuote": true
-}
diff --git a/.travis.yml b/.travis.yml
deleted file mode 100644
index 5c1f9b0..0000000
--- a/.travis.yml
+++ /dev/null
@@ -1,6 +0,0 @@
-language: node_js
-node_js:
- - "node"
-script:
-- npm run setup
-- npm start @vallemar.build-all
diff --git a/LICENSE b/LICENSE
deleted file mode 100644
index 061c440..0000000
--- a/LICENSE
+++ /dev/null
@@ -1,201 +0,0 @@
- Apache License
- Version 2.0, January 2004
- http://www.apache.org/licenses/
-
- TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
-
- 1. Definitions.
-
- "License" shall mean the terms and conditions for use, reproduction,
- and distribution as defined by Sections 1 through 9 of this document.
-
- "Licensor" shall mean the copyright owner or entity authorized by
- the copyright owner that is granting the License.
-
- "Legal Entity" shall mean the union of the acting entity and all
- other entities that control, are controlled by, or are under common
- control with that entity. For the purposes of this definition,
- "control" means (i) the power, direct or indirect, to cause the
- direction or management of such entity, whether by contract or
- otherwise, or (ii) ownership of fifty percent (50%) or more of the
- outstanding shares, or (iii) beneficial ownership of such entity.
-
- "You" (or "Your") shall mean an individual or Legal Entity
- exercising permissions granted by this License.
-
- "Source" form shall mean the preferred form for making modifications,
- including but not limited to software source code, documentation
- source, and configuration files.
-
- "Object" form shall mean any form resulting from mechanical
- transformation or translation of a Source form, including but
- not limited to compiled object code, generated documentation,
- and conversions to other media types.
-
- "Work" shall mean the work of authorship, whether in Source or
- Object form, made available under the License, as indicated by a
- copyright notice that is included in or attached to the work
- (an example is provided in the Appendix below).
-
- "Derivative Works" shall mean any work, whether in Source or Object
- form, that is based on (or derived from) the Work and for which the
- editorial revisions, annotations, elaborations, or other modifications
- represent, as a whole, an original work of authorship. For the purposes
- of this License, Derivative Works shall not include works that remain
- separable from, or merely link (or bind by name) to the interfaces of,
- the Work and Derivative Works thereof.
-
- "Contribution" shall mean any work of authorship, including
- the original version of the Work and any modifications or additions
- to that Work or Derivative Works thereof, that is intentionally
- submitted to Licensor for inclusion in the Work by the copyright owner
- or by an individual or Legal Entity authorized to submit on behalf of
- the copyright owner. For the purposes of this definition, "submitted"
- means any form of electronic, verbal, or written communication sent
- to the Licensor or its representatives, including but not limited to
- communication on electronic mailing lists, source code control systems,
- and issue tracking systems that are managed by, or on behalf of, the
- Licensor for the purpose of discussing and improving the Work, but
- excluding communication that is conspicuously marked or otherwise
- designated in writing by the copyright owner as "Not a Contribution."
-
- "Contributor" shall mean Licensor and any individual or Legal Entity
- on behalf of whom a Contribution has been received by Licensor and
- subsequently incorporated within the Work.
-
- 2. Grant of Copyright License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- copyright license to reproduce, prepare Derivative Works of,
- publicly display, publicly perform, sublicense, and distribute the
- Work and such Derivative Works in Source or Object form.
-
- 3. Grant of Patent License. Subject to the terms and conditions of
- this License, each Contributor hereby grants to You a perpetual,
- worldwide, non-exclusive, no-charge, royalty-free, irrevocable
- (except as stated in this section) patent license to make, have made,
- use, offer to sell, sell, import, and otherwise transfer the Work,
- where such license applies only to those patent claims licensable
- by such Contributor that are necessarily infringed by their
- Contribution(s) alone or by combination of their Contribution(s)
- with the Work to which such Contribution(s) was submitted. If You
- institute patent litigation against any entity (including a
- cross-claim or counterclaim in a lawsuit) alleging that the Work
- or a Contribution incorporated within the Work constitutes direct
- or contributory patent infringement, then any patent licenses
- granted to You under this License for that Work shall terminate
- as of the date such litigation is filed.
-
- 4. Redistribution. You may reproduce and distribute copies of the
- Work or Derivative Works thereof in any medium, with or without
- modifications, and in Source or Object form, provided that You
- meet the following conditions:
-
- (a) You must give any other recipients of the Work or
- Derivative Works a copy of this License; and
-
- (b) You must cause any modified files to carry prominent notices
- stating that You changed the files; and
-
- (c) You must retain, in the Source form of any Derivative Works
- that You distribute, all copyright, patent, trademark, and
- attribution notices from the Source form of the Work,
- excluding those notices that do not pertain to any part of
- the Derivative Works; and
-
- (d) If the Work includes a "NOTICE" text file as part of its
- distribution, then any Derivative Works that You distribute must
- include a readable copy of the attribution notices contained
- within such NOTICE file, excluding those notices that do not
- pertain to any part of the Derivative Works, in at least one
- of the following places: within a NOTICE text file distributed
- as part of the Derivative Works; within the Source form or
- documentation, if provided along with the Derivative Works; or,
- within a display generated by the Derivative Works, if and
- wherever such third-party notices normally appear. The contents
- of the NOTICE file are for informational purposes only and
- do not modify the License. You may add Your own attribution
- notices within Derivative Works that You distribute, alongside
- or as an addendum to the NOTICE text from the Work, provided
- that such additional attribution notices cannot be construed
- as modifying the License.
-
- You may add Your own copyright statement to Your modifications and
- may provide additional or different license terms and conditions
- for use, reproduction, or distribution of Your modifications, or
- for any such Derivative Works as a whole, provided Your use,
- reproduction, and distribution of the Work otherwise complies with
- the conditions stated in this License.
-
- 5. Submission of Contributions. Unless You explicitly state otherwise,
- any Contribution intentionally submitted for inclusion in the Work
- by You to the Licensor shall be under the terms and conditions of
- this License, without any additional terms or conditions.
- Notwithstanding the above, nothing herein shall supersede or modify
- the terms of any separate license agreement you may have executed
- with Licensor regarding such Contributions.
-
- 6. Trademarks. This License does not grant permission to use the trade
- names, trademarks, service marks, or product names of the Licensor,
- except as required for reasonable and customary use in describing the
- origin of the Work and reproducing the content of the NOTICE file.
-
- 7. Disclaimer of Warranty. Unless required by applicable law or
- agreed to in writing, Licensor provides the Work (and each
- Contributor provides its Contributions) on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- implied, including, without limitation, any warranties or conditions
- of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
- PARTICULAR PURPOSE. You are solely responsible for determining the
- appropriateness of using or redistributing the Work and assume any
- risks associated with Your exercise of permissions under this License.
-
- 8. Limitation of Liability. In no event and under no legal theory,
- whether in tort (including negligence), contract, or otherwise,
- unless required by applicable law (such as deliberate and grossly
- negligent acts) or agreed to in writing, shall any Contributor be
- liable to You for damages, including any direct, indirect, special,
- incidental, or consequential damages of any character arising as a
- result of this License or out of the use or inability to use the
- Work (including but not limited to damages for loss of goodwill,
- work stoppage, computer failure or malfunction, or any and all
- other commercial damages or losses), even if such Contributor
- has been advised of the possibility of such damages.
-
- 9. Accepting Warranty or Additional Liability. While redistributing
- the Work or Derivative Works thereof, You may choose to offer,
- and charge a fee for, acceptance of support, warranty, indemnity,
- or other liability obligations and/or rights consistent with this
- License. However, in accepting such obligations, You may act only
- on Your own behalf and on Your sole responsibility, not on behalf
- of any other Contributor, and only if You agree to indemnify,
- defend, and hold each Contributor harmless for any liability
- incurred by, or claims asserted against, such Contributor by reason
- of your accepting any such warranty or additional liability.
-
- END OF TERMS AND CONDITIONS
-
- APPENDIX: How to apply the Apache License to your work.
-
- To apply the Apache License to your work, attach the following
- boilerplate notice, with the fields enclosed by brackets "{}"
- replaced with your own identifying information. (Don't include
- the brackets!) The text should be enclosed in the appropriate
- comment syntax for the file format. We also recommend that a
- file or class name and description of purpose be included on the
- same "printed page" as the copyright notice for easier
- identification within third-party archives.
-
- Copyright (c) 2015-2019 Progress Software Corporation
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
\ No newline at end of file
diff --git a/README.md b/README.md
index 2462bcb..0b6f3ae 100644
--- a/README.md
+++ b/README.md
@@ -1,45 +1 @@
-# NativeScript-Use
-
-Collection of NativeScript-Use Composition Utilities
-
-[Documentation (Vue3)](https://nativescriptuse-vue.netlify.app/)
-
-
-This library tries to cover all the `-use` libraries of the frameworks with NativeScript.
-Examples:
-- [VueUse](https://vueuse.org/)
-- [svelte-use](https://svelte-use.vercel.app/)
-- [react-use](https://github.com/streamich/react-use)
-- [solid-use](https://github.com/lxsmnsyc/solid-use)
-
-## `Use`Packages
-- [@nativescript-use/vue (Vue3)](packages/vue/README.md)
-
-As native dependencies, the native code packages have been created in TS so that the core of `NativeScript-Use` is common. Anyone who wants can contribute to create another savor for example: `@nativescript-use/svelte`.
-
-
-The following plugins are the core of some of the native functionality already being used in `@nativescript-use/vue`, they have been separated so they can be used for any `@nativescript-use/[any_flavor]` flavor and also, so they can be used as individual plugins. inside nativescript
-
-- [@nativescript-use/change-icon](packages/change-icon/README.md)
-- [@nativescript-use/nativescript-clipboard](packages/nativescript-clipboard/README.md)
-- [@nativescript-use/nativescript-intersection-observer](packages/nativescript-intersection-observer/README.md)
-- [@nativescript-use/nativescript-keyboard](packages/nativescript-keyboard/README.md)
-- [@nativescript-use/nativescript-localstorage](packages/nativescript-localstorage/README.md)
-- [@nativescript-use/nativescript-media-query](packages/nativescript-media-query/README.md)
-- [@nativescript-use/nativescript-orientation](packages/nativescript-orientation/README.md)
-- [@nativescript-use/nativescript-task](packages/nativescript-task/README.md)
-
-# How to contribute?
-
-- clone the repository.
-- run: `npm run setup`
-- clone app in folder `/apps/` for test and preview in docs: `git clone https://github.com/NativeScript-Use/demo-vue.git`
-- run app in root folder: `npm run demo:vue:android` or `npm run demo:vue:ios`
-- add your changes in `./packages/vue`
-
-Now all the changes that you add will make the application restart and you will be able to add see the effect of your changes
-
-For more information you can enter the [NativeScript discord server](https://discord.com/invite/RgmpGky9GR)!
-
-
-
Made with ❤️
+[Doc](https://nativescriptvueuse.netlify.app/)
\ No newline at end of file
diff --git a/global_types/references.d.ts b/global_types/references.d.ts
new file mode 100644
index 0000000..dedd793
--- /dev/null
+++ b/global_types/references.d.ts
@@ -0,0 +1 @@
+///
diff --git a/jest.config.ts b/jest.config.ts
deleted file mode 100644
index 3eeb77b..0000000
--- a/jest.config.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-const { getJestProjects } = require('@nrwl/jest');
-
-export default { projects: [...getJestProjects()] };
diff --git a/nx.json b/nx.json
deleted file mode 100644
index 7fd1e92..0000000
--- a/nx.json
+++ /dev/null
@@ -1,42 +0,0 @@
-{
- "workspaceLayout": {
- "appsDir": "apps",
- "libsDir": "packages"
- },
- "tasksRunnerOptions": {
- "default": {
- "options": {
- "runtimeCacheInputs": ["node -v"]
- }
- }
- },
- "$schema": "./node_modules/nx/schemas/nx-schema.json",
- "namedInputs": {
- "default": ["{projectRoot}/**/*", "sharedGlobals"],
- "sharedGlobals": ["{workspaceRoot}/workspace.json", "{workspaceRoot}/tsconfig.base.json", "{workspaceRoot}/tslint.json", "{workspaceRoot}/nx.json"],
- "production": ["default", "!{projectRoot}/.eslintrc.json"]
- },
- "targetDefaults": {
- "build": {
- "inputs": ["production", "^production"],
- "cache": true
- },
- "lint": {
- "inputs": ["default", "{workspaceRoot}/.eslintrc.json"],
- "cache": true
- },
- "build.all": {
- "cache": true
- },
- "test": {
- "cache": true
- },
- "e2e": {
- "cache": true
- }
- },
- "useDaemonProcess": false,
- "parallel": 1,
- "defaultBase": "master",
- "useLegacyCache": true
-}
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..95b3aa4
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3545 @@
+{
+ "name": "@vallemar/nativescript-vueuse",
+ "version": "0.0.14",
+ "lockfileVersion": 3,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "@vallemar/nativescript-vueuse",
+ "version": "0.0.14",
+ "license": "MIT",
+ "devDependencies": {
+ "@nativescript/core": "^8.5.3",
+ "@nativescript/types": "^8.5.0",
+ "@rollup/plugin-node-resolve": "^15.1.0",
+ "@rollup/plugin-terser": "^0.4.3",
+ "nativescript-vue": "3.0.0-beta.8",
+ "require-from-url": "^3.1.3",
+ "rollup": "^3.25.1",
+ "rollup-plugin-copy": "^3.4.0",
+ "rollup-plugin-dts": "^5.3.0",
+ "rollup-plugin-ts": "^3.2.0",
+ "typescript": "^5.1.3",
+ "vitepress": "^1.0.0-beta.1"
+ }
+ },
+ "node_modules/@algolia/autocomplete-core": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.2.tgz",
+ "integrity": "sha512-hkG80c9kx9ClVAEcUJbTd2ziVC713x9Bji9Ty4XJfKXlxlsx3iXsoNhAwfeR4ulzIUg7OE5gez0UU1zVDdG7kg==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/autocomplete-plugin-algolia-insights": "1.9.2",
+ "@algolia/autocomplete-shared": "1.9.2"
+ }
+ },
+ "node_modules/@algolia/autocomplete-plugin-algolia-insights": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.9.2.tgz",
+ "integrity": "sha512-2LVsf4W66hVHQ3Ua/8k15oPlxjELCztbAkQm/hP42Sw+GLkHAdY1vaVRYziaWq64+Oljfg6FKkZHCdgXH+CGIA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.9.2"
+ },
+ "peerDependencies": {
+ "search-insights": ">= 1 < 3"
+ }
+ },
+ "node_modules/@algolia/autocomplete-preset-algolia": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-preset-algolia/-/autocomplete-preset-algolia-1.9.2.tgz",
+ "integrity": "sha512-pqgIm2GNqtCT59Y1ICctIPrYTi34+wNPiNWEclD/yDzp5uDUUsyGe5XrUjCNyQRTKonAlmYxoaEHOn8FWgmBHA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/autocomplete-shared": "1.9.2"
+ },
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/autocomplete-shared": {
+ "version": "1.9.2",
+ "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.9.2.tgz",
+ "integrity": "sha512-XxX6YDn+7LG+SmdpXEOnj7fc3TjiVpQ0CbGhjLwrd2tYr6LVY2D4Iiu/iuYJ4shvVDWWnpwArSk0uIWC/8OPUA==",
+ "dev": true,
+ "peerDependencies": {
+ "@algolia/client-search": ">= 4.9.1 < 6",
+ "algoliasearch": ">= 4.9.1 < 6"
+ }
+ },
+ "node_modules/@algolia/cache-browser-local-storage": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-browser-local-storage/-/cache-browser-local-storage-4.17.2.tgz",
+ "integrity": "sha512-ZkVN7K/JE+qMQbpR6h3gQOGR6yCJpmucSBCmH5YDxnrYbp2CbrVCu0Nr+FGVoWzMJNznj1waShkfQ9awERulLw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-common": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/cache-common": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-common/-/cache-common-4.17.2.tgz",
+ "integrity": "sha512-fojbhYIS8ovfYs6hwZpy1O4mBfVRxNgAaZRqsdVQd54hU4MxYDYFCxagYX28lOBz7btcDHld6BMoWXvjzkx6iQ==",
+ "dev": true
+ },
+ "node_modules/@algolia/cache-in-memory": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/cache-in-memory/-/cache-in-memory-4.17.2.tgz",
+ "integrity": "sha512-UYQcMzPurNi+cPYkuPemTZkjKAjdgAS1hagC5irujKbrYnN4yscK4TkOI5tX+O8/KegtJt3kOK07OIrJ2QDAAw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-common": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/client-account": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/client-account/-/client-account-4.17.2.tgz",
+ "integrity": "sha512-doSk89pBPDpDyKJSHFADIGa2XSGrBCj3QwPvqtRJXDADpN+OjW+eTR8r4hEs/7X4GGfjfAOAES8JgDx+fZntYw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/client-common": "4.17.2",
+ "@algolia/client-search": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/client-analytics": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-4.17.2.tgz",
+ "integrity": "sha512-V+DcXbOtD/hKwAR3qGQrtlrJ3q2f9OKfx843q744o4m3xHv5ueCAvGXB1znPsdaUrVDNAImcgEgqwI9x7EJbDw==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/client-common": "4.17.2",
+ "@algolia/client-search": "4.17.2",
+ "@algolia/requester-common": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/client-common": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-4.17.2.tgz",
+ "integrity": "sha512-gKBUnjxi0ukJYIJxVREYGt1Dmj1B3RBYbfGWi0dIPp1BC1VvQm+BOuNwsIwmq/x3MPO+sGuK978eKiP3tZDvag==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/requester-common": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/client-personalization": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-4.17.2.tgz",
+ "integrity": "sha512-wc4UgOWxSYWz5wpuelNmlt895jA9twjZWM2ms17Ws8qCvBHF7OVGdMGgbysPB8790YnfvvDnSsWOv3CEj26Eow==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/client-common": "4.17.2",
+ "@algolia/requester-common": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/client-search": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-4.17.2.tgz",
+ "integrity": "sha512-FUjIs+gRe0upJC++uVs4sdxMw15JxfkT86Gr/kqVwi9kcqaZhXntSbW/Fw959bIYXczjmeVQsilYvBWW4YvSZA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/client-common": "4.17.2",
+ "@algolia/requester-common": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/logger-common": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-common/-/logger-common-4.17.2.tgz",
+ "integrity": "sha512-EfXuweUE+1HiSMsQidaDWA5Lv4NnStYIlh7PO5pLkI+sdhbMX0e5AO5nUAMIFM1VkEANes70RA8fzhP6OqCqQQ==",
+ "dev": true
+ },
+ "node_modules/@algolia/logger-console": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/logger-console/-/logger-console-4.17.2.tgz",
+ "integrity": "sha512-JuG8HGVlJ+l/UEDK4h2Y8q/IEmRjQz1J0aS9tf6GPNbGYiSvMr1DDdZ+hqV3bb1XE6wU8Ypex56HisWMSpnG0A==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/logger-common": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/requester-browser-xhr": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-4.17.2.tgz",
+ "integrity": "sha512-FKI2lYWwksALfRt2OETFmGb5+P7WVc4py2Ai3H7k8FSfTLwVvs9WVVmtlx6oANQ8RFEK4B85h8DQJTJ29TDfmA==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/requester-common": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/requester-common": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-common/-/requester-common-4.17.2.tgz",
+ "integrity": "sha512-Rfim23ztAhYpE9qm+KCfCRo+YLJCjiiTG+IpDdzUjMpYPhUtirQT0A35YEd/gKn86YNyydxS9w8iRSjwKh+L0A==",
+ "dev": true
+ },
+ "node_modules/@algolia/requester-node-http": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-4.17.2.tgz",
+ "integrity": "sha512-E0b0kyCDMvUIhQmDNd/mH4fsKJdEEX6PkMKrYJjzm6moo+rP22tqpq4Rfe7DZD8OB6/LsDD3zs3Kvd+L+M5wwQ==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/requester-common": "4.17.2"
+ }
+ },
+ "node_modules/@algolia/transporter": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/@algolia/transporter/-/transporter-4.17.2.tgz",
+ "integrity": "sha512-m8pXlz5OnNzjD1rcw+duCN4jG4yEzkJBsvKYMoN22Oq6rQwy1AY5muZ+IQUs4dL+A364CYkRMLRWhvXpCZ1x+g==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-common": "4.17.2",
+ "@algolia/logger-common": "4.17.2",
+ "@algolia/requester-common": "4.17.2"
+ }
+ },
+ "node_modules/@babel/code-frame": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz",
+ "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@babel/highlight": "^7.22.5"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/helper-validator-identifier": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz",
+ "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/highlight": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz",
+ "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "@babel/helper-validator-identifier": "^7.22.5",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/@babel/parser": {
+ "version": "7.22.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz",
+ "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==",
+ "dev": true,
+ "bin": {
+ "parser": "bin/babel-parser.js"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@docsearch/css": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-3.5.0.tgz",
+ "integrity": "sha512-Ob5FQLubplcBNihAVtriR59FRBeP8u69F6mu4L4yIr60KfsPc10bOV0DoPErJw0zF9IBN2cNLW9qdmt8zWPxyg==",
+ "dev": true
+ },
+ "node_modules/@docsearch/js": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/js/-/js-3.5.0.tgz",
+ "integrity": "sha512-WqB+z+zVKSXDkGq028nClT9RvMzfFlemZuIulX5ZwWkdUtl4k7M9cmZA/c6kuZf7FG24XQsMHWuBjeUo9hLRyA==",
+ "dev": true,
+ "dependencies": {
+ "@docsearch/react": "3.5.0",
+ "preact": "^10.0.0"
+ }
+ },
+ "node_modules/@docsearch/react": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-3.5.0.tgz",
+ "integrity": "sha512-3IG8mmSMzSHNGy2S1VuPyYU9tFCxFpj5Ov8SYwsSHM4yMvFsaO9oFxXocA5lSenliIELhuOuS5+BdxHa/Qlf2A==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/autocomplete-core": "1.9.2",
+ "@algolia/autocomplete-preset-algolia": "1.9.2",
+ "@docsearch/css": "3.5.0",
+ "algoliasearch": "^4.0.0"
+ },
+ "peerDependencies": {
+ "@types/react": ">= 16.8.0 < 19.0.0",
+ "react": ">= 16.8.0 < 19.0.0",
+ "react-dom": ">= 16.8.0 < 19.0.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/react": {
+ "optional": true
+ },
+ "react": {
+ "optional": true
+ },
+ "react-dom": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@esbuild/android-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz",
+ "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz",
+ "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/android-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz",
+ "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "android"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz",
+ "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/darwin-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz",
+ "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz",
+ "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/freebsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz",
+ "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "freebsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz",
+ "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==",
+ "cpu": [
+ "arm"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz",
+ "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz",
+ "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-loong64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz",
+ "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==",
+ "cpu": [
+ "loong64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-mips64el": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz",
+ "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==",
+ "cpu": [
+ "mips64el"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-ppc64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz",
+ "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==",
+ "cpu": [
+ "ppc64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-riscv64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz",
+ "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==",
+ "cpu": [
+ "riscv64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-s390x": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz",
+ "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==",
+ "cpu": [
+ "s390x"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/linux-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz",
+ "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "linux"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/netbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "netbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/openbsd-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz",
+ "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "openbsd"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/sunos-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz",
+ "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "sunos"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-arm64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz",
+ "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==",
+ "cpu": [
+ "arm64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-ia32": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz",
+ "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==",
+ "cpu": [
+ "ia32"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@esbuild/win32-x64": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz",
+ "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==",
+ "cpu": [
+ "x64"
+ ],
+ "dev": true,
+ "optional": true,
+ "os": [
+ "win32"
+ ],
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/@jridgewell/gen-mapping": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
+ "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/set-array": "^1.0.1",
+ "@jridgewell/sourcemap-codec": "^1.4.10",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/resolve-uri": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz",
+ "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/set-array": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
+ "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
+ "node_modules/@jridgewell/source-map": {
+ "version": "0.3.3",
+ "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz",
+ "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/gen-mapping": "^0.3.0",
+ "@jridgewell/trace-mapping": "^0.3.9"
+ }
+ },
+ "node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.15",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
+ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
+ "dev": true
+ },
+ "node_modules/@jridgewell/trace-mapping": {
+ "version": "0.3.18",
+ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz",
+ "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/resolve-uri": "3.1.0",
+ "@jridgewell/sourcemap-codec": "1.4.14"
+ }
+ },
+ "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": {
+ "version": "1.4.14",
+ "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz",
+ "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==",
+ "dev": true
+ },
+ "node_modules/@mdn/browser-compat-data": {
+ "version": "5.2.64",
+ "resolved": "https://registry.npmjs.org/@mdn/browser-compat-data/-/browser-compat-data-5.2.64.tgz",
+ "integrity": "sha512-hWmFRrdAqOpz0eTuWLh61b6ZKIkZ5+7Nga4EaTvu2Kv2N09ZDQQEkmtHti6qziaM7TFXYYpj+vnJ3mrIb+zisA==",
+ "dev": true
+ },
+ "node_modules/@nativescript/core": {
+ "version": "8.5.3",
+ "resolved": "https://registry.npmjs.org/@nativescript/core/-/core-8.5.3.tgz",
+ "integrity": "sha512-pWNy6LE0wr7V/N/RdBVOmLDndPK/XOsfI/430dO+/2ksMzhtHIxg9lzSIt7FAldz9rqzS+BgIwmTmlXSjOjoCQ==",
+ "dev": true,
+ "hasInstallScript": true,
+ "dependencies": {
+ "@nativescript/hook": "~2.0.0",
+ "acorn": "^8.7.0",
+ "css-tree": "^1.1.2",
+ "emoji-regex": "^10.2.1",
+ "reduce-css-calc": "^2.1.7",
+ "tslib": "^2.0.0"
+ }
+ },
+ "node_modules/@nativescript/hook": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@nativescript/hook/-/hook-2.0.0.tgz",
+ "integrity": "sha512-v3Hj3Zpd69sQJfFpDNXonV0EjO1a2OL4l48wlo1Ycsqk4r7RY822d/irFTjt0LllRG0OcdEGgfG6wKb0YgPyHw==",
+ "dev": true,
+ "dependencies": {
+ "glob": "^7.1.0",
+ "mkdirp": "^1.0.4"
+ }
+ },
+ "node_modules/@nativescript/types": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@nativescript/types/-/types-8.5.0.tgz",
+ "integrity": "sha512-aYDAhwNttjSgqp8VWxz8iodRCtrllS3bS8hIHiILnfH6UJ/MgceR99hc3f+jCZimOyi/0YxieOuFE+ftLDkRTA==",
+ "dev": true,
+ "dependencies": {
+ "@nativescript/types-android": "~8.5.0",
+ "@nativescript/types-ios": "~8.5.0"
+ }
+ },
+ "node_modules/@nativescript/types-android": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@nativescript/types-android/-/types-android-8.5.0.tgz",
+ "integrity": "sha512-3jBIF5JOwyKbjIUypyTkBHaJACRhGz8SN7ArVzbXV2RP9qLSx3+w1Y9lu4Ak9TN+4O6p7Y6lMtgNW6pt8dE6xQ==",
+ "dev": true
+ },
+ "node_modules/@nativescript/types-ios": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@nativescript/types-ios/-/types-ios-8.5.0.tgz",
+ "integrity": "sha512-MAdp+mMTLTVG7NIA7/o0Y6Rz8cOSuhA/fhX4XIX7zq085Tl6a0DdrRV+NN1ypSRY/XWZR3x9hAySY5O7IJRfiA==",
+ "dev": true
+ },
+ "node_modules/@nodelib/fs.scandir": {
+ "version": "2.1.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
+ "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "2.0.5",
+ "run-parallel": "^1.1.9"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.stat": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@nodelib/fs.walk": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
+ "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.scandir": "2.1.5",
+ "fastq": "^1.6.0"
+ },
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/@rollup/plugin-node-resolve": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.1.0.tgz",
+ "integrity": "sha512-xeZHCgsiZ9pzYVgAo9580eCGqwh/XCEUM9q6iQfGNocjgkufHAqC3exA+45URvhiYV8sBF9RlBai650eNs7AsA==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.1",
+ "@types/resolve": "1.20.2",
+ "deepmerge": "^4.2.2",
+ "is-builtin-module": "^3.2.1",
+ "is-module": "^1.0.0",
+ "resolve": "^1.22.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.78.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/plugin-terser": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/@rollup/plugin-terser/-/plugin-terser-0.4.3.tgz",
+ "integrity": "sha512-EF0oejTMtkyhrkwCdg0HJ0IpkcaVg1MMSf2olHb2Jp+1mnLM04OhjpJWGma4HobiDTF0WCyViWuvadyE9ch2XA==",
+ "dev": true,
+ "dependencies": {
+ "serialize-javascript": "^6.0.1",
+ "smob": "^1.0.0",
+ "terser": "^5.17.4"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^2.x || ^3.x"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@rollup/pluginutils": {
+ "version": "5.0.2",
+ "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz",
+ "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==",
+ "dev": true,
+ "dependencies": {
+ "@types/estree": "^1.0.0",
+ "estree-walker": "^2.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "rollup": "^1.20.0||^2.0.0||^3.0.0"
+ },
+ "peerDependenciesMeta": {
+ "rollup": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@types/eslint": {
+ "version": "8.40.2",
+ "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.40.2.tgz",
+ "integrity": "sha512-PRVjQ4Eh9z9pmmtaq8nTjZjQwKFk7YIHIud3lRoKRBgUQjgjRmoGxxGEPXQkF+lH7QkHJRNr5F4aBgYCW0lqpQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/estree": "*",
+ "@types/json-schema": "*"
+ }
+ },
+ "node_modules/@types/eslint-scope": {
+ "version": "3.7.4",
+ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz",
+ "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/eslint": "*",
+ "@types/estree": "*"
+ }
+ },
+ "node_modules/@types/estree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz",
+ "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==",
+ "dev": true
+ },
+ "node_modules/@types/fs-extra": {
+ "version": "8.1.2",
+ "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.2.tgz",
+ "integrity": "sha512-SvSrYXfWSc7R4eqnOzbQF4TZmfpNSM9FrSWLU3EUnWBuyZqNBOrv1B1JA3byUDPUl9z4Ab3jeZG2eDdySlgNMg==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/glob": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz",
+ "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==",
+ "dev": true,
+ "dependencies": {
+ "@types/minimatch": "*",
+ "@types/node": "*"
+ }
+ },
+ "node_modules/@types/json-schema": {
+ "version": "7.0.12",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.12.tgz",
+ "integrity": "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@types/minimatch": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz",
+ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==",
+ "dev": true
+ },
+ "node_modules/@types/node": {
+ "version": "20.3.1",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.1.tgz",
+ "integrity": "sha512-EhcH/wvidPy1WeML3TtYFGR83UzjxeWRen9V402T8aUGYsCHOmfoisV3ZSg03gAFIbLq8TnWOJ0f4cALtnSEUg==",
+ "dev": true
+ },
+ "node_modules/@types/object-path": {
+ "version": "0.11.1",
+ "resolved": "https://registry.npmjs.org/@types/object-path/-/object-path-0.11.1.tgz",
+ "integrity": "sha512-219LSCO9HPcoXcRTC6DbCs0FRhZgBnEMzf16RRqkT40WbkKx3mOeQuz3e2XqbfhOz/AHfbru0kzB1n1RCAsIIg==",
+ "dev": true
+ },
+ "node_modules/@types/resolve": {
+ "version": "1.20.2",
+ "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz",
+ "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==",
+ "dev": true
+ },
+ "node_modules/@types/semver": {
+ "version": "7.5.0",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.0.tgz",
+ "integrity": "sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==",
+ "dev": true
+ },
+ "node_modules/@types/ua-parser-js": {
+ "version": "0.7.36",
+ "resolved": "https://registry.npmjs.org/@types/ua-parser-js/-/ua-parser-js-0.7.36.tgz",
+ "integrity": "sha512-N1rW+njavs70y2cApeIw1vLMYXRwfBy+7trgavGuuTfOd7j1Yh7QTRc/yqsPl6ncokt72ZXuxEU0PiCp9bSwNQ==",
+ "dev": true
+ },
+ "node_modules/@types/web-bluetooth": {
+ "version": "0.0.17",
+ "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.17.tgz",
+ "integrity": "sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==",
+ "dev": true
+ },
+ "node_modules/@vitejs/plugin-vue": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-4.2.3.tgz",
+ "integrity": "sha512-R6JDUfiZbJA9cMiguQ7jxALsgiprjBeHL5ikpXfJCH62pPHtI+JdJ5xWj6Ev73yXSlYl86+blXn1kZHQ7uElxw==",
+ "dev": true,
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "vite": "^4.0.0",
+ "vue": "^3.2.25"
+ }
+ },
+ "node_modules/@vue/compiler-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.3.4.tgz",
+ "integrity": "sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.21.3",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.3.4.tgz",
+ "integrity": "sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/compiler-sfc": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.3.4.tgz",
+ "integrity": "sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/reactivity-transform": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0",
+ "postcss": "^8.1.10",
+ "source-map-js": "^1.0.2"
+ }
+ },
+ "node_modules/@vue/compiler-ssr": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.3.4.tgz",
+ "integrity": "sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/devtools-api": {
+ "version": "6.5.0",
+ "resolved": "https://registry.npmjs.org/@vue/devtools-api/-/devtools-api-6.5.0.tgz",
+ "integrity": "sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==",
+ "dev": true
+ },
+ "node_modules/@vue/reactivity": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.3.4.tgz",
+ "integrity": "sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/reactivity-transform": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/reactivity-transform/-/reactivity-transform-3.3.4.tgz",
+ "integrity": "sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==",
+ "dev": true,
+ "dependencies": {
+ "@babel/parser": "^7.20.15",
+ "@vue/compiler-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.0"
+ }
+ },
+ "node_modules/@vue/runtime-core": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.3.4.tgz",
+ "integrity": "sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==",
+ "dev": true,
+ "dependencies": {
+ "@vue/reactivity": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/@vue/runtime-dom": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.3.4.tgz",
+ "integrity": "sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/runtime-core": "3.3.4",
+ "@vue/shared": "3.3.4",
+ "csstype": "^3.1.1"
+ }
+ },
+ "node_modules/@vue/server-renderer": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.3.4.tgz",
+ "integrity": "sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-ssr": "3.3.4",
+ "@vue/shared": "3.3.4"
+ },
+ "peerDependencies": {
+ "vue": "3.3.4"
+ }
+ },
+ "node_modules/@vue/shared": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.3.4.tgz",
+ "integrity": "sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==",
+ "dev": true
+ },
+ "node_modules/@vueuse/core": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/core/-/core-10.1.2.tgz",
+ "integrity": "sha512-roNn8WuerI56A5uiTyF/TEYX0Y+VKlhZAF94unUfdhbDUI+NfwQMn4FUnUscIRUhv3344qvAghopU4bzLPNFlA==",
+ "dev": true,
+ "dependencies": {
+ "@types/web-bluetooth": "^0.0.17",
+ "@vueuse/metadata": "10.1.2",
+ "@vueuse/shared": "10.1.2",
+ "vue-demi": ">=0.14.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/core/node_modules/vue-demi": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
+ "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/integrations": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/integrations/-/integrations-10.1.2.tgz",
+ "integrity": "sha512-wUpG3Wv6LiWerOwCzOAM0iGhNQ4vfFUTkhj/xQy7TLXduh2M3D8N08aS0KqlxsejY6R8NLxydDIM+68QfHZZ8Q==",
+ "dev": true,
+ "dependencies": {
+ "@vueuse/core": "10.1.2",
+ "@vueuse/shared": "10.1.2",
+ "vue-demi": ">=0.14.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "async-validator": "*",
+ "axios": "*",
+ "change-case": "*",
+ "drauu": "*",
+ "focus-trap": "*",
+ "fuse.js": "*",
+ "idb-keyval": "*",
+ "jwt-decode": "*",
+ "nprogress": "*",
+ "qrcode": "*",
+ "sortablejs": "*",
+ "universal-cookie": "*"
+ },
+ "peerDependenciesMeta": {
+ "async-validator": {
+ "optional": true
+ },
+ "axios": {
+ "optional": true
+ },
+ "change-case": {
+ "optional": true
+ },
+ "drauu": {
+ "optional": true
+ },
+ "focus-trap": {
+ "optional": true
+ },
+ "fuse.js": {
+ "optional": true
+ },
+ "idb-keyval": {
+ "optional": true
+ },
+ "jwt-decode": {
+ "optional": true
+ },
+ "nprogress": {
+ "optional": true
+ },
+ "qrcode": {
+ "optional": true
+ },
+ "sortablejs": {
+ "optional": true
+ },
+ "universal-cookie": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/integrations/node_modules/vue-demi": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
+ "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@vueuse/metadata": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/metadata/-/metadata-10.1.2.tgz",
+ "integrity": "sha512-3mc5BqN9aU2SqBeBuWE7ne4OtXHoHKggNgxZR2K+zIW4YLsy6xoZ4/9vErQs6tvoKDX6QAqm3lvsrv0mczAwIQ==",
+ "dev": true,
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared": {
+ "version": "10.1.2",
+ "resolved": "https://registry.npmjs.org/@vueuse/shared/-/shared-10.1.2.tgz",
+ "integrity": "sha512-1uoUTPBlgyscK9v6ScGeVYDDzlPSFXBlxuK7SfrDGyUTBiznb3mNceqhwvZHjtDRELZEN79V5uWPTF1VDV8svA==",
+ "dev": true,
+ "dependencies": {
+ "vue-demi": ">=0.14.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ }
+ },
+ "node_modules/@vueuse/shared/node_modules/vue-demi": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz",
+ "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "vue-demi-fix": "bin/vue-demi-fix.js",
+ "vue-demi-switch": "bin/vue-demi-switch.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/antfu"
+ },
+ "peerDependencies": {
+ "@vue/composition-api": "^1.0.0-rc.1",
+ "vue": "^3.0.0-0 || ^2.6.0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/composition-api": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@webassemblyjs/ast": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.6.tgz",
+ "integrity": "sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/helper-numbers": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/floating-point-hex-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz",
+ "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-api-error": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz",
+ "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-buffer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.6.tgz",
+ "integrity": "sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-numbers": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz",
+ "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/floating-point-hex-parser": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/helper-wasm-bytecode": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz",
+ "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/helper-wasm-section": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.6.tgz",
+ "integrity": "sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/ieee754": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz",
+ "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@xtuc/ieee754": "^1.2.0"
+ }
+ },
+ "node_modules/@webassemblyjs/leb128": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz",
+ "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@webassemblyjs/utf8": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz",
+ "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@webassemblyjs/wasm-edit": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.6.tgz",
+ "integrity": "sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/helper-wasm-section": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-opt": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6",
+ "@webassemblyjs/wast-printer": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-gen": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.6.tgz",
+ "integrity": "sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-opt": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.6.tgz",
+ "integrity": "sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-buffer": "1.11.6",
+ "@webassemblyjs/wasm-gen": "1.11.6",
+ "@webassemblyjs/wasm-parser": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wasm-parser": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.6.tgz",
+ "integrity": "sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@webassemblyjs/helper-api-error": "1.11.6",
+ "@webassemblyjs/helper-wasm-bytecode": "1.11.6",
+ "@webassemblyjs/ieee754": "1.11.6",
+ "@webassemblyjs/leb128": "1.11.6",
+ "@webassemblyjs/utf8": "1.11.6"
+ }
+ },
+ "node_modules/@webassemblyjs/wast-printer": {
+ "version": "1.11.6",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.6.tgz",
+ "integrity": "sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@webassemblyjs/ast": "1.11.6",
+ "@xtuc/long": "4.2.2"
+ }
+ },
+ "node_modules/@wessberg/stringutil": {
+ "version": "1.0.19",
+ "resolved": "https://registry.npmjs.org/@wessberg/stringutil/-/stringutil-1.0.19.tgz",
+ "integrity": "sha512-9AZHVXWlpN8Cn9k5BC/O0Dzb9E9xfEMXzYrNunwvkUTvuK7xgQPVRZpLo+jWCOZ5r8oBa8NIrHuPEu1hzbb6bg==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/@xtuc/ieee754": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz",
+ "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/@xtuc/long": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz",
+ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/acorn": {
+ "version": "8.8.2",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz",
+ "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==",
+ "dev": true,
+ "bin": {
+ "acorn": "bin/acorn"
+ },
+ "engines": {
+ "node": ">=0.4.0"
+ }
+ },
+ "node_modules/acorn-import-assertions": {
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz",
+ "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==",
+ "dev": true,
+ "peer": true,
+ "peerDependencies": {
+ "acorn": "^8"
+ }
+ },
+ "node_modules/ajv": {
+ "version": "6.12.6",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
+ "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/sponsors/epoberezkin"
+ }
+ },
+ "node_modules/ajv-keywords": {
+ "version": "3.5.2",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz",
+ "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==",
+ "dev": true,
+ "peer": true,
+ "peerDependencies": {
+ "ajv": "^6.9.1"
+ }
+ },
+ "node_modules/algoliasearch": {
+ "version": "4.17.2",
+ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-4.17.2.tgz",
+ "integrity": "sha512-VFu43JJNYIW74awp7oeQcQsPcxOhd8psqBDTfyNO2Zt6L1NqnNMTVnaIdQ+8dtKqUDBqQZp0szPxECvX8CK2Fg==",
+ "dev": true,
+ "dependencies": {
+ "@algolia/cache-browser-local-storage": "4.17.2",
+ "@algolia/cache-common": "4.17.2",
+ "@algolia/cache-in-memory": "4.17.2",
+ "@algolia/client-account": "4.17.2",
+ "@algolia/client-analytics": "4.17.2",
+ "@algolia/client-common": "4.17.2",
+ "@algolia/client-personalization": "4.17.2",
+ "@algolia/client-search": "4.17.2",
+ "@algolia/logger-common": "4.17.2",
+ "@algolia/logger-console": "4.17.2",
+ "@algolia/requester-browser-xhr": "4.17.2",
+ "@algolia/requester-common": "4.17.2",
+ "@algolia/requester-node-http": "4.17.2",
+ "@algolia/transporter": "4.17.2"
+ }
+ },
+ "node_modules/ansi-colors": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz",
+ "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/ansi-sequence-parser": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.0.tgz",
+ "integrity": "sha512-lEm8mt52to2fT8GhciPCGeCXACSz2UwIN4X2e2LJSnZ5uAbn2/dsYdOmUXq0AtWS5cpAupysIneExOgH0Vd2TQ==",
+ "dev": true
+ },
+ "node_modules/ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "color-convert": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/array-union": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
+ "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/balanced-match": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
+ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
+ "dev": true
+ },
+ "node_modules/body-scroll-lock": {
+ "version": "4.0.0-beta.0",
+ "resolved": "https://registry.npmjs.org/body-scroll-lock/-/body-scroll-lock-4.0.0-beta.0.tgz",
+ "integrity": "sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==",
+ "dev": true
+ },
+ "node_modules/brace-expansion": {
+ "version": "1.1.11",
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
+ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
+ "dev": true,
+ "dependencies": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "node_modules/braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "dependencies": {
+ "fill-range": "^7.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/browserslist": {
+ "version": "4.21.8",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.8.tgz",
+ "integrity": "sha512-j+7xYe+v+q2Id9qbBeCI8WX5NmZSRe8es1+0xntD/+gaWXznP8tFEkv5IgSaHf5dS1YwVMbX/4W6m937mj+wQw==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "caniuse-lite": "^1.0.30001502",
+ "electron-to-chromium": "^1.4.428",
+ "node-releases": "^2.0.12",
+ "update-browserslist-db": "^1.0.11"
+ },
+ "bin": {
+ "browserslist": "cli.js"
+ },
+ "engines": {
+ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
+ }
+ },
+ "node_modules/browserslist-generator": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/browserslist-generator/-/browserslist-generator-2.0.3.tgz",
+ "integrity": "sha512-3j8ogwvlBpOEDR3f5n1H2n5BWXqHPWi/Xm8EC1DPJy5BWl4WkSFisatBygH/L9AEmg0MtOfcR1QnMuM9XL28jA==",
+ "dev": true,
+ "dependencies": {
+ "@mdn/browser-compat-data": "^5.2.33",
+ "@types/object-path": "^0.11.1",
+ "@types/semver": "^7.3.13",
+ "@types/ua-parser-js": "^0.7.36",
+ "browserslist": "^4.21.5",
+ "caniuse-lite": "^1.0.30001450",
+ "isbot": "^3.6.5",
+ "object-path": "^0.11.8",
+ "semver": "^7.3.8",
+ "ua-parser-js": "^1.0.33"
+ },
+ "engines": {
+ "node": ">=16.15.1",
+ "npm": ">=7.0.0",
+ "pnpm": ">=3.2.0",
+ "yarn": ">=1.13"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/wessberg/browserslist-generator?sponsor=1"
+ }
+ },
+ "node_modules/buffer-from": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
+ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
+ "dev": true
+ },
+ "node_modules/builtin-modules": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz",
+ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/caniuse-lite": {
+ "version": "1.0.30001502",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001502.tgz",
+ "integrity": "sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ]
+ },
+ "node_modules/chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/chrome-trace-event": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz",
+ "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.0"
+ }
+ },
+ "node_modules/color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "color-name": "1.1.3"
+ }
+ },
+ "node_modules/color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/colorette": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
+ "integrity": "sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==",
+ "dev": true
+ },
+ "node_modules/commander": {
+ "version": "2.20.3",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz",
+ "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==",
+ "dev": true
+ },
+ "node_modules/compatfactory": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/compatfactory/-/compatfactory-2.0.9.tgz",
+ "integrity": "sha512-fvO+AWcmbO7P1S+A3mwm3IGr74eHMeq5ZLhNhyNQc9mVDNHT4oe0Gg0ksdIFFNXLK7k7Z/TYcLAUSQdRgh1bsA==",
+ "dev": true,
+ "dependencies": {
+ "helpertypes": "^0.0.19"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ },
+ "peerDependencies": {
+ "typescript": ">=3.x || >= 4.x"
+ }
+ },
+ "node_modules/concat-map": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
+ "dev": true
+ },
+ "node_modules/crosspath": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/crosspath/-/crosspath-2.0.0.tgz",
+ "integrity": "sha512-ju88BYCQ2uvjO2bR+SsgLSTwTSctU+6Vp2ePbKPgSCZyy4MWZxYsT738DlKVRE5utUjobjPRm1MkTYKJxCmpTA==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "^17.0.36"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ }
+ },
+ "node_modules/crosspath/node_modules/@types/node": {
+ "version": "17.0.45",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.45.tgz",
+ "integrity": "sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==",
+ "dev": true
+ },
+ "node_modules/css-tree": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz",
+ "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==",
+ "dev": true,
+ "dependencies": {
+ "mdn-data": "2.0.14",
+ "source-map": "^0.6.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/css-unit-converter": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
+ "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
+ "dev": true
+ },
+ "node_modules/csstype": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz",
+ "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==",
+ "dev": true
+ },
+ "node_modules/deepmerge": {
+ "version": "4.3.1",
+ "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
+ "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/dir-glob": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
+ "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
+ "dev": true,
+ "dependencies": {
+ "path-type": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/electron-to-chromium": {
+ "version": "1.4.428",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.428.tgz",
+ "integrity": "sha512-L7uUknyY286of0AYC8CKfgWstD0Smk2DvHDi9F0GWQhSH90Bzi7iDrmCbZKz75tYJxeGSAc7TYeKpmbjMDoh1w==",
+ "dev": true
+ },
+ "node_modules/emoji-regex": {
+ "version": "10.2.1",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.2.1.tgz",
+ "integrity": "sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==",
+ "dev": true
+ },
+ "node_modules/enhanced-resolve": {
+ "version": "5.14.1",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.14.1.tgz",
+ "integrity": "sha512-Vklwq2vDKtl0y/vtwjSesgJ5MYS7Etuk5txS8VdKL4AOS1aUlD96zqIfsOSLQsdv3xgMRbtkWM8eG9XDfKUPow==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.4",
+ "tapable": "^2.2.0"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/es-module-lexer": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.3.0.tgz",
+ "integrity": "sha512-vZK7T0N2CBmBOixhmjdqx2gWVbFZ4DXZ/NyRMZVlJXPa7CyFS+/a4QQsDGDQy9ZfEzxFuNEsMLeQJnKP2p5/JA==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/esbuild": {
+ "version": "0.17.19",
+ "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz",
+ "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==",
+ "dev": true,
+ "hasInstallScript": true,
+ "bin": {
+ "esbuild": "bin/esbuild"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "optionalDependencies": {
+ "@esbuild/android-arm": "0.17.19",
+ "@esbuild/android-arm64": "0.17.19",
+ "@esbuild/android-x64": "0.17.19",
+ "@esbuild/darwin-arm64": "0.17.19",
+ "@esbuild/darwin-x64": "0.17.19",
+ "@esbuild/freebsd-arm64": "0.17.19",
+ "@esbuild/freebsd-x64": "0.17.19",
+ "@esbuild/linux-arm": "0.17.19",
+ "@esbuild/linux-arm64": "0.17.19",
+ "@esbuild/linux-ia32": "0.17.19",
+ "@esbuild/linux-loong64": "0.17.19",
+ "@esbuild/linux-mips64el": "0.17.19",
+ "@esbuild/linux-ppc64": "0.17.19",
+ "@esbuild/linux-riscv64": "0.17.19",
+ "@esbuild/linux-s390x": "0.17.19",
+ "@esbuild/linux-x64": "0.17.19",
+ "@esbuild/netbsd-x64": "0.17.19",
+ "@esbuild/openbsd-x64": "0.17.19",
+ "@esbuild/sunos-x64": "0.17.19",
+ "@esbuild/win32-arm64": "0.17.19",
+ "@esbuild/win32-ia32": "0.17.19",
+ "@esbuild/win32-x64": "0.17.19"
+ }
+ },
+ "node_modules/escalade": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
+ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
+ "dev": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=0.8.0"
+ }
+ },
+ "node_modules/eslint-scope": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz",
+ "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "esrecurse": "^4.3.0",
+ "estraverse": "^4.1.1"
+ },
+ "engines": {
+ "node": ">=8.0.0"
+ }
+ },
+ "node_modules/esrecurse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
+ "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "estraverse": "^5.2.0"
+ },
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/esrecurse/node_modules/estraverse": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
+ "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estraverse": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz",
+ "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=4.0"
+ }
+ },
+ "node_modules/estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
+ "dev": true
+ },
+ "node_modules/events": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz",
+ "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=0.8.x"
+ }
+ },
+ "node_modules/fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/fast-glob": {
+ "version": "3.2.12",
+ "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
+ "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
+ "dev": true,
+ "dependencies": {
+ "@nodelib/fs.stat": "^2.0.2",
+ "@nodelib/fs.walk": "^1.2.3",
+ "glob-parent": "^5.1.2",
+ "merge2": "^1.3.0",
+ "micromatch": "^4.0.4"
+ },
+ "engines": {
+ "node": ">=8.6.0"
+ }
+ },
+ "node_modules/fast-json-stable-stringify": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
+ "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/fastq": {
+ "version": "1.15.0",
+ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
+ "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
+ "dependencies": {
+ "reusify": "^1.0.4"
+ }
+ },
+ "node_modules/fill-range": {
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
+ "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
+ "dev": true,
+ "dependencies": {
+ "to-regex-range": "^5.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/focus-trap": {
+ "version": "7.4.3",
+ "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.4.3.tgz",
+ "integrity": "sha512-BgSSbK4GPnS2VbtZ50VtOv1Sti6DIkj3+LkVjiWMNjLeAp1SH1UlLx3ULu/DCu4vq5R4/uvTm+zrvsMsuYmGLg==",
+ "dev": true,
+ "dependencies": {
+ "tabbable": "^6.1.2"
+ }
+ },
+ "node_modules/fs-extra": {
+ "version": "8.1.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
+ "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
+ "dev": true,
+ "dependencies": {
+ "graceful-fs": "^4.2.0",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ },
+ "engines": {
+ "node": ">=6 <7 || >=8"
+ }
+ },
+ "node_modules/fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
+ "dev": true
+ },
+ "node_modules/fsevents": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
+ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
+ "dev": true,
+ "hasInstallScript": true,
+ "optional": true,
+ "os": [
+ "darwin"
+ ],
+ "engines": {
+ "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
+ }
+ },
+ "node_modules/function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "node_modules/glob": {
+ "version": "7.2.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
+ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
+ "dev": true,
+ "dependencies": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.1.1",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/isaacs"
+ }
+ },
+ "node_modules/glob-parent": {
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
+ "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
+ "dependencies": {
+ "is-glob": "^4.0.1"
+ },
+ "engines": {
+ "node": ">= 6"
+ }
+ },
+ "node_modules/glob-to-regexp": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz",
+ "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==",
+ "dev": true
+ },
+ "node_modules/globby": {
+ "version": "10.0.1",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz",
+ "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==",
+ "dev": true,
+ "dependencies": {
+ "@types/glob": "^7.1.1",
+ "array-union": "^2.1.0",
+ "dir-glob": "^3.0.1",
+ "fast-glob": "^3.0.3",
+ "glob": "^7.1.3",
+ "ignore": "^5.1.1",
+ "merge2": "^1.2.3",
+ "slash": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/graceful-fs": {
+ "version": "4.2.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
+ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
+ "dev": true
+ },
+ "node_modules/has": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
+ "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
+ "dev": true,
+ "dependencies": {
+ "function-bind": "^1.1.1"
+ },
+ "engines": {
+ "node": ">= 0.4.0"
+ }
+ },
+ "node_modules/has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
+ "dev": true,
+ "optional": true,
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/hash-sum": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-2.0.0.tgz",
+ "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==",
+ "dev": true
+ },
+ "node_modules/helpertypes": {
+ "version": "0.0.19",
+ "resolved": "https://registry.npmjs.org/helpertypes/-/helpertypes-0.0.19.tgz",
+ "integrity": "sha512-J00e55zffgi3yVnUp0UdbMztNkr2PnizEkOe9URNohnrNhW5X0QpegkuLpOmFQInpi93Nb8MCjQRHAiCDF42NQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10.0.0"
+ }
+ },
+ "node_modules/ignore": {
+ "version": "5.2.4",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
+ "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4"
+ }
+ },
+ "node_modules/inflight": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
+ "dev": true,
+ "dependencies": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "node_modules/inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "node_modules/is-builtin-module": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz",
+ "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==",
+ "dev": true,
+ "dependencies": {
+ "builtin-modules": "^3.3.0"
+ },
+ "engines": {
+ "node": ">=6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/is-core-module": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz",
+ "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==",
+ "dev": true,
+ "dependencies": {
+ "has": "^1.0.3"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/is-extglob": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
+ "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-glob": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
+ "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
+ "dev": true,
+ "dependencies": {
+ "is-extglob": "^2.1.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==",
+ "dev": true
+ },
+ "node_modules/is-number": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
+ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.12.0"
+ }
+ },
+ "node_modules/is-plain-object": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-3.0.1.tgz",
+ "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/is-primitive": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-3.0.1.tgz",
+ "integrity": "sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/isbot": {
+ "version": "3.6.10",
+ "resolved": "https://registry.npmjs.org/isbot/-/isbot-3.6.10.tgz",
+ "integrity": "sha512-+I+2998oyP4oW9+OTQD8TS1r9P6wv10yejukj+Ksj3+UR5pUhsZN3f8W7ysq0p1qxpOVNbl5mCuv0bCaF8y5iQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/jest-worker": {
+ "version": "27.5.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz",
+ "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/node": "*",
+ "merge-stream": "^2.0.0",
+ "supports-color": "^8.0.0"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ }
+ },
+ "node_modules/jest-worker/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/jest-worker/node_modules/supports-color": {
+ "version": "8.1.1",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz",
+ "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/supports-color?sponsor=1"
+ }
+ },
+ "node_modules/js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true,
+ "optional": true
+ },
+ "node_modules/json-parse-even-better-errors": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz",
+ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/jsonc-parser": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
+ "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
+ "dev": true
+ },
+ "node_modules/jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==",
+ "dev": true,
+ "optionalDependencies": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "node_modules/loader-runner": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz",
+ "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6.11.5"
+ }
+ },
+ "node_modules/lru-cache": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
+ "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
+ "dev": true,
+ "dependencies": {
+ "yallist": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/magic-string": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz",
+ "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/mark.js": {
+ "version": "8.11.1",
+ "resolved": "https://registry.npmjs.org/mark.js/-/mark.js-8.11.1.tgz",
+ "integrity": "sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==",
+ "dev": true
+ },
+ "node_modules/mdn-data": {
+ "version": "2.0.14",
+ "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz",
+ "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==",
+ "dev": true
+ },
+ "node_modules/merge-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
+ "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/merge2": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 8"
+ }
+ },
+ "node_modules/micromatch": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
+ "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
+ "dev": true,
+ "dependencies": {
+ "braces": "^3.0.2",
+ "picomatch": "^2.3.1"
+ },
+ "engines": {
+ "node": ">=8.6"
+ }
+ },
+ "node_modules/mime-db": {
+ "version": "1.52.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
+ "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/mime-types": {
+ "version": "2.1.35",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
+ "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "engines": {
+ "node": ">= 0.6"
+ }
+ },
+ "node_modules/minimatch": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
+ "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
+ "dev": true,
+ "dependencies": {
+ "brace-expansion": "^1.1.7"
+ },
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/minisearch": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/minisearch/-/minisearch-6.1.0.tgz",
+ "integrity": "sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==",
+ "dev": true
+ },
+ "node_modules/mkdirp": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
+ "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
+ "dev": true,
+ "bin": {
+ "mkdirp": "bin/cmd.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/nanoid": {
+ "version": "3.3.6",
+ "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
+ "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "bin": {
+ "nanoid": "bin/nanoid.cjs"
+ },
+ "engines": {
+ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
+ }
+ },
+ "node_modules/nativescript-vue": {
+ "version": "3.0.0-beta.8",
+ "resolved": "https://registry.npmjs.org/nativescript-vue/-/nativescript-vue-3.0.0-beta.8.tgz",
+ "integrity": "sha512-Qv+A1OuFKcYMBoMpyOOg+K7AxPN8LG8JjrU3ZVcfrMKleseV5PkOk5uyb3v3+V318UMsVo2CI23wER4B5gNoyg==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-sfc": "^3.3.4",
+ "@vue/runtime-core": "^3.3.4",
+ "@vue/shared": "^3.3.4",
+ "set-value": "^4.1.0",
+ "vue-loader": "^17.2.2"
+ }
+ },
+ "node_modules/neo-async": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
+ "dev": true,
+ "peer": true
+ },
+ "node_modules/node-releases": {
+ "version": "2.0.12",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz",
+ "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==",
+ "dev": true
+ },
+ "node_modules/object-path": {
+ "version": "0.11.8",
+ "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.11.8.tgz",
+ "integrity": "sha512-YJjNZrlXJFM42wTBn6zgOJVar9KFJvzx6sTWDte8sWZF//cnjl0BxHNpfZx+ZffXX63A9q0b1zsFiBX4g4X5KA==",
+ "dev": true,
+ "engines": {
+ "node": ">= 10.12.0"
+ }
+ },
+ "node_modules/once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
+ "dev": true,
+ "dependencies": {
+ "wrappy": "1"
+ }
+ },
+ "node_modules/path-is-absolute": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/path-parse": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
+ "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
+ "dev": true
+ },
+ "node_modules/path-type": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
+ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/picocolors": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
+ "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+ "dev": true
+ },
+ "node_modules/picomatch": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
+ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.6"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/jonschlinkert"
+ }
+ },
+ "node_modules/postcss": {
+ "version": "8.4.24",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz",
+ "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/postcss"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "nanoid": "^3.3.6",
+ "picocolors": "^1.0.0",
+ "source-map-js": "^1.0.2"
+ },
+ "engines": {
+ "node": "^10 || ^12 || >=14"
+ }
+ },
+ "node_modules/postcss-value-parser": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
+ "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
+ "dev": true
+ },
+ "node_modules/preact": {
+ "version": "10.15.1",
+ "resolved": "https://registry.npmjs.org/preact/-/preact-10.15.1.tgz",
+ "integrity": "sha512-qs2ansoQEwzNiV5eAcRT1p1EC/dmEzaATVDJNiB3g2sRDWdA7b7MurXdJjB2+/WQktGWZwxvDrnuRFbWuIr64g==",
+ "dev": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/preact"
+ }
+ },
+ "node_modules/punycode": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
+ "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/queue-microtask": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/randombytes": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz",
+ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==",
+ "dev": true,
+ "dependencies": {
+ "safe-buffer": "^5.1.0"
+ }
+ },
+ "node_modules/reduce-css-calc": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
+ "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
+ "dev": true,
+ "dependencies": {
+ "css-unit-converter": "^1.1.1",
+ "postcss-value-parser": "^3.3.0"
+ }
+ },
+ "node_modules/require-from-url": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/require-from-url/-/require-from-url-3.1.3.tgz",
+ "integrity": "sha512-SWYVQr6rZMumhsE0MGL3caGtBNDBPQRm7JV4fsxb8Nc+LR42QkmLPP56P+Y9jncZLNrrk4SpE/Ozaf8Jo3ialA==",
+ "dev": true,
+ "engines": {
+ "node": ">=8.11.1"
+ }
+ },
+ "node_modules/resolve": {
+ "version": "1.22.2",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz",
+ "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==",
+ "dev": true,
+ "dependencies": {
+ "is-core-module": "^2.11.0",
+ "path-parse": "^1.0.7",
+ "supports-preserve-symlinks-flag": "^1.0.0"
+ },
+ "bin": {
+ "resolve": "bin/resolve"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/reusify": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
+ "engines": {
+ "iojs": ">=1.0.0",
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/rollup": {
+ "version": "3.25.1",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.25.1.tgz",
+ "integrity": "sha512-tywOR+rwIt5m2ZAWSe5AIJcTat8vGlnPFAv15ycCrw33t6iFsXZ6mzHVFh2psSjxQPmI+xgzMZZizUAukBI4aQ==",
+ "dev": true,
+ "bin": {
+ "rollup": "dist/bin/rollup"
+ },
+ "engines": {
+ "node": ">=14.18.0",
+ "npm": ">=8.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ }
+ },
+ "node_modules/rollup-plugin-copy": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-copy/-/rollup-plugin-copy-3.4.0.tgz",
+ "integrity": "sha512-rGUmYYsYsceRJRqLVlE9FivJMxJ7X6jDlP79fmFkL8sJs7VVMSVyA2yfyL+PGyO/vJs4A87hwhgVfz61njI+uQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/fs-extra": "^8.0.1",
+ "colorette": "^1.1.0",
+ "fs-extra": "^8.1.0",
+ "globby": "10.0.1",
+ "is-plain-object": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=8.3"
+ }
+ },
+ "node_modules/rollup-plugin-dts": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-dts/-/rollup-plugin-dts-5.3.0.tgz",
+ "integrity": "sha512-8FXp0ZkyZj1iU5klkIJYLjIq/YZSwBoERu33QBDxm/1yw5UU4txrEtcmMkrq+ZiKu3Q4qvPCNqc3ovX6rjqzbQ==",
+ "dev": true,
+ "dependencies": {
+ "magic-string": "^0.30.0"
+ },
+ "engines": {
+ "node": ">=v14"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/Swatinem"
+ },
+ "optionalDependencies": {
+ "@babel/code-frame": "^7.18.6"
+ },
+ "peerDependencies": {
+ "rollup": "^3.0.0",
+ "typescript": "^4.1 || ^5.0"
+ }
+ },
+ "node_modules/rollup-plugin-ts": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-ts/-/rollup-plugin-ts-3.2.0.tgz",
+ "integrity": "sha512-KkTLVifkUexEiAXS9VtSjDrjKr0TyusmNJpb2ZTAzI9VuPumSu4AktIaVNnwv70iUEitHwZtET7OAM+5n1u1tg==",
+ "dev": true,
+ "dependencies": {
+ "@rollup/pluginutils": "^5.0.2",
+ "@wessberg/stringutil": "^1.0.19",
+ "ansi-colors": "^4.1.3",
+ "browserslist": "^4.21.4",
+ "browserslist-generator": "^2.0.1",
+ "compatfactory": "^2.0.9",
+ "crosspath": "^2.0.0",
+ "magic-string": "^0.27.0",
+ "ts-clone-node": "^2.0.4",
+ "tslib": "^2.4.1"
+ },
+ "engines": {
+ "node": ">=14.9.0",
+ "npm": ">=7.0.0",
+ "pnpm": ">=3.2.0",
+ "yarn": ">=1.13"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/wessberg/rollup-plugin-ts?sponsor=1"
+ },
+ "peerDependencies": {
+ "@babel/core": ">=6.x || >=7.x",
+ "@babel/plugin-transform-runtime": ">=6.x || >=7.x",
+ "@babel/preset-env": ">=6.x || >=7.x",
+ "@babel/preset-typescript": ">=6.x || >=7.x",
+ "@babel/runtime": ">=6.x || >=7.x",
+ "@swc/core": ">=1.x",
+ "@swc/helpers": ">=0.2",
+ "rollup": ">=1.x || >=2.x",
+ "typescript": ">=3.2.x || >= 4.x"
+ },
+ "peerDependenciesMeta": {
+ "@babel/core": {
+ "optional": true
+ },
+ "@babel/plugin-transform-runtime": {
+ "optional": true
+ },
+ "@babel/preset-env": {
+ "optional": true
+ },
+ "@babel/preset-typescript": {
+ "optional": true
+ },
+ "@babel/runtime": {
+ "optional": true
+ },
+ "@swc/core": {
+ "optional": true
+ },
+ "@swc/helpers": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/rollup-plugin-ts/node_modules/magic-string": {
+ "version": "0.27.0",
+ "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz",
+ "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/sourcemap-codec": "^1.4.13"
+ },
+ "engines": {
+ "node": ">=12"
+ }
+ },
+ "node_modules/rollup-plugin-ts/node_modules/ts-clone-node": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/ts-clone-node/-/ts-clone-node-2.0.4.tgz",
+ "integrity": "sha512-eG6FAgmQsenhIJOIFhUcO6yyYejBKZIKcI3y21jiQmIOrth5pD6GElyPAyeihbPSyBs3u/9PVNXy+5I7jGy8jA==",
+ "dev": true,
+ "dependencies": {
+ "compatfactory": "^2.0.9"
+ },
+ "engines": {
+ "node": ">=14.9.0"
+ },
+ "funding": {
+ "type": "github",
+ "url": "https://github.com/wessberg/ts-clone-node?sponsor=1"
+ },
+ "peerDependencies": {
+ "typescript": "^3.x || ^4.x"
+ }
+ },
+ "node_modules/run-parallel": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
+ "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ],
+ "dependencies": {
+ "queue-microtask": "^1.2.2"
+ }
+ },
+ "node_modules/safe-buffer": {
+ "version": "5.2.1",
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
+ "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/feross"
+ },
+ {
+ "type": "patreon",
+ "url": "https://www.patreon.com/feross"
+ },
+ {
+ "type": "consulting",
+ "url": "https://feross.org/support"
+ }
+ ]
+ },
+ "node_modules/schema-utils": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.2.0.tgz",
+ "integrity": "sha512-0zTyLGyDJYd/MBxG1AhJkKa6fpEBds4OQO2ut0w7OYG+ZGhGea09lijvzsqegYSik88zc7cUtIlnnO+/BvD6gQ==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/json-schema": "^7.0.8",
+ "ajv": "^6.12.5",
+ "ajv-keywords": "^3.5.2"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ }
+ },
+ "node_modules/search-insights": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/search-insights/-/search-insights-2.6.0.tgz",
+ "integrity": "sha512-vU2/fJ+h/Mkm/DJOe+EaM5cafJv/1rRTZpGJTuFPf/Q5LjzgMDsqPdSaZsAe+GAWHHsfsu+rQSAn6c8IGtBEVw==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=8.16.0"
+ }
+ },
+ "node_modules/semver": {
+ "version": "7.5.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz",
+ "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/serialize-javascript": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
+ "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
+ "dev": true,
+ "dependencies": {
+ "randombytes": "^2.1.0"
+ }
+ },
+ "node_modules/set-value": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-4.1.0.tgz",
+ "integrity": "sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==",
+ "dev": true,
+ "funding": [
+ "https://github.com/sponsors/jonschlinkert",
+ "https://paypal.me/jonathanschlinkert",
+ "https://jonschlinkert.dev/sponsor"
+ ],
+ "dependencies": {
+ "is-plain-object": "^2.0.4",
+ "is-primitive": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=11.0"
+ }
+ },
+ "node_modules/set-value/node_modules/is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "dependencies": {
+ "isobject": "^3.0.1"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/shiki": {
+ "version": "0.14.2",
+ "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.2.tgz",
+ "integrity": "sha512-ltSZlSLOuSY0M0Y75KA+ieRaZ0Trf5Wl3gutE7jzLuIcWxLp5i/uEnLoQWNvgKXQ5OMpGkJnVMRLAuzjc0LJ2A==",
+ "dev": true,
+ "dependencies": {
+ "ansi-sequence-parser": "^1.1.0",
+ "jsonc-parser": "^3.2.0",
+ "vscode-oniguruma": "^1.7.0",
+ "vscode-textmate": "^8.0.0"
+ }
+ },
+ "node_modules/slash": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
+ "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/smob": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/smob/-/smob-1.4.0.tgz",
+ "integrity": "sha512-MqR3fVulhjWuRNSMydnTlweu38UhQ0HXM4buStD/S3mc/BzX3CuM9OmhyQpmtYCvoYdl5ris6TI0ZqH355Ymqg==",
+ "dev": true
+ },
+ "node_modules/source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-js": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
+ "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
+ "dev": true,
+ "engines": {
+ "node": ">=0.10.0"
+ }
+ },
+ "node_modules/source-map-support": {
+ "version": "0.5.21",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
+ "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
+ "dev": true,
+ "dependencies": {
+ "buffer-from": "^1.0.0",
+ "source-map": "^0.6.0"
+ }
+ },
+ "node_modules/supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "optional": true,
+ "dependencies": {
+ "has-flag": "^3.0.0"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/supports-preserve-symlinks-flag": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
+ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
+ "dev": true,
+ "engines": {
+ "node": ">= 0.4"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/ljharb"
+ }
+ },
+ "node_modules/tabbable": {
+ "version": "6.1.2",
+ "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.1.2.tgz",
+ "integrity": "sha512-qCN98uP7i9z0fIS4amQ5zbGBOq+OSigYeGvPy7NDk8Y9yncqDZ9pRPgfsc2PJIVM9RrJj7GIfuRgmjoUU9zTHQ==",
+ "dev": true
+ },
+ "node_modules/tapable": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
+ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=6"
+ }
+ },
+ "node_modules/terser": {
+ "version": "5.18.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-5.18.0.tgz",
+ "integrity": "sha512-pdL757Ig5a0I+owA42l6tIuEycRuM7FPY4n62h44mRLRfnOxJkkOHd6i89dOpwZlpF6JXBwaAHF6yWzFrt+QyA==",
+ "dev": true,
+ "dependencies": {
+ "@jridgewell/source-map": "^0.3.3",
+ "acorn": "^8.8.2",
+ "commander": "^2.20.0",
+ "source-map-support": "~0.5.20"
+ },
+ "bin": {
+ "terser": "bin/terser"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
+ "node_modules/terser-webpack-plugin": {
+ "version": "5.3.9",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.9.tgz",
+ "integrity": "sha512-ZuXsqE07EcggTWQjXUj+Aot/OMcD0bMKGgF63f7UxYcu5/AJF53aIpK1YoP5xR9l6s/Hy2b+t1AM0bLNPRuhwA==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@jridgewell/trace-mapping": "^0.3.17",
+ "jest-worker": "^27.4.5",
+ "schema-utils": "^3.1.1",
+ "serialize-javascript": "^6.0.1",
+ "terser": "^5.16.8"
+ },
+ "engines": {
+ "node": ">= 10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependencies": {
+ "webpack": "^5.1.0"
+ },
+ "peerDependenciesMeta": {
+ "@swc/core": {
+ "optional": true
+ },
+ "esbuild": {
+ "optional": true
+ },
+ "uglify-js": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/to-regex-range": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
+ "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
+ "dev": true,
+ "dependencies": {
+ "is-number": "^7.0.0"
+ },
+ "engines": {
+ "node": ">=8.0"
+ }
+ },
+ "node_modules/tslib": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz",
+ "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==",
+ "dev": true
+ },
+ "node_modules/typescript": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.3.tgz",
+ "integrity": "sha512-XH627E9vkeqhlZFQuL+UsyAXEnibT0kWR2FWONlr4sTjvxyJYnyefgrkyECLzM5NenmKzRAy2rR/OlYLA1HkZw==",
+ "dev": true,
+ "bin": {
+ "tsc": "bin/tsc",
+ "tsserver": "bin/tsserver"
+ },
+ "engines": {
+ "node": ">=14.17"
+ }
+ },
+ "node_modules/ua-parser-js": {
+ "version": "1.0.35",
+ "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-1.0.35.tgz",
+ "integrity": "sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/ua-parser-js"
+ },
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/faisalman"
+ }
+ ],
+ "engines": {
+ "node": "*"
+ }
+ },
+ "node_modules/universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
+ "dev": true,
+ "engines": {
+ "node": ">= 4.0.0"
+ }
+ },
+ "node_modules/update-browserslist-db": {
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
+ "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
+ "dev": true,
+ "funding": [
+ {
+ "type": "opencollective",
+ "url": "https://opencollective.com/browserslist"
+ },
+ {
+ "type": "tidelift",
+ "url": "https://tidelift.com/funding/github/npm/browserslist"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/ai"
+ }
+ ],
+ "dependencies": {
+ "escalade": "^3.1.1",
+ "picocolors": "^1.0.0"
+ },
+ "bin": {
+ "update-browserslist-db": "cli.js"
+ },
+ "peerDependencies": {
+ "browserslist": ">= 4.21.0"
+ }
+ },
+ "node_modules/uri-js": {
+ "version": "4.4.1",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
+ "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "node_modules/vite": {
+ "version": "4.3.9",
+ "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz",
+ "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==",
+ "dev": true,
+ "dependencies": {
+ "esbuild": "^0.17.5",
+ "postcss": "^8.4.23",
+ "rollup": "^3.21.0"
+ },
+ "bin": {
+ "vite": "bin/vite.js"
+ },
+ "engines": {
+ "node": "^14.18.0 || >=16.0.0"
+ },
+ "optionalDependencies": {
+ "fsevents": "~2.3.2"
+ },
+ "peerDependencies": {
+ "@types/node": ">= 14",
+ "less": "*",
+ "sass": "*",
+ "stylus": "*",
+ "sugarss": "*",
+ "terser": "^5.4.0"
+ },
+ "peerDependenciesMeta": {
+ "@types/node": {
+ "optional": true
+ },
+ "less": {
+ "optional": true
+ },
+ "sass": {
+ "optional": true
+ },
+ "stylus": {
+ "optional": true
+ },
+ "sugarss": {
+ "optional": true
+ },
+ "terser": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vitepress": {
+ "version": "1.0.0-beta.2",
+ "resolved": "https://registry.npmjs.org/vitepress/-/vitepress-1.0.0-beta.2.tgz",
+ "integrity": "sha512-DBXYjtYbm3W1IPPJ2TiCaK/XK+o/2XmL2+jslOGKm+txcbmG0kbeB+vadC5tCUZA9NdA+9Ywj3M4548c7t/SDg==",
+ "dev": true,
+ "dependencies": {
+ "@docsearch/css": "^3.5.0",
+ "@docsearch/js": "^3.5.0",
+ "@vitejs/plugin-vue": "^4.2.3",
+ "@vue/devtools-api": "^6.5.0",
+ "@vueuse/core": "^10.1.2",
+ "@vueuse/integrations": "^10.1.2",
+ "body-scroll-lock": "4.0.0-beta.0",
+ "focus-trap": "^7.4.3",
+ "mark.js": "8.11.1",
+ "minisearch": "^6.1.0",
+ "shiki": "^0.14.2",
+ "vite": "^4.3.9",
+ "vue": "^3.3.4"
+ },
+ "bin": {
+ "vitepress": "bin/vitepress.js"
+ }
+ },
+ "node_modules/vscode-oniguruma": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz",
+ "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==",
+ "dev": true
+ },
+ "node_modules/vscode-textmate": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz",
+ "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==",
+ "dev": true
+ },
+ "node_modules/vue": {
+ "version": "3.3.4",
+ "resolved": "https://registry.npmjs.org/vue/-/vue-3.3.4.tgz",
+ "integrity": "sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==",
+ "dev": true,
+ "dependencies": {
+ "@vue/compiler-dom": "3.3.4",
+ "@vue/compiler-sfc": "3.3.4",
+ "@vue/runtime-dom": "3.3.4",
+ "@vue/server-renderer": "3.3.4",
+ "@vue/shared": "3.3.4"
+ }
+ },
+ "node_modules/vue-loader": {
+ "version": "17.2.2",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-17.2.2.tgz",
+ "integrity": "sha512-aqNvKJvnz2A/6VWeJZodAo8XLoAlVwBv+2Z6dama+LHsAF+P/xijQ+OfWrxIs0wcGSJduvdzvTuATzXbNKkpiw==",
+ "dev": true,
+ "dependencies": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "watchpack": "^2.4.0"
+ },
+ "peerDependencies": {
+ "webpack": "^4.1.0 || ^5.0.0-0"
+ },
+ "peerDependenciesMeta": {
+ "@vue/compiler-sfc": {
+ "optional": true
+ },
+ "vue": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/vue-loader/node_modules/ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "dependencies": {
+ "color-convert": "^2.0.1"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/ansi-styles?sponsor=1"
+ }
+ },
+ "node_modules/vue-loader/node_modules/chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "dependencies": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ },
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/chalk/chalk?sponsor=1"
+ }
+ },
+ "node_modules/vue-loader/node_modules/color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "dependencies": {
+ "color-name": "~1.1.4"
+ },
+ "engines": {
+ "node": ">=7.0.0"
+ }
+ },
+ "node_modules/vue-loader/node_modules/color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "node_modules/vue-loader/node_modules/has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/vue-loader/node_modules/supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "dependencies": {
+ "has-flag": "^4.0.0"
+ },
+ "engines": {
+ "node": ">=8"
+ }
+ },
+ "node_modules/watchpack": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz",
+ "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==",
+ "dev": true,
+ "dependencies": {
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.1.2"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/webpack": {
+ "version": "5.86.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz",
+ "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==",
+ "dev": true,
+ "peer": true,
+ "dependencies": {
+ "@types/eslint-scope": "^3.7.3",
+ "@types/estree": "^1.0.0",
+ "@webassemblyjs/ast": "^1.11.5",
+ "@webassemblyjs/wasm-edit": "^1.11.5",
+ "@webassemblyjs/wasm-parser": "^1.11.5",
+ "acorn": "^8.7.1",
+ "acorn-import-assertions": "^1.9.0",
+ "browserslist": "^4.14.5",
+ "chrome-trace-event": "^1.0.2",
+ "enhanced-resolve": "^5.14.1",
+ "es-module-lexer": "^1.2.1",
+ "eslint-scope": "5.1.1",
+ "events": "^3.2.0",
+ "glob-to-regexp": "^0.4.1",
+ "graceful-fs": "^4.2.9",
+ "json-parse-even-better-errors": "^2.3.1",
+ "loader-runner": "^4.2.0",
+ "mime-types": "^2.1.27",
+ "neo-async": "^2.6.2",
+ "schema-utils": "^3.1.2",
+ "tapable": "^2.1.1",
+ "terser-webpack-plugin": "^5.3.7",
+ "watchpack": "^2.4.0",
+ "webpack-sources": "^3.2.3"
+ },
+ "bin": {
+ "webpack": "bin/webpack.js"
+ },
+ "engines": {
+ "node": ">=10.13.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/webpack"
+ },
+ "peerDependenciesMeta": {
+ "webpack-cli": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/webpack-sources": {
+ "version": "3.2.3",
+ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz",
+ "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==",
+ "dev": true,
+ "peer": true,
+ "engines": {
+ "node": ">=10.13.0"
+ }
+ },
+ "node_modules/wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
+ "dev": true
+ },
+ "node_modules/yallist": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
+ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
+ "dev": true
+ }
+ }
+}
diff --git a/package.json b/package.json
index 509af95..b7586e0 100644
--- a/package.json
+++ b/package.json
@@ -1,53 +1,38 @@
{
- "name": "plugins",
- "version": "0.0.0",
- "license": "MIT",
+ "name": "@vallemar/nativescript-vueuse",
+ "version": "0.0.16",
+ "description": "Collection of essential NativeScript-Vue Composition Utilities",
+ "main": "index.js",
+ "types": "index.d.ts",
"scripts": {
- "postinstall": "husky install && npx ts-patch install && patch-package",
- "setup": "npx rimraf node_modules package-lock.json dist tmp yarn.lock && yarn config set ignore-engines true && ns package-manager set npm && yarn",
- "start": "nps",
- "add": "nx g @nativescript/plugin-tools:add-package",
- "add-angular": "nx g @nativescript/plugin-tools:add-angular",
- "config": "nx g @nativescript/plugin-tools:config",
- "publish-packages": "nx g @nativescript/plugin-tools:publish",
- "sync-packages-with-demos": "nx g @nativescript/plugin-tools:sync-packages-with-demos",
- "remove-package": "nx g @nativescript/plugin-tools:remove-package",
- "add-demo": "nx g @nativescript/plugin-tools:add-demo",
- "ts-vue": "cd packages/vue && npx tsc --watch",
- "build:all": "nx run-many --target=build.all --all --verbose --skip-nx-cache && node scripts/copy-packages.ts",
- "postbuild": "node scripts/copy-packages.ts",
- "build:vue": "nx run-many --target=vue ",
- "demo:vue:android": "npx nx run demo-vue:android",
- "demo:vue:ios": "npx nx run demo-vue:ios",
- "docs:dev": "vitepress dev packages/vue",
- "docs:build": "vitepress build packages/vue ",
- "docs:preview": "vitepress preview packages/vue"
+ "build": "rollup -c --bundleConfigAsCjs && tsc",
+ "watch": "rollup -c --watch --bundleConfigAsCjs && tsc -w",
+ "docs:dev": "vitepress dev packages",
+ "docs:build": "vitepress build packages",
+ "docs:preview": "vitepress preview packages",
+ "deploy": "npm publish --access public",
+ "clean": "rm -R publish && rm -R dist"
},
- "workspaces": [
- "/packages/*",
- "/apps/*"
- ],
- "private": true,
+ "author": "Juan de Dios Martínez Vallejo",
+ "license": "MIT",
"devDependencies": {
- "@nativescript-use/vue": "^0.0.5",
- "@nativescript/core": "~8.9.0",
- "@nativescript/plugin-tools": "5.5.1",
- "@nativescript/tailwind": "^2.0.1",
- "@nativescript/types": "~8.9.0",
- "@nativescript/webpack": "^5.0.23",
- "autoprefixer": "^10.4.14",
- "husky": "^8.0.0",
+ "@nativescript/core": "^8.5.3",
+ "@nativescript/types": "^8.5.0",
+ "@rollup/plugin-node-resolve": "^15.1.0",
+ "@rollup/plugin-terser": "^0.4.3",
"nativescript-vue": "3.0.0-beta.8",
- "ng-packagr": "^19.2.0",
- "patch-package": "~6.4.0",
- "postcss": "^8.4.24",
- "tailwindcss": "^3.3.2",
- "typescript": "~5.6.0",
- "vitepress": "^1.6.3"
+ "require-from-url": "^3.1.3",
+ "rollup": "^3.25.1",
+ "rollup-plugin-copy": "^3.4.0",
+ "rollup-plugin-dts": "^5.3.0",
+ "rollup-plugin-ts": "^3.2.0",
+ "typescript": "^5.1.3",
+ "vitepress": "^1.0.0-beta.1"
},
- "lint-staged": {
- "**/*.{js,ts,scss,json,html}": [
- "npx prettier --write"
- ]
+ "nativescript": {
+ "platforms": {
+ "android": "6.0.0",
+ "ios": "6.0.0"
+ }
}
}
diff --git a/packages/.gitkeep b/packages/.gitkeep
deleted file mode 100644
index e69de29..0000000
diff --git a/packages/.vitepress/cache/deps/_metadata.json b/packages/.vitepress/cache/deps/_metadata.json
new file mode 100644
index 0000000..dbc1cf6
--- /dev/null
+++ b/packages/.vitepress/cache/deps/_metadata.json
@@ -0,0 +1,13 @@
+{
+ "hash": "9d1e0f17",
+ "browserHash": "2e92e59d",
+ "optimized": {
+ "vue": {
+ "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js",
+ "file": "vue.js",
+ "fileHash": "726b10e5",
+ "needsInterop": false
+ }
+ },
+ "chunks": {}
+}
\ No newline at end of file
diff --git a/packages/.vitepress/cache/deps/package.json b/packages/.vitepress/cache/deps/package.json
new file mode 100644
index 0000000..3dbc1ca
--- /dev/null
+++ b/packages/.vitepress/cache/deps/package.json
@@ -0,0 +1,3 @@
+{
+ "type": "module"
+}
diff --git a/packages/.vitepress/cache/deps/vue.js.map b/packages/.vitepress/cache/deps/vue.js.map
new file mode 100644
index 0000000..a8ff6de
--- /dev/null
+++ b/packages/.vitepress/cache/deps/vue.js.map
@@ -0,0 +1,7 @@
+{
+ "version": 3,
+ "sources": ["../../../../node_modules/@vue/shared/dist/shared.esm-bundler.js", "../../../../node_modules/@vue/reactivity/dist/reactivity.esm-bundler.js", "../../../../node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js", "../../../../node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js", "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js"],
+ "sourcesContent": ["function makeMap(str, expectsLowerCase) {\n const map = /* @__PURE__ */ Object.create(null);\n const list = str.split(\",\");\n for (let i = 0; i < list.length; i++) {\n map[list[i]] = true;\n }\n return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];\n}\n\nconst EMPTY_OBJ = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze({}) : {};\nconst EMPTY_ARR = !!(process.env.NODE_ENV !== \"production\") ? Object.freeze([]) : [];\nconst NOOP = () => {\n};\nconst NO = () => false;\nconst onRE = /^on[^a-z]/;\nconst isOn = (key) => onRE.test(key);\nconst isModelListener = (key) => key.startsWith(\"onUpdate:\");\nconst extend = Object.assign;\nconst remove = (arr, el) => {\n const i = arr.indexOf(el);\n if (i > -1) {\n arr.splice(i, 1);\n }\n};\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nconst hasOwn = (val, key) => hasOwnProperty.call(val, key);\nconst isArray = Array.isArray;\nconst isMap = (val) => toTypeString(val) === \"[object Map]\";\nconst isSet = (val) => toTypeString(val) === \"[object Set]\";\nconst isDate = (val) => toTypeString(val) === \"[object Date]\";\nconst isRegExp = (val) => toTypeString(val) === \"[object RegExp]\";\nconst isFunction = (val) => typeof val === \"function\";\nconst isString = (val) => typeof val === \"string\";\nconst isSymbol = (val) => typeof val === \"symbol\";\nconst isObject = (val) => val !== null && typeof val === \"object\";\nconst isPromise = (val) => {\n return isObject(val) && isFunction(val.then) && isFunction(val.catch);\n};\nconst objectToString = Object.prototype.toString;\nconst toTypeString = (value) => objectToString.call(value);\nconst toRawType = (value) => {\n return toTypeString(value).slice(8, -1);\n};\nconst isPlainObject = (val) => toTypeString(val) === \"[object Object]\";\nconst isIntegerKey = (key) => isString(key) && key !== \"NaN\" && key[0] !== \"-\" && \"\" + parseInt(key, 10) === key;\nconst isReservedProp = /* @__PURE__ */ makeMap(\n // the leading comma is intentional so empty string \"\" is also included\n \",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted\"\n);\nconst isBuiltInDirective = /* @__PURE__ */ makeMap(\n \"bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo\"\n);\nconst cacheStringFunction = (fn) => {\n const cache = /* @__PURE__ */ Object.create(null);\n return (str) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n };\n};\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction(\n (str) => str.replace(hyphenateRE, \"-$1\").toLowerCase()\n);\nconst capitalize = cacheStringFunction(\n (str) => str.charAt(0).toUpperCase() + str.slice(1)\n);\nconst toHandlerKey = cacheStringFunction(\n (str) => str ? `on${capitalize(str)}` : ``\n);\nconst hasChanged = (value, oldValue) => !Object.is(value, oldValue);\nconst invokeArrayFns = (fns, arg) => {\n for (let i = 0; i < fns.length; i++) {\n fns[i](arg);\n }\n};\nconst def = (obj, key, value) => {\n Object.defineProperty(obj, key, {\n configurable: true,\n enumerable: false,\n value\n });\n};\nconst looseToNumber = (val) => {\n const n = parseFloat(val);\n return isNaN(n) ? val : n;\n};\nconst toNumber = (val) => {\n const n = isString(val) ? Number(val) : NaN;\n return isNaN(n) ? val : n;\n};\nlet _globalThis;\nconst getGlobalThis = () => {\n return _globalThis || (_globalThis = typeof globalThis !== \"undefined\" ? globalThis : typeof self !== \"undefined\" ? self : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : {});\n};\nconst identRE = /^[_$a-zA-Z\\xA0-\\uFFFF][_$a-zA-Z0-9\\xA0-\\uFFFF]*$/;\nfunction genPropsAccessExp(name) {\n return identRE.test(name) ? `__props.${name}` : `__props[${JSON.stringify(name)}]`;\n}\n\nconst PatchFlagNames = {\n [1]: `TEXT`,\n [2]: `CLASS`,\n [4]: `STYLE`,\n [8]: `PROPS`,\n [16]: `FULL_PROPS`,\n [32]: `HYDRATE_EVENTS`,\n [64]: `STABLE_FRAGMENT`,\n [128]: `KEYED_FRAGMENT`,\n [256]: `UNKEYED_FRAGMENT`,\n [512]: `NEED_PATCH`,\n [1024]: `DYNAMIC_SLOTS`,\n [2048]: `DEV_ROOT_FRAGMENT`,\n [-1]: `HOISTED`,\n [-2]: `BAIL`\n};\n\nconst slotFlagsText = {\n [1]: \"STABLE\",\n [2]: \"DYNAMIC\",\n [3]: \"FORWARDED\"\n};\n\nconst GLOBALS_WHITE_LISTED = \"Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console\";\nconst isGloballyWhitelisted = /* @__PURE__ */ makeMap(GLOBALS_WHITE_LISTED);\n\nconst range = 2;\nfunction generateCodeFrame(source, start = 0, end = source.length) {\n let lines = source.split(/(\\r?\\n)/);\n const newlineSequences = lines.filter((_, idx) => idx % 2 === 1);\n lines = lines.filter((_, idx) => idx % 2 === 0);\n let count = 0;\n const res = [];\n for (let i = 0; i < lines.length; i++) {\n count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0);\n if (count >= start) {\n for (let j = i - range; j <= i + range || end > count; j++) {\n if (j < 0 || j >= lines.length)\n continue;\n const line = j + 1;\n res.push(\n `${line}${\" \".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}`\n );\n const lineLength = lines[j].length;\n const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0;\n if (j === i) {\n const pad = start - (count - (lineLength + newLineSeqLength));\n const length = Math.max(\n 1,\n end > count ? lineLength - pad : end - start\n );\n res.push(` | ` + \" \".repeat(pad) + \"^\".repeat(length));\n } else if (j > i) {\n if (end > count) {\n const length = Math.max(Math.min(end - count, lineLength), 1);\n res.push(` | ` + \"^\".repeat(length));\n }\n count += lineLength + newLineSeqLength;\n }\n }\n break;\n }\n }\n return res.join(\"\\n\");\n}\n\nfunction normalizeStyle(value) {\n if (isArray(value)) {\n const res = {};\n for (let i = 0; i < value.length; i++) {\n const item = value[i];\n const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);\n if (normalized) {\n for (const key in normalized) {\n res[key] = normalized[key];\n }\n }\n }\n return res;\n } else if (isString(value)) {\n return value;\n } else if (isObject(value)) {\n return value;\n }\n}\nconst listDelimiterRE = /;(?![^(]*\\))/g;\nconst propertyDelimiterRE = /:([^]+)/;\nconst styleCommentRE = /\\/\\*[^]*?\\*\\//g;\nfunction parseStringStyle(cssText) {\n const ret = {};\n cssText.replace(styleCommentRE, \"\").split(listDelimiterRE).forEach((item) => {\n if (item) {\n const tmp = item.split(propertyDelimiterRE);\n tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());\n }\n });\n return ret;\n}\nfunction stringifyStyle(styles) {\n let ret = \"\";\n if (!styles || isString(styles)) {\n return ret;\n }\n for (const key in styles) {\n const value = styles[key];\n const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key);\n if (isString(value) || typeof value === \"number\") {\n ret += `${normalizedKey}:${value};`;\n }\n }\n return ret;\n}\nfunction normalizeClass(value) {\n let res = \"\";\n if (isString(value)) {\n res = value;\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n const normalized = normalizeClass(value[i]);\n if (normalized) {\n res += normalized + \" \";\n }\n }\n } else if (isObject(value)) {\n for (const name in value) {\n if (value[name]) {\n res += name + \" \";\n }\n }\n }\n return res.trim();\n}\nfunction normalizeProps(props) {\n if (!props)\n return null;\n let { class: klass, style } = props;\n if (klass && !isString(klass)) {\n props.class = normalizeClass(klass);\n }\n if (style) {\n props.style = normalizeStyle(style);\n }\n return props;\n}\n\nconst HTML_TAGS = \"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot\";\nconst SVG_TAGS = \"svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view\";\nconst VOID_TAGS = \"area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr\";\nconst isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS);\nconst isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS);\nconst isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS);\n\nconst specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;\nconst isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);\nconst isBooleanAttr = /* @__PURE__ */ makeMap(\n specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected`\n);\nfunction includeBooleanAttr(value) {\n return !!value || value === \"\";\n}\nconst unsafeAttrCharRE = /[>/=\"'\\u0009\\u000a\\u000c\\u0020]/;\nconst attrValidationCache = {};\nfunction isSSRSafeAttrName(name) {\n if (attrValidationCache.hasOwnProperty(name)) {\n return attrValidationCache[name];\n }\n const isUnsafe = unsafeAttrCharRE.test(name);\n if (isUnsafe) {\n console.error(`unsafe attribute name: ${name}`);\n }\n return attrValidationCache[name] = !isUnsafe;\n}\nconst propsToAttrMap = {\n acceptCharset: \"accept-charset\",\n className: \"class\",\n htmlFor: \"for\",\n httpEquiv: \"http-equiv\"\n};\nconst isKnownHtmlAttr = /* @__PURE__ */ makeMap(\n `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap`\n);\nconst isKnownSvgAttr = /* @__PURE__ */ makeMap(\n `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan`\n);\n\nconst escapeRE = /[\"'&<>]/;\nfunction escapeHtml(string) {\n const str = \"\" + string;\n const match = escapeRE.exec(str);\n if (!match) {\n return str;\n }\n let html = \"\";\n let escaped;\n let index;\n let lastIndex = 0;\n for (index = match.index; index < str.length; index++) {\n switch (str.charCodeAt(index)) {\n case 34:\n escaped = \""\";\n break;\n case 38:\n escaped = \"&\";\n break;\n case 39:\n escaped = \"'\";\n break;\n case 60:\n escaped = \"<\";\n break;\n case 62:\n escaped = \">\";\n break;\n default:\n continue;\n }\n if (lastIndex !== index) {\n html += str.slice(lastIndex, index);\n }\n lastIndex = index + 1;\n html += escaped;\n }\n return lastIndex !== index ? html + str.slice(lastIndex, index) : html;\n}\nconst commentStripRE = /^-?>||--!>| looseEqual(item, val));\n}\n\nconst toDisplayString = (val) => {\n return isString(val) ? val : val == null ? \"\" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);\n};\nconst replacer = (_key, val) => {\n if (val && val.__v_isRef) {\n return replacer(_key, val.value);\n } else if (isMap(val)) {\n return {\n [`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => {\n entries[`${key} =>`] = val2;\n return entries;\n }, {})\n };\n } else if (isSet(val)) {\n return {\n [`Set(${val.size})`]: [...val.values()]\n };\n } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) {\n return String(val);\n }\n return val;\n};\n\nexport { EMPTY_ARR, EMPTY_OBJ, NO, NOOP, PatchFlagNames, camelize, capitalize, def, escapeHtml, escapeHtmlComment, extend, genPropsAccessExp, generateCodeFrame, getGlobalThis, hasChanged, hasOwn, hyphenate, includeBooleanAttr, invokeArrayFns, isArray, isBooleanAttr, isBuiltInDirective, isDate, isFunction, isGloballyWhitelisted, isHTMLTag, isIntegerKey, isKnownHtmlAttr, isKnownSvgAttr, isMap, isModelListener, isObject, isOn, isPlainObject, isPromise, isRegExp, isReservedProp, isSSRSafeAttrName, isSVGTag, isSet, isSpecialBooleanAttr, isString, isSymbol, isVoidTag, looseEqual, looseIndexOf, looseToNumber, makeMap, normalizeClass, normalizeProps, normalizeStyle, objectToString, parseStringStyle, propsToAttrMap, remove, slotFlagsText, stringifyStyle, toDisplayString, toHandlerKey, toNumber, toRawType, toTypeString };\n", "import { extend, isArray, isMap, isIntegerKey, hasOwn, isSymbol, isObject, hasChanged, makeMap, capitalize, toRawType, def, isFunction, NOOP } from '@vue/shared';\n\nfunction warn(msg, ...args) {\n console.warn(`[Vue warn] ${msg}`, ...args);\n}\n\nlet activeEffectScope;\nclass EffectScope {\n constructor(detached = false) {\n this.detached = detached;\n /**\n * @internal\n */\n this._active = true;\n /**\n * @internal\n */\n this.effects = [];\n /**\n * @internal\n */\n this.cleanups = [];\n this.parent = activeEffectScope;\n if (!detached && activeEffectScope) {\n this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(\n this\n ) - 1;\n }\n }\n get active() {\n return this._active;\n }\n run(fn) {\n if (this._active) {\n const currentEffectScope = activeEffectScope;\n try {\n activeEffectScope = this;\n return fn();\n } finally {\n activeEffectScope = currentEffectScope;\n }\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`cannot run an inactive effect scope.`);\n }\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n on() {\n activeEffectScope = this;\n }\n /**\n * This should only be called on non-detached scopes\n * @internal\n */\n off() {\n activeEffectScope = this.parent;\n }\n stop(fromParent) {\n if (this._active) {\n let i, l;\n for (i = 0, l = this.effects.length; i < l; i++) {\n this.effects[i].stop();\n }\n for (i = 0, l = this.cleanups.length; i < l; i++) {\n this.cleanups[i]();\n }\n if (this.scopes) {\n for (i = 0, l = this.scopes.length; i < l; i++) {\n this.scopes[i].stop(true);\n }\n }\n if (!this.detached && this.parent && !fromParent) {\n const last = this.parent.scopes.pop();\n if (last && last !== this) {\n this.parent.scopes[this.index] = last;\n last.index = this.index;\n }\n }\n this.parent = void 0;\n this._active = false;\n }\n }\n}\nfunction effectScope(detached) {\n return new EffectScope(detached);\n}\nfunction recordEffectScope(effect, scope = activeEffectScope) {\n if (scope && scope.active) {\n scope.effects.push(effect);\n }\n}\nfunction getCurrentScope() {\n return activeEffectScope;\n}\nfunction onScopeDispose(fn) {\n if (activeEffectScope) {\n activeEffectScope.cleanups.push(fn);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `onScopeDispose() is called when there is no active effect scope to be associated with.`\n );\n }\n}\n\nconst createDep = (effects) => {\n const dep = new Set(effects);\n dep.w = 0;\n dep.n = 0;\n return dep;\n};\nconst wasTracked = (dep) => (dep.w & trackOpBit) > 0;\nconst newTracked = (dep) => (dep.n & trackOpBit) > 0;\nconst initDepMarkers = ({ deps }) => {\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].w |= trackOpBit;\n }\n }\n};\nconst finalizeDepMarkers = (effect) => {\n const { deps } = effect;\n if (deps.length) {\n let ptr = 0;\n for (let i = 0; i < deps.length; i++) {\n const dep = deps[i];\n if (wasTracked(dep) && !newTracked(dep)) {\n dep.delete(effect);\n } else {\n deps[ptr++] = dep;\n }\n dep.w &= ~trackOpBit;\n dep.n &= ~trackOpBit;\n }\n deps.length = ptr;\n }\n};\n\nconst targetMap = /* @__PURE__ */ new WeakMap();\nlet effectTrackDepth = 0;\nlet trackOpBit = 1;\nconst maxMarkerBits = 30;\nlet activeEffect;\nconst ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"iterate\" : \"\");\nconst MAP_KEY_ITERATE_KEY = Symbol(!!(process.env.NODE_ENV !== \"production\") ? \"Map key iterate\" : \"\");\nclass ReactiveEffect {\n constructor(fn, scheduler = null, scope) {\n this.fn = fn;\n this.scheduler = scheduler;\n this.active = true;\n this.deps = [];\n this.parent = void 0;\n recordEffectScope(this, scope);\n }\n run() {\n if (!this.active) {\n return this.fn();\n }\n let parent = activeEffect;\n let lastShouldTrack = shouldTrack;\n while (parent) {\n if (parent === this) {\n return;\n }\n parent = parent.parent;\n }\n try {\n this.parent = activeEffect;\n activeEffect = this;\n shouldTrack = true;\n trackOpBit = 1 << ++effectTrackDepth;\n if (effectTrackDepth <= maxMarkerBits) {\n initDepMarkers(this);\n } else {\n cleanupEffect(this);\n }\n return this.fn();\n } finally {\n if (effectTrackDepth <= maxMarkerBits) {\n finalizeDepMarkers(this);\n }\n trackOpBit = 1 << --effectTrackDepth;\n activeEffect = this.parent;\n shouldTrack = lastShouldTrack;\n this.parent = void 0;\n if (this.deferStop) {\n this.stop();\n }\n }\n }\n stop() {\n if (activeEffect === this) {\n this.deferStop = true;\n } else if (this.active) {\n cleanupEffect(this);\n if (this.onStop) {\n this.onStop();\n }\n this.active = false;\n }\n }\n}\nfunction cleanupEffect(effect2) {\n const { deps } = effect2;\n if (deps.length) {\n for (let i = 0; i < deps.length; i++) {\n deps[i].delete(effect2);\n }\n deps.length = 0;\n }\n}\nfunction effect(fn, options) {\n if (fn.effect) {\n fn = fn.effect.fn;\n }\n const _effect = new ReactiveEffect(fn);\n if (options) {\n extend(_effect, options);\n if (options.scope)\n recordEffectScope(_effect, options.scope);\n }\n if (!options || !options.lazy) {\n _effect.run();\n }\n const runner = _effect.run.bind(_effect);\n runner.effect = _effect;\n return runner;\n}\nfunction stop(runner) {\n runner.effect.stop();\n}\nlet shouldTrack = true;\nconst trackStack = [];\nfunction pauseTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = false;\n}\nfunction enableTracking() {\n trackStack.push(shouldTrack);\n shouldTrack = true;\n}\nfunction resetTracking() {\n const last = trackStack.pop();\n shouldTrack = last === void 0 ? true : last;\n}\nfunction track(target, type, key) {\n if (shouldTrack && activeEffect) {\n let depsMap = targetMap.get(target);\n if (!depsMap) {\n targetMap.set(target, depsMap = /* @__PURE__ */ new Map());\n }\n let dep = depsMap.get(key);\n if (!dep) {\n depsMap.set(key, dep = createDep());\n }\n const eventInfo = !!(process.env.NODE_ENV !== \"production\") ? { effect: activeEffect, target, type, key } : void 0;\n trackEffects(dep, eventInfo);\n }\n}\nfunction trackEffects(dep, debuggerEventExtraInfo) {\n let shouldTrack2 = false;\n if (effectTrackDepth <= maxMarkerBits) {\n if (!newTracked(dep)) {\n dep.n |= trackOpBit;\n shouldTrack2 = !wasTracked(dep);\n }\n } else {\n shouldTrack2 = !dep.has(activeEffect);\n }\n if (shouldTrack2) {\n dep.add(activeEffect);\n activeEffect.deps.push(dep);\n if (!!(process.env.NODE_ENV !== \"production\") && activeEffect.onTrack) {\n activeEffect.onTrack(\n extend(\n {\n effect: activeEffect\n },\n debuggerEventExtraInfo\n )\n );\n }\n }\n}\nfunction trigger(target, type, key, newValue, oldValue, oldTarget) {\n const depsMap = targetMap.get(target);\n if (!depsMap) {\n return;\n }\n let deps = [];\n if (type === \"clear\") {\n deps = [...depsMap.values()];\n } else if (key === \"length\" && isArray(target)) {\n const newLength = Number(newValue);\n depsMap.forEach((dep, key2) => {\n if (key2 === \"length\" || key2 >= newLength) {\n deps.push(dep);\n }\n });\n } else {\n if (key !== void 0) {\n deps.push(depsMap.get(key));\n }\n switch (type) {\n case \"add\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n } else if (isIntegerKey(key)) {\n deps.push(depsMap.get(\"length\"));\n }\n break;\n case \"delete\":\n if (!isArray(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n if (isMap(target)) {\n deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));\n }\n }\n break;\n case \"set\":\n if (isMap(target)) {\n deps.push(depsMap.get(ITERATE_KEY));\n }\n break;\n }\n }\n const eventInfo = !!(process.env.NODE_ENV !== \"production\") ? { target, type, key, newValue, oldValue, oldTarget } : void 0;\n if (deps.length === 1) {\n if (deps[0]) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n triggerEffects(deps[0], eventInfo);\n } else {\n triggerEffects(deps[0]);\n }\n }\n } else {\n const effects = [];\n for (const dep of deps) {\n if (dep) {\n effects.push(...dep);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n triggerEffects(createDep(effects), eventInfo);\n } else {\n triggerEffects(createDep(effects));\n }\n }\n}\nfunction triggerEffects(dep, debuggerEventExtraInfo) {\n const effects = isArray(dep) ? dep : [...dep];\n for (const effect2 of effects) {\n if (effect2.computed) {\n triggerEffect(effect2, debuggerEventExtraInfo);\n }\n }\n for (const effect2 of effects) {\n if (!effect2.computed) {\n triggerEffect(effect2, debuggerEventExtraInfo);\n }\n }\n}\nfunction triggerEffect(effect2, debuggerEventExtraInfo) {\n if (effect2 !== activeEffect || effect2.allowRecurse) {\n if (!!(process.env.NODE_ENV !== \"production\") && effect2.onTrigger) {\n effect2.onTrigger(extend({ effect: effect2 }, debuggerEventExtraInfo));\n }\n if (effect2.scheduler) {\n effect2.scheduler();\n } else {\n effect2.run();\n }\n }\n}\nfunction getDepFromReactive(object, key) {\n var _a;\n return (_a = targetMap.get(object)) == null ? void 0 : _a.get(key);\n}\n\nconst isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);\nconst builtInSymbols = new Set(\n /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== \"arguments\" && key !== \"caller\").map((key) => Symbol[key]).filter(isSymbol)\n);\nconst get$1 = /* @__PURE__ */ createGetter();\nconst shallowGet = /* @__PURE__ */ createGetter(false, true);\nconst readonlyGet = /* @__PURE__ */ createGetter(true);\nconst shallowReadonlyGet = /* @__PURE__ */ createGetter(true, true);\nconst arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();\nfunction createArrayInstrumentations() {\n const instrumentations = {};\n [\"includes\", \"indexOf\", \"lastIndexOf\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n const arr = toRaw(this);\n for (let i = 0, l = this.length; i < l; i++) {\n track(arr, \"get\", i + \"\");\n }\n const res = arr[key](...args);\n if (res === -1 || res === false) {\n return arr[key](...args.map(toRaw));\n } else {\n return res;\n }\n };\n });\n [\"push\", \"pop\", \"shift\", \"unshift\", \"splice\"].forEach((key) => {\n instrumentations[key] = function(...args) {\n pauseTracking();\n const res = toRaw(this)[key].apply(this, args);\n resetTracking();\n return res;\n };\n });\n return instrumentations;\n}\nfunction hasOwnProperty(key) {\n const obj = toRaw(this);\n track(obj, \"has\", key);\n return obj.hasOwnProperty(key);\n}\nfunction createGetter(isReadonly2 = false, shallow = false) {\n return function get2(target, key, receiver) {\n if (key === \"__v_isReactive\") {\n return !isReadonly2;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly2;\n } else if (key === \"__v_isShallow\") {\n return shallow;\n } else if (key === \"__v_raw\" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {\n return target;\n }\n const targetIsArray = isArray(target);\n if (!isReadonly2) {\n if (targetIsArray && hasOwn(arrayInstrumentations, key)) {\n return Reflect.get(arrayInstrumentations, key, receiver);\n }\n if (key === \"hasOwnProperty\") {\n return hasOwnProperty;\n }\n }\n const res = Reflect.get(target, key, receiver);\n if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {\n return res;\n }\n if (!isReadonly2) {\n track(target, \"get\", key);\n }\n if (shallow) {\n return res;\n }\n if (isRef(res)) {\n return targetIsArray && isIntegerKey(key) ? res : res.value;\n }\n if (isObject(res)) {\n return isReadonly2 ? readonly(res) : reactive(res);\n }\n return res;\n };\n}\nconst set$1 = /* @__PURE__ */ createSetter();\nconst shallowSet = /* @__PURE__ */ createSetter(true);\nfunction createSetter(shallow = false) {\n return function set2(target, key, value, receiver) {\n let oldValue = target[key];\n if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {\n return false;\n }\n if (!shallow) {\n if (!isShallow(value) && !isReadonly(value)) {\n oldValue = toRaw(oldValue);\n value = toRaw(value);\n }\n if (!isArray(target) && isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n }\n }\n const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);\n const result = Reflect.set(target, key, value, receiver);\n if (target === toRaw(receiver)) {\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n }\n return result;\n };\n}\nfunction deleteProperty(target, key) {\n const hadKey = hasOwn(target, key);\n const oldValue = target[key];\n const result = Reflect.deleteProperty(target, key);\n if (result && hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction has$1(target, key) {\n const result = Reflect.has(target, key);\n if (!isSymbol(key) || !builtInSymbols.has(key)) {\n track(target, \"has\", key);\n }\n return result;\n}\nfunction ownKeys(target) {\n track(target, \"iterate\", isArray(target) ? \"length\" : ITERATE_KEY);\n return Reflect.ownKeys(target);\n}\nconst mutableHandlers = {\n get: get$1,\n set: set$1,\n deleteProperty,\n has: has$1,\n ownKeys\n};\nconst readonlyHandlers = {\n get: readonlyGet,\n set(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Set operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n },\n deleteProperty(target, key) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `Delete operation on key \"${String(key)}\" failed: target is readonly.`,\n target\n );\n }\n return true;\n }\n};\nconst shallowReactiveHandlers = /* @__PURE__ */ extend(\n {},\n mutableHandlers,\n {\n get: shallowGet,\n set: shallowSet\n }\n);\nconst shallowReadonlyHandlers = /* @__PURE__ */ extend(\n {},\n readonlyHandlers,\n {\n get: shallowReadonlyGet\n }\n);\n\nconst toShallow = (value) => value;\nconst getProto = (v) => Reflect.getPrototypeOf(v);\nfunction get(target, key, isReadonly = false, isShallow = false) {\n target = target[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"get\", key);\n }\n track(rawTarget, \"get\", rawKey);\n }\n const { has: has2 } = getProto(rawTarget);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n if (has2.call(rawTarget, key)) {\n return wrap(target.get(key));\n } else if (has2.call(rawTarget, rawKey)) {\n return wrap(target.get(rawKey));\n } else if (target !== rawTarget) {\n target.get(key);\n }\n}\nfunction has(key, isReadonly = false) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const rawKey = toRaw(key);\n if (!isReadonly) {\n if (key !== rawKey) {\n track(rawTarget, \"has\", key);\n }\n track(rawTarget, \"has\", rawKey);\n }\n return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);\n}\nfunction size(target, isReadonly = false) {\n target = target[\"__v_raw\"];\n !isReadonly && track(toRaw(target), \"iterate\", ITERATE_KEY);\n return Reflect.get(target, \"size\", target);\n}\nfunction add(value) {\n value = toRaw(value);\n const target = toRaw(this);\n const proto = getProto(target);\n const hadKey = proto.has.call(target, value);\n if (!hadKey) {\n target.add(value);\n trigger(target, \"add\", value, value);\n }\n return this;\n}\nfunction set(key, value) {\n value = toRaw(value);\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2.call(target, key);\n target.set(key, value);\n if (!hadKey) {\n trigger(target, \"add\", key, value);\n } else if (hasChanged(value, oldValue)) {\n trigger(target, \"set\", key, value, oldValue);\n }\n return this;\n}\nfunction deleteEntry(key) {\n const target = toRaw(this);\n const { has: has2, get: get2 } = getProto(target);\n let hadKey = has2.call(target, key);\n if (!hadKey) {\n key = toRaw(key);\n hadKey = has2.call(target, key);\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n checkIdentityKeys(target, has2, key);\n }\n const oldValue = get2 ? get2.call(target, key) : void 0;\n const result = target.delete(key);\n if (hadKey) {\n trigger(target, \"delete\", key, void 0, oldValue);\n }\n return result;\n}\nfunction clear() {\n const target = toRaw(this);\n const hadItems = target.size !== 0;\n const oldTarget = !!(process.env.NODE_ENV !== \"production\") ? isMap(target) ? new Map(target) : new Set(target) : void 0;\n const result = target.clear();\n if (hadItems) {\n trigger(target, \"clear\", void 0, void 0, oldTarget);\n }\n return result;\n}\nfunction createForEach(isReadonly, isShallow) {\n return function forEach(callback, thisArg) {\n const observed = this;\n const target = observed[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(rawTarget, \"iterate\", ITERATE_KEY);\n return target.forEach((value, key) => {\n return callback.call(thisArg, wrap(value), wrap(key), observed);\n });\n };\n}\nfunction createIterableMethod(method, isReadonly, isShallow) {\n return function(...args) {\n const target = this[\"__v_raw\"];\n const rawTarget = toRaw(target);\n const targetIsMap = isMap(rawTarget);\n const isPair = method === \"entries\" || method === Symbol.iterator && targetIsMap;\n const isKeyOnly = method === \"keys\" && targetIsMap;\n const innerIterator = target[method](...args);\n const wrap = isShallow ? toShallow : isReadonly ? toReadonly : toReactive;\n !isReadonly && track(\n rawTarget,\n \"iterate\",\n isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY\n );\n return {\n // iterator protocol\n next() {\n const { value, done } = innerIterator.next();\n return done ? { value, done } : {\n value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),\n done\n };\n },\n // iterable protocol\n [Symbol.iterator]() {\n return this;\n }\n };\n };\n}\nfunction createReadonlyMethod(type) {\n return function(...args) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const key = args[0] ? `on key \"${args[0]}\" ` : ``;\n console.warn(\n `${capitalize(type)} operation ${key}failed: target is readonly.`,\n toRaw(this)\n );\n }\n return type === \"delete\" ? false : this;\n };\n}\nfunction createInstrumentations() {\n const mutableInstrumentations2 = {\n get(key) {\n return get(this, key);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, false)\n };\n const shallowInstrumentations2 = {\n get(key) {\n return get(this, key, false, true);\n },\n get size() {\n return size(this);\n },\n has,\n add,\n set,\n delete: deleteEntry,\n clear,\n forEach: createForEach(false, true)\n };\n const readonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, false)\n };\n const shallowReadonlyInstrumentations2 = {\n get(key) {\n return get(this, key, true, true);\n },\n get size() {\n return size(this, true);\n },\n has(key) {\n return has.call(this, key, true);\n },\n add: createReadonlyMethod(\"add\"),\n set: createReadonlyMethod(\"set\"),\n delete: createReadonlyMethod(\"delete\"),\n clear: createReadonlyMethod(\"clear\"),\n forEach: createForEach(true, true)\n };\n const iteratorMethods = [\"keys\", \"values\", \"entries\", Symbol.iterator];\n iteratorMethods.forEach((method) => {\n mutableInstrumentations2[method] = createIterableMethod(\n method,\n false,\n false\n );\n readonlyInstrumentations2[method] = createIterableMethod(\n method,\n true,\n false\n );\n shallowInstrumentations2[method] = createIterableMethod(\n method,\n false,\n true\n );\n shallowReadonlyInstrumentations2[method] = createIterableMethod(\n method,\n true,\n true\n );\n });\n return [\n mutableInstrumentations2,\n readonlyInstrumentations2,\n shallowInstrumentations2,\n shallowReadonlyInstrumentations2\n ];\n}\nconst [\n mutableInstrumentations,\n readonlyInstrumentations,\n shallowInstrumentations,\n shallowReadonlyInstrumentations\n] = /* @__PURE__ */ createInstrumentations();\nfunction createInstrumentationGetter(isReadonly, shallow) {\n const instrumentations = shallow ? isReadonly ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly ? readonlyInstrumentations : mutableInstrumentations;\n return (target, key, receiver) => {\n if (key === \"__v_isReactive\") {\n return !isReadonly;\n } else if (key === \"__v_isReadonly\") {\n return isReadonly;\n } else if (key === \"__v_raw\") {\n return target;\n }\n return Reflect.get(\n hasOwn(instrumentations, key) && key in target ? instrumentations : target,\n key,\n receiver\n );\n };\n}\nconst mutableCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, false)\n};\nconst shallowCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(false, true)\n};\nconst readonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, false)\n};\nconst shallowReadonlyCollectionHandlers = {\n get: /* @__PURE__ */ createInstrumentationGetter(true, true)\n};\nfunction checkIdentityKeys(target, has2, key) {\n const rawKey = toRaw(key);\n if (rawKey !== key && has2.call(target, rawKey)) {\n const type = toRawType(target);\n console.warn(\n `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.`\n );\n }\n}\n\nconst reactiveMap = /* @__PURE__ */ new WeakMap();\nconst shallowReactiveMap = /* @__PURE__ */ new WeakMap();\nconst readonlyMap = /* @__PURE__ */ new WeakMap();\nconst shallowReadonlyMap = /* @__PURE__ */ new WeakMap();\nfunction targetTypeMap(rawType) {\n switch (rawType) {\n case \"Object\":\n case \"Array\":\n return 1 /* COMMON */;\n case \"Map\":\n case \"Set\":\n case \"WeakMap\":\n case \"WeakSet\":\n return 2 /* COLLECTION */;\n default:\n return 0 /* INVALID */;\n }\n}\nfunction getTargetType(value) {\n return value[\"__v_skip\"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value));\n}\nfunction reactive(target) {\n if (isReadonly(target)) {\n return target;\n }\n return createReactiveObject(\n target,\n false,\n mutableHandlers,\n mutableCollectionHandlers,\n reactiveMap\n );\n}\nfunction shallowReactive(target) {\n return createReactiveObject(\n target,\n false,\n shallowReactiveHandlers,\n shallowCollectionHandlers,\n shallowReactiveMap\n );\n}\nfunction readonly(target) {\n return createReactiveObject(\n target,\n true,\n readonlyHandlers,\n readonlyCollectionHandlers,\n readonlyMap\n );\n}\nfunction shallowReadonly(target) {\n return createReactiveObject(\n target,\n true,\n shallowReadonlyHandlers,\n shallowReadonlyCollectionHandlers,\n shallowReadonlyMap\n );\n}\nfunction createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {\n if (!isObject(target)) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n console.warn(`value cannot be made reactive: ${String(target)}`);\n }\n return target;\n }\n if (target[\"__v_raw\"] && !(isReadonly2 && target[\"__v_isReactive\"])) {\n return target;\n }\n const existingProxy = proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n const targetType = getTargetType(target);\n if (targetType === 0 /* INVALID */) {\n return target;\n }\n const proxy = new Proxy(\n target,\n targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers\n );\n proxyMap.set(target, proxy);\n return proxy;\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\"]);\n }\n return !!(value && value[\"__v_isReactive\"]);\n}\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\"]);\n}\nfunction isShallow(value) {\n return !!(value && value[\"__v_isShallow\"]);\n}\nfunction isProxy(value) {\n return isReactive(value) || isReadonly(value);\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\"];\n return raw ? toRaw(raw) : observed;\n}\nfunction markRaw(value) {\n def(value, \"__v_skip\", true);\n return value;\n}\nconst toReactive = (value) => isObject(value) ? reactive(value) : value;\nconst toReadonly = (value) => isObject(value) ? readonly(value) : value;\n\nfunction trackRefValue(ref2) {\n if (shouldTrack && activeEffect) {\n ref2 = toRaw(ref2);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n trackEffects(ref2.dep || (ref2.dep = createDep()), {\n target: ref2,\n type: \"get\",\n key: \"value\"\n });\n } else {\n trackEffects(ref2.dep || (ref2.dep = createDep()));\n }\n }\n}\nfunction triggerRefValue(ref2, newVal) {\n ref2 = toRaw(ref2);\n const dep = ref2.dep;\n if (dep) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n triggerEffects(dep, {\n target: ref2,\n type: \"set\",\n key: \"value\",\n newValue: newVal\n });\n } else {\n triggerEffects(dep);\n }\n }\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction ref(value) {\n return createRef(value, false);\n}\nfunction shallowRef(value) {\n return createRef(value, true);\n}\nfunction createRef(rawValue, shallow) {\n if (isRef(rawValue)) {\n return rawValue;\n }\n return new RefImpl(rawValue, shallow);\n}\nclass RefImpl {\n constructor(value, __v_isShallow) {\n this.__v_isShallow = __v_isShallow;\n this.dep = void 0;\n this.__v_isRef = true;\n this._rawValue = __v_isShallow ? value : toRaw(value);\n this._value = __v_isShallow ? value : toReactive(value);\n }\n get value() {\n trackRefValue(this);\n return this._value;\n }\n set value(newVal) {\n const useDirectValue = this.__v_isShallow || isShallow(newVal) || isReadonly(newVal);\n newVal = useDirectValue ? newVal : toRaw(newVal);\n if (hasChanged(newVal, this._rawValue)) {\n this._rawValue = newVal;\n this._value = useDirectValue ? newVal : toReactive(newVal);\n triggerRefValue(this, newVal);\n }\n }\n}\nfunction triggerRef(ref2) {\n triggerRefValue(ref2, !!(process.env.NODE_ENV !== \"production\") ? ref2.value : void 0);\n}\nfunction unref(ref2) {\n return isRef(ref2) ? ref2.value : ref2;\n}\nfunction toValue(source) {\n return isFunction(source) ? source() : unref(source);\n}\nconst shallowUnwrapHandlers = {\n get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),\n set: (target, key, value, receiver) => {\n const oldValue = target[key];\n if (isRef(oldValue) && !isRef(value)) {\n oldValue.value = value;\n return true;\n } else {\n return Reflect.set(target, key, value, receiver);\n }\n }\n};\nfunction proxyRefs(objectWithRefs) {\n return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);\n}\nclass CustomRefImpl {\n constructor(factory) {\n this.dep = void 0;\n this.__v_isRef = true;\n const { get, set } = factory(\n () => trackRefValue(this),\n () => triggerRefValue(this)\n );\n this._get = get;\n this._set = set;\n }\n get value() {\n return this._get();\n }\n set value(newVal) {\n this._set(newVal);\n }\n}\nfunction customRef(factory) {\n return new CustomRefImpl(factory);\n}\nfunction toRefs(object) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isProxy(object)) {\n console.warn(`toRefs() expects a reactive object but received a plain one.`);\n }\n const ret = isArray(object) ? new Array(object.length) : {};\n for (const key in object) {\n ret[key] = propertyToRef(object, key);\n }\n return ret;\n}\nclass ObjectRefImpl {\n constructor(_object, _key, _defaultValue) {\n this._object = _object;\n this._key = _key;\n this._defaultValue = _defaultValue;\n this.__v_isRef = true;\n }\n get value() {\n const val = this._object[this._key];\n return val === void 0 ? this._defaultValue : val;\n }\n set value(newVal) {\n this._object[this._key] = newVal;\n }\n get dep() {\n return getDepFromReactive(toRaw(this._object), this._key);\n }\n}\nclass GetterRefImpl {\n constructor(_getter) {\n this._getter = _getter;\n this.__v_isRef = true;\n this.__v_isReadonly = true;\n }\n get value() {\n return this._getter();\n }\n}\nfunction toRef(source, key, defaultValue) {\n if (isRef(source)) {\n return source;\n } else if (isFunction(source)) {\n return new GetterRefImpl(source);\n } else if (isObject(source) && arguments.length > 1) {\n return propertyToRef(source, key, defaultValue);\n } else {\n return ref(source);\n }\n}\nfunction propertyToRef(source, key, defaultValue) {\n const val = source[key];\n return isRef(val) ? val : new ObjectRefImpl(\n source,\n key,\n defaultValue\n );\n}\n\nclass ComputedRefImpl {\n constructor(getter, _setter, isReadonly, isSSR) {\n this._setter = _setter;\n this.dep = void 0;\n this.__v_isRef = true;\n this[\"__v_isReadonly\"] = false;\n this._dirty = true;\n this.effect = new ReactiveEffect(getter, () => {\n if (!this._dirty) {\n this._dirty = true;\n triggerRefValue(this);\n }\n });\n this.effect.computed = this;\n this.effect.active = this._cacheable = !isSSR;\n this[\"__v_isReadonly\"] = isReadonly;\n }\n get value() {\n const self = toRaw(this);\n trackRefValue(self);\n if (self._dirty || !self._cacheable) {\n self._dirty = false;\n self._value = self.effect.run();\n }\n return self._value;\n }\n set value(newValue) {\n this._setter(newValue);\n }\n}\nfunction computed(getterOrOptions, debugOptions, isSSR = false) {\n let getter;\n let setter;\n const onlyGetter = isFunction(getterOrOptions);\n if (onlyGetter) {\n getter = getterOrOptions;\n setter = !!(process.env.NODE_ENV !== \"production\") ? () => {\n console.warn(\"Write operation failed: computed value is readonly\");\n } : NOOP;\n } else {\n getter = getterOrOptions.get;\n setter = getterOrOptions.set;\n }\n const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);\n if (!!(process.env.NODE_ENV !== \"production\") && debugOptions && !isSSR) {\n cRef.effect.onTrack = debugOptions.onTrack;\n cRef.effect.onTrigger = debugOptions.onTrigger;\n }\n return cRef;\n}\n\nconst tick = /* @__PURE__ */ Promise.resolve();\nconst queue = [];\nlet queued = false;\nconst scheduler = (fn) => {\n queue.push(fn);\n if (!queued) {\n queued = true;\n tick.then(flush);\n }\n};\nconst flush = () => {\n for (let i = 0; i < queue.length; i++) {\n queue[i]();\n }\n queue.length = 0;\n queued = false;\n};\nclass DeferredComputedRefImpl {\n constructor(getter) {\n this.dep = void 0;\n this._dirty = true;\n this.__v_isRef = true;\n this[\"__v_isReadonly\"] = true;\n let compareTarget;\n let hasCompareTarget = false;\n let scheduled = false;\n this.effect = new ReactiveEffect(getter, (computedTrigger) => {\n if (this.dep) {\n if (computedTrigger) {\n compareTarget = this._value;\n hasCompareTarget = true;\n } else if (!scheduled) {\n const valueToCompare = hasCompareTarget ? compareTarget : this._value;\n scheduled = true;\n hasCompareTarget = false;\n scheduler(() => {\n if (this.effect.active && this._get() !== valueToCompare) {\n triggerRefValue(this);\n }\n scheduled = false;\n });\n }\n for (const e of this.dep) {\n if (e.computed instanceof DeferredComputedRefImpl) {\n e.scheduler(\n true\n /* computedTrigger */\n );\n }\n }\n }\n this._dirty = true;\n });\n this.effect.computed = this;\n }\n _get() {\n if (this._dirty) {\n this._dirty = false;\n return this._value = this.effect.run();\n }\n return this._value;\n }\n get value() {\n trackRefValue(this);\n return toRaw(this)._get();\n }\n}\nfunction deferredComputed(getter) {\n return new DeferredComputedRefImpl(getter);\n}\n\nexport { EffectScope, ITERATE_KEY, ReactiveEffect, computed, customRef, deferredComputed, effect, effectScope, enableTracking, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, pauseTracking, proxyRefs, reactive, readonly, ref, resetTracking, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, track, trigger, triggerRef, unref };\n", "import { pauseTracking, resetTracking, isRef, toRaw, getCurrentScope, isShallow as isShallow$1, isReactive, ReactiveEffect, ref, shallowReadonly, track, reactive, shallowReactive, trigger, isProxy, proxyRefs, markRaw, EffectScope, computed as computed$1, isReadonly } from '@vue/reactivity';\nexport { EffectScope, ReactiveEffect, customRef, effect, effectScope, getCurrentScope, isProxy, isReactive, isReadonly, isRef, isShallow, markRaw, onScopeDispose, proxyRefs, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, stop, toRaw, toRef, toRefs, toValue, triggerRef, unref } from '@vue/reactivity';\nimport { isString, isFunction, isPromise, isArray, NOOP, getGlobalThis, extend, EMPTY_OBJ, toHandlerKey, looseToNumber, hyphenate, camelize, isObject, isOn, hasOwn, isModelListener, toNumber, hasChanged, remove, isSet, isMap, isPlainObject, isBuiltInDirective, invokeArrayFns, isRegExp, capitalize, isGloballyWhitelisted, NO, def, isReservedProp, EMPTY_ARR, toRawType, makeMap, normalizeClass, normalizeStyle } from '@vue/shared';\nexport { camelize, capitalize, normalizeClass, normalizeProps, normalizeStyle, toDisplayString, toHandlerKey } from '@vue/shared';\n\nconst stack = [];\nfunction pushWarningContext(vnode) {\n stack.push(vnode);\n}\nfunction popWarningContext() {\n stack.pop();\n}\nfunction warn(msg, ...args) {\n if (!!!(process.env.NODE_ENV !== \"production\"))\n return;\n pauseTracking();\n const instance = stack.length ? stack[stack.length - 1].component : null;\n const appWarnHandler = instance && instance.appContext.config.warnHandler;\n const trace = getComponentTrace();\n if (appWarnHandler) {\n callWithErrorHandling(\n appWarnHandler,\n instance,\n 11,\n [\n msg + args.join(\"\"),\n instance && instance.proxy,\n trace.map(\n ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>`\n ).join(\"\\n\"),\n trace\n ]\n );\n } else {\n const warnArgs = [`[Vue warn]: ${msg}`, ...args];\n if (trace.length && // avoid spamming console during tests\n true) {\n warnArgs.push(`\n`, ...formatTrace(trace));\n }\n console.warn(...warnArgs);\n }\n resetTracking();\n}\nfunction getComponentTrace() {\n let currentVNode = stack[stack.length - 1];\n if (!currentVNode) {\n return [];\n }\n const normalizedStack = [];\n while (currentVNode) {\n const last = normalizedStack[0];\n if (last && last.vnode === currentVNode) {\n last.recurseCount++;\n } else {\n normalizedStack.push({\n vnode: currentVNode,\n recurseCount: 0\n });\n }\n const parentInstance = currentVNode.component && currentVNode.component.parent;\n currentVNode = parentInstance && parentInstance.vnode;\n }\n return normalizedStack;\n}\nfunction formatTrace(trace) {\n const logs = [];\n trace.forEach((entry, i) => {\n logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));\n });\n return logs;\n}\nfunction formatTraceEntry({ vnode, recurseCount }) {\n const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;\n const isRoot = vnode.component ? vnode.component.parent == null : false;\n const open = ` at <${formatComponentName(\n vnode.component,\n vnode.type,\n isRoot\n )}`;\n const close = `>` + postfix;\n return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close];\n}\nfunction formatProps(props) {\n const res = [];\n const keys = Object.keys(props);\n keys.slice(0, 3).forEach((key) => {\n res.push(...formatProp(key, props[key]));\n });\n if (keys.length > 3) {\n res.push(` ...`);\n }\n return res;\n}\nfunction formatProp(key, value, raw) {\n if (isString(value)) {\n value = JSON.stringify(value);\n return raw ? value : [`${key}=${value}`];\n } else if (typeof value === \"number\" || typeof value === \"boolean\" || value == null) {\n return raw ? value : [`${key}=${value}`];\n } else if (isRef(value)) {\n value = formatProp(key, toRaw(value.value), true);\n return raw ? value : [`${key}=Ref<`, value, `>`];\n } else if (isFunction(value)) {\n return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];\n } else {\n value = toRaw(value);\n return raw ? value : [`${key}=`, value];\n }\n}\nfunction assertNumber(val, type) {\n if (!!!(process.env.NODE_ENV !== \"production\"))\n return;\n if (val === void 0) {\n return;\n } else if (typeof val !== \"number\") {\n warn(`${type} is not a valid number - got ${JSON.stringify(val)}.`);\n } else if (isNaN(val)) {\n warn(`${type} is NaN - the duration expression might be incorrect.`);\n }\n}\n\nconst ErrorTypeStrings = {\n [\"sp\"]: \"serverPrefetch hook\",\n [\"bc\"]: \"beforeCreate hook\",\n [\"c\"]: \"created hook\",\n [\"bm\"]: \"beforeMount hook\",\n [\"m\"]: \"mounted hook\",\n [\"bu\"]: \"beforeUpdate hook\",\n [\"u\"]: \"updated\",\n [\"bum\"]: \"beforeUnmount hook\",\n [\"um\"]: \"unmounted hook\",\n [\"a\"]: \"activated hook\",\n [\"da\"]: \"deactivated hook\",\n [\"ec\"]: \"errorCaptured hook\",\n [\"rtc\"]: \"renderTracked hook\",\n [\"rtg\"]: \"renderTriggered hook\",\n [0]: \"setup function\",\n [1]: \"render function\",\n [2]: \"watcher getter\",\n [3]: \"watcher callback\",\n [4]: \"watcher cleanup function\",\n [5]: \"native event handler\",\n [6]: \"component event handler\",\n [7]: \"vnode hook\",\n [8]: \"directive hook\",\n [9]: \"transition hook\",\n [10]: \"app errorHandler\",\n [11]: \"app warnHandler\",\n [12]: \"ref function\",\n [13]: \"async component loader\",\n [14]: \"scheduler flush. This is likely a Vue internals bug. Please open an issue at https://new-issue.vuejs.org/?repo=vuejs/core\"\n};\nfunction callWithErrorHandling(fn, instance, type, args) {\n let res;\n try {\n res = args ? fn(...args) : fn();\n } catch (err) {\n handleError(err, instance, type);\n }\n return res;\n}\nfunction callWithAsyncErrorHandling(fn, instance, type, args) {\n if (isFunction(fn)) {\n const res = callWithErrorHandling(fn, instance, type, args);\n if (res && isPromise(res)) {\n res.catch((err) => {\n handleError(err, instance, type);\n });\n }\n return res;\n }\n const values = [];\n for (let i = 0; i < fn.length; i++) {\n values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));\n }\n return values;\n}\nfunction handleError(err, instance, type, throwInDev = true) {\n const contextVNode = instance ? instance.vnode : null;\n if (instance) {\n let cur = instance.parent;\n const exposedInstance = instance.proxy;\n const errorInfo = !!(process.env.NODE_ENV !== \"production\") ? ErrorTypeStrings[type] : type;\n while (cur) {\n const errorCapturedHooks = cur.ec;\n if (errorCapturedHooks) {\n for (let i = 0; i < errorCapturedHooks.length; i++) {\n if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {\n return;\n }\n }\n }\n cur = cur.parent;\n }\n const appErrorHandler = instance.appContext.config.errorHandler;\n if (appErrorHandler) {\n callWithErrorHandling(\n appErrorHandler,\n null,\n 10,\n [err, exposedInstance, errorInfo]\n );\n return;\n }\n }\n logError(err, type, contextVNode, throwInDev);\n}\nfunction logError(err, type, contextVNode, throwInDev = true) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const info = ErrorTypeStrings[type];\n if (contextVNode) {\n pushWarningContext(contextVNode);\n }\n warn(`Unhandled error${info ? ` during execution of ${info}` : ``}`);\n if (contextVNode) {\n popWarningContext();\n }\n if (throwInDev) {\n throw err;\n } else {\n console.error(err);\n }\n } else {\n console.error(err);\n }\n}\n\nlet isFlushing = false;\nlet isFlushPending = false;\nconst queue = [];\nlet flushIndex = 0;\nconst pendingPostFlushCbs = [];\nlet activePostFlushCbs = null;\nlet postFlushIndex = 0;\nconst resolvedPromise = /* @__PURE__ */ Promise.resolve();\nlet currentFlushPromise = null;\nconst RECURSION_LIMIT = 100;\nfunction nextTick(fn) {\n const p = currentFlushPromise || resolvedPromise;\n return fn ? p.then(this ? fn.bind(this) : fn) : p;\n}\nfunction findInsertionIndex(id) {\n let start = flushIndex + 1;\n let end = queue.length;\n while (start < end) {\n const middle = start + end >>> 1;\n const middleJobId = getId(queue[middle]);\n middleJobId < id ? start = middle + 1 : end = middle;\n }\n return start;\n}\nfunction queueJob(job) {\n if (!queue.length || !queue.includes(\n job,\n isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex\n )) {\n if (job.id == null) {\n queue.push(job);\n } else {\n queue.splice(findInsertionIndex(job.id), 0, job);\n }\n queueFlush();\n }\n}\nfunction queueFlush() {\n if (!isFlushing && !isFlushPending) {\n isFlushPending = true;\n currentFlushPromise = resolvedPromise.then(flushJobs);\n }\n}\nfunction invalidateJob(job) {\n const i = queue.indexOf(job);\n if (i > flushIndex) {\n queue.splice(i, 1);\n }\n}\nfunction queuePostFlushCb(cb) {\n if (!isArray(cb)) {\n if (!activePostFlushCbs || !activePostFlushCbs.includes(\n cb,\n cb.allowRecurse ? postFlushIndex + 1 : postFlushIndex\n )) {\n pendingPostFlushCbs.push(cb);\n }\n } else {\n pendingPostFlushCbs.push(...cb);\n }\n queueFlush();\n}\nfunction flushPreFlushCbs(seen, i = isFlushing ? flushIndex + 1 : 0) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n for (; i < queue.length; i++) {\n const cb = queue[i];\n if (cb && cb.pre) {\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, cb)) {\n continue;\n }\n queue.splice(i, 1);\n i--;\n cb();\n }\n }\n}\nfunction flushPostFlushCbs(seen) {\n if (pendingPostFlushCbs.length) {\n const deduped = [...new Set(pendingPostFlushCbs)];\n pendingPostFlushCbs.length = 0;\n if (activePostFlushCbs) {\n activePostFlushCbs.push(...deduped);\n return;\n }\n activePostFlushCbs = deduped;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n activePostFlushCbs.sort((a, b) => getId(a) - getId(b));\n for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {\n if (!!(process.env.NODE_ENV !== \"production\") && checkRecursiveUpdates(seen, activePostFlushCbs[postFlushIndex])) {\n continue;\n }\n activePostFlushCbs[postFlushIndex]();\n }\n activePostFlushCbs = null;\n postFlushIndex = 0;\n }\n}\nconst getId = (job) => job.id == null ? Infinity : job.id;\nconst comparator = (a, b) => {\n const diff = getId(a) - getId(b);\n if (diff === 0) {\n if (a.pre && !b.pre)\n return -1;\n if (b.pre && !a.pre)\n return 1;\n }\n return diff;\n};\nfunction flushJobs(seen) {\n isFlushPending = false;\n isFlushing = true;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n seen = seen || /* @__PURE__ */ new Map();\n }\n queue.sort(comparator);\n const check = !!(process.env.NODE_ENV !== \"production\") ? (job) => checkRecursiveUpdates(seen, job) : NOOP;\n try {\n for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {\n const job = queue[flushIndex];\n if (job && job.active !== false) {\n if (!!(process.env.NODE_ENV !== \"production\") && check(job)) {\n continue;\n }\n callWithErrorHandling(job, null, 14);\n }\n }\n } finally {\n flushIndex = 0;\n queue.length = 0;\n flushPostFlushCbs(seen);\n isFlushing = false;\n currentFlushPromise = null;\n if (queue.length || pendingPostFlushCbs.length) {\n flushJobs(seen);\n }\n }\n}\nfunction checkRecursiveUpdates(seen, fn) {\n if (!seen.has(fn)) {\n seen.set(fn, 1);\n } else {\n const count = seen.get(fn);\n if (count > RECURSION_LIMIT) {\n const instance = fn.ownerInstance;\n const componentName = instance && getComponentName(instance.type);\n warn(\n `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`\n );\n return true;\n } else {\n seen.set(fn, count + 1);\n }\n }\n}\n\nlet isHmrUpdating = false;\nconst hmrDirtyComponents = /* @__PURE__ */ new Set();\nif (!!(process.env.NODE_ENV !== \"production\")) {\n getGlobalThis().__VUE_HMR_RUNTIME__ = {\n createRecord: tryWrap(createRecord),\n rerender: tryWrap(rerender),\n reload: tryWrap(reload)\n };\n}\nconst map = /* @__PURE__ */ new Map();\nfunction registerHMR(instance) {\n const id = instance.type.__hmrId;\n let record = map.get(id);\n if (!record) {\n createRecord(id, instance.type);\n record = map.get(id);\n }\n record.instances.add(instance);\n}\nfunction unregisterHMR(instance) {\n map.get(instance.type.__hmrId).instances.delete(instance);\n}\nfunction createRecord(id, initialDef) {\n if (map.has(id)) {\n return false;\n }\n map.set(id, {\n initialDef: normalizeClassComponent(initialDef),\n instances: /* @__PURE__ */ new Set()\n });\n return true;\n}\nfunction normalizeClassComponent(component) {\n return isClassComponent(component) ? component.__vccOpts : component;\n}\nfunction rerender(id, newRender) {\n const record = map.get(id);\n if (!record) {\n return;\n }\n record.initialDef.render = newRender;\n [...record.instances].forEach((instance) => {\n if (newRender) {\n instance.render = newRender;\n normalizeClassComponent(instance.type).render = newRender;\n }\n instance.renderCache = [];\n isHmrUpdating = true;\n instance.update();\n isHmrUpdating = false;\n });\n}\nfunction reload(id, newComp) {\n const record = map.get(id);\n if (!record)\n return;\n newComp = normalizeClassComponent(newComp);\n updateComponentDef(record.initialDef, newComp);\n const instances = [...record.instances];\n for (const instance of instances) {\n const oldComp = normalizeClassComponent(instance.type);\n if (!hmrDirtyComponents.has(oldComp)) {\n if (oldComp !== record.initialDef) {\n updateComponentDef(oldComp, newComp);\n }\n hmrDirtyComponents.add(oldComp);\n }\n instance.appContext.propsCache.delete(instance.type);\n instance.appContext.emitsCache.delete(instance.type);\n instance.appContext.optionsCache.delete(instance.type);\n if (instance.ceReload) {\n hmrDirtyComponents.add(oldComp);\n instance.ceReload(newComp.styles);\n hmrDirtyComponents.delete(oldComp);\n } else if (instance.parent) {\n queueJob(instance.parent.update);\n } else if (instance.appContext.reload) {\n instance.appContext.reload();\n } else if (typeof window !== \"undefined\") {\n window.location.reload();\n } else {\n console.warn(\n \"[HMR] Root or manually mounted instance modified. Full reload required.\"\n );\n }\n }\n queuePostFlushCb(() => {\n for (const instance of instances) {\n hmrDirtyComponents.delete(\n normalizeClassComponent(instance.type)\n );\n }\n });\n}\nfunction updateComponentDef(oldComp, newComp) {\n extend(oldComp, newComp);\n for (const key in oldComp) {\n if (key !== \"__file\" && !(key in newComp)) {\n delete oldComp[key];\n }\n }\n}\nfunction tryWrap(fn) {\n return (id, arg) => {\n try {\n return fn(id, arg);\n } catch (e) {\n console.error(e);\n console.warn(\n `[HMR] Something went wrong during Vue component hot-reload. Full reload required.`\n );\n }\n };\n}\n\nlet devtools;\nlet buffer = [];\nlet devtoolsNotInstalled = false;\nfunction emit$1(event, ...args) {\n if (devtools) {\n devtools.emit(event, ...args);\n } else if (!devtoolsNotInstalled) {\n buffer.push({ event, args });\n }\n}\nfunction setDevtoolsHook(hook, target) {\n var _a, _b;\n devtools = hook;\n if (devtools) {\n devtools.enabled = true;\n buffer.forEach(({ event, args }) => devtools.emit(event, ...args));\n buffer = [];\n } else if (\n // handle late devtools injection - only do this if we are in an actual\n // browser environment to avoid the timer handle stalling test runner exit\n // (#4815)\n typeof window !== \"undefined\" && // some envs mock window but not fully\n window.HTMLElement && // also exclude jsdom\n !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes(\"jsdom\"))\n ) {\n const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || [];\n replay.push((newHook) => {\n setDevtoolsHook(newHook, target);\n });\n setTimeout(() => {\n if (!devtools) {\n target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null;\n devtoolsNotInstalled = true;\n buffer = [];\n }\n }, 3e3);\n } else {\n devtoolsNotInstalled = true;\n buffer = [];\n }\n}\nfunction devtoolsInitApp(app, version) {\n emit$1(\"app:init\" /* APP_INIT */, app, version, {\n Fragment,\n Text,\n Comment,\n Static\n });\n}\nfunction devtoolsUnmountApp(app) {\n emit$1(\"app:unmount\" /* APP_UNMOUNT */, app);\n}\nconst devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:added\" /* COMPONENT_ADDED */\n);\nconst devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook(\"component:updated\" /* COMPONENT_UPDATED */);\nconst _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook(\n \"component:removed\" /* COMPONENT_REMOVED */\n);\nconst devtoolsComponentRemoved = (component) => {\n if (devtools && typeof devtools.cleanupBuffer === \"function\" && // remove the component if it wasn't buffered\n !devtools.cleanupBuffer(component)) {\n _devtoolsComponentRemoved(component);\n }\n};\nfunction createDevtoolsComponentHook(hook) {\n return (component) => {\n emit$1(\n hook,\n component.appContext.app,\n component.uid,\n component.parent ? component.parent.uid : void 0,\n component\n );\n };\n}\nconst devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:start\" /* PERFORMANCE_START */\n);\nconst devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook(\n \"perf:end\" /* PERFORMANCE_END */\n);\nfunction createDevtoolsPerformanceHook(hook) {\n return (component, type, time) => {\n emit$1(hook, component.appContext.app, component.uid, component, type, time);\n };\n}\nfunction devtoolsComponentEmit(component, event, params) {\n emit$1(\n \"component:emit\" /* COMPONENT_EMIT */,\n component.appContext.app,\n component,\n event,\n params\n );\n}\n\nfunction emit(instance, event, ...rawArgs) {\n if (instance.isUnmounted)\n return;\n const props = instance.vnode.props || EMPTY_OBJ;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const {\n emitsOptions,\n propsOptions: [propsOptions]\n } = instance;\n if (emitsOptions) {\n if (!(event in emitsOptions) && true) {\n if (!propsOptions || !(toHandlerKey(event) in propsOptions)) {\n warn(\n `Component emitted event \"${event}\" but it is neither declared in the emits option nor as an \"${toHandlerKey(event)}\" prop.`\n );\n }\n } else {\n const validator = emitsOptions[event];\n if (isFunction(validator)) {\n const isValid = validator(...rawArgs);\n if (!isValid) {\n warn(\n `Invalid event arguments: event validation failed for event \"${event}\".`\n );\n }\n }\n }\n }\n }\n let args = rawArgs;\n const isModelListener = event.startsWith(\"update:\");\n const modelArg = isModelListener && event.slice(7);\n if (modelArg && modelArg in props) {\n const modifiersKey = `${modelArg === \"modelValue\" ? \"model\" : modelArg}Modifiers`;\n const { number, trim } = props[modifiersKey] || EMPTY_OBJ;\n if (trim) {\n args = rawArgs.map((a) => isString(a) ? a.trim() : a);\n }\n if (number) {\n args = rawArgs.map(looseToNumber);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentEmit(instance, event, args);\n }\n if (!!(process.env.NODE_ENV !== \"production\")) {\n const lowerCaseEvent = event.toLowerCase();\n if (lowerCaseEvent !== event && props[toHandlerKey(lowerCaseEvent)]) {\n warn(\n `Event \"${lowerCaseEvent}\" is emitted in component ${formatComponentName(\n instance,\n instance.type\n )} but the handler is registered for \"${event}\". Note that HTML attributes are case-insensitive and you cannot use v-on to listen to camelCase events when using in-DOM templates. You should probably use \"${hyphenate(event)}\" instead of \"${event}\".`\n );\n }\n }\n let handlerName;\n let handler = props[handlerName = toHandlerKey(event)] || // also try camelCase event handler (#2249)\n props[handlerName = toHandlerKey(camelize(event))];\n if (!handler && isModelListener) {\n handler = props[handlerName = toHandlerKey(hyphenate(event))];\n }\n if (handler) {\n callWithAsyncErrorHandling(\n handler,\n instance,\n 6,\n args\n );\n }\n const onceHandler = props[handlerName + `Once`];\n if (onceHandler) {\n if (!instance.emitted) {\n instance.emitted = {};\n } else if (instance.emitted[handlerName]) {\n return;\n }\n instance.emitted[handlerName] = true;\n callWithAsyncErrorHandling(\n onceHandler,\n instance,\n 6,\n args\n );\n }\n}\nfunction normalizeEmitsOptions(comp, appContext, asMixin = false) {\n const cache = appContext.emitsCache;\n const cached = cache.get(comp);\n if (cached !== void 0) {\n return cached;\n }\n const raw = comp.emits;\n let normalized = {};\n let hasExtends = false;\n if (__VUE_OPTIONS_API__ && !isFunction(comp)) {\n const extendEmits = (raw2) => {\n const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);\n if (normalizedFromExtend) {\n hasExtends = true;\n extend(normalized, normalizedFromExtend);\n }\n };\n if (!asMixin && appContext.mixins.length) {\n appContext.mixins.forEach(extendEmits);\n }\n if (comp.extends) {\n extendEmits(comp.extends);\n }\n if (comp.mixins) {\n comp.mixins.forEach(extendEmits);\n }\n }\n if (!raw && !hasExtends) {\n if (isObject(comp)) {\n cache.set(comp, null);\n }\n return null;\n }\n if (isArray(raw)) {\n raw.forEach((key) => normalized[key] = null);\n } else {\n extend(normalized, raw);\n }\n if (isObject(comp)) {\n cache.set(comp, normalized);\n }\n return normalized;\n}\nfunction isEmitListener(options, key) {\n if (!options || !isOn(key)) {\n return false;\n }\n key = key.slice(2).replace(/Once$/, \"\");\n return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);\n}\n\nlet currentRenderingInstance = null;\nlet currentScopeId = null;\nfunction setCurrentRenderingInstance(instance) {\n const prev = currentRenderingInstance;\n currentRenderingInstance = instance;\n currentScopeId = instance && instance.type.__scopeId || null;\n return prev;\n}\nfunction pushScopeId(id) {\n currentScopeId = id;\n}\nfunction popScopeId() {\n currentScopeId = null;\n}\nconst withScopeId = (_id) => withCtx;\nfunction withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {\n if (!ctx)\n return fn;\n if (fn._n) {\n return fn;\n }\n const renderFnWithContext = (...args) => {\n if (renderFnWithContext._d) {\n setBlockTracking(-1);\n }\n const prevInstance = setCurrentRenderingInstance(ctx);\n let res;\n try {\n res = fn(...args);\n } finally {\n setCurrentRenderingInstance(prevInstance);\n if (renderFnWithContext._d) {\n setBlockTracking(1);\n }\n }\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentUpdated(ctx);\n }\n return res;\n };\n renderFnWithContext._n = true;\n renderFnWithContext._c = true;\n renderFnWithContext._d = true;\n return renderFnWithContext;\n}\n\nlet accessedAttrs = false;\nfunction markAttrsAccessed() {\n accessedAttrs = true;\n}\nfunction renderComponentRoot(instance) {\n const {\n type: Component,\n vnode,\n proxy,\n withProxy,\n props,\n propsOptions: [propsOptions],\n slots,\n attrs,\n emit,\n render,\n renderCache,\n data,\n setupState,\n ctx,\n inheritAttrs\n } = instance;\n let result;\n let fallthroughAttrs;\n const prev = setCurrentRenderingInstance(instance);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n accessedAttrs = false;\n }\n try {\n if (vnode.shapeFlag & 4) {\n const proxyToUse = withProxy || proxy;\n result = normalizeVNode(\n render.call(\n proxyToUse,\n proxyToUse,\n renderCache,\n props,\n setupState,\n data,\n ctx\n )\n );\n fallthroughAttrs = attrs;\n } else {\n const render2 = Component;\n if (!!(process.env.NODE_ENV !== \"production\") && attrs === props) {\n markAttrsAccessed();\n }\n result = normalizeVNode(\n render2.length > 1 ? render2(\n props,\n !!(process.env.NODE_ENV !== \"production\") ? {\n get attrs() {\n markAttrsAccessed();\n return attrs;\n },\n slots,\n emit\n } : { attrs, slots, emit }\n ) : render2(\n props,\n null\n /* we know it doesn't need it */\n )\n );\n fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);\n }\n } catch (err) {\n blockStack.length = 0;\n handleError(err, instance, 1);\n result = createVNode(Comment);\n }\n let root = result;\n let setRoot = void 0;\n if (!!(process.env.NODE_ENV !== \"production\") && result.patchFlag > 0 && result.patchFlag & 2048) {\n [root, setRoot] = getChildRoot(result);\n }\n if (fallthroughAttrs && inheritAttrs !== false) {\n const keys = Object.keys(fallthroughAttrs);\n const { shapeFlag } = root;\n if (keys.length) {\n if (shapeFlag & (1 | 6)) {\n if (propsOptions && keys.some(isModelListener)) {\n fallthroughAttrs = filterModelListeners(\n fallthroughAttrs,\n propsOptions\n );\n }\n root = cloneVNode(root, fallthroughAttrs);\n } else if (!!(process.env.NODE_ENV !== \"production\") && !accessedAttrs && root.type !== Comment) {\n const allAttrs = Object.keys(attrs);\n const eventAttrs = [];\n const extraAttrs = [];\n for (let i = 0, l = allAttrs.length; i < l; i++) {\n const key = allAttrs[i];\n if (isOn(key)) {\n if (!isModelListener(key)) {\n eventAttrs.push(key[2].toLowerCase() + key.slice(3));\n }\n } else {\n extraAttrs.push(key);\n }\n }\n if (extraAttrs.length) {\n warn(\n `Extraneous non-props attributes (${extraAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes.`\n );\n }\n if (eventAttrs.length) {\n warn(\n `Extraneous non-emits event listeners (${eventAttrs.join(\", \")}) were passed to component but could not be automatically inherited because component renders fragment or text root nodes. If the listener is intended to be a component custom event listener only, declare it using the \"emits\" option.`\n );\n }\n }\n }\n }\n if (vnode.dirs) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn(\n `Runtime directive used on component with non-element root node. The directives will not function as intended.`\n );\n }\n root = cloneVNode(root);\n root.dirs = root.dirs ? root.dirs.concat(vnode.dirs) : vnode.dirs;\n }\n if (vnode.transition) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isElementRoot(root)) {\n warn(\n `Component inside renders non-element root node that cannot be animated.`\n );\n }\n root.transition = vnode.transition;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && setRoot) {\n setRoot(root);\n } else {\n result = root;\n }\n setCurrentRenderingInstance(prev);\n return result;\n}\nconst getChildRoot = (vnode) => {\n const rawChildren = vnode.children;\n const dynamicChildren = vnode.dynamicChildren;\n const childRoot = filterSingleRoot(rawChildren);\n if (!childRoot) {\n return [vnode, void 0];\n }\n const index = rawChildren.indexOf(childRoot);\n const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1;\n const setRoot = (updatedRoot) => {\n rawChildren[index] = updatedRoot;\n if (dynamicChildren) {\n if (dynamicIndex > -1) {\n dynamicChildren[dynamicIndex] = updatedRoot;\n } else if (updatedRoot.patchFlag > 0) {\n vnode.dynamicChildren = [...dynamicChildren, updatedRoot];\n }\n }\n };\n return [normalizeVNode(childRoot), setRoot];\n};\nfunction filterSingleRoot(children) {\n let singleRoot;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (isVNode(child)) {\n if (child.type !== Comment || child.children === \"v-if\") {\n if (singleRoot) {\n return;\n } else {\n singleRoot = child;\n }\n }\n } else {\n return;\n }\n }\n return singleRoot;\n}\nconst getFunctionalFallthrough = (attrs) => {\n let res;\n for (const key in attrs) {\n if (key === \"class\" || key === \"style\" || isOn(key)) {\n (res || (res = {}))[key] = attrs[key];\n }\n }\n return res;\n};\nconst filterModelListeners = (attrs, props) => {\n const res = {};\n for (const key in attrs) {\n if (!isModelListener(key) || !(key.slice(9) in props)) {\n res[key] = attrs[key];\n }\n }\n return res;\n};\nconst isElementRoot = (vnode) => {\n return vnode.shapeFlag & (6 | 1) || vnode.type === Comment;\n};\nfunction shouldUpdateComponent(prevVNode, nextVNode, optimized) {\n const { props: prevProps, children: prevChildren, component } = prevVNode;\n const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;\n const emits = component.emitsOptions;\n if (!!(process.env.NODE_ENV !== \"production\") && (prevChildren || nextChildren) && isHmrUpdating) {\n return true;\n }\n if (nextVNode.dirs || nextVNode.transition) {\n return true;\n }\n if (optimized && patchFlag >= 0) {\n if (patchFlag & 1024) {\n return true;\n }\n if (patchFlag & 16) {\n if (!prevProps) {\n return !!nextProps;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n } else if (patchFlag & 8) {\n const dynamicProps = nextVNode.dynamicProps;\n for (let i = 0; i < dynamicProps.length; i++) {\n const key = dynamicProps[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {\n return true;\n }\n }\n }\n } else {\n if (prevChildren || nextChildren) {\n if (!nextChildren || !nextChildren.$stable) {\n return true;\n }\n }\n if (prevProps === nextProps) {\n return false;\n }\n if (!prevProps) {\n return !!nextProps;\n }\n if (!nextProps) {\n return true;\n }\n return hasPropsChanged(prevProps, nextProps, emits);\n }\n return false;\n}\nfunction hasPropsChanged(prevProps, nextProps, emitsOptions) {\n const nextKeys = Object.keys(nextProps);\n if (nextKeys.length !== Object.keys(prevProps).length) {\n return true;\n }\n for (let i = 0; i < nextKeys.length; i++) {\n const key = nextKeys[i];\n if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {\n return true;\n }\n }\n return false;\n}\nfunction updateHOCHostEl({ vnode, parent }, el) {\n while (parent && parent.subTree === vnode) {\n (vnode = parent.vnode).el = el;\n parent = parent.parent;\n }\n}\n\nconst isSuspense = (type) => type.__isSuspense;\nconst SuspenseImpl = {\n name: \"Suspense\",\n // In order to make Suspense tree-shakable, we need to avoid importing it\n // directly in the renderer. The renderer checks for the __isSuspense flag\n // on a vnode's type and calls the `process` method, passing in renderer\n // internals.\n __isSuspense: true,\n process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n if (n1 == null) {\n mountSuspense(\n n2,\n container,\n anchor,\n parentComponent,\n parentSuspense,\n isSVG,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n } else {\n patchSuspense(\n n1,\n n2,\n container,\n anchor,\n parentComponent,\n isSVG,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n }\n },\n hydrate: hydrateSuspense,\n create: createSuspenseBoundary,\n normalize: normalizeSuspenseChildren\n};\nconst Suspense = SuspenseImpl ;\nfunction triggerEvent(vnode, name) {\n const eventListener = vnode.props && vnode.props[name];\n if (isFunction(eventListener)) {\n eventListener();\n }\n}\nfunction mountSuspense(vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals) {\n const {\n p: patch,\n o: { createElement }\n } = rendererInternals;\n const hiddenContainer = createElement(\"div\");\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n container,\n hiddenContainer,\n anchor,\n isSVG,\n slotScopeIds,\n optimized,\n rendererInternals\n );\n patch(\n null,\n suspense.pendingBranch = vnode.ssContent,\n hiddenContainer,\n null,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds\n );\n if (suspense.deps > 0) {\n triggerEvent(vnode, \"onPending\");\n triggerEvent(vnode, \"onFallback\");\n patch(\n null,\n vnode.ssFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n isSVG,\n slotScopeIds\n );\n setActiveBranch(suspense, vnode.ssFallback);\n } else {\n suspense.resolve(false, true);\n }\n}\nfunction patchSuspense(n1, n2, container, anchor, parentComponent, isSVG, slotScopeIds, optimized, { p: patch, um: unmount, o: { createElement } }) {\n const suspense = n2.suspense = n1.suspense;\n suspense.vnode = n2;\n n2.el = n1.el;\n const newBranch = n2.ssContent;\n const newFallback = n2.ssFallback;\n const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense;\n if (pendingBranch) {\n suspense.pendingBranch = newBranch;\n if (isSameVNodeType(newBranch, pendingBranch)) {\n patch(\n pendingBranch,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else if (isInFallback) {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n isSVG,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else {\n suspense.pendingId++;\n if (isHydrating) {\n suspense.isHydrating = false;\n suspense.activeBranch = pendingBranch;\n } else {\n unmount(pendingBranch, parentComponent, suspense);\n }\n suspense.deps = 0;\n suspense.effects.length = 0;\n suspense.hiddenContainer = createElement(\"div\");\n if (isInFallback) {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n patch(\n activeBranch,\n newFallback,\n container,\n anchor,\n parentComponent,\n null,\n // fallback tree will not have suspense context\n isSVG,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newFallback);\n }\n } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n suspense.resolve(true);\n } else {\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n }\n }\n }\n } else {\n if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {\n patch(\n activeBranch,\n newBranch,\n container,\n anchor,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, newBranch);\n } else {\n triggerEvent(n2, \"onPending\");\n suspense.pendingBranch = newBranch;\n suspense.pendingId++;\n patch(\n null,\n newBranch,\n suspense.hiddenContainer,\n null,\n parentComponent,\n suspense,\n isSVG,\n slotScopeIds,\n optimized\n );\n if (suspense.deps <= 0) {\n suspense.resolve();\n } else {\n const { timeout, pendingId } = suspense;\n if (timeout > 0) {\n setTimeout(() => {\n if (suspense.pendingId === pendingId) {\n suspense.fallback(newFallback);\n }\n }, timeout);\n } else if (timeout === 0) {\n suspense.fallback(newFallback);\n }\n }\n }\n }\n}\nlet hasWarned = false;\nfunction createSuspenseBoundary(vnode, parentSuspense, parentComponent, container, hiddenContainer, anchor, isSVG, slotScopeIds, optimized, rendererInternals, isHydrating = false) {\n if (!!(process.env.NODE_ENV !== \"production\") && true && !hasWarned) {\n hasWarned = true;\n console[console.info ? \"info\" : \"log\"](\n ` is an experimental feature and its API will likely change.`\n );\n }\n const {\n p: patch,\n m: move,\n um: unmount,\n n: next,\n o: { parentNode, remove }\n } = rendererInternals;\n let parentSuspenseId;\n const isSuspensible = isVNodeSuspensible(vnode);\n if (isSuspensible) {\n if (parentSuspense == null ? void 0 : parentSuspense.pendingBranch) {\n parentSuspenseId = parentSuspense.pendingId;\n parentSuspense.deps++;\n }\n }\n const timeout = vnode.props ? toNumber(vnode.props.timeout) : void 0;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n assertNumber(timeout, `Suspense timeout`);\n }\n const suspense = {\n vnode,\n parent: parentSuspense,\n parentComponent,\n isSVG,\n container,\n hiddenContainer,\n anchor,\n deps: 0,\n pendingId: 0,\n timeout: typeof timeout === \"number\" ? timeout : -1,\n activeBranch: null,\n pendingBranch: null,\n isInFallback: true,\n isHydrating,\n isUnmounted: false,\n effects: [],\n resolve(resume = false, sync = false) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n if (!resume && !suspense.pendingBranch) {\n throw new Error(\n `suspense.resolve() is called without a pending branch.`\n );\n }\n if (suspense.isUnmounted) {\n throw new Error(\n `suspense.resolve() is called on an already unmounted suspense boundary.`\n );\n }\n }\n const {\n vnode: vnode2,\n activeBranch,\n pendingBranch,\n pendingId,\n effects,\n parentComponent: parentComponent2,\n container: container2\n } = suspense;\n if (suspense.isHydrating) {\n suspense.isHydrating = false;\n } else if (!resume) {\n const delayEnter = activeBranch && pendingBranch.transition && pendingBranch.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = () => {\n if (pendingId === suspense.pendingId) {\n move(pendingBranch, container2, anchor2, 0);\n }\n };\n }\n let { anchor: anchor2 } = suspense;\n if (activeBranch) {\n anchor2 = next(activeBranch);\n unmount(activeBranch, parentComponent2, suspense, true);\n }\n if (!delayEnter) {\n move(pendingBranch, container2, anchor2, 0);\n }\n }\n setActiveBranch(suspense, pendingBranch);\n suspense.pendingBranch = null;\n suspense.isInFallback = false;\n let parent = suspense.parent;\n let hasUnresolvedAncestor = false;\n while (parent) {\n if (parent.pendingBranch) {\n parent.effects.push(...effects);\n hasUnresolvedAncestor = true;\n break;\n }\n parent = parent.parent;\n }\n if (!hasUnresolvedAncestor) {\n queuePostFlushCb(effects);\n }\n suspense.effects = [];\n if (isSuspensible) {\n if (parentSuspense && parentSuspense.pendingBranch && parentSuspenseId === parentSuspense.pendingId) {\n parentSuspense.deps--;\n if (parentSuspense.deps === 0 && !sync) {\n parentSuspense.resolve();\n }\n }\n }\n triggerEvent(vnode2, \"onResolve\");\n },\n fallback(fallbackVNode) {\n if (!suspense.pendingBranch) {\n return;\n }\n const { vnode: vnode2, activeBranch, parentComponent: parentComponent2, container: container2, isSVG: isSVG2 } = suspense;\n triggerEvent(vnode2, \"onFallback\");\n const anchor2 = next(activeBranch);\n const mountFallback = () => {\n if (!suspense.isInFallback) {\n return;\n }\n patch(\n null,\n fallbackVNode,\n container2,\n anchor2,\n parentComponent2,\n null,\n // fallback tree will not have suspense context\n isSVG2,\n slotScopeIds,\n optimized\n );\n setActiveBranch(suspense, fallbackVNode);\n };\n const delayEnter = fallbackVNode.transition && fallbackVNode.transition.mode === \"out-in\";\n if (delayEnter) {\n activeBranch.transition.afterLeave = mountFallback;\n }\n suspense.isInFallback = true;\n unmount(\n activeBranch,\n parentComponent2,\n null,\n // no suspense so unmount hooks fire now\n true\n // shouldRemove\n );\n if (!delayEnter) {\n mountFallback();\n }\n },\n move(container2, anchor2, type) {\n suspense.activeBranch && move(suspense.activeBranch, container2, anchor2, type);\n suspense.container = container2;\n },\n next() {\n return suspense.activeBranch && next(suspense.activeBranch);\n },\n registerDep(instance, setupRenderEffect) {\n const isInPendingSuspense = !!suspense.pendingBranch;\n if (isInPendingSuspense) {\n suspense.deps++;\n }\n const hydratedEl = instance.vnode.el;\n instance.asyncDep.catch((err) => {\n handleError(err, instance, 0);\n }).then((asyncSetupResult) => {\n if (instance.isUnmounted || suspense.isUnmounted || suspense.pendingId !== instance.suspenseId) {\n return;\n }\n instance.asyncResolved = true;\n const { vnode: vnode2 } = instance;\n if (!!(process.env.NODE_ENV !== \"production\")) {\n pushWarningContext(vnode2);\n }\n handleSetupResult(instance, asyncSetupResult, false);\n if (hydratedEl) {\n vnode2.el = hydratedEl;\n }\n const placeholder = !hydratedEl && instance.subTree.el;\n setupRenderEffect(\n instance,\n vnode2,\n // component may have been moved before resolve.\n // if this is not a hydration, instance.subTree will be the comment\n // placeholder.\n parentNode(hydratedEl || instance.subTree.el),\n // anchor will not be used if this is hydration, so only need to\n // consider the comment placeholder case.\n hydratedEl ? null : next(instance.subTree),\n suspense,\n isSVG,\n optimized\n );\n if (placeholder) {\n remove(placeholder);\n }\n updateHOCHostEl(instance, vnode2.el);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n popWarningContext();\n }\n if (isInPendingSuspense && --suspense.deps === 0) {\n suspense.resolve();\n }\n });\n },\n unmount(parentSuspense2, doRemove) {\n suspense.isUnmounted = true;\n if (suspense.activeBranch) {\n unmount(\n suspense.activeBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n if (suspense.pendingBranch) {\n unmount(\n suspense.pendingBranch,\n parentComponent,\n parentSuspense2,\n doRemove\n );\n }\n }\n };\n return suspense;\n}\nfunction hydrateSuspense(node, vnode, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, rendererInternals, hydrateNode) {\n const suspense = vnode.suspense = createSuspenseBoundary(\n vnode,\n parentSuspense,\n parentComponent,\n node.parentNode,\n document.createElement(\"div\"),\n null,\n isSVG,\n slotScopeIds,\n optimized,\n rendererInternals,\n true\n /* hydrating */\n );\n const result = hydrateNode(\n node,\n suspense.pendingBranch = vnode.ssContent,\n parentComponent,\n suspense,\n slotScopeIds,\n optimized\n );\n if (suspense.deps === 0) {\n suspense.resolve(false, true);\n }\n return result;\n}\nfunction normalizeSuspenseChildren(vnode) {\n const { shapeFlag, children } = vnode;\n const isSlotChildren = shapeFlag & 32;\n vnode.ssContent = normalizeSuspenseSlot(\n isSlotChildren ? children.default : children\n );\n vnode.ssFallback = isSlotChildren ? normalizeSuspenseSlot(children.fallback) : createVNode(Comment);\n}\nfunction normalizeSuspenseSlot(s) {\n let block;\n if (isFunction(s)) {\n const trackBlock = isBlockTreeEnabled && s._c;\n if (trackBlock) {\n s._d = false;\n openBlock();\n }\n s = s();\n if (trackBlock) {\n s._d = true;\n block = currentBlock;\n closeBlock();\n }\n }\n if (isArray(s)) {\n const singleChild = filterSingleRoot(s);\n if (!!(process.env.NODE_ENV !== \"production\") && !singleChild) {\n warn(` slots expect a single root node.`);\n }\n s = singleChild;\n }\n s = normalizeVNode(s);\n if (block && !s.dynamicChildren) {\n s.dynamicChildren = block.filter((c) => c !== s);\n }\n return s;\n}\nfunction queueEffectWithSuspense(fn, suspense) {\n if (suspense && suspense.pendingBranch) {\n if (isArray(fn)) {\n suspense.effects.push(...fn);\n } else {\n suspense.effects.push(fn);\n }\n } else {\n queuePostFlushCb(fn);\n }\n}\nfunction setActiveBranch(suspense, branch) {\n suspense.activeBranch = branch;\n const { vnode, parentComponent } = suspense;\n const el = vnode.el = branch.el;\n if (parentComponent && parentComponent.subTree === vnode) {\n parentComponent.vnode.el = el;\n updateHOCHostEl(parentComponent, el);\n }\n}\nfunction isVNodeSuspensible(vnode) {\n var _a;\n return ((_a = vnode.props) == null ? void 0 : _a.suspensible) != null && vnode.props.suspensible !== false;\n}\n\nfunction watchEffect(effect, options) {\n return doWatch(effect, null, options);\n}\nfunction watchPostEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"post\" }) : { flush: \"post\" }\n );\n}\nfunction watchSyncEffect(effect, options) {\n return doWatch(\n effect,\n null,\n !!(process.env.NODE_ENV !== \"production\") ? extend({}, options, { flush: \"sync\" }) : { flush: \"sync\" }\n );\n}\nconst INITIAL_WATCHER_VALUE = {};\nfunction watch(source, cb, options) {\n if (!!(process.env.NODE_ENV !== \"production\") && !isFunction(cb)) {\n warn(\n `\\`watch(fn, options?)\\` signature has been moved to a separate API. Use \\`watchEffect(fn, options?)\\` instead. \\`watch\\` now only supports \\`watch(source, cb, options?) signature.`\n );\n }\n return doWatch(source, cb, options);\n}\nfunction doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {\n var _a;\n if (!!(process.env.NODE_ENV !== \"production\") && !cb) {\n if (immediate !== void 0) {\n warn(\n `watch() \"immediate\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n if (deep !== void 0) {\n warn(\n `watch() \"deep\" option is only respected when using the watch(source, callback, options?) signature.`\n );\n }\n }\n const warnInvalidSource = (s) => {\n warn(\n `Invalid watch source: `,\n s,\n `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.`\n );\n };\n const instance = getCurrentScope() === ((_a = currentInstance) == null ? void 0 : _a.scope) ? currentInstance : null;\n let getter;\n let forceTrigger = false;\n let isMultiSource = false;\n if (isRef(source)) {\n getter = () => source.value;\n forceTrigger = isShallow$1(source);\n } else if (isReactive(source)) {\n getter = () => source;\n deep = true;\n } else if (isArray(source)) {\n isMultiSource = true;\n forceTrigger = source.some((s) => isReactive(s) || isShallow$1(s));\n getter = () => source.map((s) => {\n if (isRef(s)) {\n return s.value;\n } else if (isReactive(s)) {\n return traverse(s);\n } else if (isFunction(s)) {\n return callWithErrorHandling(s, instance, 2);\n } else {\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(s);\n }\n });\n } else if (isFunction(source)) {\n if (cb) {\n getter = () => callWithErrorHandling(source, instance, 2);\n } else {\n getter = () => {\n if (instance && instance.isUnmounted) {\n return;\n }\n if (cleanup) {\n cleanup();\n }\n return callWithAsyncErrorHandling(\n source,\n instance,\n 3,\n [onCleanup]\n );\n };\n }\n } else {\n getter = NOOP;\n !!(process.env.NODE_ENV !== \"production\") && warnInvalidSource(source);\n }\n if (cb && deep) {\n const baseGetter = getter;\n getter = () => traverse(baseGetter());\n }\n let cleanup;\n let onCleanup = (fn) => {\n cleanup = effect.onStop = () => {\n callWithErrorHandling(fn, instance, 4);\n };\n };\n let ssrCleanup;\n if (isInSSRComponentSetup) {\n onCleanup = NOOP;\n if (!cb) {\n getter();\n } else if (immediate) {\n callWithAsyncErrorHandling(cb, instance, 3, [\n getter(),\n isMultiSource ? [] : void 0,\n onCleanup\n ]);\n }\n if (flush === \"sync\") {\n const ctx = useSSRContext();\n ssrCleanup = ctx.__watcherHandles || (ctx.__watcherHandles = []);\n } else {\n return NOOP;\n }\n }\n let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE;\n const job = () => {\n if (!effect.active) {\n return;\n }\n if (cb) {\n const newValue = effect.run();\n if (deep || forceTrigger || (isMultiSource ? newValue.some(\n (v, i) => hasChanged(v, oldValue[i])\n ) : hasChanged(newValue, oldValue)) || false) {\n if (cleanup) {\n cleanup();\n }\n callWithAsyncErrorHandling(cb, instance, 3, [\n newValue,\n // pass undefined as the old value when it's changed for the first time\n oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue,\n onCleanup\n ]);\n oldValue = newValue;\n }\n } else {\n effect.run();\n }\n };\n job.allowRecurse = !!cb;\n let scheduler;\n if (flush === \"sync\") {\n scheduler = job;\n } else if (flush === \"post\") {\n scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);\n } else {\n job.pre = true;\n if (instance)\n job.id = instance.uid;\n scheduler = () => queueJob(job);\n }\n const effect = new ReactiveEffect(getter, scheduler);\n if (!!(process.env.NODE_ENV !== \"production\")) {\n effect.onTrack = onTrack;\n effect.onTrigger = onTrigger;\n }\n if (cb) {\n if (immediate) {\n job();\n } else {\n oldValue = effect.run();\n }\n } else if (flush === \"post\") {\n queuePostRenderEffect(\n effect.run.bind(effect),\n instance && instance.suspense\n );\n } else {\n effect.run();\n }\n const unwatch = () => {\n effect.stop();\n if (instance && instance.scope) {\n remove(instance.scope.effects, effect);\n }\n };\n if (ssrCleanup)\n ssrCleanup.push(unwatch);\n return unwatch;\n}\nfunction instanceWatch(source, value, options) {\n const publicThis = this.proxy;\n const getter = isString(source) ? source.includes(\".\") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);\n let cb;\n if (isFunction(value)) {\n cb = value;\n } else {\n cb = value.handler;\n options = value;\n }\n const cur = currentInstance;\n setCurrentInstance(this);\n const res = doWatch(getter, cb.bind(publicThis), options);\n if (cur) {\n setCurrentInstance(cur);\n } else {\n unsetCurrentInstance();\n }\n return res;\n}\nfunction createPathGetter(ctx, path) {\n const segments = path.split(\".\");\n return () => {\n let cur = ctx;\n for (let i = 0; i < segments.length && cur; i++) {\n cur = cur[segments[i]];\n }\n return cur;\n };\n}\nfunction traverse(value, seen) {\n if (!isObject(value) || value[\"__v_skip\"]) {\n return value;\n }\n seen = seen || /* @__PURE__ */ new Set();\n if (seen.has(value)) {\n return value;\n }\n seen.add(value);\n if (isRef(value)) {\n traverse(value.value, seen);\n } else if (isArray(value)) {\n for (let i = 0; i < value.length; i++) {\n traverse(value[i], seen);\n }\n } else if (isSet(value) || isMap(value)) {\n value.forEach((v) => {\n traverse(v, seen);\n });\n } else if (isPlainObject(value)) {\n for (const key in value) {\n traverse(value[key], seen);\n }\n }\n return value;\n}\n\nfunction validateDirectiveName(name) {\n if (isBuiltInDirective(name)) {\n warn(\"Do not use built-in directive ids as custom directive id: \" + name);\n }\n}\nfunction withDirectives(vnode, directives) {\n const internalInstance = currentRenderingInstance;\n if (internalInstance === null) {\n !!(process.env.NODE_ENV !== \"production\") && warn(`withDirectives can only be used inside render functions.`);\n return vnode;\n }\n const instance = getExposeProxy(internalInstance) || internalInstance.proxy;\n const bindings = vnode.dirs || (vnode.dirs = []);\n for (let i = 0; i < directives.length; i++) {\n let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];\n if (dir) {\n if (isFunction(dir)) {\n dir = {\n mounted: dir,\n updated: dir\n };\n }\n if (dir.deep) {\n traverse(value);\n }\n bindings.push({\n dir,\n instance,\n value,\n oldValue: void 0,\n arg,\n modifiers\n });\n }\n }\n return vnode;\n}\nfunction invokeDirectiveHook(vnode, prevVNode, instance, name) {\n const bindings = vnode.dirs;\n const oldBindings = prevVNode && prevVNode.dirs;\n for (let i = 0; i < bindings.length; i++) {\n const binding = bindings[i];\n if (oldBindings) {\n binding.oldValue = oldBindings[i].value;\n }\n let hook = binding.dir[name];\n if (hook) {\n pauseTracking();\n callWithAsyncErrorHandling(hook, instance, 8, [\n vnode.el,\n binding,\n vnode,\n prevVNode\n ]);\n resetTracking();\n }\n }\n}\n\nfunction useTransitionState() {\n const state = {\n isMounted: false,\n isLeaving: false,\n isUnmounting: false,\n leavingVNodes: /* @__PURE__ */ new Map()\n };\n onMounted(() => {\n state.isMounted = true;\n });\n onBeforeUnmount(() => {\n state.isUnmounting = true;\n });\n return state;\n}\nconst TransitionHookValidator = [Function, Array];\nconst BaseTransitionPropsValidators = {\n mode: String,\n appear: Boolean,\n persisted: Boolean,\n // enter\n onBeforeEnter: TransitionHookValidator,\n onEnter: TransitionHookValidator,\n onAfterEnter: TransitionHookValidator,\n onEnterCancelled: TransitionHookValidator,\n // leave\n onBeforeLeave: TransitionHookValidator,\n onLeave: TransitionHookValidator,\n onAfterLeave: TransitionHookValidator,\n onLeaveCancelled: TransitionHookValidator,\n // appear\n onBeforeAppear: TransitionHookValidator,\n onAppear: TransitionHookValidator,\n onAfterAppear: TransitionHookValidator,\n onAppearCancelled: TransitionHookValidator\n};\nconst BaseTransitionImpl = {\n name: `BaseTransition`,\n props: BaseTransitionPropsValidators,\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const state = useTransitionState();\n let prevTransitionKey;\n return () => {\n const children = slots.default && getTransitionRawChildren(slots.default(), true);\n if (!children || !children.length) {\n return;\n }\n let child = children[0];\n if (children.length > 1) {\n let hasFound = false;\n for (const c of children) {\n if (c.type !== Comment) {\n if (!!(process.env.NODE_ENV !== \"production\") && hasFound) {\n warn(\n \" can only be used on a single element or component. Use for lists.\"\n );\n break;\n }\n child = c;\n hasFound = true;\n if (!!!(process.env.NODE_ENV !== \"production\"))\n break;\n }\n }\n }\n const rawProps = toRaw(props);\n const { mode } = rawProps;\n if (!!(process.env.NODE_ENV !== \"production\") && mode && mode !== \"in-out\" && mode !== \"out-in\" && mode !== \"default\") {\n warn(`invalid mode: ${mode}`);\n }\n if (state.isLeaving) {\n return emptyPlaceholder(child);\n }\n const innerChild = getKeepAliveChild(child);\n if (!innerChild) {\n return emptyPlaceholder(child);\n }\n const enterHooks = resolveTransitionHooks(\n innerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(innerChild, enterHooks);\n const oldChild = instance.subTree;\n const oldInnerChild = oldChild && getKeepAliveChild(oldChild);\n let transitionKeyChanged = false;\n const { getTransitionKey } = innerChild.type;\n if (getTransitionKey) {\n const key = getTransitionKey();\n if (prevTransitionKey === void 0) {\n prevTransitionKey = key;\n } else if (key !== prevTransitionKey) {\n prevTransitionKey = key;\n transitionKeyChanged = true;\n }\n }\n if (oldInnerChild && oldInnerChild.type !== Comment && (!isSameVNodeType(innerChild, oldInnerChild) || transitionKeyChanged)) {\n const leavingHooks = resolveTransitionHooks(\n oldInnerChild,\n rawProps,\n state,\n instance\n );\n setTransitionHooks(oldInnerChild, leavingHooks);\n if (mode === \"out-in\") {\n state.isLeaving = true;\n leavingHooks.afterLeave = () => {\n state.isLeaving = false;\n if (instance.update.active !== false) {\n instance.update();\n }\n };\n return emptyPlaceholder(child);\n } else if (mode === \"in-out\" && innerChild.type !== Comment) {\n leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => {\n const leavingVNodesCache = getLeavingNodesForType(\n state,\n oldInnerChild\n );\n leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild;\n el._leaveCb = () => {\n earlyRemove();\n el._leaveCb = void 0;\n delete enterHooks.delayedLeave;\n };\n enterHooks.delayedLeave = delayedLeave;\n };\n }\n }\n return child;\n };\n }\n};\nconst BaseTransition = BaseTransitionImpl;\nfunction getLeavingNodesForType(state, vnode) {\n const { leavingVNodes } = state;\n let leavingVNodesCache = leavingVNodes.get(vnode.type);\n if (!leavingVNodesCache) {\n leavingVNodesCache = /* @__PURE__ */ Object.create(null);\n leavingVNodes.set(vnode.type, leavingVNodesCache);\n }\n return leavingVNodesCache;\n}\nfunction resolveTransitionHooks(vnode, props, state, instance) {\n const {\n appear,\n mode,\n persisted = false,\n onBeforeEnter,\n onEnter,\n onAfterEnter,\n onEnterCancelled,\n onBeforeLeave,\n onLeave,\n onAfterLeave,\n onLeaveCancelled,\n onBeforeAppear,\n onAppear,\n onAfterAppear,\n onAppearCancelled\n } = props;\n const key = String(vnode.key);\n const leavingVNodesCache = getLeavingNodesForType(state, vnode);\n const callHook = (hook, args) => {\n hook && callWithAsyncErrorHandling(\n hook,\n instance,\n 9,\n args\n );\n };\n const callAsyncHook = (hook, args) => {\n const done = args[1];\n callHook(hook, args);\n if (isArray(hook)) {\n if (hook.every((hook2) => hook2.length <= 1))\n done();\n } else if (hook.length <= 1) {\n done();\n }\n };\n const hooks = {\n mode,\n persisted,\n beforeEnter(el) {\n let hook = onBeforeEnter;\n if (!state.isMounted) {\n if (appear) {\n hook = onBeforeAppear || onBeforeEnter;\n } else {\n return;\n }\n }\n if (el._leaveCb) {\n el._leaveCb(\n true\n /* cancelled */\n );\n }\n const leavingVNode = leavingVNodesCache[key];\n if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el._leaveCb) {\n leavingVNode.el._leaveCb();\n }\n callHook(hook, [el]);\n },\n enter(el) {\n let hook = onEnter;\n let afterHook = onAfterEnter;\n let cancelHook = onEnterCancelled;\n if (!state.isMounted) {\n if (appear) {\n hook = onAppear || onEnter;\n afterHook = onAfterAppear || onAfterEnter;\n cancelHook = onAppearCancelled || onEnterCancelled;\n } else {\n return;\n }\n }\n let called = false;\n const done = el._enterCb = (cancelled) => {\n if (called)\n return;\n called = true;\n if (cancelled) {\n callHook(cancelHook, [el]);\n } else {\n callHook(afterHook, [el]);\n }\n if (hooks.delayedLeave) {\n hooks.delayedLeave();\n }\n el._enterCb = void 0;\n };\n if (hook) {\n callAsyncHook(hook, [el, done]);\n } else {\n done();\n }\n },\n leave(el, remove) {\n const key2 = String(vnode.key);\n if (el._enterCb) {\n el._enterCb(\n true\n /* cancelled */\n );\n }\n if (state.isUnmounting) {\n return remove();\n }\n callHook(onBeforeLeave, [el]);\n let called = false;\n const done = el._leaveCb = (cancelled) => {\n if (called)\n return;\n called = true;\n remove();\n if (cancelled) {\n callHook(onLeaveCancelled, [el]);\n } else {\n callHook(onAfterLeave, [el]);\n }\n el._leaveCb = void 0;\n if (leavingVNodesCache[key2] === vnode) {\n delete leavingVNodesCache[key2];\n }\n };\n leavingVNodesCache[key2] = vnode;\n if (onLeave) {\n callAsyncHook(onLeave, [el, done]);\n } else {\n done();\n }\n },\n clone(vnode2) {\n return resolveTransitionHooks(vnode2, props, state, instance);\n }\n };\n return hooks;\n}\nfunction emptyPlaceholder(vnode) {\n if (isKeepAlive(vnode)) {\n vnode = cloneVNode(vnode);\n vnode.children = null;\n return vnode;\n }\n}\nfunction getKeepAliveChild(vnode) {\n return isKeepAlive(vnode) ? vnode.children ? vnode.children[0] : void 0 : vnode;\n}\nfunction setTransitionHooks(vnode, hooks) {\n if (vnode.shapeFlag & 6 && vnode.component) {\n setTransitionHooks(vnode.component.subTree, hooks);\n } else if (vnode.shapeFlag & 128) {\n vnode.ssContent.transition = hooks.clone(vnode.ssContent);\n vnode.ssFallback.transition = hooks.clone(vnode.ssFallback);\n } else {\n vnode.transition = hooks;\n }\n}\nfunction getTransitionRawChildren(children, keepComment = false, parentKey) {\n let ret = [];\n let keyedFragmentCount = 0;\n for (let i = 0; i < children.length; i++) {\n let child = children[i];\n const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i);\n if (child.type === Fragment) {\n if (child.patchFlag & 128)\n keyedFragmentCount++;\n ret = ret.concat(\n getTransitionRawChildren(child.children, keepComment, key)\n );\n } else if (keepComment || child.type !== Comment) {\n ret.push(key != null ? cloneVNode(child, { key }) : child);\n }\n }\n if (keyedFragmentCount > 1) {\n for (let i = 0; i < ret.length; i++) {\n ret[i].patchFlag = -2;\n }\n }\n return ret;\n}\n\nfunction defineComponent(options, extraOptions) {\n return isFunction(options) ? (\n // #8326: extend call and options.name access are considered side-effects\n // by Rollup, so we have to wrap it in a pure-annotated IIFE.\n /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))()\n ) : options;\n}\n\nconst isAsyncWrapper = (i) => !!i.type.__asyncLoader;\nfunction defineAsyncComponent(source) {\n if (isFunction(source)) {\n source = { loader: source };\n }\n const {\n loader,\n loadingComponent,\n errorComponent,\n delay = 200,\n timeout,\n // undefined = never times out\n suspensible = true,\n onError: userOnError\n } = source;\n let pendingRequest = null;\n let resolvedComp;\n let retries = 0;\n const retry = () => {\n retries++;\n pendingRequest = null;\n return load();\n };\n const load = () => {\n let thisRequest;\n return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => {\n err = err instanceof Error ? err : new Error(String(err));\n if (userOnError) {\n return new Promise((resolve, reject) => {\n const userRetry = () => resolve(retry());\n const userFail = () => reject(err);\n userOnError(err, userRetry, userFail, retries + 1);\n });\n } else {\n throw err;\n }\n }).then((comp) => {\n if (thisRequest !== pendingRequest && pendingRequest) {\n return pendingRequest;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && !comp) {\n warn(\n `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.`\n );\n }\n if (comp && (comp.__esModule || comp[Symbol.toStringTag] === \"Module\")) {\n comp = comp.default;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && comp && !isObject(comp) && !isFunction(comp)) {\n throw new Error(`Invalid async component load result: ${comp}`);\n }\n resolvedComp = comp;\n return comp;\n }));\n };\n return defineComponent({\n name: \"AsyncComponentWrapper\",\n __asyncLoader: load,\n get __asyncResolved() {\n return resolvedComp;\n },\n setup() {\n const instance = currentInstance;\n if (resolvedComp) {\n return () => createInnerComp(resolvedComp, instance);\n }\n const onError = (err) => {\n pendingRequest = null;\n handleError(\n err,\n instance,\n 13,\n !errorComponent\n /* do not throw in dev if user provided error component */\n );\n };\n if (suspensible && instance.suspense || isInSSRComponentSetup) {\n return load().then((comp) => {\n return () => createInnerComp(comp, instance);\n }).catch((err) => {\n onError(err);\n return () => errorComponent ? createVNode(errorComponent, {\n error: err\n }) : null;\n });\n }\n const loaded = ref(false);\n const error = ref();\n const delayed = ref(!!delay);\n if (delay) {\n setTimeout(() => {\n delayed.value = false;\n }, delay);\n }\n if (timeout != null) {\n setTimeout(() => {\n if (!loaded.value && !error.value) {\n const err = new Error(\n `Async component timed out after ${timeout}ms.`\n );\n onError(err);\n error.value = err;\n }\n }, timeout);\n }\n load().then(() => {\n loaded.value = true;\n if (instance.parent && isKeepAlive(instance.parent.vnode)) {\n queueJob(instance.parent.update);\n }\n }).catch((err) => {\n onError(err);\n error.value = err;\n });\n return () => {\n if (loaded.value && resolvedComp) {\n return createInnerComp(resolvedComp, instance);\n } else if (error.value && errorComponent) {\n return createVNode(errorComponent, {\n error: error.value\n });\n } else if (loadingComponent && !delayed.value) {\n return createVNode(loadingComponent);\n }\n };\n }\n });\n}\nfunction createInnerComp(comp, parent) {\n const { ref: ref2, props, children, ce } = parent.vnode;\n const vnode = createVNode(comp, props, children);\n vnode.ref = ref2;\n vnode.ce = ce;\n delete parent.vnode.ce;\n return vnode;\n}\n\nconst isKeepAlive = (vnode) => vnode.type.__isKeepAlive;\nconst KeepAliveImpl = {\n name: `KeepAlive`,\n // Marker for special handling inside the renderer. We are not using a ===\n // check directly on KeepAlive in the renderer, because importing it directly\n // would prevent it from being tree-shaken.\n __isKeepAlive: true,\n props: {\n include: [String, RegExp, Array],\n exclude: [String, RegExp, Array],\n max: [String, Number]\n },\n setup(props, { slots }) {\n const instance = getCurrentInstance();\n const sharedContext = instance.ctx;\n if (!sharedContext.renderer) {\n return () => {\n const children = slots.default && slots.default();\n return children && children.length === 1 ? children[0] : children;\n };\n }\n const cache = /* @__PURE__ */ new Map();\n const keys = /* @__PURE__ */ new Set();\n let current = null;\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n instance.__v_cache = cache;\n }\n const parentSuspense = instance.suspense;\n const {\n renderer: {\n p: patch,\n m: move,\n um: _unmount,\n o: { createElement }\n }\n } = sharedContext;\n const storageContainer = createElement(\"div\");\n sharedContext.activate = (vnode, container, anchor, isSVG, optimized) => {\n const instance2 = vnode.component;\n move(vnode, container, anchor, 0, parentSuspense);\n patch(\n instance2.vnode,\n vnode,\n container,\n anchor,\n instance2,\n parentSuspense,\n isSVG,\n vnode.slotScopeIds,\n optimized\n );\n queuePostRenderEffect(() => {\n instance2.isDeactivated = false;\n if (instance2.a) {\n invokeArrayFns(instance2.a);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeMounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n sharedContext.deactivate = (vnode) => {\n const instance2 = vnode.component;\n move(vnode, storageContainer, null, 1, parentSuspense);\n queuePostRenderEffect(() => {\n if (instance2.da) {\n invokeArrayFns(instance2.da);\n }\n const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted;\n if (vnodeHook) {\n invokeVNodeHook(vnodeHook, instance2.parent, vnode);\n }\n instance2.isDeactivated = true;\n }, parentSuspense);\n if (!!(process.env.NODE_ENV !== \"production\") || __VUE_PROD_DEVTOOLS__) {\n devtoolsComponentAdded(instance2);\n }\n };\n function unmount(vnode) {\n resetShapeFlag(vnode);\n _unmount(vnode, instance, parentSuspense, true);\n }\n function pruneCache(filter) {\n cache.forEach((vnode, key) => {\n const name = getComponentName(vnode.type);\n if (name && (!filter || !filter(name))) {\n pruneCacheEntry(key);\n }\n });\n }\n function pruneCacheEntry(key) {\n const cached = cache.get(key);\n if (!current || !isSameVNodeType(cached, current)) {\n unmount(cached);\n } else if (current) {\n resetShapeFlag(current);\n }\n cache.delete(key);\n keys.delete(key);\n }\n watch(\n () => [props.include, props.exclude],\n ([include, exclude]) => {\n include && pruneCache((name) => matches(include, name));\n exclude && pruneCache((name) => !matches(exclude, name));\n },\n // prune post-render after `current` has been updated\n { flush: \"post\", deep: true }\n );\n let pendingCacheKey = null;\n const cacheSubtree = () => {\n if (pendingCacheKey != null) {\n cache.set(pendingCacheKey, getInnerChild(instance.subTree));\n }\n };\n onMounted(cacheSubtree);\n onUpdated(cacheSubtree);\n onBeforeUnmount(() => {\n cache.forEach((cached) => {\n const { subTree, suspense } = instance;\n const vnode = getInnerChild(subTree);\n if (cached.type === vnode.type && cached.key === vnode.key) {\n resetShapeFlag(vnode);\n const da = vnode.component.da;\n da && queuePostRenderEffect(da, suspense);\n return;\n }\n unmount(cached);\n });\n });\n return () => {\n pendingCacheKey = null;\n if (!slots.default) {\n return null;\n }\n const children = slots.default();\n const rawVNode = children[0];\n if (children.length > 1) {\n if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(`KeepAlive should contain exactly one component child.`);\n }\n current = null;\n return children;\n } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) {\n current = null;\n return rawVNode;\n }\n let vnode = getInnerChild(rawVNode);\n const comp = vnode.type;\n const name = getComponentName(\n isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp\n );\n const { include, exclude, max } = props;\n if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) {\n current = vnode;\n return rawVNode;\n }\n const key = vnode.key == null ? comp : vnode.key;\n const cachedVNode = cache.get(key);\n if (vnode.el) {\n vnode = cloneVNode(vnode);\n if (rawVNode.shapeFlag & 128) {\n rawVNode.ssContent = vnode;\n }\n }\n pendingCacheKey = key;\n if (cachedVNode) {\n vnode.el = cachedVNode.el;\n vnode.component = cachedVNode.component;\n if (vnode.transition) {\n setTransitionHooks(vnode, vnode.transition);\n }\n vnode.shapeFlag |= 512;\n keys.delete(key);\n keys.add(key);\n } else {\n keys.add(key);\n if (max && keys.size > parseInt(max, 10)) {\n pruneCacheEntry(keys.values().next().value);\n }\n }\n vnode.shapeFlag |= 256;\n current = vnode;\n return isSuspense(rawVNode.type) ? rawVNode : vnode;\n };\n }\n};\nconst KeepAlive = KeepAliveImpl;\nfunction matches(pattern, name) {\n if (isArray(pattern)) {\n return pattern.some((p) => matches(p, name));\n } else if (isString(pattern)) {\n return pattern.split(\",\").includes(name);\n } else if (isRegExp(pattern)) {\n return pattern.test(name);\n }\n return false;\n}\nfunction onActivated(hook, target) {\n registerKeepAliveHook(hook, \"a\", target);\n}\nfunction onDeactivated(hook, target) {\n registerKeepAliveHook(hook, \"da\", target);\n}\nfunction registerKeepAliveHook(hook, type, target = currentInstance) {\n const wrappedHook = hook.__wdc || (hook.__wdc = () => {\n let current = target;\n while (current) {\n if (current.isDeactivated) {\n return;\n }\n current = current.parent;\n }\n return hook();\n });\n injectHook(type, wrappedHook, target);\n if (target) {\n let current = target.parent;\n while (current && current.parent) {\n if (isKeepAlive(current.parent.vnode)) {\n injectToKeepAliveRoot(wrappedHook, type, target, current);\n }\n current = current.parent;\n }\n }\n}\nfunction injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {\n const injected = injectHook(\n type,\n hook,\n keepAliveRoot,\n true\n /* prepend */\n );\n onUnmounted(() => {\n remove(keepAliveRoot[type], injected);\n }, target);\n}\nfunction resetShapeFlag(vnode) {\n vnode.shapeFlag &= ~256;\n vnode.shapeFlag &= ~512;\n}\nfunction getInnerChild(vnode) {\n return vnode.shapeFlag & 128 ? vnode.ssContent : vnode;\n}\n\nfunction injectHook(type, hook, target = currentInstance, prepend = false) {\n if (target) {\n const hooks = target[type] || (target[type] = []);\n const wrappedHook = hook.__weh || (hook.__weh = (...args) => {\n if (target.isUnmounted) {\n return;\n }\n pauseTracking();\n setCurrentInstance(target);\n const res = callWithAsyncErrorHandling(hook, target, type, args);\n unsetCurrentInstance();\n resetTracking();\n return res;\n });\n if (prepend) {\n hooks.unshift(wrappedHook);\n } else {\n hooks.push(wrappedHook);\n }\n return wrappedHook;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n const apiName = toHandlerKey(ErrorTypeStrings[type].replace(/ hook$/, \"\"));\n warn(\n `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` )\n );\n }\n}\nconst createHook = (lifecycle) => (hook, target = currentInstance) => (\n // post-create lifecycle registrations are noops during SSR (except for serverPrefetch)\n (!isInSSRComponentSetup || lifecycle === \"sp\") && injectHook(lifecycle, (...args) => hook(...args), target)\n);\nconst onBeforeMount = createHook(\"bm\");\nconst onMounted = createHook(\"m\");\nconst onBeforeUpdate = createHook(\"bu\");\nconst onUpdated = createHook(\"u\");\nconst onBeforeUnmount = createHook(\"bum\");\nconst onUnmounted = createHook(\"um\");\nconst onServerPrefetch = createHook(\"sp\");\nconst onRenderTriggered = createHook(\n \"rtg\"\n);\nconst onRenderTracked = createHook(\n \"rtc\"\n);\nfunction onErrorCaptured(hook, target = currentInstance) {\n injectHook(\"ec\", hook, target);\n}\n\nconst COMPONENTS = \"components\";\nconst DIRECTIVES = \"directives\";\nfunction resolveComponent(name, maybeSelfReference) {\n return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name;\n}\nconst NULL_DYNAMIC_COMPONENT = Symbol.for(\"v-ndc\");\nfunction resolveDynamicComponent(component) {\n if (isString(component)) {\n return resolveAsset(COMPONENTS, component, false) || component;\n } else {\n return component || NULL_DYNAMIC_COMPONENT;\n }\n}\nfunction resolveDirective(name) {\n return resolveAsset(DIRECTIVES, name);\n}\nfunction resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) {\n const instance = currentRenderingInstance || currentInstance;\n if (instance) {\n const Component = instance.type;\n if (type === COMPONENTS) {\n const selfName = getComponentName(\n Component,\n false\n /* do not include inferred name to avoid breaking existing code */\n );\n if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) {\n return Component;\n }\n }\n const res = (\n // local registration\n // check instance[type] first which is resolved for options API\n resolve(instance[type] || Component[type], name) || // global registration\n resolve(instance.appContext[type], name)\n );\n if (!res && maybeSelfReference) {\n return Component;\n }\n if (!!(process.env.NODE_ENV !== \"production\") && warnMissing && !res) {\n const extra = type === COMPONENTS ? `\nIf this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``;\n warn(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`);\n }\n return res;\n } else if (!!(process.env.NODE_ENV !== \"production\")) {\n warn(\n `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().`\n );\n }\n}\nfunction resolve(registry, name) {\n return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]);\n}\n\nfunction renderList(source, renderItem, cache, index) {\n let ret;\n const cached = cache && cache[index];\n if (isArray(source) || isString(source)) {\n ret = new Array(source.length);\n for (let i = 0, l = source.length; i < l; i++) {\n ret[i] = renderItem(source[i], i, void 0, cached && cached[i]);\n }\n } else if (typeof source === \"number\") {\n if (!!(process.env.NODE_ENV !== \"production\") && !Number.isInteger(source)) {\n warn(`The v-for range expect an integer value but got ${source}.`);\n }\n ret = new Array(source);\n for (let i = 0; i < source; i++) {\n ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);\n }\n } else if (isObject(source)) {\n if (source[Symbol.iterator]) {\n ret = Array.from(\n source,\n (item, i) => renderItem(item, i, void 0, cached && cached[i])\n );\n } else {\n const keys = Object.keys(source);\n ret = new Array(keys.length);\n for (let i = 0, l = keys.length; i < l; i++) {\n const key = keys[i];\n ret[i] = renderItem(source[key], key, i, cached && cached[i]);\n }\n }\n } else {\n ret = [];\n }\n if (cache) {\n cache[index] = ret;\n }\n return ret;\n}\n\nfunction createSlots(slots, dynamicSlots) {\n for (let i = 0; i < dynamicSlots.length; i++) {\n const slot = dynamicSlots[i];\n if (isArray(slot)) {\n for (let j = 0; j < slot.length; j++) {\n slots[slot[j].name] = slot[j].fn;\n }\n } else if (slot) {\n slots[slot.name] = slot.key ? (...args) => {\n const res = slot.fn(...args);\n if (res)\n res.key = slot.key;\n return res;\n } : slot.fn;\n }\n }\n return slots;\n}\n\nfunction renderSlot(slots, name, props = {}, fallback, noSlotted) {\n if (currentRenderingInstance.isCE || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.isCE) {\n if (name !== \"default\")\n props.name = name;\n return createVNode(\"slot\", props, fallback && fallback());\n }\n let slot = slots[name];\n if (!!(process.env.NODE_ENV !== \"production\") && slot && slot.length > 1) {\n warn(\n `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.`\n );\n slot = () => [];\n }\n if (slot && slot._c) {\n slot._d = false;\n }\n openBlock();\n const validSlotContent = slot && ensureValidVNode(slot(props));\n const rendered = createBlock(\n Fragment,\n {\n key: props.key || // slot content array of a dynamic conditional slot may have a branch\n // key attached in the `createSlots` helper, respect that\n validSlotContent && validSlotContent.key || `_${name}`\n },\n validSlotContent || (fallback ? fallback() : []),\n validSlotContent && slots._ === 1 ? 64 : -2\n );\n if (!noSlotted && rendered.scopeId) {\n rendered.slotScopeIds = [rendered.scopeId + \"-s\"];\n }\n if (slot && slot._c) {\n slot._d = true;\n }\n return rendered;\n}\nfunction ensureValidVNode(vnodes) {\n return vnodes.some((child) => {\n if (!isVNode(child))\n return true;\n if (child.type === Comment)\n return false;\n if (child.type === Fragment && !ensureValidVNode(child.children))\n return false;\n return true;\n }) ? vnodes : null;\n}\n\nfunction toHandlers(obj, preserveCaseIfNecessary) {\n const ret = {};\n if (!!(process.env.NODE_ENV !== \"production\") && !isObject(obj)) {\n warn(`v-on with no argument expects an object value.`);\n return ret;\n }\n for (const key in obj) {\n ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key];\n }\n return ret;\n}\n\nconst getPublicInstance = (i) => {\n if (!i)\n return null;\n if (isStatefulComponent(i))\n return getExposeProxy(i) || i.proxy;\n return getPublicInstance(i.parent);\n};\nconst publicPropertiesMap = (\n // Move PURE marker to new line to workaround compiler discarding it\n // due to type annotation\n /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), {\n $: (i) => i,\n $el: (i) => i.vnode.el,\n $data: (i) => i.data,\n $props: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.props) : i.props,\n $attrs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.attrs) : i.attrs,\n $slots: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.slots) : i.slots,\n $refs: (i) => !!(process.env.NODE_ENV !== \"production\") ? shallowReadonly(i.refs) : i.refs,\n $parent: (i) => getPublicInstance(i.parent),\n $root: (i) => getPublicInstance(i.root),\n $emit: (i) => i.emit,\n $options: (i) => __VUE_OPTIONS_API__ ? resolveMergedOptions(i) : i.type,\n $forceUpdate: (i) => i.f || (i.f = () => queueJob(i.update)),\n $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)),\n $watch: (i) => __VUE_OPTIONS_API__ ? instanceWatch.bind(i) : NOOP\n })\n);\nconst isReservedPrefix = (key) => key === \"_\" || key === \"$\";\nconst hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key);\nconst PublicInstanceProxyHandlers = {\n get({ _: instance }, key) {\n const { ctx, setupState, data, props, accessCache, type, appContext } = instance;\n if (!!(process.env.NODE_ENV !== \"production\") && key === \"__isVue\") {\n return true;\n }\n let normalizedProps;\n if (key[0] !== \"$\") {\n const n = accessCache[key];\n if (n !== void 0) {\n switch (n) {\n case 1 /* SETUP */:\n return setupState[key];\n case 2 /* DATA */:\n return data[key];\n case 4 /* CONTEXT */:\n return ctx[key];\n case 3 /* PROPS */:\n return props[key];\n }\n } else if (hasSetupBinding(setupState, key)) {\n accessCache[key] = 1 /* SETUP */;\n return setupState[key];\n } else if (data !== EMPTY_OBJ && hasOwn(data, key)) {\n accessCache[key] = 2 /* DATA */;\n return data[key];\n } else if (\n // only cache other properties when instance has declared (thus stable)\n // props\n (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)\n ) {\n accessCache[key] = 3 /* PROPS */;\n return props[key];\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (!__VUE_OPTIONS_API__ || shouldCacheAccess) {\n accessCache[key] = 0 /* OTHER */;\n }\n }\n const publicGetter = publicPropertiesMap[key];\n let cssModule, globalProperties;\n if (publicGetter) {\n if (key === \"$attrs\") {\n track(instance, \"get\", key);\n !!(process.env.NODE_ENV !== \"production\") && markAttrsAccessed();\n } else if (!!(process.env.NODE_ENV !== \"production\") && key === \"$slots\") {\n track(instance, \"get\", key);\n }\n return publicGetter(instance);\n } else if (\n // css module (injected by vue-loader)\n (cssModule = type.__cssModules) && (cssModule = cssModule[key])\n ) {\n return cssModule;\n } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {\n accessCache[key] = 4 /* CONTEXT */;\n return ctx[key];\n } else if (\n // global properties\n globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)\n ) {\n {\n return globalProperties[key];\n }\n } else if (!!(process.env.NODE_ENV !== \"production\") && currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading\n // to infinite warning loop\n key.indexOf(\"__v\") !== 0)) {\n if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) {\n warn(\n `Property ${JSON.stringify(\n key\n )} must be accessed via $data because it starts with a reserved character (\"$\" or \"_\") and is not proxied on the render context.`\n );\n } else if (instance === currentRenderingInstance) {\n warn(\n `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.`\n );\n }\n }\n },\n set({ _: instance }, key, value) {\n const { data, setupState, ctx } = instance;\n if (hasSetupBinding(setupState, key)) {\n setupState[key] = value;\n return true;\n } else if (!!(process.env.NODE_ENV !== \"production\") && setupState.__isScriptSetup && hasOwn(setupState, key)) {\n warn(`Cannot mutate
diff --git a/packages/vue/.vitepress/theme/components/HomeContributors.vue b/packages/.vitepress/theme/components/HomeContributors.vue
similarity index 97%
rename from packages/vue/.vitepress/theme/components/HomeContributors.vue
rename to packages/.vitepress/theme/components/HomeContributors.vue
index 69fdf53..4caa1c8 100644
--- a/packages/vue/.vitepress/theme/components/HomeContributors.vue
+++ b/packages/.vitepress/theme/components/HomeContributors.vue
@@ -26,6 +26,7 @@ const members = [
display: flex;
flex-direction: column;
align-items: center;
+ margin: auto;
}
h3{
diff --git a/packages/.vitepress/theme/components/Preview.vue b/packages/.vitepress/theme/components/Preview.vue
new file mode 100644
index 0000000..f827345
--- /dev/null
+++ b/packages/.vitepress/theme/components/Preview.vue
@@ -0,0 +1,22 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/packages/vue/.vitepress/theme/index.ts b/packages/.vitepress/theme/index.ts
similarity index 72%
rename from packages/vue/.vitepress/theme/index.ts
rename to packages/.vitepress/theme/index.ts
index 6600998..07970be 100644
--- a/packages/vue/.vitepress/theme/index.ts
+++ b/packages/.vitepress/theme/index.ts
@@ -1,16 +1,16 @@
// https://vitepress.dev/guide/custom-theme
-import { h } from 'vue';
-import Theme from 'vitepress/theme';
-import './style.css';
+import { h } from 'vue'
+import Theme from 'vitepress/theme'
+import './style.css'
export default {
...Theme,
Layout: () => {
return h(Theme.Layout, null, {
// https://vitepress.dev/guide/extending-default-theme#layout-slots
- });
+ })
},
enhanceApp({ app, router, siteData }) {
// ...
- },
-};
+ }
+}
diff --git a/packages/vue/.vitepress/theme/style.css b/packages/.vitepress/theme/style.css
similarity index 81%
rename from packages/vue/.vitepress/theme/style.css
rename to packages/.vitepress/theme/style.css
index 224c09c..a004d5e 100644
--- a/packages/vue/.vitepress/theme/style.css
+++ b/packages/.vitepress/theme/style.css
@@ -6,12 +6,9 @@
/**
* Colors
* -------------------------------------------------------------------------- */
-@tailwind base;
-@tailwind components;
-@tailwind utilities;
-:root {
- --vp-c-brand: #21cd80;
+ :root {
+ --vp-c-brand: rgb(33, 205, 128);
--vp-c-brand-light: rgba(40, 230, 145, 0.991);
--vp-c-brand-lighter: #9499ff;
--vp-c-brand-lightest: #bcc0ff;
@@ -42,13 +39,17 @@
:root {
--vp-home-hero-name-color: transparent;
- --vp-home-hero-name-background: -webkit-linear-gradient(120deg,
- rgb(40, 230, 145),
- #65adf1 50%);
+ --vp-home-hero-name-background: -webkit-linear-gradient(
+ 120deg,
+ rgb(40, 230, 145),
+ rgb(101, 173, 241) 50%
+ );
- --vp-home-hero-image-background-image: linear-gradient(-45deg,
- rgba(65, 184, 131, 0.5) 30%, rgb(101, 173, 241));
+ --vp-home-hero-image-background-image: linear-gradient(
+ -45deg,
+ rgba(65, 184, 131, 0.5) 30%, rgb(101, 173, 241)
+ );
--vp-home-hero-image-filter: blur(40px);
}
@@ -72,10 +73,6 @@
--vp-custom-block-tip-border: var(--vp-c-brand);
--vp-custom-block-tip-text: var(--vp-c-brand-darker);
--vp-custom-block-tip-bg: var(--vp-c-brand-dimm);
-
- --vp-c-brand-1: var(--vp-c-brand);
- --vp-c-brand-2: #65adf1;
-/* --vp-font-family-base: 'Uber Move Text', sans-serif; */
}
.dark {
@@ -93,8 +90,3 @@
--docsearch-primary-color: var(--vp-c-brand) !important;
}
-
-h3{
- font-size: 24px;
- font-weight: bold;
-}
\ No newline at end of file
diff --git a/packages/change-icon/.eslintrc.json b/packages/change-icon/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/change-icon/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/change-icon/README.md b/packages/change-icon/README.md
deleted file mode 100644
index b4a515d..0000000
--- a/packages/change-icon/README.md
+++ /dev/null
@@ -1,224 +0,0 @@
-# @nativescript-use/change-icon
-
-Programmatically change the application icon.
-
-## Install
-```javascript
-npm install @nativescript-use/change-icon
-```
-
-## Configuration
-
-### Android
-
-To begin, we must define our icons in `App_Resources/Android/src/main/res`, we recommend the page https://icon.kitchen/ to generate the icons for our application. This document will create 3 icons for the sample:
-- Default Icon.
-- Dark icon.
-- Cafe icon.
-
-1. Generate the icons and add them to `App_Resources/Android/src/main/res/mipmap`.
-
-- ic_launcher_foreground_[default|dark|cafe].png (`Icon`)
-- ic_launcher_background__[default|dark|cafe].png (`Icon Background`)
-
-1. Add the `adaptive-icon` to your `mipmap-anydpi-v26` folder inside `App_Resources/Android/src/main/res/`.
-
-- `mipmap-anydpi-v26/ic_launcher_default.xml`
-
-```xml
-
-
-
-
-
-```
-
-- `mipmap-anydpi-v26/ic_launcher_dark.xml`
-```xml
-
-
-
-
-
-```
-- `mipmap-anydpi-v26/ic_launcher_cafe.xml`
-```xml
-
-
-
-
-
-```
-
-3. Add `activity-alias` to our `AndroidManifest.xml`. To change the icon in android we need to specify an `activity-alias` in `AndroidManifest.xml` plus one for the default icon, so for this example we will have 3 activity-aliases in our manifest:
-
-```xml
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-```
-
-Note here the important things from the previous code:
-
-- Removed ` ` from the main activity `activity`.
-- We have 3 `activity-alias`, for Default, Dark and Cafe.
-- Activity alias of `activity-alias` of `MainActivityDefault` has `android:enabled="true"` by default.
-- All other `activity-aliases` have `android:enabled="false"`
-- `android:name` of the `activity-alias` tags must always have the format `.MainActivity[The name we will use to change]`, in this case: `MainActivityDefault`, `MainActivityDark`, `MainActivityCafe`.
-- `android:icon` and `android:roundIcon` have the icon we added earlier.
-- `android:targetActivity` has the value of the main activity, default for NativeScript: `com.tns.NativeScriptActivity`.
-
-
-### iOS
-
-To begin, we must define our icons in `App_Resources/iOS`, we recommend the page https://icon.kitchen/ to generate the icons for our application. This document will create 3 icons for the sample:
-- Default Icon.
-- Dark icon.
-- Cafe icon.
-
-1. Have the Default icon in the `App_Resources/iOS/Assets.xcassets/AppIcon.appiconset` folder
-2. Generate the icons and add them to `App_Resources/iOS`.
-
-- [Dark|Cafe]@x2.png (120x120 Dimensions)
-- [Dark|Cafe]@x3.png (180x180 Dimensions)
-
-3. Add in `Info.plist` (`App_Resources/iOS/Info.plist`) the following code to indicate which is the default and which are the alternatives:
-
-```xml
-CFBundleIcons
-
- CFBundlePrimaryIcon
-
- CFBundleIconFiles
-
- Default
-
- UIPrerenderedIcon
-
-
- CFBundleAlternateIcons
-
- Dark
-
- CFBundleIconFiles
-
- Dark
-
- UIPrerenderedIcon
-
-
- Cafe
-
- CFBundleIconFiles
-
- Cafe
-
- UIPrerenderedIcon
-
-
-
-
-```
-
-
-### Usage
-
-You just have to import the library and use the available methods
-- `getCurrent()`
-- `reset()`
-- `change("NameOfIcon")`
-
-```ts
-import { changeIcon } from "@nativescript-use/change-icon"
-
-function changeIconToDark(){
- changeIcon.change("Dark");
-}
-
-function changeIconToCafe(){
- changeIcon.change("Cafe");
-}
-
-function changeIconToDefault(){
- changeIcon.reset();
-}
-
-function getCurrentIcon(){
- return changeIcon.getCurrent(); // "Default" | "Dark" | "Cafe"
-}
-
-
-```
-## License
-
-Apache License Version 2.0
diff --git a/packages/change-icon/index.android.ts b/packages/change-icon/index.android.ts
deleted file mode 100644
index 4857d57..0000000
--- a/packages/change-icon/index.android.ts
+++ /dev/null
@@ -1,51 +0,0 @@
-import { Utils } from '@nativescript/core';
-import PackageManager = android.content.pm.PackageManager;
-
-const startNameActivity = 'MainActivity';
-
-export const changeIcon = {
- reset() {
- changeIcon.change(null);
- },
- getCurrent() {
- const activity = Utils.android.getCurrentActivity();
- if (activity == null) {
- return 'ANDROID:Error';
- }
-
- const activityName = activity.getComponentName().getClassName();
- if (activityName.endsWith(startNameActivity) || activityName === 'com.tns.NativeScriptActivity') {
- return 'Default';
- }
-
- const activityNameSplit = activityName.split(startNameActivity);
- if (activityNameSplit.length != 2) {
- return 'ANDROID:UNEXPECTED_COMPONENT_CLASS';
- }
-
- return activityNameSplit[1];
- },
- change(icon: string | null) {
- const currentIcon = changeIcon.getCurrent();
- if (currentIcon === icon) {
- console.log('ICON_ALREADY_USED');
- return;
- }
-
- if (currentIcon === 'ANDROID:UNEXPECTED_COMPONENT_CLASS' || currentIcon === 'ANDROID:Error') {
- console.log(currentIcon);
- return;
- }
-
- let newIcon = icon;
- if (!icon || icon === '' || icon === 'Default') {
- newIcon = 'Default';
- }
- const manager = Utils.android.getCurrentActivity().getPackageManager();
- //Disable
- manager.setComponentEnabledSetting(new android.content.ComponentName(Utils.android.getCurrentActivity(), `${Utils.android.getApplicationContext().getPackageName()}.${startNameActivity}${changeIcon.getCurrent()}`), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
-
- //Enable
- manager.setComponentEnabledSetting(new android.content.ComponentName(Utils.android.getCurrentActivity(), `${Utils.android.getApplicationContext().getPackageName()}.${startNameActivity}${newIcon}`), PackageManager.COMPONENT_ENABLED_STATE_ENABLED, PackageManager.DONT_KILL_APP);
- },
-};
diff --git a/packages/change-icon/index.d.ts b/packages/change-icon/index.d.ts
deleted file mode 100644
index be72f10..0000000
--- a/packages/change-icon/index.d.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export declare const changeIcon: {
- reset(): void;
- getCurrent(): string;
- change(icon: string | null): void;
-};
diff --git a/packages/change-icon/index.ios.ts b/packages/change-icon/index.ios.ts
deleted file mode 100644
index b22488e..0000000
--- a/packages/change-icon/index.ios.ts
+++ /dev/null
@@ -1,21 +0,0 @@
-export const changeIcon = {
- reset() {
- changeIcon.change(null);
- },
- getCurrent() {
- return UIApplication.sharedApplication.alternateIconName ?? 'Default';
- },
- change(icon: string | null) {
- if (changeIcon.getCurrent() === icon) {
- console.log('ICON_ALREADY_USED');
- return;
- }
-
- let newIcon: string | null = icon;
- if (!icon || icon === '' || icon === 'Default') {
- newIcon = null;
- }
-
- UIApplication.sharedApplication.setAlternateIconNameCompletionHandler(newIcon, null);
- },
-};
diff --git a/packages/change-icon/package.json b/packages/change-icon/package.json
deleted file mode 100644
index 96e729a..0000000
--- a/packages/change-icon/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/change-icon",
- "version": "0.0.4",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Martínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/change-icon/project.json b/packages/change-icon/project.json
deleted file mode 100644
index b64afe9..0000000
--- a/packages/change-icon/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "change-icon",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/change-icon",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/change-icon",
- "tsConfig": "packages/change-icon/tsconfig.json",
- "packageJson": "packages/change-icon/package.json",
- "main": "packages/change-icon/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/change-icon/*.md",
- "packages/change-icon/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/change-icon/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts change-icon"],
- "parallel": false
- },
- "outputs": ["dist/packages/change-icon"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages change-icon"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/change-icon/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/change-icon/references.d.ts b/packages/change-icon/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/change-icon/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/change-icon/tsconfig.json b/packages/change-icon/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/change-icon/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/core/globalState.ts b/packages/core/globalState.ts
new file mode 100644
index 0000000..cdbfb91
--- /dev/null
+++ b/packages/core/globalState.ts
@@ -0,0 +1,18 @@
+import { effectScope } from "nativescript-vue"
+
+export type AnyFn = (...args: any[]) => any
+export function createGlobalState(
+ stateFactory: Fn,
+ ): Fn {
+ let initialized = false
+ let state: any
+ const scope = effectScope(true)
+
+ return ((...args: any[]) => {
+ if (!initialized) {
+ state = scope.run(() => stateFactory(...args))!
+ initialized = true
+ }
+ return state
+ }) as Fn
+ }
\ No newline at end of file
diff --git a/packages/core/index.ts b/packages/core/index.ts
new file mode 100644
index 0000000..d91e2f0
--- /dev/null
+++ b/packages/core/index.ts
@@ -0,0 +1,15 @@
+/* Functions */
+export * from "./unrefView"
+export * from "./useClipboard"
+export * from "./useColorMode"
+export * from "./useColorPalette"
+export * from "./useElementSize"
+export * from "./useEventListener"
+export * from "./useKeyboard"
+export * from "./useRootLayout"
+export * from "./useScreenOrientation"
+export * from "./useStorage"
+export * from "./types"
+
+/* Global hooks */
+export * from "./onApplicationMounted"
\ No newline at end of file
diff --git a/packages/vue/src/onApplicationMounted/index.md b/packages/core/onApplicationMounted/index.md
similarity index 88%
rename from packages/vue/src/onApplicationMounted/index.md
rename to packages/core/onApplicationMounted/index.md
index 57db91f..b92d2c9 100644
--- a/packages/vue/src/onApplicationMounted/index.md
+++ b/packages/core/onApplicationMounted/index.md
@@ -1,10 +1,8 @@
-
# onApplicationMounted
Secure hook to access the native main view.
+
There are times when we want to access the main view of the application or access the native side when starting the application or we want to have global functions that can be used when starting the application or at another point. `onApplicationMounted` ensures that the application is mounted, if it hasn't been mounted yet it will wait until you do and if it is mounted it will execute your code right away.
@@ -25,7 +23,7 @@ const frame = Frame.topmost(); // 💀 will be undefined
createApp(Home).start();
```
-
+
## Solution
@@ -33,7 +31,7 @@ createApp(Home).start();
// app.ts / main.ts
import { createApp } from 'nativescript-vue';
import { Application, Utils } from "@nativescript/core";
-import { onApplicationMounted } from '@nativescript-use/vue';
+import { onApplicationMounted } from '@vallemar/nativescript-vueuse';
onApplicationMounted(() => { // 👏 fixed with this
if(global.isAndroid){
@@ -47,10 +45,9 @@ onApplicationMounted(() => { // 👏 fixed with this
createApp(Home).start();
```
+
-## Source
-
## Type declaration
```ts
diff --git a/packages/core/onApplicationMounted/index.ts b/packages/core/onApplicationMounted/index.ts
new file mode 100644
index 0000000..10431ce
--- /dev/null
+++ b/packages/core/onApplicationMounted/index.ts
@@ -0,0 +1,14 @@
+import { Application, Frame } from "@nativescript/core"
+
+export const onApplicationMounted = (callback: () => void, immediateCallback?: () => void) => {
+ if (Frame.topmost()) {
+ immediateCallback ? immediateCallback(): null;
+ callback();
+ } else {
+ const run = () => {
+ callback();
+ Application.off("launch", run);
+ };
+ Application.on("launch", run);
+ }
+}
\ No newline at end of file
diff --git a/packages/core/types.ts b/packages/core/types.ts
new file mode 100644
index 0000000..fa8ce88
--- /dev/null
+++ b/packages/core/types.ts
@@ -0,0 +1,4 @@
+import {View} from "@nativescript/core";
+import {Ref} from "nativescript-vue"
+
+export type ViewRef = Ref<{ nativeView?: T }>
diff --git a/packages/core/unrefView/index.md b/packages/core/unrefView/index.md
new file mode 100644
index 0000000..a9f67c2
--- /dev/null
+++ b/packages/core/unrefView/index.md
@@ -0,0 +1,39 @@
+
+# unrefView
+
+Extract a NativeScript view from a Ref
+
+## Usage
+
+```vue
+
+
+
+
+
+
+
+```
+
+
+## Type declaration
+```ts
+import { View } from "@nativescript/core";
+import { ViewRef } from "@vallemar/nativescript-vueuse";
+/**
+ * Utility. Get View from Ref.
+ *
+ * @param target
+ */
+export declare function unrefView(target: ViewRef): T | undefined;
+```
diff --git a/packages/core/unrefView/index.ts b/packages/core/unrefView/index.ts
new file mode 100644
index 0000000..95f0571
--- /dev/null
+++ b/packages/core/unrefView/index.ts
@@ -0,0 +1,13 @@
+import type { View } from "@nativescript/core"
+import { ViewRef } from "../types"
+
+/**
+ * Utility. Get View from Ref.
+ *
+ * @param target
+ */
+export function unrefView(
+ target: ViewRef,
+) {
+ return target?.value?.nativeView;
+}
diff --git a/packages/vue/src/useClipboard/index.md b/packages/core/useClipboard/index.md
similarity index 78%
rename from packages/vue/src/useClipboard/index.md
rename to packages/core/useClipboard/index.md
index 5147b4b..1764731 100644
--- a/packages/vue/src/useClipboard/index.md
+++ b/packages/core/useClipboard/index.md
@@ -1,6 +1,3 @@
-
# useClipboard
@@ -32,14 +29,12 @@ const {
```
-
+
::: warning
By default clipboard synchronization is disabled, which means that if the user copies something within your application this function will not detect it. To enable synchronization and for the reactive variable `text` to be synchronized with the clipboard, you must enable `{ sync: true }`.
:::
-## Source
-
## Type declaration
```ts
@@ -57,6 +52,3 @@ export declare function useClipboard(options?: {
read: () => string;
};
```
-
-## Core dependency
-[@nativescript-use/nativescript-clipboard](https://github.com/NativeScript-Use/NativeScript-Use/tree/main/packages/nativescript-clipboard)
\ No newline at end of file
diff --git a/packages/core/useClipboard/index.ts b/packages/core/useClipboard/index.ts
new file mode 100644
index 0000000..c02fdd3
--- /dev/null
+++ b/packages/core/useClipboard/index.ts
@@ -0,0 +1,56 @@
+import { onUnmounted, ref } from "nativescript-vue"
+import { Clipboard } from "./nsCore";
+import { onApplicationMounted } from "../onApplicationMounted";
+
+/**
+ * Reactive Clipboard API. Provides the ability to respond to clipboard commands.
+ *
+ */
+export function useClipboard(options?: { sync?: boolean }
+) {
+ const {
+ sync = false
+ } = options ?? {}
+
+ let clipboard: Clipboard | undefined;
+
+ const copied = ref(false);
+ const text = ref("");
+
+ const copy = (text: string) => {
+ copied.value = clipboard?.copy(text) ?? false
+ }
+
+ const read = () => {
+ text.value = clipboard?.read() ?? "";
+ return text.value;
+ }
+
+ onApplicationMounted(() => {
+ if (!clipboard)
+ clipboard = new Clipboard();
+ if (sync) {
+ text.value = clipboard.read();
+ clipboard.onCopy((copyText) => {
+ text.value = copyText;
+ })
+ }
+ }, () => {
+ clipboard = new Clipboard();
+ if (sync) {
+ text.value = clipboard.read();
+ }
+ })
+
+ onUnmounted(() => {
+ clipboard?.offCopy();
+ })
+
+ return {
+ text,
+ copied,
+ copy,
+ read
+ }
+}
+
diff --git a/packages/nativescript-clipboard/common.ts b/packages/core/useClipboard/nsCore/core-common.ts
similarity index 100%
rename from packages/nativescript-clipboard/common.ts
rename to packages/core/useClipboard/nsCore/core-common.ts
diff --git a/packages/core/useClipboard/nsCore/index.android.ts b/packages/core/useClipboard/nsCore/index.android.ts
new file mode 100644
index 0000000..708604a
--- /dev/null
+++ b/packages/core/useClipboard/nsCore/index.android.ts
@@ -0,0 +1,47 @@
+import { Utils } from "@nativescript/core";
+import { ClipboardBase } from "./core-common";
+
+export class Clipboard extends ClipboardBase {
+
+ protected clipboard: android.content.ClipboardManager;
+
+ constructor() {
+ super();
+ this.clipboard = Utils.android.getApplicationContext().getSystemService(android.content.Context.CLIPBOARD_SERVICE);
+ }
+
+ onCopy(callback: (text: string) => void): void {
+ this.offCopy();
+ let THRESHOLD_MS = 50;
+ let enableCallback = true;
+ this.listener = new android.content.ClipboardManager.OnPrimaryClipChangedListener({
+ onPrimaryClipChanged: () => {
+ if (enableCallback)
+ callback(this.clipboard.getPrimaryClip().getItemAt(0)?.getText()?.toString());
+ enableCallback = false;
+ setTimeout(() => {
+ enableCallback = true;
+ }, THRESHOLD_MS);
+ },
+ });
+ this.clipboard.addPrimaryClipChangedListener(this.listener)
+ }
+
+ offCopy(): void {
+ if (this.listener)
+ this.clipboard.removePrimaryClipChangedListener(this.listener)
+ }
+
+ copy(text: string): boolean {
+ const clip = android.content.ClipData.newPlainText("App clipboard data", text);
+ this.clipboard.setPrimaryClip(clip);
+ return true
+ }
+
+ read(): string {
+ const item = this.clipboard.getPrimaryClip().getItemAt(0);
+ let content = item.getText().toString();
+ return content || "";
+ }
+
+}
\ No newline at end of file
diff --git a/packages/nativescript-clipboard/index.d.ts b/packages/core/useClipboard/nsCore/index.d.ts
similarity index 100%
rename from packages/nativescript-clipboard/index.d.ts
rename to packages/core/useClipboard/nsCore/index.d.ts
diff --git a/packages/nativescript-clipboard/index.ios.ts b/packages/core/useClipboard/nsCore/index.ios.ts
similarity index 95%
rename from packages/nativescript-clipboard/index.ios.ts
rename to packages/core/useClipboard/nsCore/index.ios.ts
index 8c45a48..3a3e713 100644
--- a/packages/nativescript-clipboard/index.ios.ts
+++ b/packages/core/useClipboard/nsCore/index.ios.ts
@@ -1,5 +1,5 @@
import { Application } from "@nativescript/core";
-import { ClipboardBase } from "./common";
+import { ClipboardBase } from "./core-common";
export class Clipboard extends ClipboardBase {
diff --git a/packages/vue/src/useColorMode/index.md b/packages/core/useColorMode/index.md
similarity index 80%
rename from packages/vue/src/useColorMode/index.md
rename to packages/core/useColorMode/index.md
index 2819ec5..18f6514 100644
--- a/packages/vue/src/useColorMode/index.md
+++ b/packages/core/useColorMode/index.md
@@ -1,28 +1,11 @@
-
# useColorMode
Reactive color mode (dark / light / customs) with auto data persistence.
+
## Usage
-### Basic Initialize
-To use only light/dark themes you can initialize with the basic setting `useColorMode`
-
-```js
-// app.ts / main.ts
-
-import { createApp } from 'nativescript-vue';
-import { useColorMode } from "@nativescript-use/vue";
-
-/* Init ColorMode */
-useColorMode({ initialValue: 'auto' })
-
-createApp(Home).start();
-```
-
-### Advanced initializer
+### Initialize
To add custom modes other than `light/dark` you need to initialize in the input file to your application the custom modes you want to apply.
If you only want to use the `light/dark` modes this step is not necessary.
@@ -30,7 +13,7 @@ If you only want to use the `light/dark` modes this step is not necessary.
// app.ts / main.ts
import { createApp } from 'nativescript-vue';
-import { useColorMode } from "@nativescript-use/vue";
+import { useColorMode } from "@vallemar/nativescript-vueuse";
/* Init ColorMode */
const { system, schema, theme, modes } = useColorMode({
@@ -40,21 +23,25 @@ const { system, schema, theme, modes } = useColorMode({
'cafe',
],
initialValue: 'auto',
+ storageKey: 'nativevueuse-color-scheme',
onChanged: (theme: 'dark' | 'light' | 'dim' | 'cafe') => {
}
})
createApp(Home).start();
```
-
+
### Use in your application
```ts
import { computed } from 'nativescript-vue'
-import { useColorMode } from '@nativescript-use/vue'
+import { useColorMode } from '@vallemar/nativescript-vueuse'
-const { system, schema, theme, modes } = useColorMode();
+const { system, schema, theme, modes } = useColorMode({
+ onChanged: (theme: 'dark' | 'light' | 'dim' | 'cafe') => {
+ }
+})
schema // Ref<'dark' | 'light' | 'dim' | 'cafe' | 'auto'> 👈 use this for change theme
system // Readonly[>
@@ -62,11 +49,7 @@ theme // Readonly][>;
modes // Readonly][>;
function changeTheme(){
- schema.value = 'cafe'; // change to cafe mode
-}
-
-function changeToDeviceTheme(){
- schema.value = 'auto';
+ schema.value = 'cafe' // change to cafe mode
}
```
@@ -125,9 +108,7 @@ Then you can do the following
```html
]
```
-
-## Source
-
+
## Type declaration
diff --git a/packages/core/useColorMode/index.ts b/packages/core/useColorMode/index.ts
new file mode 100644
index 0000000..19a56aa
--- /dev/null
+++ b/packages/core/useColorMode/index.ts
@@ -0,0 +1,161 @@
+import { Application, CSSUtils, Utils, isAndroid, Frame } from "@nativescript/core"
+import { ref, Ref, watch, computed, onUnmounted, getCurrentInstance, readonly } from "nativescript-vue"
+import { useStorage } from "../useStorage"
+import { setAutoSystemAppearanceChanged, systemAppearanceChanged } from "@nativescript/core/application"
+import removeSystemCssClass = CSSUtils.removeSystemCssClass;
+import { createGlobalState } from "../globalState";
+
+export type BasicColorMode = 'light' | 'dark'
+export type BasicColorSchema = BasicColorMode | 'auto'
+export interface UseColorModeOptions {
+ /**
+ * The initial color mode
+ *
+ * @default 'auto'
+ */
+ initialValue?: T | BasicColorSchema
+
+ /**
+ * Prefix when adding value to the attribute
+ */
+ modes?: T[] | BasicColorSchema[]
+
+ /**
+ * A custom handler for handle the updates.
+ * When specified, the default behavior will be overridden.
+ *
+ * @default undefined
+ */
+ onChanged?: (mode: T | BasicColorMode) => void
+
+ /**
+ * Key to persist the data into ApplicationSettings.
+ *
+ * Pass `null` to disable persistence
+ *
+ * @default 'nativevueuse-color-scheme'
+ */
+ storageKey?: string | null
+}
+
+const useGlobalState = createGlobalState((storageKey: string, initialValue: string, themes: string[]) => {
+ const storage = useStorage();
+ const system = ref(getSystemTheme())
+ const schema = ref(storage.getString(storageKey!, initialValue.toString())) as Ref;
+ const modes = ref(themes);
+ return { system, schema, modes }
+})
+
+export function useColorMode(options: UseColorModeOptions = {},) {
+ const {
+ initialValue = 'auto',
+ storageKey = 'nativevueuse-color-scheme'
+ } = options
+
+ const storage = useStorage();
+
+ const { system, schema, modes } = useGlobalState(storageKey!, initialValue, ["auto", "light", "dark", ...options.modes ?? []])
+
+ const theme = computed(() =>
+ schema.value === 'auto'
+ ? system.value
+ : schema.value,
+ );
+ let internalSchema = schema.value;
+
+ Application.on('displayed', () => {
+ processTheme();
+ });
+ Application.on('systemAppearanceChanged', () => {
+ processTheme();
+ });
+
+ if (getCurrentInstance()) {
+ onUnmounted(() => {
+ Application.off('displayed', processTheme)
+ Application.off('systemAppearanceChanged', processTheme)
+ })
+ }
+
+ function processTheme() {
+ system.value = getSystemTheme();
+ if (schema.value === "auto") {
+ applyTheme(system.value);
+ } else {
+ applyTheme(schema.value);
+ }
+ }
+
+ function applyTheme(themeToApply: T | BasicColorSchema) {
+ const rootView = Application.getRootView();
+ if (rootView && !rootView.className?.includes(getClassFromTheme(themeToApply))) {
+ schema.value = themeToApply;
+ const rootViewClass = new Set();
+ (Array.from(rootView.cssClasses).join(" ") ?? " ").split(/\s+/).forEach((v) => v && rootViewClass.add(v));
+
+ modes.value.forEach(theme => {
+ removeSystemCssClass(getClassFromTheme(theme))
+ rootViewClass.delete(getClassFromTheme(theme));
+ })
+
+ let applyTheme = themeToApply;
+ if (themeToApply.toLocaleLowerCase().trim() === "auto") {
+ applyTheme = getSystemTheme();
+ setAutoSystemAppearanceChanged(true);
+ systemAppearanceChanged(rootView, getSystemTheme()!);
+ } else {
+ setAutoSystemAppearanceChanged(false);
+ }
+ rootViewClass.add(getClassFromTheme(applyTheme));
+
+ rootView.className = Array.from(rootViewClass).join(" ")
+ const frame = Frame.topmost();
+ frame.backStack.forEach(backStack => backStack.resolvedPage?._onCssStateChange())
+ rootView._getRootModalViews()?.forEach((view) => {
+ view?._onCssStateChange();
+ });
+ storage.setString(storageKey!, themeToApply);
+
+ console.log("Apply: " + getClassFromTheme(themeToApply));
+ }
+
+ if(rootView && schema.value !== internalSchema){
+ internalSchema = schema.value;
+ if (options.onChanged) {
+ options.onChanged(theme.value);
+ }
+ }
+ }
+
+ watch(schema, () => {
+ applyTheme(schema.value)
+ })
+
+ processTheme();
+
+ return {
+ schema,
+ system: readonly(system),
+ theme: readonly(theme),
+ modes: readonly(modes)
+ }
+}
+
+const getClassFromTheme = (theme: string) => CSSUtils.CLASS_PREFIX + theme.toLocaleLowerCase().trim()
+function getSystemTheme(): BasicColorMode {
+ if (isAndroid) {
+ const nightModeFlags = Utils.android.getApplicationContext().getResources().getConfiguration().uiMode & android.content.res.Configuration.UI_MODE_NIGHT_MASK;
+ switch (nightModeFlags) {
+ case android.content.res.Configuration.UI_MODE_NIGHT_YES:
+ return "dark"
+ case android.content.res.Configuration.UI_MODE_NIGHT_NO:
+ return "light"
+ default:
+ return "light"
+ //case android.content.res.Configuration.UI_MODE_NIGHT_UNDEFINED:
+
+ }
+ } else {
+ return UITraitCollection.currentTraitCollection.userInterfaceStyle === UIUserInterfaceStyle.Light ? "light" : "dark";
+ }
+}
\ No newline at end of file
diff --git a/packages/vue/src/useColorPalette/index.md b/packages/core/useColorPalette/index.md
similarity index 76%
rename from packages/vue/src/useColorPalette/index.md
rename to packages/core/useColorPalette/index.md
index 364f976..87074ec 100644
--- a/packages/vue/src/useColorPalette/index.md
+++ b/packages/core/useColorPalette/index.md
@@ -1,13 +1,11 @@
-
# useColorPalette
-Reactive color palette (dark / light / customs) for reactive styles.
+Reactive color palette (dark / light / customs) for reactive styles.
+
::: info
-In order for useColorPalette to react to theme changes you need the application themes to be controlled by [`useColorMode`](/src/useColorMode/)
+In order for useColorPalette to react to theme changes you need the application themes to be controlled by [`useColorMode`](/core/useColorMode/)
:::
## Usage
@@ -20,7 +18,7 @@ If in your application you will only have light mode and dark mode you will need
// app.ts / main.ts
import { createApp } from 'nativescript-vue';
-import { useColorMode, useColorPalette } from "@nativescript-use/vue";
+import { useColorMode, useColorPalette } from "@vallemar/nativescript-vueuse";
/* Init Palette */
useColorPalette({
@@ -32,16 +30,17 @@ useColorPalette({
createApp(Home).start();
```
+
### Advanced initialize
-This function depends on [`useColorMode`](/src/useColorMode/). If you want other themes than the default themes on the native side (light/dark) you must also initialize [`useColorMode`](/src/useColorMode/) so that the themes match useColorPalette.
+This function depends on [`useColorMode`](/core/useColorMode/). If you want other themes than the default themes on the native side (light/dark) you must also initialize [`useColorMode`](/core/useColorMode/) so that the themes match useColorPalette.
```js
// app.ts / main.ts
import { createApp } from 'nativescript-vue';
-import { useColorMode, useColorPalette } from "@nativescript-use/vue";
+import { useColorMode, useColorPalette } from "@vallemar/nativescript-vueuse";
/* Init Color mode and Palette */
useColorMode({
@@ -61,12 +60,12 @@ createApp(Home).start();
```
### Use in your application
-This is a simple example, keep in mind that when you change the theme through [`useColorMode`](/src/useColorMode/) the reactive palette will change automatically applying the colors of the new palette.
+This is a simple example, keep in mind that when you change the theme through [`useColorMode`](/core/useColorMode/) the reactive palette will change automatically applying the colors of the new palette.
```vue
+---
+category: Elements
+---
# useElementSize
@@ -9,29 +9,27 @@ Reactive size of a NativeScript View.
## Usage
```vue
+
+
+
+
+
+
-
-
-
-
-
-
```
-
-## Source
-
+
## Type declaration
```ts
import { Ref } from "nativescript-vue"
-import { ViewRef } from "@nativescript-use/vue";
-import { CoreTypes, View } from "@nativescript/core";
+import { ViewRef } from "@vallemar/nativescript-vueuse";
+import { CoreTypes } from "@nativescript/core/core-types";
export type SizeDIP = {
width: CoreTypes.dip;
@@ -43,7 +41,7 @@ export type SizeDIP = {
* @param target
* @param options
*/
-export declare function useElementSize(target: View | ViewRef, options?: {
+export declare function useElementSize(target: ViewRef, options?: {
onChange?: (size: SizeDIP) => void;
initialSize?: SizeDIP;
}): {
diff --git a/packages/core/useElementSize/index.ts b/packages/core/useElementSize/index.ts
new file mode 100644
index 0000000..a934d72
--- /dev/null
+++ b/packages/core/useElementSize/index.ts
@@ -0,0 +1,53 @@
+import { ref, onMounted } from "nativescript-vue"
+import { unrefView } from "../unrefView"
+import { ViewRef } from "../types"
+import { CoreTypes } from "@nativescript/core/core-types";
+
+export type SizeDIP = {
+ width: CoreTypes.dip,
+ height: CoreTypes.dip,
+}
+/**
+ * Reactive size of a NativeScript element.
+ *
+ * @param target
+ * @param options
+ */
+export function useElementSize(
+ target: ViewRef,
+ options?: { onChange?: (size: SizeDIP) => void, initialSize?: SizeDIP },
+) {
+ const {
+ initialSize = { width: 0, height: 0 },
+ } = options ?? {}
+
+ const width = ref(initialSize.width)
+ const height = ref(initialSize.height)
+
+ function layoutChanged() {
+ const size = unrefView(target)?.getActualSize() as SizeDIP;
+ if(size){
+ width.value = size.width;
+ height.value = size.height;
+ if (options?.onChange) {
+ options.onChange(size);
+ }
+ }
+ }
+
+ onMounted(() => {
+ const view = unrefView(target);
+ if(view){
+ view.on("layoutChanged", layoutChanged)
+ view.on("unloaded", () => {
+ view.off("layoutChanged", layoutChanged)
+ })
+ }
+ })
+
+ return {
+ width,
+ height,
+ }
+}
+
diff --git a/packages/vue/src/useEventListener/index.md b/packages/core/useEventListener/index.md
similarity index 76%
rename from packages/vue/src/useEventListener/index.md
rename to packages/core/useEventListener/index.md
index 891b921..0f01841 100644
--- a/packages/vue/src/useEventListener/index.md
+++ b/packages/core/useEventListener/index.md
@@ -1,6 +1,3 @@
-
# useEventListener
@@ -9,9 +6,14 @@ Use EventListener with ease. Register using view.on on mounted, and view.off aut
## Usage
```vue
+
+
+
+
+
-
-
-
-
-
```
-
-## Source
-
+
## Type declaration
```ts
-import { ViewRef } from "@nativescript-use/vue";
-import { EventData, GestureEventData, ShownModallyData, View, CreateViewEventData } from "@nativescript/core";
+import { ViewRef } from "@vallemar/nativescript-vueuse";
+import { EventData, GestureEventData, ShownModallyData, View } from "@nativescript/core";
type ViewEventData = Omit & {
object: T;
@@ -53,9 +48,6 @@ type ViewGestureEventData = Omit & {
type ViewShownModallyData = Omit & {
object: T;
};
-type CreatingViewEventData = Omit & {
- object: Placeholder;
-};
interface Event {
/* Lifecycle */
loaded?: (eventData: ViewEventData) => void;
@@ -73,15 +65,11 @@ interface Event {
/* Modals */
showingModally?: (eventData: ViewShownModallyData) => void;
shownModally?: (eventData: ViewShownModallyData) => void;
-/* Accessibility */
+ /* Accessibility */
accessibilityBlur?: (eventData: ViewEventData) => void;
accessibilityFocus?: (eventData: ViewEventData) => void;
accessibilityFocusChanged?: (eventData: ViewEventData) => void;
accessibilityPerformEscape?: (eventData: ViewEventData) => void;
- /* Layouts */
- scroll?: (eventData: ViewScrollEventData) => void;
- /* Components */
- creatingView?: (eventData: CreatingViewEventData) => void;
}
/**
* Register using view.on on mounted, and view.off automatically on unmounted.
@@ -90,7 +78,7 @@ interface Event {
* @param target
* @param events
*/
-export declare function useEventListener(target: T | ViewRef, events: Event): {
+export declare function useEventListener(target: ViewRef, events: Event): {
cleanup: () => void;
};
diff --git a/packages/core/useEventListener/index.ts b/packages/core/useEventListener/index.ts
new file mode 100644
index 0000000..818caff
--- /dev/null
+++ b/packages/core/useEventListener/index.ts
@@ -0,0 +1,68 @@
+import { onMounted, onUnmounted } from "nativescript-vue"
+import { unrefView } from "../unrefView"
+import { ViewRef } from "../types"
+import {EventData, GestureEventData, ShownModallyData, View} from "@nativescript/core"
+
+type ViewEventData = Omit & { object: T }
+type ViewGestureEventData = Omit & { object: T }
+type ViewShownModallyData = Omit & { object: T }
+
+interface Event{
+ /* Lifecycle */
+ loaded?: (eventData: ViewEventData ) => void,
+ unloaded?: (eventData: ViewEventData) => void,
+ layoutChanged?: (eventData: ViewEventData) => void,
+ /* Gesture */
+ tap?: (eventData: ViewGestureEventData) => void,
+ doubleTap?: (eventData: ViewGestureEventData) => void,
+ pinch?: (eventData: ViewGestureEventData) => void,
+ pan?: (eventData: ViewGestureEventData) => void,
+ swipe?: (eventData: ViewGestureEventData) => void,
+ rotation?: (eventData: ViewGestureEventData) => void,
+ longPress?: (eventData: ViewGestureEventData) => void,
+ touch?: (eventData: ViewGestureEventData) => void,
+ /* Modals */
+ showingModally?: (eventData: ViewShownModallyData) => void,
+ shownModally?: (eventData: ViewShownModallyData) => void,
+ /* Accessibility */
+ accessibilityBlur?: (eventData: ViewEventData) => void,
+ accessibilityFocus?: (eventData: ViewEventData) => void,
+ accessibilityFocusChanged?: (eventData: ViewEventData) => void,
+ accessibilityPerformEscape?: (eventData: ViewEventData) => void,
+}
+
+/**
+ * Register using view.on on mounted, and view.off automatically on unmounted.
+ *
+ *
+ * @param target
+ * @param events
+ */
+export function useEventListener(
+ target: ViewRef,
+ events: Event,
+) {
+ const el = target;
+
+ const fireEvent = (onEvent: any) => (args: any) => onEvent(args);
+
+ onMounted(() => {
+ Object.keys(events).forEach((event) => {
+ unrefView(el)?.on(event, fireEvent((events as any)[event]));
+ })
+ })
+
+ onUnmounted(() => {
+ cleanup();
+ })
+
+ function cleanup() {
+ Object.keys(events).forEach(event => {
+ unrefView(el)?.off(event, fireEvent((events as any)[event]));
+ })
+ }
+ return {
+ cleanup,
+ }
+}
+
diff --git a/packages/vue/src/useKeyboard/index.md b/packages/core/useKeyboard/index.md
similarity index 75%
rename from packages/vue/src/useKeyboard/index.md
rename to packages/core/useKeyboard/index.md
index 85f94bd..12cb2e8 100644
--- a/packages/vue/src/useKeyboard/index.md
+++ b/packages/core/useKeyboard/index.md
@@ -1,6 +1,6 @@
-
+---
+category: Elements
+---
# useKeyboard
@@ -11,7 +11,7 @@ Reactive keyboard state. It also provides methods to open or close the keyboard.
```vue
```
-
-## Source
-
+
## Type declaration
```ts
import { Ref } from "nativescript-vue"
-import { ViewRef } from "@nativescript-use/vue";
-import { View } from "@nativescript/core";
+import { ViewRef } from "@vallemar/nativescript-vueuse";
/**
* Reactive keyboard state. It also provides methods to open or close the keyboard.
@@ -82,14 +80,11 @@ import { View } from "@nativescript/core";
*/
export declare function useKeyboard(options?: {
onChange?: (isOpen: boolean) => void;
- defaultTarget?: View | ViewRef;
+ defaultTarget?: ViewRef;
}): {
isOpen: Readonly[>;
- open: (target?: View | ViewRef) => void;
+ open: (target?: ViewRef) => void;
close: () => void;
};
```
-
-## Core dependency
-[@nativescript-use/nativescript-keyboard](https://github.com/NativeScript-Use/NativeScript-Use/tree/main/packages/nativescript-keyboard)
\ No newline at end of file
diff --git a/packages/core/useKeyboard/index.ts b/packages/core/useKeyboard/index.ts
new file mode 100644
index 0000000..496b8d5
--- /dev/null
+++ b/packages/core/useKeyboard/index.ts
@@ -0,0 +1,53 @@
+import { onMounted, onUnmounted, readonly, ref } from "nativescript-vue"
+import { ViewRef } from "../types"
+import { unrefView } from "../unrefView";
+import { Keyboard } from "./nsCore";
+import { onApplicationMounted } from "../onApplicationMounted";
+
+/**
+ * Reactive size of a NativeScript element.
+ *
+ * @param target
+ * @param options
+ */
+export function useKeyboard(
+ options?: { onChange?: (isOpen: boolean) => void, defaultTarget?: ViewRef },
+) {
+ const isOpen = ref(false);
+ const keyboardCore = new Keyboard();
+
+ //TODO: fix this
+ onMounted(() => {
+ onApplicationMounted(() => {
+ keyboardCore.onChangeVisibility((status: boolean) => {
+ if (isOpen.value !== status) {
+ isOpen.value = status;
+ if (options?.onChange)
+ options.onChange(status);
+ }
+ });
+ })
+ })
+
+ onUnmounted(() => {
+ keyboardCore.offChangeVisibility();
+ })
+
+ const open = (target?: ViewRef) => {
+ const viewTarget = unrefView(target!);
+ const viewDefaultTarget = options?.defaultTarget ? unrefView(options?.defaultTarget!) : null;
+ if (viewTarget) {
+ keyboardCore.open(viewTarget);
+ } else if (viewDefaultTarget) {
+ keyboardCore.open(viewDefaultTarget);
+ } else {
+ console.log("Error. Need to define a view to apply focus.");
+ }
+ }
+ return {
+ isOpen: readonly(isOpen),
+ open,
+ close: keyboardCore.close,
+ }
+}
+
diff --git a/packages/nativescript-keyboard/common.ts b/packages/core/useKeyboard/nsCore/core-common.ts
similarity index 100%
rename from packages/nativescript-keyboard/common.ts
rename to packages/core/useKeyboard/nsCore/core-common.ts
diff --git a/packages/nativescript-keyboard/index.android.ts b/packages/core/useKeyboard/nsCore/index.android.ts
similarity index 98%
rename from packages/nativescript-keyboard/index.android.ts
rename to packages/core/useKeyboard/nsCore/index.android.ts
index af400ee..b2f8488 100644
--- a/packages/nativescript-keyboard/index.android.ts
+++ b/packages/core/useKeyboard/nsCore/index.android.ts
@@ -1,5 +1,5 @@
import { Utils } from "@nativescript/core";
-import { KeyboardBase } from "./common";
+import { KeyboardBase } from "./core-common";
export class Keyboard extends KeyboardBase {
diff --git a/packages/nativescript-keyboard/index.d.ts b/packages/core/useKeyboard/nsCore/index.d.ts
similarity index 100%
rename from packages/nativescript-keyboard/index.d.ts
rename to packages/core/useKeyboard/nsCore/index.d.ts
diff --git a/packages/nativescript-keyboard/index.ios.ts b/packages/core/useKeyboard/nsCore/index.ios.ts
similarity index 96%
rename from packages/nativescript-keyboard/index.ios.ts
rename to packages/core/useKeyboard/nsCore/index.ios.ts
index b8d7ec3..0772bd8 100644
--- a/packages/nativescript-keyboard/index.ios.ts
+++ b/packages/core/useKeyboard/nsCore/index.ios.ts
@@ -1,5 +1,5 @@
import { Application } from "@nativescript/core";
-import { KeyboardBase } from "./common";
+import { KeyboardBase } from "./core-common";
export class Keyboard extends KeyboardBase {
diff --git a/packages/vue/src/useRootLayout/index.md b/packages/core/useRootLayout/index.md
similarity index 74%
rename from packages/vue/src/useRootLayout/index.md
rename to packages/core/useRootLayout/index.md
index 0b29688..2163fa7 100644
--- a/packages/vue/src/useRootLayout/index.md
+++ b/packages/core/useRootLayout/index.md
@@ -1,6 +1,3 @@
-
# useRootLayout
@@ -9,23 +6,23 @@ Utility for RootLayout view. [RootLayout official documentation](https://docs.na
## Usage
```vue
+]
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
```
+
::: tip
If you need multiple rootLayouts you can alias the methods and references returned by `useRootLayout`.
:::
```vue
+
+
+
+
-
-
-
-
```
-## Source
-
-
## Type declaration
```ts
import { RootLayoutOptions, View } from "@nativescript/core";
@@ -105,9 +93,7 @@ import { RootLayoutOptions, View } from "@nativescript/core";
*/
export declare function useRootLayout(component: any, options?: {
props?: any;
- on?: Record any>;
rootLayoutOption?: RootLayoutOptions;
- closeTimerMillis?: number;
onClose?: () => void;
}): {
show: () => Promise;
@@ -115,5 +101,4 @@ export declare function useRootLayout(component: any, options?: {
isShow: Ref;
view: View;
};
-
```
diff --git a/packages/core/useRootLayout/index.ts b/packages/core/useRootLayout/index.ts
new file mode 100644
index 0000000..871e8ef
--- /dev/null
+++ b/packages/core/useRootLayout/index.ts
@@ -0,0 +1,41 @@
+import { createNativeView, ref } from "nativescript-vue"
+import { RootLayoutOptions, ViewBase, getRootLayout } from "@nativescript/core"
+
+/**
+ * Utility for the RootLayout view.
+ *
+ * @param component
+ * @param options
+ */
+export function useRootLayout(
+ component: any,
+ options?: { props?: any, rootLayoutOption?: RootLayoutOptions, onClose?: () => void },
+) {
+ const isShow = ref(false);
+ const node = createNativeView(component, options?.props);
+ node.mount();
+ const view = node.nativeView;
+
+ view.on(ViewBase.unloadedEvent, () => {
+ isShow.value = false;
+ if (options?.onClose)
+ options.onClose();
+ });
+
+ function show() {
+ isShow.value = true;
+ return getRootLayout().open(view, options?.rootLayoutOption);
+ }
+
+ function close() {
+ getRootLayout().close(view);
+ }
+
+ return {
+ show,
+ close,
+ isShow,
+ view
+ }
+}
+
diff --git a/packages/vue/src/useScreenOrientation/index.md b/packages/core/useScreenOrientation/index.md
similarity index 67%
rename from packages/vue/src/useScreenOrientation/index.md
rename to packages/core/useScreenOrientation/index.md
index f845476..8d9a6de 100644
--- a/packages/vue/src/useScreenOrientation/index.md
+++ b/packages/core/useScreenOrientation/index.md
@@ -1,7 +1,3 @@
-
-
# useScreenOrientation
Reactive screen orientation and utilities to manage the orientation.
@@ -10,7 +6,7 @@ Reactive screen orientation and utilities to manage the orientation.
```vue
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/packages/nativescript-clipboard/.eslintrc.json b/packages/nativescript-clipboard/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-clipboard/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-clipboard/README.md b/packages/nativescript-clipboard/README.md
deleted file mode 100644
index ee08871..0000000
--- a/packages/nativescript-clipboard/README.md
+++ /dev/null
@@ -1,40 +0,0 @@
-# @nativescript-use/nativescript-clipboard
-
-```javascript
-npm install @nativescript-use/nativescript-clipboard
-```
-
-## Usage
-
-```ts
-import { Clipboard } from "@nativescript-use/nativescript-clipboard"
-
-const clipboard = new Clipboard();
-
-// Copy text
-clipboard.copy("My text");
-
-// Read Clipboard
-const currentClipboardValue = clipboard.read();
-
-// Add listener
-clipboard.onCopy((textCopied: string) =>{
- console.log(textCopied)
-});
-// Remove listener
-clipboard.offCopy();
-```
-
-Type declaration
-```ts
-export declare class Clipboard {
- abstract onCopy(callback: (text: string) => void): void
- abstract offCopy(): void
- abstract copy(text: string): boolean
- abstract read(): string
-}
-```
-
-## License
-
-Apache License Version 2.0
diff --git a/packages/nativescript-clipboard/index.android.ts b/packages/nativescript-clipboard/index.android.ts
deleted file mode 100644
index d470e20..0000000
--- a/packages/nativescript-clipboard/index.android.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-import { Utils } from '@nativescript/core';
-import { ClipboardBase } from './common';
-
-export class Clipboard extends ClipboardBase {
- protected clipboard: android.content.ClipboardManager;
-
- constructor() {
- super();
- this.clipboard = Utils.android.getApplicationContext().getSystemService(android.content.Context.CLIPBOARD_SERVICE);
- }
-
- onCopy(callback: (text: string) => void): void {
- this.offCopy();
- let THRESHOLD_MS = 50;
- let enableCallback = true;
- this.listener = new android.content.ClipboardManager.OnPrimaryClipChangedListener({
- onPrimaryClipChanged: () => {
- if (enableCallback) callback(this.clipboard.getPrimaryClip()?.getItemAt(0)?.getText()?.toString());
- enableCallback = false;
- setTimeout(() => {
- enableCallback = true;
- }, THRESHOLD_MS);
- },
- });
- this.clipboard.addPrimaryClipChangedListener(this.listener);
- }
-
- offCopy(): void {
- if (this.listener) this.clipboard.removePrimaryClipChangedListener(this.listener);
- }
-
- copy(text: string): boolean {
- const clip = android.content.ClipData.newPlainText('App clipboard data', text);
- this.clipboard.setPrimaryClip(clip);
- return true;
- }
-
- read(): string {
- const item = this.clipboard.getPrimaryClip()?.getItemAt(0);
- let content = item?.getText().toString();
- return content || '';
- }
-}
diff --git a/packages/nativescript-clipboard/package.json b/packages/nativescript-clipboard/package.json
deleted file mode 100644
index a4ddc29..0000000
--- a/packages/nativescript-clipboard/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-clipboard",
- "version": "0.0.3",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Matínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-clipboard/project.json b/packages/nativescript-clipboard/project.json
deleted file mode 100644
index 24a3abe..0000000
--- a/packages/nativescript-clipboard/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-clipboard",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-clipboard",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-clipboard",
- "tsConfig": "packages/nativescript-clipboard/tsconfig.json",
- "packageJson": "packages/nativescript-clipboard/package.json",
- "main": "packages/nativescript-clipboard/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-clipboard/*.md",
- "packages/nativescript-clipboard/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-clipboard/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-clipboard"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-clipboard"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-clipboard"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-clipboard/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-clipboard/references.d.ts b/packages/nativescript-clipboard/references.d.ts
deleted file mode 100644
index 98c5393..0000000
--- a/packages/nativescript-clipboard/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
\ No newline at end of file
diff --git a/packages/nativescript-clipboard/tsconfig.json b/packages/nativescript-clipboard/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-clipboard/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-intersection-observer/.eslintrc.json b/packages/nativescript-intersection-observer/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-intersection-observer/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-intersection-observer/README.md b/packages/nativescript-intersection-observer/README.md
deleted file mode 100644
index 64ae369..0000000
--- a/packages/nativescript-intersection-observer/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# @nativescript-use/nativescript-intersection-observer
-
-```javascript
-npm install @nativescript-use/nativescript-intersection-observer
-```
-
-## Usage
-
-```ts
-import { IntersectionObserver } from "@nativescript-use/nativescript-intersection-observer"
-
-const intersectionObserver = new IntersectionObserver();
-
-// Track if `targetView` is visible
-intersectionObserver.track(targetView, scollView, (isVisible) => {
- console.log("isVisible: " + isVisible);
-})
-
-// Stop track
-intersectionObserver.stopTrack();
-
-// Check if is visible view
-const isVisible = intersectionObserver.isVisible(targetView, scollView);
-```
-
-Type declaration
-```ts
-export declare class IntersectionObserver {
- track(view: View, parentView: ScrollView, callback: (isVisible: boolean) => void): void;
- topTrack(parentView: ScrollView): void
- isVisible(view: View, parentView?: View): boolean;
-}
-```
-
-## License
-
-Apache License Version 2.0
diff --git a/packages/nativescript-intersection-observer/common.ts b/packages/nativescript-intersection-observer/common.ts
deleted file mode 100644
index 32d360d..0000000
--- a/packages/nativescript-intersection-observer/common.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { Observable, ScrollEventData, ScrollView, View } from '@nativescript/core';
-
-export abstract class IntersectionObserverCommon extends Observable {
- view: View;
- parentView: ScrollView;
- callback: (isVisible: boolean) => void;
- track(view: View, parentView: ScrollView, callback: (isVisible: boolean) => void) {
- this.view = view;
- this.parentView = parentView;
- this.callback = callback;
- parentView.on('scroll', this.onTrack.bind(this));
- }
-
- stopTrack() {
- this.parentView.off('scroll', () => this.onTrack);
- }
-
- private onTrack(data: ScrollEventData) {
- if (data.scrollY >= 0 && (data.object as View).getActualSize().height != 0) {
- this.callback(this.isVisible(this.view, this.parentView));
- }
- }
-
- abstract isVisible(view: View, parentView?: View): boolean;
-}
diff --git a/packages/nativescript-intersection-observer/index.android.ts b/packages/nativescript-intersection-observer/index.android.ts
deleted file mode 100644
index af40c59..0000000
--- a/packages/nativescript-intersection-observer/index.android.ts
+++ /dev/null
@@ -1,76 +0,0 @@
-import { ScrollView, Utils, View } from '@nativescript/core';
-import { IntersectionObserverCommon } from './common';
-
-export class IntersectionObserver extends IntersectionObserverCommon {
- displayMetrics: android.util.DisplayMetrics;
-
- constructor() {
- super();
- this.displayMetrics = new android.util.DisplayMetrics();
- Utils.android.getCurrentActivity().getWindowManager().getDefaultDisplay().getMetrics(this.displayMetrics);
- }
-
- isVisible(nsView: View, parentView?: ScrollView): boolean {
- const view: android.view.View = nsView.android;
- if (view == null) {
- return false;
- }
- if (!view.isShown()) {
- return false;
- }
-
- let actualPosition = new android.graphics.Rect();
- view.getGlobalVisibleRect(actualPosition);
- let screen = new android.graphics.Rect(0, 0, this.displayMetrics.widthPixels, this.displayMetrics.heightPixels);
- return actualPosition.intersect(screen);
- }
-}
-
-/* const scrollRef = ref()
-const hola = ref()
-
-
-useEventListener(scrollRef, {
- scroll: (data) => {
- if (data.scrollY > 0) {
- if (data.object.getActualSize().height != 0)
- console.log(isVisible(unrefView(hola)));
- }
- }
-})
-
-function isVisible(view: View) {
- if (view) {
- if (isAndroid) {
- view = view.android
- if (view == null) {
- return false;
- }
- if (!view.isShown()) {
- return false;
- }
- let displayMetrics = new android.util.DisplayMetrics();
- Utils.android.getCurrentActivity().getWindowManager()
- .getDefaultDisplay()
- .getMetrics(displayMetrics);
- let actualPosition = new android.graphics.Rect();
- view.getGlobalVisibleRect(actualPosition);
- let screen = new android.graphics.Rect(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels);
- return actualPosition.intersect(screen);
- } else {
- const myView = view.ios as UIView
- const scrollView = unrefView(scrollRef).ios as UIScrollView
-
- const thePosition = myView.frame;
- const container = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.frame.size.width, scrollView.frame.size.height)
-
- if (CGRectIntersectsRect(thePosition, container)) {
- console.log("HEREE HEREEHEREEHEREEHEREEHEREEHEREEHEREE");
- return true
- }
-
- return false
- }
- }
-
-} */
diff --git a/packages/nativescript-intersection-observer/index.d.ts b/packages/nativescript-intersection-observer/index.d.ts
deleted file mode 100644
index c180e50..0000000
--- a/packages/nativescript-intersection-observer/index.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { View } from '@nativescript/core';
-import { IntersectionObserverCommon } from './common';
-
-export declare class IntersectionObserver extends IntersectionObserverCommon {
- track(view: View, parentView: ScrollView, callback: (isVisible: boolean) => void): void;
- stopTrack(): void;
- isVisible(view: View, parentView?: ScrollView): boolean;
-}
diff --git a/packages/nativescript-intersection-observer/index.ios.ts b/packages/nativescript-intersection-observer/index.ios.ts
deleted file mode 100644
index 4a74c5d..0000000
--- a/packages/nativescript-intersection-observer/index.ios.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-import { Screen, ScrollView, View } from '@nativescript/core';
-import { IntersectionObserverCommon } from './common';
-
-export class IntersectionObserver extends IntersectionObserverCommon {
- topBarHeight = 0;
-
- constructor() {
- super();
- this.topBarHeight = UIApplication?.sharedApplication?.statusBarFrame?.size?.height ?? 0;
- }
-
- isVisible(nsView: View, parentView?: ScrollView): boolean {
- const view = nsView.ios as UIView;
- const scrollView = parentView?.ios as UIScrollView;
-
- const position = view?.frame;
- if (position && scrollView) {
- const container = CGRectMake(scrollView.contentOffset.x, scrollView.contentOffset.y, scrollView.bounds.size.width, scrollView.bounds.size.height);
- return container && CGRectIntersectsRect(position, container);
- }
-
- return false;
- }
-}
diff --git a/packages/nativescript-intersection-observer/package.json b/packages/nativescript-intersection-observer/package.json
deleted file mode 100644
index 369e56f..0000000
--- a/packages/nativescript-intersection-observer/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-intersection-observer",
- "version": "0.0.2",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Martínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-intersection-observer/project.json b/packages/nativescript-intersection-observer/project.json
deleted file mode 100644
index aa97506..0000000
--- a/packages/nativescript-intersection-observer/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-intersection-observer",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-intersection-observer",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-intersection-observer",
- "tsConfig": "packages/nativescript-intersection-observer/tsconfig.json",
- "packageJson": "packages/nativescript-intersection-observer/package.json",
- "main": "packages/nativescript-intersection-observer/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-intersection-observer/*.md",
- "packages/nativescript-intersection-observer/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-intersection-observer/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-intersection-observer"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-intersection-observer"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-intersection-observer"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-intersection-observer/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-intersection-observer/references.d.ts b/packages/nativescript-intersection-observer/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/nativescript-intersection-observer/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/nativescript-intersection-observer/tsconfig.json b/packages/nativescript-intersection-observer/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-intersection-observer/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-keyboard/.eslintrc.json b/packages/nativescript-keyboard/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-keyboard/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-keyboard/README.md b/packages/nativescript-keyboard/README.md
deleted file mode 100644
index c789bb3..0000000
--- a/packages/nativescript-keyboard/README.md
+++ /dev/null
@@ -1,42 +0,0 @@
-# @nativescript-use/nativescript-keyboard
-
-```javascript
-npm install @nativescript-use/nativescript-keyboard
-```
-
-## Usage
-
-```ts
-import { Keyboard } from "@nativescript-use/nativescript-keyboard"
-
-const keyboard = new Keyboard();
-
-// Open keyboard with focus
-keyboard.keyboard(myView);
-
-// Close keyboard
-keyboard.close();
-
-// Add listener
-keyboard.onChangeVisibility((isOpen: boolean) =>{
- console.log(isOpen)
-});
-// Remove listener
-keyboard.offChangeVisibility();
-```
-
-Type declaration
-```ts
-export declare class Keyboard {
- onChangeVisibility(callback: (isOpen: boolean) => void): void
- offChangeVisibility(): void
- isOpen(): boolean
- open(view: View): void
- close(): void
-}
-```
-
-## License
-
-Apache License Version 2.0
-
diff --git a/packages/nativescript-keyboard/common.d.ts b/packages/nativescript-keyboard/common.d.ts
deleted file mode 100644
index e738a8f..0000000
--- a/packages/nativescript-keyboard/common.d.ts
+++ /dev/null
@@ -1,8 +0,0 @@
-import { View } from "@nativescript/core";
-export declare abstract class KeyboardBase {
- abstract offChangeVisibility(): void;
- abstract onChangeVisibility(callback: (isOpen: boolean) => void): void;
- abstract isOpen(): boolean;
- open(view: View): void;
- close(): void;
-}
diff --git a/packages/nativescript-keyboard/common.js b/packages/nativescript-keyboard/common.js
deleted file mode 100644
index e071337..0000000
--- a/packages/nativescript-keyboard/common.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import { Utils } from "@nativescript/core";
-export class KeyboardBase {
- open(view) {
- if (view && view["focus"]) {
- view.focus();
- }
- else {
- console.log("Error open keyboard");
- }
- }
- close() {
- Utils.dismissKeyboard();
- }
-}
-//# sourceMappingURL=common.js.map
\ No newline at end of file
diff --git a/packages/nativescript-keyboard/common.js.map b/packages/nativescript-keyboard/common.js.map
deleted file mode 100644
index d2cc622..0000000
--- a/packages/nativescript-keyboard/common.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"common.js","sourceRoot":"","sources":["common.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAQ,MAAM,oBAAoB,CAAC;AAIjD,MAAM,OAAgB,YAAY;IAM9B,IAAI,CAAC,IAAU;QACX,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,EAAE;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;SAChB;aAAM;YACH,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;SACtC;IACL,CAAC;IAED,KAAK;QACD,KAAK,CAAC,eAAe,EAAE,CAAC;IAC5B,CAAC;CACJ"}
\ No newline at end of file
diff --git a/packages/nativescript-keyboard/package.json b/packages/nativescript-keyboard/package.json
deleted file mode 100644
index 762a407..0000000
--- a/packages/nativescript-keyboard/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-keyboard",
- "version": "0.0.1",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Matínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-keyboard/project.json b/packages/nativescript-keyboard/project.json
deleted file mode 100644
index 7c2158e..0000000
--- a/packages/nativescript-keyboard/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-keyboard",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-keyboard",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-keyboard",
- "tsConfig": "packages/nativescript-keyboard/tsconfig.json",
- "packageJson": "packages/nativescript-keyboard/package.json",
- "main": "packages/nativescript-keyboard/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-keyboard/*.md",
- "packages/nativescript-keyboard/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-keyboard/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-keyboard"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-keyboard"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-keyboard"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-keyboard/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-keyboard/references.d.ts b/packages/nativescript-keyboard/references.d.ts
deleted file mode 100644
index 98c5393..0000000
--- a/packages/nativescript-keyboard/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
\ No newline at end of file
diff --git a/packages/nativescript-keyboard/tsconfig.json b/packages/nativescript-keyboard/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-keyboard/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-localstorage/.eslintrc.json b/packages/nativescript-localstorage/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-localstorage/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-localstorage/README.md b/packages/nativescript-localstorage/README.md
deleted file mode 100644
index 5426102..0000000
--- a/packages/nativescript-localstorage/README.md
+++ /dev/null
@@ -1,68 +0,0 @@
-# @nativescript-use/nativescript-localstorage
-
-```javascript
-npm install @nativescript-use/nativescript-localstorage
-```
-
-Use localStorage like in the browser.
-This library uses [ApplicationSettings](https://docs.nativescript.org/core/application-settings) from NativeScript behind it.
-
-## Usage
-```ts
-import localStorage from '@nativescript-use/nativescript-localstorage';
-
-localStorage.setItem('myKey', "myValue");
-localStorage.getItem('myKey'); // -> "myValue"
-localStorage.has('myKey');
-localStorage.removeItem('myKey');
-localStorage.length();
-localStorage.clear();
-```
-
-## Extend LocalStorage class
-
-You can define a storage with a prefix for all entries in ApplicationSettings like:
-
-```ts
-// BusinessStorage.ts
-import { LocalStorage } from '@nativescript-use/nativescript-localstorage';
-
-export enum BusinessKeys {
- NAME = 'name',
-}
-
-class BusinessStorage extends LocalStorage {
- prefix = '_businnes_.';
-}
-const businessStorage = new BusinessStorage();
-export default businessStorage;
-```
-
-And use it like.
-```ts
-import businessStorage, { BusinessKeys } from './BusinessStorage';
-
-businessStorage.setItem(BusinessKeys.NAME, 'MyBusiness');
-businessStorage.getItem(BusinessKeys.NAME);
-
-```
-This will generate the following entry in ApplicationSettings
-```
-_businnes_.name = 'MyBusiness'
-```
-## Type declaration
-```ts
-declare class LocalStorage {
- protected prefix: string;
- getItem(key: K): T;
- setItem(key: K, data: any): void;
- has(key: K): boolean;
- removeItem(key: K): void;
- length(): number;
- clear(): void;
-}
-export declare const localStorage: LocalStorage;
-```
-## License
-
-Apache License Version 2.0
diff --git a/packages/nativescript-localstorage/index.ts b/packages/nativescript-localstorage/index.ts
deleted file mode 100644
index 8248ab0..0000000
--- a/packages/nativescript-localstorage/index.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { ApplicationSettings } from '@nativescript/core';
-
-export class LocalStorage {
- protected prefix = '';
-
- getItem(key: K): T {
- try {
- return ApplicationSettings.getString(this.getKey(key)) as T;
- } catch (error) {
- console.log('[LOCAL_STORAGE] getItem ERROR ' + error);
- }
- return null;
- }
-
- setItem(key: K, data: any): void {
- try {
- ApplicationSettings.setString(this.getKey(key), isString(data) ? data : JSON.stringify(data));
- } catch (error) {
- console.log('[LOCAL_STORAGE] setItem ERROR ' + error);
- }
- }
-
- has(key: K): boolean {
- return ApplicationSettings.hasKey(this.getKey(key));
- }
-
- removeItem(key: K): void {
- ApplicationSettings.remove(this.getKey(key));
- }
-
- length(): number {
- return ApplicationSettings.getAllKeys().length;
- }
-
- clear(): void {
- ApplicationSettings.clear();
- }
-
- private getKey(key: K) {
- return this.prefix + key;
- }
-}
-
-const localStorage = new LocalStorage();
-export default localStorage;
-
-const isString = (val: unknown): val is string => typeof val === 'string';
diff --git a/packages/nativescript-localstorage/package.json b/packages/nativescript-localstorage/package.json
deleted file mode 100644
index 1f2cb19..0000000
--- a/packages/nativescript-localstorage/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-localstorage",
- "version": "0.0.1",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Martínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-localstorage/project.json b/packages/nativescript-localstorage/project.json
deleted file mode 100644
index 7ca149b..0000000
--- a/packages/nativescript-localstorage/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-localstorage",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-localstorage",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-localstorage",
- "tsConfig": "packages/nativescript-localstorage/tsconfig.json",
- "packageJson": "packages/nativescript-localstorage/package.json",
- "main": "packages/nativescript-localstorage/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-localstorage/*.md",
- "packages/nativescript-localstorage/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-localstorage/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-localstorage"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-localstorage"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-localstorage"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-localstorage/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-localstorage/references.d.ts b/packages/nativescript-localstorage/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/nativescript-localstorage/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/nativescript-localstorage/tsconfig.json b/packages/nativescript-localstorage/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-localstorage/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-media-query/.eslintrc.json b/packages/nativescript-media-query/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-media-query/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-media-query/README.md b/packages/nativescript-media-query/README.md
deleted file mode 100644
index 1dd009b..0000000
--- a/packages/nativescript-media-query/README.md
+++ /dev/null
@@ -1,64 +0,0 @@
-# DEPRECATED. NativeScript introduced media queries in version 8.8. We've deprecated this package in favor of using @nativescript/core. Official documentation is available [here](https://docs.nativescript.org/guide/styling#media-queries-8-8).
-
-
-# @nativescript-use/nativescript-media-query
-
-```javascript
-npm install @nativescript-use/nativescript-media-query
-```
-
-## Usage
-
-```ts
-import { matchMedia, MediaQueryList } from "@nativescript-use/nativescript-media-query"
-
-const mql: MediaQueryList = matchMedia("(min-width: 400)");
-
-if (mql.matches) {
- /* The screen is at least 400 dpi wide */
-} else {
- /* The screen is less than 400 dpi wide */
-}
-
-
-// Add listener
-mql.onchange = (event: MediaQueryListEvent) => {
- // some logic
-});
-
-const myListener = () => console.log("Change!");
-
-mql.addListener(myListener);
-
-// Remove listener
-mql.removeListener(myListener);
-
-```
-
-Type declaration
-```ts
-export interface MediaQueryList {
- readonly matches: boolean;
- readonly media: string;
- onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;
- addListener(listener: MediaQueryListListener): void;
- removeListener(listener: MediaQueryListListener): void;
-}
-
-export type MediaQueryListListener = (mql: MediaQueryList) => void;
-
-export interface MediaQueryListEvent {
- readonly matches: boolean;
- readonly media: string;
-}
-
-export declare function matchMedia(mediaQueryString: string): MediaQueryList;
-
-```
-
-## License
-
-Apache License Version 2.0
-
-
-
diff --git a/packages/nativescript-media-query/index.d.ts b/packages/nativescript-media-query/index.d.ts
deleted file mode 100644
index ef1a7fb..0000000
--- a/packages/nativescript-media-query/index.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-export declare interface MediaQueryList {
- readonly matches: boolean;
- readonly media: string;
- onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;
- addListener(listener: MediaQueryListListener): void;
- removeListener(listener: MediaQueryListListener): void;
-}
-
-export declare type MediaQueryListListener = (mql: MediaQueryList) => void;
-
-export declare interface MediaQueryListEvent {
- readonly matches: boolean;
- readonly media: string;
-}
-
-export declare function matchMedia(mediaQueryString: string): MediaQueryList;
diff --git a/packages/nativescript-media-query/index.ts b/packages/nativescript-media-query/index.ts
deleted file mode 100644
index c8c7878..0000000
--- a/packages/nativescript-media-query/index.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-import { Screen, Application } from '@nativescript/core';
-
-/**
- * @deprecated. NativeScript introduced media queries in version 8.8. We've deprecated this package in favor of using @nativescript/core. Official documentation is available [here](https://docs.nativescript.org/guide/styling#media-queries-8-8)
- */
-export interface MediaQueryList {
- readonly matches: boolean;
- readonly media: string;
- onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null;
- addListener(listener: MediaQueryListListener): void;
- removeListener(listener: MediaQueryListListener): void;
-}
-
-/**
- * @deprecated. NativeScript introduced media queries in version 8.8. We've deprecated this package in favor of using @nativescript/core. Official documentation is available [here](https://docs.nativescript.org/guide/styling#media-queries-8-8)
- */
-export type MediaQueryListListener = (mql: MediaQueryList) => void;
-
-/**
- * @deprecated. NativeScript introduced media queries in version 8.8. We've deprecated this package in favor of using @nativescript/core. Official documentation is available [here](https://docs.nativescript.org/guide/styling#media-queries-8-8)
- */
-export interface MediaQueryListEvent {
- readonly matches: boolean;
- readonly media: string;
-}
-
-/**
- * @deprecated. NativeScript introduced media queries in version 8.8. We've deprecated this package in favor of using @nativescript/core. Official documentation is available [here](https://docs.nativescript.org/guide/styling#media-queries-8-8)
- */
-export const matchMedia = (mediaQueryString: string) => {
- const factory = MediaQueryListFactory.getInstance();
- const mql = factory.create(mediaQueryString);
-
- factory.updateMatches();
- return mql;
-};
-
-class MediaQueryListImpl implements MediaQueryList {
- private listeners: Set = new Set();
- public matches: boolean = false;
-
- constructor(public media: string) {}
-
- public onchange: ((this: MediaQueryList, ev: MediaQueryListEvent) => any) | null = null;
-
- public addListener(listener: MediaQueryListListener): void {
- this.listeners.add(listener);
- }
-
- public removeListener(listener: MediaQueryListListener): void {
- this.listeners.delete(listener);
- }
-
- public dispatchChangeEvent(): void {
- const event: MediaQueryListEvent = {
- matches: this.matches,
- media: this.media,
- };
-
- for (const listener of this.listeners) {
- listener(this);
- }
-
- if (typeof this.onchange === 'function') {
- this.onchange.call(this, event);
- }
- }
-
- public updateMatches(matches: boolean): void {
- if (this.matches !== matches) {
- this.matches = matches;
- this.dispatchChangeEvent();
- }
- }
-}
-
-class MediaQueryListFactory {
- private static instance: MediaQueryListFactory;
- private lists: MediaQueryListImpl[] = [];
-
- private constructor() {}
-
- public static getInstance(): MediaQueryListFactory {
- if (!MediaQueryListFactory.instance) {
- MediaQueryListFactory.instance = new MediaQueryListFactory();
- // Condition for update
- Application.on('orientationChanged', () => {
- setTimeout(() => {
- MediaQueryListFactory.instance.updateMatches();
- }, 10);
- });
- }
- return MediaQueryListFactory.instance;
- }
-
- public create(media: string): MediaQueryListImpl {
- const mql = new MediaQueryListImpl(media);
- this.lists.push(mql);
- return mql;
- }
-
- public remove(mql: MediaQueryListImpl): void {
- const index = this.lists.indexOf(mql);
- if (index > -1) {
- this.lists.splice(index, 1);
- }
- }
-
- public updateMatches(): void {
- for (const mql of this.lists) {
- const queryParts = this.extractQueryParts(mql.media);
- const matches = this.checkMediaQuery(queryParts);
- mql.updateMatches(matches);
- }
- }
-
- private extractQueryParts(mediaQuery: string): string[] {
- const query = mediaQuery.trim().slice(1, -1);
- const parts = query.split(' and ');
- return parts.map((part) => part.replace('(', '').replace(')', '').trim());
- }
-
- private checkMediaQuery(queryParts: string[]): boolean {
- return queryParts.map((part) => evaluatePart(part)).every(Boolean);
- }
-}
-
-function evaluatePart(part: string): boolean {
- const [property, value] = part.split(':');
- const trimmedProperty = property.trim();
- const trimmedValue = value.trim();
- if (trimmedProperty.includes('width') || trimmedProperty.includes('height')) {
- const realWidth = Screen.mainScreen.widthDIPs;
- const realHeight = Screen.mainScreen.heightDIPs;
-
- if (trimmedProperty === 'width') {
- return parseInt(realWidth.toString(), 10) === parseInt(trimmedValue, 10);
- } else if (trimmedProperty === 'min-width') {
- return realWidth >= parseInt(trimmedValue, 10);
- } else if (trimmedProperty === 'max-width') {
- return realWidth <= parseInt(trimmedValue, 10);
- } else if (trimmedProperty === 'height') {
- return parseInt(realHeight.toString(), 10) === parseInt(trimmedValue, 10);
- } else if (trimmedProperty === 'min-height') {
- return realHeight >= parseInt(trimmedValue, 10);
- } else if (trimmedProperty === 'max-height') {
- return realHeight <= parseInt(trimmedValue, 10);
- }
- } else if (trimmedProperty === 'orientation') {
- return Application.orientation() === trimmedValue;
- } else {
- // TBD
- return false;
- }
-}
diff --git a/packages/nativescript-media-query/package.json b/packages/nativescript-media-query/package.json
deleted file mode 100644
index 9a73832..0000000
--- a/packages/nativescript-media-query/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-media-query",
- "version": "0.0.5",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Martínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-media-query/project.json b/packages/nativescript-media-query/project.json
deleted file mode 100644
index b4d9527..0000000
--- a/packages/nativescript-media-query/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-media-query",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-media-query",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-media-query",
- "tsConfig": "packages/nativescript-media-query/tsconfig.json",
- "packageJson": "packages/nativescript-media-query/package.json",
- "main": "packages/nativescript-media-query/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-media-query/*.md",
- "packages/nativescript-media-query/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-media-query/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-media-query"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-media-query"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-media-query"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-media-query/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-media-query/references.d.ts b/packages/nativescript-media-query/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/nativescript-media-query/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/nativescript-media-query/tsconfig.json b/packages/nativescript-media-query/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-media-query/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-orientation/.eslintrc.json b/packages/nativescript-orientation/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-orientation/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-orientation/README.md b/packages/nativescript-orientation/README.md
deleted file mode 100644
index 09c8e69..0000000
--- a/packages/nativescript-orientation/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# @nativescript-use/nativescript-orientation
-
-```javascript
-npm install @nativescript-use/nativescript-orientation
-```
-
-## Usage
-
-```ts
-import { Orientation } from "@nativescript-use/nativescript-orientation"
-
-const orientation = new Orientation();
-
-// Get current orientation
-const currentOrientation = orientation.getOrientation();
-
-// Change orientation. values: 'landscape' | 'landscaperight' | 'landscapeleft' | 'portrait'
-orientation.setOrientation('landscape');
-
-// Enable rotation
-orientation.enableRotation();
-
-// Disable rotation
-orientation.disableRotation();
-
-// Add listener
-orientation.onChangedOrientation((newValue: CoreTypes.DeviceOrientationType) =>{
- console.log(newValue)
-});
-// Remove listener
-orientation.offChangedOrientation();
-```
-
-Type declaration
-```ts
-export declare class Orientation {
- getOrientation(): CoreTypes.DeviceOrientationType
- onChangedOrientation(callback: (newValue: CoreTypes.DeviceOrientationType) => void): void
- offChangedOrientation(): void
- enableRotation(): void
- disableRotation(): void
- setOrientation(value: 'landscape' | 'landscaperight' | 'landscapeleft' | 'portrait', animation: false): void
-}
-```
-
-## License
-
-Apache License Version 2.0
-
-
diff --git a/packages/nativescript-orientation/index.android.ts b/packages/nativescript-orientation/index.android.ts
deleted file mode 100644
index 12e9581..0000000
--- a/packages/nativescript-orientation/index.android.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-import { CoreTypes, Utils } from '@nativescript/core';
-import { OrientationBase } from './common';
-
-export class Orientation extends OrientationBase {
- getOrientation(): CoreTypes.DeviceOrientationType {
- const orientation = Utils.android.getApplicationContext().getResources().getConfiguration().orientation;
- if (orientation === android.content.res.Configuration.ORIENTATION_LANDSCAPE) {
- return CoreTypes.DeviceOrientation.landscape;
- } else if (orientation === android.content.res.Configuration.ORIENTATION_PORTRAIT) {
- return CoreTypes.DeviceOrientation.portrait;
- }
- return CoreTypes.DeviceOrientation.unknown;
- }
-
- enableRotation(): void {
- Utils.android.getCurrentActivity().setRequestedOrientation(13);
- }
-
- disableRotation(): void {
- Utils.android.getCurrentActivity().setRequestedOrientation(14);
- }
-
- setOrientation(value: 'portrait' | 'landscape' | 'landscaperight' | 'landscapeleft', animation = false): void {
- var val = value.toLowerCase();
- var newOrientation;
- switch (val) {
- case 'landscape':
- newOrientation = 6; // SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6
- break;
-
- case 'landscaperight':
- newOrientation = 0; // SCREEN_ORIENTATION_LANDSCAPE = 0
- break;
-
- case 'landscapeleft':
- newOrientation = 8; // SCREEN_ORIENTATION_REVERSE_LANDSCAPE = 9
- break;
-
- case 'portrait':
- default:
- newOrientation = 1; // SCREEN_ORIENTATION_PORTRAIT = 1
- break;
- }
- Utils.android.getCurrentActivity().setRequestedOrientation(newOrientation);
- }
-
- setFullScreen(fullScreen: boolean): void {
- var View = android.view.View;
- var WindowManager = android.view.WindowManager;
- var window = Utils.android.getCurrentActivity().getWindow();
-
- fullScreen = !!fullScreen;
-
- if (fullScreen) {
- window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
- window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
- } else {
- window.clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
- window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
- }
- }
-}
diff --git a/packages/nativescript-orientation/index.d.ts b/packages/nativescript-orientation/index.d.ts
deleted file mode 100644
index 036689d..0000000
--- a/packages/nativescript-orientation/index.d.ts
+++ /dev/null
@@ -1,9 +0,0 @@
-export declare class Orientation {
- getOrientation(): CoreTypes.DeviceOrientationType;
- onChangedOrientation(callback: (newValue: CoreTypes.DeviceOrientationType) => void): void;
- offChangedOrientation(): void;
- enableRotation(): void;
- disableRotation(): void;
- setOrientation(value: 'landscape' | 'landscaperight' | 'landscapeleft' | 'portrait', animation = false): void;
- setFullScreen(fullScreen: boolean): void;
-}
diff --git a/packages/nativescript-orientation/index.ios.ts b/packages/nativescript-orientation/index.ios.ts
deleted file mode 100644
index a122c1f..0000000
--- a/packages/nativescript-orientation/index.ios.ts
+++ /dev/null
@@ -1,159 +0,0 @@
-import { CoreTypes, Device, Frame } from '@nativescript/core';
-import { OrientationBase } from './common';
-
-export class Orientation extends OrientationBase {
- protected interfaceOrientationMask: any;
- protected lockRotation = false;
-
- getOrientation(): CoreTypes.DeviceOrientationType {
- var device = UIDevice.currentDevice;
-
- switch (device.orientation) {
- case UIDeviceOrientation.LandscapeLeft:
- case UIDeviceOrientation.LandscapeRight:
- return CoreTypes.DeviceOrientation.landscape;
- case UIDeviceOrientation.Portrait:
- case UIDeviceOrientation.PortraitUpsideDown:
- return CoreTypes.DeviceOrientation.portrait;
- default:
- let orientation: any = undefined;
- if (parseFloat(Device.osVersion) >= 13) {
- orientation = UIApplication.sharedApplication?.windows?.firstObject?.windowScene?.interfaceOrientation ?? CoreTypes.DeviceOrientation.unknown;
- } else {
- orientation = UIApplication.sharedApplication?.statusBarOrientation ?? CoreTypes.DeviceOrientation.unknown;
- }
- if (orientation === 1 || orientation === 2) {
- return CoreTypes.DeviceOrientation.portrait;
- } else if (orientation && orientation !== CoreTypes.DeviceOrientation.unknown) {
- return CoreTypes.DeviceOrientation.landscape;
- }
- }
- return CoreTypes.DeviceOrientation.unknown;
- }
-
- enableRotation(): void {
- this.interfaceOrientationMask = UIInterfaceOrientationMask.All;
- this.lockRotation = false;
- this.updateiOSLockScreen();
- }
-
- disableRotation(): void {
- this.interfaceOrientationMask = this.getMakFormInterfaceOrientation();
- this.lockRotation = true;
- this.updateiOSLockScreen();
- }
-
- setOrientation(value: 'portrait' | 'landscape' | 'landscaperight' | 'landscapeleft', animation = false): void {
- if (parseFloat(Device.osVersion) >= 16) {
- var newOrientation,
- val = value.toLowerCase();
- if (val === 'landscape' || val === 'landscaperight') {
- newOrientation = UIInterfaceOrientationMask.LandscapeRight;
- } else if (val === 'landscapeleft') {
- newOrientation = UIInterfaceOrientationMask.LandscapeLeft;
- } else {
- newOrientation = UIInterfaceOrientationMask.Portrait;
- }
-
- UINavigationController.attemptRotationToDeviceOrientation();
- const orientation = UIWindowSceneGeometryPreferencesIOS.alloc().initWithInterfaceOrientations(newOrientation);
- let windowScene: UIWindowScene = UIApplication.sharedApplication.connectedScenes.allObjects[0] as UIWindowScene;
- windowScene?.requestGeometryUpdateWithPreferencesErrorHandler(orientation, (e) => {
- console.log(e);
- });
- } else {
- var newOrientation,
- val = value.toLowerCase();
- if (val === 'landscape' || val === 'landscaperight') {
- newOrientation = NSNumber.numberWithInt(UIDeviceOrientation.LandscapeRight);
- } else if (val === 'landscapeleft') {
- newOrientation = NSNumber.numberWithInt(UIDeviceOrientation.LandscapeLeft);
- } else {
- newOrientation = NSNumber.numberWithInt(UIDeviceOrientation.Portrait);
- }
- var device = UIDevice.currentDevice;
- if (animation === false) {
- UIView.setAnimationsEnabled(false);
- }
-
- var currentOrientation = device.orientation;
- // We have to swap to a different orientation FIRST, if the current orientation matches
- if (newOrientation === currentOrientation) {
- var tempOrientation = newOrientation - 1;
- if (tempOrientation < 1) {
- tempOrientation += 2;
- }
- device.setValueForKey(tempOrientation, 'orientation');
- }
-
- device.setValueForKey(newOrientation, 'orientation');
-
- if (animation === false) {
- UIView.setAnimationsEnabled(true);
- }
- }
- }
-
- setFullScreen(fullScreen: boolean): void {
- throw new Error('Method not implemented.');
- }
-
- private updateiOSLockScreen() {
- UINavigationController.attemptRotationToDeviceOrientation();
- var app: UIViewController = Frame.topmost().ios.controller;
- var shouldAutorotate = this.findRootPrototype(app, 'shouldAutorotate');
- var shouldAutorotateToInterfaceOrientation = this.findRootPrototype(app, 'shouldAutorotateToInterfaceOrientation');
-
- Object.defineProperty(shouldAutorotate, 'shouldAutorotate', {
- get: () => {
- //console.log("shouldAutorotate rotate");
- return !this.lockRotation;
- },
- enumerable: true,
- configurable: true,
- });
-
- Object.defineProperty(shouldAutorotateToInterfaceOrientation, 'shouldAutorotateToInterfaceOrientation', {
- get: () => {
- //console.log("shouldAutorotateToInterfaceOrientation rotate");
- return !this.lockRotation;
- },
- enumerable: true,
- configurable: true,
- });
- if (parseFloat(Device.osVersion) >= 16) {
- var supportedInterfaceOrientations = this.findRootPrototype(app, 'supportedInterfaceOrientations');
- Object.defineProperty(supportedInterfaceOrientations, 'supportedInterfaceOrientations', {
- get: () => {
- return this.interfaceOrientationMask;
- },
- enumerable: true,
- configurable: true,
- });
- }
- }
-
- private getMakFormInterfaceOrientation() {
- const orientation = UIApplication.sharedApplication?.windows?.firstObject?.windowScene?.interfaceOrientation;
- switch (orientation) {
- case UIInterfaceOrientation.LandscapeLeft:
- return UIInterfaceOrientationMask.LandscapeLeft;
- case UIInterfaceOrientation.LandscapeRight:
- return UIInterfaceOrientationMask.LandscapeRight;
- case UIInterfaceOrientation.Portrait:
- return UIInterfaceOrientationMask.Portrait;
- case UIInterfaceOrientation.PortraitUpsideDown:
- return UIInterfaceOrientationMask.PortraitUpsideDown;
- default:
- return UIInterfaceOrientationMask.Portrait;
- }
- }
-
- private findRootPrototype(source: any, name: any) {
- var proto = source;
- do {
- proto = Object.getPrototypeOf(proto);
- } while (proto !== null && !proto.hasOwnProperty(name));
- return proto;
- }
-}
diff --git a/packages/nativescript-orientation/package.json b/packages/nativescript-orientation/package.json
deleted file mode 100644
index 5b8df86..0000000
--- a/packages/nativescript-orientation/package.json
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-orientation",
- "version": "0.0.3",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Matínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/nativescript-orientation/project.json b/packages/nativescript-orientation/project.json
deleted file mode 100644
index 878872f..0000000
--- a/packages/nativescript-orientation/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-orientation",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-orientation",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-orientation",
- "tsConfig": "packages/nativescript-orientation/tsconfig.json",
- "packageJson": "packages/nativescript-orientation/package.json",
- "main": "packages/nativescript-orientation/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-orientation/*.md",
- "packages/nativescript-orientation/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-orientation/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-orientation"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-orientation"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-orientation"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-orientation/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-orientation/references.d.ts b/packages/nativescript-orientation/references.d.ts
deleted file mode 100644
index 98c5393..0000000
--- a/packages/nativescript-orientation/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
\ No newline at end of file
diff --git a/packages/nativescript-orientation/tsconfig.json b/packages/nativescript-orientation/tsconfig.json
deleted file mode 100644
index aed7323..0000000
--- a/packages/nativescript-orientation/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": "."
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts"]
-}
diff --git a/packages/nativescript-task/.eslintrc.json b/packages/nativescript-task/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/nativescript-task/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/nativescript-task/JSONfn.ts b/packages/nativescript-task/JSONfn.ts
deleted file mode 100644
index 30c09a6..0000000
--- a/packages/nativescript-task/JSONfn.ts
+++ /dev/null
@@ -1,58 +0,0 @@
-// https://dev.to/localazy/how-to-pass-function-to-web-workers-4ee1
-// https://github.com/vkiryukhin/jsonfn
-
-export const JSONfn = {
- stringify(obj: any) {
- return JSON.stringify(obj, function (key, value) {
- var fnBody;
- if (value instanceof Function || typeof value == 'function') {
- fnBody = value.toString();
-
- if (fnBody.length < 8 || fnBody.substring(0, 8) !== 'function') {
- //this is ES6 Arrow Function
- return '_NuFrRa_' + fnBody;
- }
- return fnBody;
- }
- if (value instanceof RegExp) {
- return '_PxEgEr_' + value;
- }
- return value;
- });
- },
- parse(str: any, date2obj?: any) {
- var iso8061 = date2obj ? /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/ : false;
-
- return JSON.parse(str, function (key, value) {
- var prefix;
-
- if (typeof value != 'string') {
- return value;
- }
- if (value.length < 8) {
- return value;
- }
-
- prefix = value.substring(0, 8);
-
- // @ts-ignore
- if (iso8061 && value.match(iso8061)) {
- return new Date(value);
- }
- if (prefix === 'function') {
- return eval('(' + value + ')');
- }
- if (prefix === '_PxEgEr_') {
- return eval(value.slice(8));
- }
- if (prefix === '_NuFrRa_') {
- return eval(value.slice(8));
- }
-
- return value;
- });
- },
- clone(obj: any, date2obj?: any) {
- return JSONfn.parse(JSONfn.stringify(obj), date2obj);
- },
-};
diff --git a/packages/nativescript-task/README.md b/packages/nativescript-task/README.md
deleted file mode 100644
index e7b7f4c..0000000
--- a/packages/nativescript-task/README.md
+++ /dev/null
@@ -1,126 +0,0 @@
-# @nativescript-use/nativescript-task
-
-```javascript
-npm install @nativescript-use/nativescript-task
-```
-
-A [NativeScript](https://nativescript.org/) module for simply handling background tasks via web workers.
-
-This module will initialize a worker that will be available during the lifetime of your application and will be able to execute any task on it.
-
-This lib provides online workers with promises and updates.
-
-## Examples
-### Without using dependencies
-
-```ts
-import { Task } from "@nativescript-use/nativescript-task";
-
-// TS =
-Task.start((ctx) => {
- // ⚡ This function runs in the background
- ctx.onProgressUpdate(false);
- return ctx.state === 1000 ? "YES" : "NO";
-}, {
- state: 1000,
- onProgressUpdate(update) {
- console.log(update.data);
- }
-})
- .then((result) => {
- console.log('Result: ' + result.data); // "YES"
- })
- .catch((result) => {
- console.log('ERROR: ' + result.error);
- // result.state = 1000
- });
-```
-
-### Using inline functions
-
-We can add local functions to run inside the worker using `attachToContextFunctions`.
-
-```ts
-import { Task, TaskContext } from "@nativescript-use/nativescript-task";
-
-const myFunction = (myNumber: number) => 5 + myNumber;
-const myOtherFunction = (myNumber: number) => 20 + myNumber;
-
-Task.start((ctx) => {
- return myFunction(ctx.state) + myOtherFunction(ctx.state);
-}, { state: 10, attachToContextFunctions: { myFunction, myOtherFunction }})
-```
-
-
-### Using dependencies
-
-We need to define a worker with the imports that we want to have defined in our tasks. We define the file `globalWorker.ts|js` in the `src|app` folder of our project, import the modules that we want to have available and pass them to the `defineWorker` function that this library provides.
-
-```ts
-// /app/globalWorker.ts
-import '@nativescript/core/globals';
-import { defineWorker } from "@nativescript-use/nativescript-task";
-
-import { myUtils } from '@utils';
-import { otherLib } from 'other-lib';
-
-defineWorker({ imports: { myUtils, otherLib } });
-```
-
-Now access the modules defined in the globalWorker file from the context.
-
-```ts
-import { Task } from "@nativescript-use/nativescript-task";
-import { myUtils } from '@utils';
-import { otherLib } from 'other-lib';
-
-Task.start((ctx) => {
- // access imported modules
- return myUtils.someFunction(1000) + otherLib.otherFunction(ctx.state);
-}, { state: 1000 })
- .then((result) => {
- console.log('Result: ' + result.data);
- })
-```
-
-## Global configuration
-
-```ts
-// app.ts | main.ts (entry file app)
-
-import { Task } from "@nativescript-use/nativescript-task";
-
-Task.globalWorkerConfig({
- stickyWorker: true,
- newWorkerIfGlobalIsUsed: true,
- startGlobalWorker: true
-});
-
-// run app
-```
-
-- `stickyWorker` - default `true`: When set to true the plugin always keeps a worker running to launch your tasks to this worker. This saves time when launching the task since initializing a worker takes time, by default it is true to launch each task as quickly as possible. If set to false the plugin will initialize a worker and terminate each task.
-- `newWorkerIfGlobalIsUsed` - default `true`: When stickyWorker is true and we have a worker always running, if we launch a task and the main worker is running with another task, a new worker will be created to launch this task and not wait for the previous task to finish. If you disable this flag and launch another task while one is running, it will have to wait until it reaches the beginning of the queue.
-- `startGlobalWorker` - default `true`: Initialize the global worker when the configuration is set, it will be available when you launch your first task. If disabled, when the first task is launched it will have the worker creation delay.
-
-Note: when the worker execution time is mentioned we are talking about about 200ms (it is almost nothing). It's not much, but this plugin prioritizes speed, which is why we keep a `stickyWorker` always available.
-
-## Limitations
-
-* Only submit and return serializable objects and values.
-* All task functions are 'closures', what means that you CANNOT access variables outside such functions. All functions are serialized as strings and submitted to the [worker script](https://github.com/mkloubert/nativescript-tasks/blob/master/plugin/worker.js) where "external stuff" is NOT available! The only way to share data with the functions is to submit an optional and serializable "state value".
-
-Read the [official documentation](https://docs.nativescript.org/guide/multithreading) to get more information.
-
-
-For more information you can enter the [NativeScript discord server](https://discord.com/invite/RgmpGky9GR)!
-
-This plugin is largely based on https://github.com/mkloubert/nativescript-tasks
-
-## License
-
-Apache License Version 2.0
-
-Made with ❤️
-
-
diff --git a/packages/nativescript-task/defineWorker.ts b/packages/nativescript-task/defineWorker.ts
deleted file mode 100644
index ae81015..0000000
--- a/packages/nativescript-task/defineWorker.ts
+++ /dev/null
@@ -1,77 +0,0 @@
-import { JSONfn } from './JSONfn';
-
-const DEFAULT_PARAM_NAME = 'internalCtx';
-
-export const defineWorker = (options: { imports?: {} } = {}) => {
- self.onmessage = function (msg: any) {
- const request: { id: string; func: { body: string; attachToContextFunctions?: any }; state: any; imports?: string[] } = JSON.parse(msg.data);
- try {
- //console.time('defineWorker');
- //console.timeEnd('defineWorker');
- let { paramUserName, functionString } = extractContextParamName(request.func.body);
- const { functionStrToAttach, attachToContextFunctions } = parseAttachToContextFunctions(request.func.attachToContextFunctions, paramUserName);
-
- functionString = injectContext(functionString, functionStrToAttach, paramUserName);
- const func = JSONfn.parse(functionString);
- let result;
- if (func) {
- result = func({
- state: request.state,
- ...options?.imports,
- ...attachToContextFunctions,
- onProgressUpdate: (dataUpdate: any) => self.postMessage(JSON.stringify({ dataUpdate: dataUpdate ?? null, id: request.id, onProgressUpdate: true })),
- });
- }
-
- if (result) {
- result = JSON.stringify({ ...{ id: request.id }, ...{ result: result } });
- }
- self.postMessage(result);
- } catch (error: any) {
- throw new Error(JSON.stringify({ id: request.id, error: error.toString() }));
- }
- };
-};
-
-function injectImports(functionString: string, paramUserName: string) {
- functionString = functionString.replaceAll(/([0-9],_.*?)(.*?__WEBPACK_IMPORTED_MODULE_.*?)(__.?)/g, paramUserName + '.');
- functionString = functionString.replaceAll(/( _.*?)(.*?__WEBPACK_IMPORTED_MODULE_.*?)(__.?)/g, ' ' + paramUserName + '.');
- return functionString;
-}
-
-function injectFunctionToAttach(functionString: string, functionStrToAttach: string[], paramUserName: string) {
- return functionString.replace(`_NuFrRa_(${paramUserName}) => {`, `_NuFrRa_(${paramUserName}) => {${functionStrToAttach.join(' ')}`);
-}
-
-function injectContext(functionString: string, functionStrToAttach: string[], paramUserName: string) {
- return injectFunctionToAttach(injectImports(functionString, paramUserName), functionStrToAttach, paramUserName);
-}
-
-function extractContextParamName(functionString: string) {
- const querySearchParam = functionString.match(/(?<=\_NuFrRa_\()(.*?)(?=\))/);
- let paramUserName = DEFAULT_PARAM_NAME;
-
- if (querySearchParam && querySearchParam.length > 0 && querySearchParam[0] !== '') {
- paramUserName = querySearchParam[0];
- } else {
- // If the user has not defined the context parameter, it is added
- functionString = functionString.replace('_NuFrRa_()', `_NuFrRa_(${DEFAULT_PARAM_NAME})`);
- }
- return { paramUserName, functionString };
-}
-
-function parseAttachToContextFunctions(attachToContextFunctions: any, paramUserName: string) {
- const keyFunctionst = Object.keys(attachToContextFunctions);
- const functionStrToAttach: string[] = [];
- var attachToContextFunctionsResult = {};
- if (attachToContextFunctions && keyFunctionst.length > 0) {
- attachToContextFunctionsResult = keyFunctionst.reduce((resultObject: any, keyFunction: string) => {
- let attachFunction = injectImports(attachToContextFunctions[keyFunction], paramUserName);
- const parseFunctionToInject = attachFunction.replace('_NuFrRa_', `const ${keyFunction} = `);
- functionStrToAttach.push(parseFunctionToInject.substring(1, parseFunctionToInject.length - 1));
- resultObject[keyFunction] = JSONfn.parse(attachFunction);
- return resultObject;
- }, {});
- }
- return { functionStrToAttach, attachToContextFunctions: attachToContextFunctionsResult };
-}
diff --git a/packages/nativescript-task/globalWorker.ts b/packages/nativescript-task/globalWorker.ts
deleted file mode 100644
index d94d5d6..0000000
--- a/packages/nativescript-task/globalWorker.ts
+++ /dev/null
@@ -1,4 +0,0 @@
-import '@nativescript/core/globals';
-import { defineWorker } from './defineWorker';
-
-defineWorker();
diff --git a/packages/nativescript-task/index.ts b/packages/nativescript-task/index.ts
deleted file mode 100644
index b2a8f1b..0000000
--- a/packages/nativescript-task/index.ts
+++ /dev/null
@@ -1,418 +0,0 @@
-import { Observable } from '@nativescript/core';
-import { JSONfn } from './JSONfn';
-export * from './defineWorker';
-
-/**
- * Describes a task function.
- *
- * @param {TState} [state] The optional value to submit to the function.
- *
- * @return {TResult} The result of the function.
- */
-export type TaskFunc = (ctx: TaskContext) => TResult;
-export type TaskFuncUpdate = (update: { data: TUpdate }) => void;
-
-export interface OnData {
- data: Data;
-}
-/**
- * Describes a task context.
- */
-export interface TaskContext {
- state: TState;
- onProgressUpdate: (dataUpdate: TUpdate) => void;
- [key: string]: any;
-}
-
-/**
- * Describes a result of a task.
- */
-export interface TaskResult {
- /**
- * The result data (on success)
- */
- data?: TResult;
-
- /**
- * The error (if occurred)
- */
- error?: any;
-
- /**
- * The submitted value.
- */
- state?: TState;
-}
-
-export interface TaskUpdate {
- /**
- * The update data (on update)
- */
- data: TUpdate;
-}
-
-/**
- * List of task states.
- */
-export enum TaskStatus {
- Starting,
- /**
- * The task has been initialized but has not yet been invoked.
- */
- Created,
-
- /**
- * The task completed due to an unhandled exception.
- */
- Faulted,
-
- /**
- * The task completed execution successfully.
- */
- RanToCompletion,
-
- /**
- * The task is running but has not yet completed.
- */
- Running,
-
- /**
- * The task has been scheduled for execution but has not yet begun executing.
- */
- WaitingToRun,
-}
-type GeneralCallback = ((data: any | undefined) => void) | undefined;
-export type GlobalWorkerConfiguration = { stickyWorker?: boolean; newWorkerIfGlobalIsUsed?: boolean; startGlobalWorker?: boolean };
-export type DataWorker = { worker?: Worker; isGlobal: boolean; running: boolean; globalResolve?: { [key: string]: GeneralCallback }; globalReject?: { [key: string]: GeneralCallback }; globalOnUpdate?: { [key: string]: GeneralCallback } };
-let dataGlobalWorker: DataWorker = { worker: null!, isGlobal: true, running: false, globalResolve: {}, globalReject: {}, globalOnUpdate: {} };
-let globalConfiguration: GlobalWorkerConfiguration = { stickyWorker: true, newWorkerIfGlobalIsUsed: true, startGlobalWorker: true };
-
-/**
- * A task.
- */
-export class Task extends Observable {
- /**
- * Stores the function to invoke.
- */
- protected readonly _FUNC: TaskFunc;
- protected readonly _FUNC_UPDATE?: TaskFuncUpdate;
- /**
- * Stores the error of the last execution.
- */
- protected _error: any;
- /**
- * Stores the current task state.
- */
- protected _status: TaskStatus = TaskStatus.Starting;
-
- protected dataWorker: DataWorker = { worker: null!, isGlobal: false, running: false };
- protected id = '';
- /**
- * Initializes a new instance of that class.
- *
- * @param {TaskFunc} func The function to invoke.
- */
- constructor(func: TaskFunc, funcUptade?: TaskFuncUpdate) {
- super();
- if (func !== null && func !== undefined) {
- if (typeof func !== 'function') {
- throw "'func' must be a function!";
- }
- }
-
- this._FUNC = func;
- this._FUNC_UPDATE = funcUptade;
- this.updateStatus(TaskStatus.Created);
- }
-
- public static globalWorkerConfig(options: GlobalWorkerConfiguration) {
- globalConfiguration = { ...globalConfiguration, ...options };
- if (globalConfiguration.startGlobalWorker) {
- Task.initGlobalWorker();
- }
- }
-
- public static initGlobalWorker(): Worker {
- if (dataGlobalWorker.worker == null) {
- dataGlobalWorker.worker = new Worker('~/globalWorker');
- }
- return dataGlobalWorker.worker;
- }
-
- private newWorker() {
- return new Worker('~/globalWorker');
- }
-
- public static finishGlobalWorker() {
- dataGlobalWorker.worker?.terminate();
- dataGlobalWorker.worker = null!;
- dataGlobalWorker.running = false;
- }
-
- /**
- * Creates a new task.
- *
- * @param {TaskFunc} func The function to invoke.
- *
- * @return {Task} The new task.
- */
- public static newTask(func: TaskFunc, onProgressUpdate?: TaskFuncUpdate): Task {
- return new Task(func, onProgressUpdate);
- }
-
- /**
- * Creates and starts a new task.
- *
- * @param {TaskFunc} func The function to invoke.
- * @param {TState} [state] The optional value / object for the execution.
- *
- * @return {Promise} The promise.
- */
- public static start(func: TaskFunc, options?: { state?: TState; onProgressUpdate?: TaskFuncUpdate; attachToContextFunctions?: {}; performance?: boolean }): Promise> {
- return Task.newTask(func, options?.onProgressUpdate).start(options);
- }
-
- /**
- * Gets the error of the last execution.
- */
- public get error(): any {
- return this._error;
- }
-
- /**
- * Gets the underyling function to invoke.
- */
- public get func(): TaskFunc {
- return this._FUNC;
- }
-
- /**
- * Gets the underyling upudate function to invoke.
- */
- public get funcUpdate(): TaskFuncUpdate | undefined {
- return this._FUNC_UPDATE;
- }
-
- public getWorker(): DataWorker {
- if (globalConfiguration.newWorkerIfGlobalIsUsed && dataGlobalWorker.running) {
- return { worker: this.newWorker(), isGlobal: false, running: false };
- }
-
- if (dataGlobalWorker.worker === null) {
- dataGlobalWorker.worker = this.newWorker();
- return { worker: dataGlobalWorker.worker, isGlobal: true, running: false };
- } else {
- return { worker: dataGlobalWorker.worker, isGlobal: true, running: false };
- }
- }
-
- /**
- * Starts the task.
- *
- * @param {TState} [state] The optional value to submit to the function.
- *
- * @return {Promise>} The promise.
- */
-
- public start(options?: { state?: TState; attachToContextFunctions?: { [key: string]: any }; performance?: boolean }): Promise> {
- this.id = Date.now().toString();
- let me = this;
-
- return new Promise>((resolve, reject) => {
- let completed = (id: string, err: any, data?: TResult) => {
- if (err) {
- const rejectFunction = me.getReject(id, reject);
- if (rejectFunction) {
- rejectFunction({
- error: err,
- state: options?.state,
- });
- }
- } else {
- const resolveFunction = me.getResolve(id, resolve);
- if (resolveFunction) {
- resolveFunction({
- data: data,
- state: options?.state,
- });
- }
- }
- if (options?.performance) {
- console.timeEnd('RunWorker');
- }
- me.removeGlobalCallback(id);
- me.checkTerminateWorker(data);
- me.updateError(err);
- };
-
- switch (me._status) {
- case TaskStatus.Created:
- case TaskStatus.Faulted:
- case TaskStatus.RanToCompletion:
- break;
-
- default:
- completed('', new Error(`Cannot start while in '${TaskStatus[me._status]}' state!`));
- return;
- }
-
- try {
- me.updateStatus(TaskStatus.WaitingToRun);
- me.dataWorker = me.getWorker();
- const worker: Worker = me.dataWorker.worker as Worker;
- me.dataWorker.running = true;
- if (me.dataWorker.isGlobal && dataGlobalWorker.globalResolve && dataGlobalWorker.globalReject && dataGlobalWorker.globalOnUpdate) {
- dataGlobalWorker.running = true;
- dataGlobalWorker.globalResolve[me.id] = resolve;
- dataGlobalWorker.globalReject[me.id] = reject;
- dataGlobalWorker.globalOnUpdate[me.id] = me._FUNC_UPDATE;
- }
-
- worker.onmessage = function (msg) {
- let message = msg.data;
- let executionId = '';
- if (message) {
- message = JSON.parse(message);
- executionId = message.id;
- }
-
- if (message?.onProgressUpdate === true) {
- const onUpdateFuncion = me.getOnUpdate(executionId);
- if (onUpdateFuncion) {
- onUpdateFuncion({ data: message.dataUpdate });
- }
- } else {
- me.updateStatus(TaskStatus.RanToCompletion);
- completed(executionId, null, message.result);
- }
- };
-
- worker.onerror = function (err) {
- const idExecution = JSON.parse(err.message.replace('Uncaught Error: ', ''))?.id;
- me.updateStatus(TaskStatus.Faulted);
- completed(idExecution, err);
- };
-
- let func: any;
-
- if (me._FUNC) {
- func = {};
- func.body = JSONfn.stringify(me._FUNC);
- if (options?.attachToContextFunctions && Object.keys(options?.attachToContextFunctions).length > 0) {
- // @ts-ignore
- const functionsToAttach = Object.keys(options.attachToContextFunctions).reduce((resultObject: any, keyFunction: string) => {
- // @ts-ignore
- resultObject[keyFunction] = JSONfn.stringify(options.attachToContextFunctions[keyFunction]);
- return resultObject;
- }, {});
- func.attachToContextFunctions = functionsToAttach;
- }
- }
-
- if (options?.performance) {
- console.time('RunUI');
- // @ts-ignore
- me._FUNC({ state: options?.state, ...options?.attachToContextFunctions });
- console.timeEnd('RunUI');
- console.time('RunWorker');
- }
- me.updateStatus(TaskStatus.Running);
-
- worker.postMessage(
- JSON.stringify({
- id: me.id,
- func: func,
- state: options?.state,
- })
- );
- } catch (e) {
- console.log(e);
- me.updateStatus(TaskStatus.Faulted);
- completed(me.id, e);
- }
- });
- }
-
- private getReject(id: string, reject: (data: any) => void) {
- if (this.dataWorker.isGlobal) {
- return dataGlobalWorker.globalReject ? dataGlobalWorker.globalReject[id] : null;
- }
- return reject;
- }
- private getResolve(id: string, resolve: (data: any) => void) {
- if (this.dataWorker.isGlobal) {
- return dataGlobalWorker.globalResolve ? dataGlobalWorker.globalResolve[id] : null;
- }
- return resolve;
- }
-
- private getOnUpdate(id: string) {
- if (this.dataWorker.isGlobal) {
- return dataGlobalWorker.globalOnUpdate ? dataGlobalWorker.globalOnUpdate[id] : null;
- }
- return this._FUNC_UPDATE;
- }
-
- private removeGlobalCallback(id: string) {
- if (dataGlobalWorker.globalResolve && dataGlobalWorker.globalResolve[id]) delete dataGlobalWorker.globalResolve[id];
- if (dataGlobalWorker.globalReject && dataGlobalWorker.globalReject[id]) delete dataGlobalWorker.globalReject[id];
- if (dataGlobalWorker.globalOnUpdate && dataGlobalWorker.globalOnUpdate[id]) delete dataGlobalWorker.globalOnUpdate[id];
- }
-
- private checkTerminateWorker(result: any) {
- if ((!this.dataWorker.isGlobal && result?.onProgressUpdate !== true) || (!globalConfiguration.stickyWorker && dataGlobalWorker.isGlobal && dataGlobalWorker.globalResolve && Object.keys(dataGlobalWorker.globalResolve).length === 0)) {
- this.dataWorker.worker?.terminate();
- this.dataWorker.worker = null!;
- if (this.dataWorker.isGlobal) {
- Task.finishGlobalWorker();
- }
- }
- if (result?.onProgressUpdate !== true) {
- this.dataWorker.running = false;
- if (this.dataWorker.isGlobal && dataGlobalWorker.globalResolve && Object.keys(dataGlobalWorker.globalResolve).length === 0) dataGlobalWorker.running = false;
- }
- }
-
- /**
- * Gets the current status.
- */
- public get status(): TaskStatus {
- return this._status;
- }
-
- /**
- * Updates the error value.
- *
- * @param {TaskStatus} newValue The new value.
- *
- * @return {boolean} Property change has been raised for 'error' property or not.
- */
- protected updateError(newValue: any): boolean {
- if (newValue !== this._error) {
- this._error = newValue;
-
- this.notifyPropertyChange('error', newValue);
- return true;
- }
-
- return false;
- }
-
- /**
- * Updates the current status.
- *
- * @param {TaskStatus} newValue The new value.
- *
- * @return {boolean} Property change has been raised for 'status' property or not.
- */
- protected updateStatus(newValue: TaskStatus): boolean {
- if (newValue !== this._status) {
- this._status = newValue;
-
- this.notifyPropertyChange('status', newValue);
- return true;
- }
-
- return false;
- }
-}
diff --git a/packages/nativescript-task/nativescript.webpack.js b/packages/nativescript-task/nativescript.webpack.js
deleted file mode 100644
index 06b74cc..0000000
--- a/packages/nativescript-task/nativescript.webpack.js
+++ /dev/null
@@ -1,14 +0,0 @@
-module.exports = (webpack) => {
- webpack.chainWebpack(
- (config, env) => {
- const fs = require('fs');
- const filePath = `./${env.appPath}/globalWorker.js`;
- const filePathTs = `./${env.appPath}/globalWorker.ts`;
- if (!fs.existsSync(filePath) && !fs.existsSync(filePathTs)) {
- const path = require('path');
- config.resolve.alias.set('~/globalWorker', path.resolve(__dirname, 'globalWorker.js'));
- }
- },
- { order: -2 }
- );
-};
diff --git a/packages/nativescript-task/package.json b/packages/nativescript-task/package.json
deleted file mode 100644
index f94bb29..0000000
--- a/packages/nativescript-task/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "name": "@nativescript-use/nativescript-task",
- "version": "0.0.11",
- "description": "Multiprocessing task in background",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android",
- "Multiprocessing",
- "Thread",
- "Task"
- ],
- "author": {
- "name": "Juan de Dios Martínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed",
- "devDependencies": {
- "@nativescript/webpack": "^5.0.8"
- }
-}
diff --git a/packages/nativescript-task/project.json b/packages/nativescript-task/project.json
deleted file mode 100644
index cf0550b..0000000
--- a/packages/nativescript-task/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "nativescript-task",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/nativescript-task",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/nativescript-task",
- "tsConfig": "packages/nativescript-task/tsconfig.json",
- "packageJson": "packages/nativescript-task/package.json",
- "main": "packages/nativescript-task/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/nativescript-task/*.md",
- "packages/nativescript-task/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/nativescript-task/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts nativescript-task"],
- "parallel": false
- },
- "outputs": ["dist/packages/nativescript-task"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages nativescript-task"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/nativescript-task/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/nativescript-task/references.d.ts b/packages/nativescript-task/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/nativescript-task/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/nativescript-task/tsconfig.json b/packages/nativescript-task/tsconfig.json
deleted file mode 100644
index 78580eb..0000000
--- a/packages/nativescript-task/tsconfig.json
+++ /dev/null
@@ -1,10 +0,0 @@
-{
- "extends": "../../tsconfig.base.json",
- "compilerOptions": {
- "outDir": "../../dist/out-tsc",
- "rootDir": ".",
- "allowJs": true
- },
- "exclude": ["**/*.spec.ts", "**/*.test.ts", "angular"],
- "include": ["**/*.ts", "references.d.ts", "nativescript.webpack.js"]
-}
diff --git a/packages/started.md b/packages/started.md
new file mode 100644
index 0000000..5322ec7
--- /dev/null
+++ b/packages/started.md
@@ -0,0 +1,13 @@
+# Get Started
+
+NativeScriptVueUse is based on [VueUse](https://vueuse.org/), it is a collection of utilities for [NativeScript-Vue3](https://github.com/nativescript-vue/nativescript-vue)
+
+## Installation
+
+
+
+```bash
+npm i @vallemar/nativescript-vueuse
+```
+
+
diff --git a/packages/vue/.eslintrc.json b/packages/vue/.eslintrc.json
deleted file mode 100644
index 53c06c8..0000000
--- a/packages/vue/.eslintrc.json
+++ /dev/null
@@ -1,18 +0,0 @@
-{
- "extends": ["../../.eslintrc.json"],
- "ignorePatterns": ["!**/*", "node_modules/**/*"],
- "overrides": [
- {
- "files": ["*.ts", "*.tsx", "*.js", "*.jsx"],
- "rules": {}
- },
- {
- "files": ["*.ts", "*.tsx"],
- "rules": {}
- },
- {
- "files": ["*.js", "*.jsx"],
- "rules": {}
- }
- ]
-}
diff --git a/packages/vue/.vitepress/config.mts b/packages/vue/.vitepress/config.mts
deleted file mode 100644
index f6c4597..0000000
--- a/packages/vue/.vitepress/config.mts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { defineConfig } from 'vitepress';
-
-const logo = 'https://art.nativescript-vue.org/NativeScript-Vue-Green-White.svg';
-// https://vitepress.dev/reference/site-config
-export default defineConfig({
- vite: {
- define: {
- BASE_BLOB_SOURCE: JSON.stringify('https://github.com/NativeScript-Use/NativeScript-Use/blob/main/packages/vue/src/'),
- STACKBLITZ_VIEW: JSON.stringify('https://stackblitz.com/edit/nativescrip-use-vue/?file=src/views/')
- }
- },
- head: [
- /* ['link', { rel: "apple-touch-icon", sizes: "180x180", href: "https://nativescript-vue.org/apple-touch-icon.png"}],
- ['link', { rel: "icon", type: "image/png", sizes: "32x32", href: "https://nativescript-vue.org/favicon-32x32.png"}],
- ['link', { rel: "icon", type: "image/png", sizes: "16x16", href: "https://nativescript-vue.org/favicon-16x16.png"}],
- */
- ['link', { rel: 'icon', type: 'image/svg', sizes: '32x32', href: logo }],
- [
- 'script',
- {
- async: 'false',
- src: 'https://unpkg.com/@vueuse/core',
- },
- ],
- [
- 'script',
- {
- async: 'true',
- src: 'https://www.googletagmanager.com/gtag/js?id=G-RV37C0FX94',
- },
- ],
- ['script', {}, "window.dataLayer = window.dataLayer || [];\nfunction gtag(){dataLayer.push(arguments);}\ngtag('js', new Date());\ngtag('config', 'G-RV37C0FX94');"],
- ],
- appearance: "dark",
- title: '@NativeScript-Use/Vue',
- description: 'Collection of NativeScript-Vue3 Composition Utilities',
- themeConfig: {
- logo,
- // https://vitepress.dev/reference/default-theme-config
- nav: [
- { text: 'Home', link: '/' },
- { text: 'Get Started', link: '/started' },
- { text: 'Functions', link: '/src/unrefView/index.md' },
- { text: 'Playground', link: 'https://stackblitz.com/edit/nativescrip-use-vue?file=src%2Fapp.ts' },
- ],
-
- sidebar: [
- {
- text: 'Guide',
- items: [{ text: 'Get Started', link: '/started' }],
- },
- {
- text: 'Functions',
- items: [
- { text: 'refView', link: '/src/refView/index.md' },
- { text: 'unrefView', link: '/src/unrefView/index.md' },
- { text: 'useBreakpoints', link: '/src/useBreakpoints/index.md' },
- { text: 'useClipboard', link: '/src/useClipboard/index.md' },
- { text: 'useColorMode', link: '/src/useColorMode/index.md' },
- { text: 'useColorPalette', link: '/src/useColorPalette/index.md' },
- { text: 'useContentElementSize', link: '/src/useContentElementSize/index.md' },
- { text: 'useDark', link: '/src/useDark/index.md' },
- { text: 'useElementSize', link: '/src/useElementSize/index.md' },
- { text: 'useFadeElement', link: '/src/useFadeElement/index.md' },
- { text: 'useEventListener', link: '/src/useEventListener/index.md' },
- { text: 'useIntersectionObserver', link: '/src/useIntersectionObserver/index.md' },
- { text: 'useKeyboard', link: '/src/useKeyboard/index.md' },
- { text: 'useMediaQuery', link: '/src/useMediaQuery/index.md' },
- { text: 'useRootLayout', link: '/src/useRootLayout/index.md' },
- { text: 'useScreenOrientation', link: '/src/useScreenOrientation/index.md' },
- { text: 'useStorage', link: '/src/useStorage/index.md' },
- { text: 'useSyncObservableArray', link: '/src/useSyncObservableArray/index.md' },
- { text: 'useWorker', link: '/src/useWorker/index.md' },
- ],
- },
- {
- text: 'Global hooks',
- items: [{ text: 'onApplicationMounted', link: '/src/onApplicationMounted/index.md' }],
- },
- ],
-
- socialLinks: [
- { icon: 'github', link: 'https://github.com/NativeScript-Use/NativeScript-Use' },
- { icon: 'discord', link: 'https://discord.com/invite/RgmpGky9GR' },
- //{ icon: { svg: 'https://upload.wikimedia.org/wikipedia/commons/d/db/Npm-logo.svg'}, link: 'https://www.npmjs.com/package/@vallemar/nativescript-vueuse' }
- ],
- search: {
- provider: 'local',
- },
-
- },
-});
diff --git a/packages/vue/.vitepress/theme/components/Home.vue b/packages/vue/.vitepress/theme/components/Home.vue
deleted file mode 100644
index 2c2f6aa..0000000
--- a/packages/vue/.vitepress/theme/components/Home.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
-
diff --git a/packages/vue/.vitepress/theme/components/Preview.vue b/packages/vue/.vitepress/theme/components/Preview.vue
deleted file mode 100644
index 91d92c7..0000000
--- a/packages/vue/.vitepress/theme/components/Preview.vue
+++ /dev/null
@@ -1,52 +0,0 @@
-
-
-
-
Try with
-
-
+
-
-
+
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/vue/.vitepress/theme/components/Source.vue b/packages/vue/.vitepress/theme/components/Source.vue
deleted file mode 100644
index 36f94d4..0000000
--- a/packages/vue/.vitepress/theme/components/Source.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
diff --git a/packages/vue/.vitepress/theme/components/Sponsor.vue b/packages/vue/.vitepress/theme/components/Sponsor.vue
deleted file mode 100644
index f8af5bb..0000000
--- a/packages/vue/.vitepress/theme/components/Sponsor.vue
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
diff --git a/packages/vue/.vitepress/theme/components/Sponsors.vue b/packages/vue/.vitepress/theme/components/Sponsors.vue
deleted file mode 100644
index d011200..0000000
--- a/packages/vue/.vitepress/theme/components/Sponsors.vue
+++ /dev/null
@@ -1,21 +0,0 @@
-
-
-
-
diff --git a/packages/vue/.vitepress/theme/components/YoutubeVideo.vue b/packages/vue/.vitepress/theme/components/YoutubeVideo.vue
deleted file mode 100644
index 04882ae..0000000
--- a/packages/vue/.vitepress/theme/components/YoutubeVideo.vue
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-
-
-
-
-
diff --git a/packages/vue/.vitepress/theme/components/balls.vue b/packages/vue/.vitepress/theme/components/balls.vue
deleted file mode 100644
index 1c584eb..0000000
--- a/packages/vue/.vitepress/theme/components/balls.vue
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/packages/vue/README.md b/packages/vue/README.md
deleted file mode 100644
index 51173e3..0000000
--- a/packages/vue/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# @nativescript-use/vue
-
-```javascript
-npm install @nativescript-use/vue
-```
-
-[Documentation (Vue3)](https://nativescriptuse-vue.netlify.app/)
-
-
-Apache License Version 2.0
diff --git a/packages/vue/index.d.ts b/packages/vue/index.d.ts
deleted file mode 100644
index 4d416c1..0000000
--- a/packages/vue/index.d.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Functions */
-export * from './src/unrefView';
-export * from './src/refView';
-export * from './src/useBreakpoints';
-export * from './src/useClipboard';
-export * from './src/useColorMode';
-export * from './src/useColorPalette';
-export * from './src/useContentElementSize';
-export * from './src/useDark';
-export * from './src/useElementSize';
-export * from './src/useFadeElement';
-export * from './src/useEventListener';
-export * from './src/useIntersectionObserver';
-export * from './src/useKeyboard';
-export * from './src/useMediaQuery';
-export * from './src/useRootLayout';
-export * from './src/useScreenOrientation';
-export * from './src/useStorage';
-export * from './src/useSyncObservableArray';
-export * from './src/useWorker';
-export * from './src/types';
-
-/* Global hooks */
-export * from './src/onApplicationMounted';
diff --git a/packages/vue/index.ts b/packages/vue/index.ts
deleted file mode 100644
index 4d416c1..0000000
--- a/packages/vue/index.ts
+++ /dev/null
@@ -1,24 +0,0 @@
-/* Functions */
-export * from './src/unrefView';
-export * from './src/refView';
-export * from './src/useBreakpoints';
-export * from './src/useClipboard';
-export * from './src/useColorMode';
-export * from './src/useColorPalette';
-export * from './src/useContentElementSize';
-export * from './src/useDark';
-export * from './src/useElementSize';
-export * from './src/useFadeElement';
-export * from './src/useEventListener';
-export * from './src/useIntersectionObserver';
-export * from './src/useKeyboard';
-export * from './src/useMediaQuery';
-export * from './src/useRootLayout';
-export * from './src/useScreenOrientation';
-export * from './src/useStorage';
-export * from './src/useSyncObservableArray';
-export * from './src/useWorker';
-export * from './src/types';
-
-/* Global hooks */
-export * from './src/onApplicationMounted';
diff --git a/packages/vue/nativescript.webpack.ts b/packages/vue/nativescript.webpack.ts
deleted file mode 100644
index d21ca62..0000000
--- a/packages/vue/nativescript.webpack.ts
+++ /dev/null
@@ -1,7 +0,0 @@
-//@ts-ignore
-const webpack = require('@nativescript/webpack');
-
-module.exports = (env) => {
- const wepackTask = require('@nativescript-use/nativescript-task/nativescript.webpack.js');
- wepackTask(webpack);
-};
diff --git a/packages/vue/package.json b/packages/vue/package.json
deleted file mode 100644
index d74f5b8..0000000
--- a/packages/vue/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "@nativescript-use/vue",
- "version": "0.0.51",
- "description": "Add a plugin description",
- "main": "index",
- "typings": "index.d.ts",
- "nativescript": {
- "platforms": {
- "ios": "6.0.0",
- "android": "6.0.0"
- }
- },
- "scripts": {},
- "dependencies": {
- "@nativescript-use/nativescript-clipboard": "0.0.3",
- "@nativescript-use/nativescript-intersection-observer": "0.0.1",
- "@nativescript-use/nativescript-keyboard": "0.0.1",
- "@nativescript-use/nativescript-localstorage": "0.0.1",
- "@nativescript-use/nativescript-media-query": "0.0.4",
- "@nativescript-use/nativescript-orientation": "0.0.3",
- "@nativescript-use/nativescript-task": "^0.0.11",
- "@vueuse/core": "^12.5.0"
- },
- "repository": {
- "type": "git",
- "url": "https://github.com/NativeScript-Use/NativeScript-Use.git"
- },
- "keywords": [
- "NativeScript",
- "JavaScript",
- "TypeScript",
- "iOS",
- "Android"
- ],
- "author": {
- "name": "Juan de Dios Matínez Vallejo",
- "email": "oss@nativescript.org"
- },
- "bugs": {
- "url": "https://github.com/NativeScript-Use/NativeScript-Use/issues"
- },
- "license": "Apache-2.0",
- "homepage": "https://github.com/NativeScript-Use/NativeScript-Use",
- "readmeFilename": "README.md",
- "bootstrapper": "@nativescript/plugin-seed"
-}
diff --git a/packages/vue/project.json b/packages/vue/project.json
deleted file mode 100644
index 1b58fb4..0000000
--- a/packages/vue/project.json
+++ /dev/null
@@ -1,66 +0,0 @@
-{
- "name": "vue",
- "$schema": "../../node_modules/nx/schemas/project-schema.json",
- "projectType": "library",
- "sourceRoot": "packages/vue",
- "targets": {
- "build": {
- "executor": "@nx/js:tsc",
- "options": {
- "outputPath": "dist/packages/vue",
- "tsConfig": "packages/vue/tsconfig.json",
- "packageJson": "packages/vue/package.json",
- "main": "packages/vue/index.d.ts",
- "generatePackageJson": false,
- "assets": [
- "packages/vue/*.md",
- "packages/vue/index.d.ts",
- "LICENSE",
- {
- "glob": "**/*",
- "input": "packages/vue/platforms/",
- "output": "./platforms/"
- }
- ],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- }
- ]
- }
- },
- "build.all": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["node tools/scripts/build-finish.ts vue"],
- "parallel": false
- },
- "outputs": ["dist/packages/vue"],
- "dependsOn": [
- {
- "target": "build.all",
- "projects": "dependencies"
- },
- {
- "target": "build",
- "projects": "self"
- }
- ]
- },
- "focus": {
- "executor": "nx:run-commands",
- "options": {
- "commands": ["nx g @nativescript/plugin-tools:focus-packages vue"],
- "parallel": false
- }
- },
- "lint": {
- "executor": "@nrwl/linter:eslint",
- "options": {
- "lintFilePatterns": ["packages/vue/**/*.ts"]
- }
- }
- },
- "tags": []
-}
diff --git a/packages/vue/references.d.ts b/packages/vue/references.d.ts
deleted file mode 100644
index 22bac92..0000000
--- a/packages/vue/references.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-///
diff --git a/packages/vue/src/constant.ts b/packages/vue/src/constant.ts
deleted file mode 100644
index f6df560..0000000
--- a/packages/vue/src/constant.ts
+++ /dev/null
@@ -1 +0,0 @@
-export const LOG_PREFIX = '[@nativescript-use/vue]: ';
diff --git a/packages/vue/src/globalState.ts b/packages/vue/src/globalState.ts
deleted file mode 100644
index 282cdd4..0000000
--- a/packages/vue/src/globalState.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-import { effectScope } from 'nativescript-vue';
-
-export type AnyFn = (...args: any[]) => any;
-export function createGlobalState(stateFactory: Fn): Fn {
- let initialized = false;
- let state: any;
- const scope = effectScope(true);
-
- return ((...args: any[]) => {
- if (!initialized) {
- state = scope.run(() => stateFactory(...args))!;
- initialized = true;
- }
- return state;
- }) as Fn;
-}
diff --git a/packages/vue/src/onApplicationMounted/index.ts b/packages/vue/src/onApplicationMounted/index.ts
deleted file mode 100644
index f026e0b..0000000
--- a/packages/vue/src/onApplicationMounted/index.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Application, Frame } from '@nativescript/core';
-
-export const onApplicationMounted = (callback: () => void, immediateCallback?: () => void) => {
- if (Frame.topmost()) {
- immediateCallback ? immediateCallback() : null;
- callback();
- } else {
- const run = () => {
- setTimeout(callback, 0);
- Application.off('launch', run);
- };
- Application.on('launch', run);
- }
-};
diff --git a/packages/vue/src/refView/index.md b/packages/vue/src/refView/index.md
deleted file mode 100644
index 9bdb660..0000000
--- a/packages/vue/src/refView/index.md
+++ /dev/null
@@ -1,47 +0,0 @@
-
-
-# refView
-
-Utility typed Ref of NativeScript View.
-
-## Usage
-
-```vue
-
-
-
-
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import type { View } from '@nativescript/core';
-import { Ref } from 'nativescript-vue';
-
-/**
- * Utility. Typed Ref of View.
- */
-export declare function refView(): Ref;
-```
-
diff --git a/packages/vue/src/refView/index.ts b/packages/vue/src/refView/index.ts
deleted file mode 100644
index 9115e96..0000000
--- a/packages/vue/src/refView/index.ts
+++ /dev/null
@@ -1,32 +0,0 @@
-import type { View } from '@nativescript/core';
-import { Ref, customRef } from 'nativescript-vue';
-import { unrefView } from '../unrefView';
-
-/**
- * Utility. Typed Ref of View.
- */
-export function refView(): Ref {
- return customRef((track, trigger) => {
- let view: View | undefined = undefined;
- return {
- get() {
- track();
- return view;
- },
- set(newValue: any) {
- view = unrefView(newValue);
- watchPushIfIsArray(view);
- trigger();
- },
- };
- });
-}
-
-function watchPushIfIsArray(view: any) {
- if (view && Array.isArray(view)) {
- view.push = function (data) {
- const newItem = unrefView(data);
- return Array.prototype.push.apply(this, Array.isArray(newItem) ? newItem : [newItem]);
- };
- }
-}
diff --git a/packages/vue/src/types.ts b/packages/vue/src/types.ts
deleted file mode 100644
index 28ca8b1..0000000
--- a/packages/vue/src/types.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { View } from '@nativescript/core';
-import { Ref, ShallowRef } from 'nativescript-vue';
-
-type NativeElement = {
- nativeView?: T;
- $el?: {
- nativeView: T;
- };
-};
-
-export type ViewRef = T | Ref> | Readonly>>;
diff --git a/packages/vue/src/unrefView/index.md b/packages/vue/src/unrefView/index.md
deleted file mode 100644
index 3310127..0000000
--- a/packages/vue/src/unrefView/index.md
+++ /dev/null
@@ -1,43 +0,0 @@
-
-
-# unrefView
-
-Extract a NativeScript view from a Ref
-
-## Usage
-
-```vue
-
-
-
-
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { View } from "@nativescript/core";
-import { ViewRef } from "@nativescript-use/vue";
-/**
- * Utility. Get View from Ref.
- *
- * @param target
- */
-export declare function unrefView(target: T | ViewRef): T | undefined;
-```
-
diff --git a/packages/vue/src/unrefView/index.ts b/packages/vue/src/unrefView/index.ts
deleted file mode 100644
index 9e30380..0000000
--- a/packages/vue/src/unrefView/index.ts
+++ /dev/null
@@ -1,22 +0,0 @@
-import { View } from '@nativescript/core';
-import { ViewRef } from '../types';
-
-/**
- * Utility. Get View from Ref.
- *
- * @param target
- */
-export function unrefView(ref: T | any /* ViewRef */): T | undefined {
- if (ref?.value instanceof View) return ref?.value;
- if (ref instanceof View) return ref as T;
- if (ref?.value?.nativeView) return ref?.value.nativeView;
- if (ref?.value?.$el?.nativeView) return ref?.value?.$el?.nativeView;
- if (ref?.nativeView) return ref?.nativeView;
- if (ref?.$el?.nativeView) return ref?.$el?.nativeView;
- // @ts-ignore
- if (Array.isArray(ref?.value)) return (ref?.value as any[]).map((view) => unrefView(view)) as T[];
- // @ts-ignore
- if (Array.isArray(ref)) return (ref as any[]).map((view) => unrefView(view)) as T[];
-
- return undefined;
-}
diff --git a/packages/vue/src/useBreakpoints/index.md b/packages/vue/src/useBreakpoints/index.md
deleted file mode 100644
index 7a77887..0000000
--- a/packages/vue/src/useBreakpoints/index.md
+++ /dev/null
@@ -1,76 +0,0 @@
-
-
-# useBreakpoints
-
-Reactive screen breakpoints.
-
-## Usage
-
-```vue
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { Ref, ComputedRef } from "nativescript-vue";
-export declare type Breakpoints = Record;
-/**
- * Reactive screen breakpoints.
- *
- * @param breakpoints
- */
-export declare function useBreakpoints(breakpoints: Breakpoints): Record> & {
- greater(k: K): Ref;
- greaterOrEqual: (k: K) => Ref;
- smaller(k: K): Ref;
- smallerOrEqual(k: K): Ref;
- between(a: K, b: K): Ref;
- isGreater(k: K): Ref;
- isGreaterOrEqual(k: K): Ref;
- isSmaller(k: K): Ref;
- isSmallerOrEqual(k: K): Ref;
- isInBetween(a: K, b: K): Ref;
- current(): ComputedRef;
-};
-
-```
-
-## Core dependency
-[@nativescript-use/nativescript-media-query](https://github.com/NativeScript-Use/NativeScript-Use/tree/main/packages/nativescript-media-query)
\ No newline at end of file
diff --git a/packages/vue/src/useBreakpoints/index.ts b/packages/vue/src/useBreakpoints/index.ts
deleted file mode 100644
index cf0ebfd..0000000
--- a/packages/vue/src/useBreakpoints/index.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-import { Ref, computed } from 'nativescript-vue';
-import { useMediaQuery } from '../useMediaQuery';
-
-export type Breakpoints = Record;
-
-/**
- * Reactive screen breakpoints.
- *
- * @param breakpoints
- */
-export function useBreakpoints(breakpoints: Breakpoints) {
- function getValue(k: K, d?: number) {
- let v = breakpoints[k];
- return v;
- }
-
- const greaterOrEqual = (k: K) => {
- return useMediaQuery(`(min-width: ${getValue(k)})`);
- };
-
- const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {
- Object.defineProperty(shortcuts, k, {
- get: () => greaterOrEqual(k as K),
- enumerable: true,
- configurable: true,
- });
- return shortcuts;
- }, {} as Record>);
-
- return Object.assign(shortcutMethods, {
- greater(k: K) {
- return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`);
- },
- greaterOrEqual,
- smaller(k: K) {
- return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`);
- },
- smallerOrEqual(k: K) {
- return useMediaQuery(`(max-width: ${getValue(k)})`);
- },
- between(a: K, b: K) {
- return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);
- },
- isGreater(k: K) {
- return useMediaQuery(`(min-width: ${getValue(k, 0.1)})`);
- },
- isGreaterOrEqual(k: K) {
- return useMediaQuery(`(min-width: ${getValue(k)})`);
- },
- isSmaller(k: K) {
- return useMediaQuery(`(max-width: ${getValue(k, -0.1)})`);
- },
- isSmallerOrEqual(k: K) {
- return useMediaQuery(`(max-width: ${getValue(k)})`);
- },
- isInBetween(a: K, b: K) {
- return useMediaQuery(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);
- },
- current() {
- const points = Object.keys(breakpoints).map((i) => [i, greaterOrEqual(i as K)] as const);
- return computed(() => {
- return points.filter(([, v]) => v.value).map(([k]) => k);
- });
- },
- });
-}
diff --git a/packages/vue/src/useClipboard/index.ts b/packages/vue/src/useClipboard/index.ts
deleted file mode 100644
index 514aab4..0000000
--- a/packages/vue/src/useClipboard/index.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import { onUnmounted, ref } from 'nativescript-vue';
-import { Clipboard } from '@nativescript-use/nativescript-clipboard';
-import { onApplicationMounted } from '../onApplicationMounted';
-
-/**
- * Reactive Clipboard API. Provides the ability to respond to clipboard commands.
- *
- */
-export function useClipboard(options?: { sync?: boolean }) {
- const { sync = false } = options ?? {};
-
- let clipboard: Clipboard | undefined;
-
- const copied = ref(false);
- const text = ref('');
-
- const copy = (text: string) => {
- copied.value = clipboard?.copy(text) ?? false;
- };
-
- const read = () => {
- text.value = clipboard?.read() ?? '';
- return text.value;
- };
-
- onApplicationMounted(
- () => {
- if (!clipboard) clipboard = new Clipboard();
- if (sync) {
- text.value = clipboard.read();
- clipboard.onCopy((copyText) => {
- text.value = copyText;
- });
- }
- },
- () => {
- clipboard = new Clipboard();
- if (sync) {
- text.value = clipboard.read();
- }
- }
- );
-
- onUnmounted(() => {
- clipboard?.offCopy();
- });
-
- return {
- text,
- copied,
- copy,
- read,
- };
-}
diff --git a/packages/vue/src/useColorMode/index.ts b/packages/vue/src/useColorMode/index.ts
deleted file mode 100644
index 89080b8..0000000
--- a/packages/vue/src/useColorMode/index.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-import { Application, ApplicationSettings, CSSUtils, Frame } from '@nativescript/core';
-import { computed, getCurrentInstance, onUnmounted, readonly, ref, Ref, watch } from 'nativescript-vue';
-import { createGlobalState } from '../globalState';
-import { getSystemTheme } from './util';
-import removeSystemCssClass = CSSUtils.removeSystemCssClass;
-
-export type BasicColorMode = 'light' | 'dark';
-export type BasicColorSchema = BasicColorMode | 'auto';
-export interface UseColorModeOptions {
- /**
- * The initial color mode
- *
- * @default 'auto'
- */
- initialValue?: T | BasicColorSchema;
-
- /**
- * Prefix when adding value to the attribute
- */
- modes?: T[] | BasicColorSchema[];
-
- /**
- * A custom handler for handle the updates.
- * When specified, the default behavior will be overridden.
- *
- * @default undefined
- */
- onChanged?: (mode: T | BasicColorMode) => void;
-
- /**
- * Key to persist the data into ApplicationSettings.
- *
- * Pass `null` to disable persistence
- *
- * @default 'nativevueuse-color-scheme'
- */
- storageKey?: string | null;
-}
-
-const useGlobalState = createGlobalState((storageKey: string, initialValue: string, themes: string[]) => {
- const system = ref(getSystemTheme());
- const schema = ref(ApplicationSettings.getString(storageKey!, initialValue.toString())) as Ref;
- const modes = ref(themes);
- return { system, schema, modes };
-});
-
-export function useColorMode(options: UseColorModeOptions = {}) {
- const { initialValue = 'auto', storageKey = 'nativevueuse-color-scheme' } = options;
-
- const { system, schema, modes } = useGlobalState(storageKey!, initialValue, ['auto', 'light', 'dark', ...(options.modes ?? [])]);
-
- const theme = computed(() => (schema.value === 'auto' ? system.value : schema.value));
- let internalSchema = schema.value;
-
- Application.on('displayed', () => {
- processTheme();
- });
- Application.on('systemAppearanceChanged', () => {
- processTheme();
- });
-
- if (getCurrentInstance()) {
- onUnmounted(() => {
- Application.off('displayed', processTheme);
- Application.off('systemAppearanceChanged', processTheme);
- });
- }
-
- function processTheme() {
- system.value = getSystemTheme();
- if (schema.value === 'auto') {
- applyTheme(system.value);
- } else {
- applyTheme(schema.value);
- }
- }
-
- function applyTheme(themeToApply: T | BasicColorSchema) {
- const rootView = Application.getRootView();
- if (rootView && !rootView.className?.includes(getClassFromTheme(themeToApply))) {
- schema.value = themeToApply;
- const rootViewClass = new Set();
- (Array.from(rootView.cssClasses).join(' ') ?? ' ').split(/\s+/).forEach((v) => v && rootViewClass.add(v));
-
- modes.value.forEach((theme) => {
- removeSystemCssClass(getClassFromTheme(theme));
- rootViewClass.delete(getClassFromTheme(theme));
- });
-
- let applyTheme = themeToApply;
- if (themeToApply.toLocaleLowerCase().trim() === 'auto') {
- applyTheme = getSystemTheme();
- Application.setAutoSystemAppearanceChanged(true);
- Application.systemAppearanceChanged(rootView, getSystemTheme()!);
- } else {
- Application.setAutoSystemAppearanceChanged(false);
- }
- const classToApply = getClassFromTheme(applyTheme);
- rootViewClass.add(classToApply);
- CSSUtils.pushToSystemCssClasses(classToApply);
- rootView.className = Array.from(rootViewClass).join(' ');
- const frame = Frame.topmost();
- frame?.backStack.forEach((backStack) => backStack?.resolvedPage?._onCssStateChange());
- rootView._getRootModalViews()?.forEach((view) => {
- view?._onCssStateChange();
- });
- ApplicationSettings.setString(storageKey!, themeToApply);
-
- console.log('Apply: ' + classToApply);
- }
-
- if (rootView && schema.value !== internalSchema) {
- internalSchema = schema.value;
- if (options.onChanged) {
- options.onChanged(theme.value);
- }
- }
- }
-
- watch(schema, () => {
- applyTheme(schema.value);
- });
-
- processTheme();
-
- return {
- schema,
- system: readonly(system),
- theme: readonly(theme),
- modes: readonly(modes),
- };
-}
-
-const getClassFromTheme = (theme: string) => CSSUtils.CLASS_PREFIX + theme.toLocaleLowerCase().trim();
diff --git a/packages/vue/src/useColorMode/util.android.ts b/packages/vue/src/useColorMode/util.android.ts
deleted file mode 100644
index e0c8c47..0000000
--- a/packages/vue/src/useColorMode/util.android.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { Utils } from '@nativescript/core';
-
-export function getSystemTheme() {
- const nightModeFlags = Utils.android.getApplicationContext().getResources().getConfiguration().uiMode & android.content.res.Configuration.UI_MODE_NIGHT_MASK;
- switch (nightModeFlags) {
- case android.content.res.Configuration.UI_MODE_NIGHT_YES:
- return 'dark';
- case android.content.res.Configuration.UI_MODE_NIGHT_NO:
- return 'light';
- default:
- return 'light';
- //case android.content.res.Configuration.UI_MODE_NIGHT_UNDEFINED:
- }
-}
diff --git a/packages/vue/src/useColorMode/util.d.ts b/packages/vue/src/useColorMode/util.d.ts
deleted file mode 100644
index 814bd7c..0000000
--- a/packages/vue/src/useColorMode/util.d.ts
+++ /dev/null
@@ -1 +0,0 @@
-export declare function getSystemTheme();
diff --git a/packages/vue/src/useColorMode/util.ios.ts b/packages/vue/src/useColorMode/util.ios.ts
deleted file mode 100644
index 0811ecf..0000000
--- a/packages/vue/src/useColorMode/util.ios.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export function getSystemTheme() {
- return UITraitCollection.currentTraitCollection.userInterfaceStyle === UIUserInterfaceStyle.Light ? 'light' : 'dark';
-}
diff --git a/packages/vue/src/useColorPalette/index.ts b/packages/vue/src/useColorPalette/index.ts
deleted file mode 100644
index 4054ccc..0000000
--- a/packages/vue/src/useColorPalette/index.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-import type { Color } from '@nativescript/core';
-import { Ref, ref } from 'nativescript-vue';
-import { useColorMode } from '../useColorMode';
-import { createGlobalState } from '../globalState';
-
-export type PaletteColor = { theme: T; colors: S };
-export interface UseColorPaletteOptions {
- /**
- * The initial palettes
- *
- * @default 'auto'
- */
- palettes?: PaletteColor[];
-
- /**
- * A custom handler for handle the updates.
- *
- * @default undefined
- */
- onChanged?: (palette: PaletteColor) => void;
-}
-
-const useGlobalState = createGlobalState((initialPalettes: PaletteColor[] | undefined) => {
- const palettes = ref(initialPalettes) as Ref[] | undefined>;
-
- return { palettes };
-});
-
-export function useColorPalette(options: UseColorPaletteOptions = {}) {
- const palette = ref>();
- const { palettes } = useGlobalState(options.palettes);
-
- const { theme } = useColorMode({
- modes: palettes.value?.map((palette) => palette.theme) ?? [],
- onChanged: (theme) => {
- palette.value = findPaletteByTheme(palettes.value, theme);
- if (options.onChanged && palette.value) {
- options.onChanged(palette.value);
- }
- },
- });
-
- palette.value = findPaletteByTheme(palettes.value, theme.value);
-
- return {
- palette,
- };
-}
-
-const findPaletteByTheme = (palettes: PaletteColor[] | undefined, theme: string) => palettes?.find((palette) => palette.theme === theme);
diff --git a/packages/vue/src/useContentElementSize/index.md b/packages/vue/src/useContentElementSize/index.md
deleted file mode 100644
index b48c020..0000000
--- a/packages/vue/src/useContentElementSize/index.md
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-# useContentElementSize
-
-Reactive content size of a NativeScript view.
-
-This function returns the sum of size measurements of the children of the element passed as target.
-
-## Usage
-
-```vue
-
-
-
-
-
-
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { Ref, Readonly } from "nativescript-vue"
-import { ViewRef } from "@nativescript-use/vue";
-import { CoreTypes, View } from "@nativescript/core";
-
-export declare type ContentSizeDIP = {
- width: CoreTypes.dip;
- fullWidth: CoreTypes.dip;
- height: CoreTypes.dip;
- fullHeight: CoreTypes.dip;
- marginTop: CoreTypes.dip;
- marginBottom: CoreTypes.dip;
- marginLeft: CoreTypes.dip;
- marginRight: CoreTypes.dip;
-};
-/**
- * Reactive content size of a NativeScript element.
- *
- * @param target
- * @param options
- */
-export declare function useContentElementSize(target: View | ViewRef, options?: {
- onChange?: (size: ContentSizeDIP) => void;
- initialSize?: ContentSizeDIP;
-}): {
- width: Readonly[>;
- fullWidth: Readonly][>;
- height: Readonly][>;
- fullHeight: Readonly][>;
- marginTop: Readonly][>;
- marginBottom: Readonly][>;
- marginLeft: Readonly][>;
- marginRight: Readonly][>;
-};
-
-
-```
diff --git a/packages/vue/src/useContentElementSize/index.ts b/packages/vue/src/useContentElementSize/index.ts
deleted file mode 100644
index bd60af3..0000000
--- a/packages/vue/src/useContentElementSize/index.ts
+++ /dev/null
@@ -1,126 +0,0 @@
-import { ref, onMounted, readonly } from 'nativescript-vue';
-import { unrefView } from '../unrefView';
-import { ViewRef } from '../types';
-import { CoreTypes, View } from '@nativescript/core';
-import { toDeviceIndependent } from '../utils';
-
-export type ContentSizeDIP = {
- width: CoreTypes.dip;
- fullWidth: CoreTypes.dip;
- height: CoreTypes.dip;
- fullHeight: CoreTypes.dip;
- marginTop: CoreTypes.dip;
- marginBottom: CoreTypes.dip;
- marginLeft: CoreTypes.dip;
- marginRight: CoreTypes.dip;
-};
-
-/**
- * Reactive content size of a NativeScript view.
- *
- * @param target
- * @param options
- */
-export function useContentElementSize(
- target: View | ViewRef,
- options?: {
- onChange?: (size: ContentSizeDIP) => void;
- initialSize?: ContentSizeDIP;
- }
-) {
- const {
- initialSize = {
- width: 0,
- height: 0,
- fullWidth: 0,
- fullHeight: 0,
- marginTop: 0,
- marginBottom: 0,
- marginLeft: 0,
- marginRight: 0,
- },
- } = options ?? {};
-
- const width = ref](initialSize.width);
- const fullWidth = ref(initialSize.width);
- const height = ref(initialSize.height);
- const fullHeight = ref(initialSize.height);
- const marginTop = ref(initialSize.marginTop);
- const marginBottom = ref(initialSize.marginBottom);
- const marginLeft = ref(initialSize.marginLeft);
- const marginRight = ref(initialSize.marginRight);
-
- function layoutChanged() {
- const parent = unrefView(target);
- if (parent) {
- let computeWidth: CoreTypes.dip = 0;
- let computeHeight: CoreTypes.dip = 0;
- let computeMarginTop: CoreTypes.dip = 0;
- let computeMarginBottom: CoreTypes.dip = 0;
- let computeMarginLeft: CoreTypes.dip = 0;
- let computeMarginRight: CoreTypes.dip = 0;
-
- parent.eachChildView((child: View) => {
- computeWidth += child.getActualSize().width;
- computeHeight += child.getActualSize().height;
- computeMarginTop += toDeviceIndependent(child.marginTop);
- computeMarginBottom += toDeviceIndependent(child.marginBottom);
- computeMarginLeft += toDeviceIndependent(child.marginLeft);
- computeMarginRight += toDeviceIndependent(child.marginRight);
- return true;
- });
- width.value = computeWidth;
- height.value = computeHeight;
- marginTop.value = computeMarginTop;
- marginBottom.value = computeMarginBottom;
- marginLeft.value = computeMarginLeft;
- marginRight.value = computeMarginRight;
- const computeFullWidth = (fullWidth.value = computeWidth + computeMarginLeft + computeMarginRight);
- const computeFullHeight = (fullHeight.value = computeHeight + computeMarginTop + computeMarginBottom);
- if (options?.onChange) {
- options.onChange({
- width: computeWidth,
- fullWidth: computeFullWidth,
- height: computeHeight,
- fullHeight: computeFullHeight,
- marginTop: computeMarginTop,
- marginBottom: computeMarginBottom,
- marginLeft: computeMarginLeft,
- marginRight: computeMarginRight,
- } as ContentSizeDIP);
- }
- }
- }
-
- onMounted(() => {
- const view = unrefView(target);
- if (view) {
- view.on('layoutChanged', layoutChanged);
- view.eachChildView((child: View) => {
- child.on('layoutChanged', layoutChanged);
- return true;
- });
-
- view.on('unloaded', () => {
- view.off('layoutChanged', layoutChanged);
- });
- view.eachChildView((child: View) => {
- child.on('unloaded', () => {
- child.off('layoutChanged', layoutChanged);
- });
- return true;
- });
- }
- });
-
- return {
- width: readonly(width),
- fullWidth: readonly(fullWidth),
- height: readonly(height),
- fullHeight: readonly(fullHeight),
- marginTop: readonly(marginTop),
- marginBottom: readonly(marginBottom),
- marginLeft: readonly(marginLeft),
- marginRight: readonly(marginRight),
- };
-}
diff --git a/packages/vue/src/useDark/index.md b/packages/vue/src/useDark/index.md
deleted file mode 100644
index 3dcf003..0000000
--- a/packages/vue/src/useDark/index.md
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-# useDark
-
-Reactive dark mode with auto data persistence.
-
-## Usage
-```js
-import { useDark } from "@nativescript-use/vue";
-
-const isDark = useDark();
-
-function toggleTheme(){
- isDark.value = !isDark.value;
-}
-```
-
-::: warning
-#### Switch to device theme
-
-`useDark` is a switch between the light/dark theme of your application. If you want to activate the device theme you must use [`useColorMode`](/src/useColorMode/).
-
-```ts
-const { schema } = useColorMode();
-schema.value = "auto";
-```
-:::
-
-## CSS integration
-To control the styles in your CSS you just have to add the theme class with the prefix `ns-`.
-
-```css
-.ns-light Label{
- color: gray;
-}
-
-.ns-dark Label{
- color: white;
-}
-```
-
-## Integrate with TailWind CSS
-
-Integrate TaildWind CSS with the official [NativeScript plugin](https://github.com/NativeScript/tailwind) and apply styles depending on the theme. It works out of the box and no integration needs to be done
-
-```html
-
-```
-
-## Source
-
-
-## Type declaration
-
-```ts
-import { WritableComputedRef } from "nativescript-vue";
-
-export declare function useDark(): WritableComputedRef;
-
-```
\ No newline at end of file
diff --git a/packages/vue/src/useDark/index.ts b/packages/vue/src/useDark/index.ts
deleted file mode 100644
index 0b4bded..0000000
--- a/packages/vue/src/useDark/index.ts
+++ /dev/null
@@ -1,17 +0,0 @@
-import { computed } from 'nativescript-vue';
-import { useColorMode } from '../useColorMode';
-
-export function useDark() {
- const { theme, schema } = useColorMode();
-
- const isDark = computed({
- get() {
- return theme.value === 'dark';
- },
- set(v) {
- const modeVal = v ? 'dark' : 'light';
- schema.value = modeVal;
- },
- });
- return isDark;
-}
diff --git a/packages/vue/src/useElementSize/index.ts b/packages/vue/src/useElementSize/index.ts
deleted file mode 100644
index 58e7305..0000000
--- a/packages/vue/src/useElementSize/index.ts
+++ /dev/null
@@ -1,47 +0,0 @@
-import { ref, onMounted } from 'nativescript-vue';
-import { unrefView } from '../unrefView';
-import { ViewRef } from '../types';
-import { CoreTypes, View } from '@nativescript/core';
-
-export type SizeDIP = {
- width: CoreTypes.dip;
- height: CoreTypes.dip;
-};
-/**
- * Reactive size of a NativeScript element.
- *
- * @param target
- * @param options
- */
-export function useElementSize(target: View | ViewRef, options?: { onChange?: (size: SizeDIP) => void; initialSize?: SizeDIP }) {
- const { initialSize = { width: 0, height: 0 } } = options ?? {};
-
- const width = ref(initialSize.width);
- const height = ref(initialSize.height);
-
- function layoutChanged() {
- const size = unrefView(target)?.getActualSize() as SizeDIP;
- if (size) {
- width.value = size.width;
- height.value = size.height;
- if (options?.onChange) {
- options.onChange(size);
- }
- }
- }
-
- onMounted(() => {
- const view = unrefView(target);
- if (view) {
- view.on('layoutChanged', layoutChanged);
- view.on('unloaded', () => {
- view.off('layoutChanged', layoutChanged);
- });
- }
- });
-
- return {
- width,
- height,
- };
-}
diff --git a/packages/vue/src/useEventListener/index.ts b/packages/vue/src/useEventListener/index.ts
deleted file mode 100644
index bb3a6b3..0000000
--- a/packages/vue/src/useEventListener/index.ts
+++ /dev/null
@@ -1,71 +0,0 @@
-import { CreateViewEventData, EventData, GestureEventData, Placeholder, ScrollEventData, ScrollView, ShownModallyData, View } from '@nativescript/core';
-import { onMounted, onUnmounted } from 'nativescript-vue';
-import { ViewRef } from '../types';
-import { unrefView } from '../unrefView';
-
-type ViewEventData = Omit & { object: T };
-type ViewGestureEventData = Omit & { object: T };
-type ViewShownModallyData = Omit & { object: T };
-type ViewScrollEventData = Omit & { object: T };
-type CreatingViewEventData = Omit & {
- object: Placeholder;
-};
-interface Event {
- /* Lifecycle */
- loaded?: (eventData: ViewEventData) => void;
- unloaded?: (eventData: ViewEventData) => void;
- layoutChanged?: (eventData: ViewEventData) => void;
- /* Gesture */
- tap?: (eventData: ViewGestureEventData) => void;
- doubleTap?: (eventData: ViewGestureEventData) => void;
- pinch?: (eventData: ViewGestureEventData) => void;
- pan?: (eventData: ViewGestureEventData) => void;
- swipe?: (eventData: ViewGestureEventData) => void;
- rotation?: (eventData: ViewGestureEventData) => void;
- longPress?: (eventData: ViewGestureEventData) => void;
- touch?: (eventData: ViewGestureEventData) => void;
- /* Modals */
- showingModally?: (eventData: ViewShownModallyData) => void;
- shownModally?: (eventData: ViewShownModallyData) => void;
- /* Accessibility */
- accessibilityBlur?: (eventData: ViewEventData) => void;
- accessibilityFocus?: (eventData: ViewEventData) => void;
- accessibilityFocusChanged?: (eventData: ViewEventData) => void;
- accessibilityPerformEscape?: (eventData: ViewEventData) => void;
- /* Layouts */
- scroll?: (eventData: ViewScrollEventData) => void;
- /* Components */
- creatingView?: (eventData: CreatingViewEventData) => void;
-}
-
-/**
- * Register using view.on on mounted, and view.off automatically on unmounted.
- *
- *
- * @param target
- * @param events
- */
-export function useEventListener(target: T | ViewRef, events: Event) {
- const el = target;
-
- const fireEvent = (onEvent: any) => (args: any) => onEvent(args);
-
- onMounted(() => {
- Object.keys(events).forEach((event) => {
- unrefView(el)?.on(event, fireEvent((events as any)[event]));
- });
- });
-
- onUnmounted(() => {
- cleanup();
- });
-
- function cleanup() {
- Object.keys(events).forEach((event) => {
- unrefView(el)?.off(event, fireEvent((events as any)[event]));
- });
- }
- return {
- cleanup,
- };
-}
diff --git a/packages/vue/src/useFadeElement/index.md b/packages/vue/src/useFadeElement/index.md
deleted file mode 100644
index cf49bf3..0000000
--- a/packages/vue/src/useFadeElement/index.md
+++ /dev/null
@@ -1,64 +0,0 @@
-
-
-# useFadeElement
-
-Change opacity and visibility with animation of a NativeScript element.
-
-## Usage
-
-```vue
-
-
-
-
-
-
-
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { CoreTypes } from '@nativescript/core';
-import { Ref } from "nativescript-vue"
-import { ViewRef } from "@nativescript-use/vue";
-/**
- * Change opacity and visibility with animation of a NativeScript element.
- *
- * @param target
- * @param options
- */
-export declare function useFadeElement(target: ViewRef, options?: {
- initial?: {
- opacity: number;
- visibility: CoreTypes.VisibilityType;
- };
- animationDuration?: number;
-}): {
- isVisible: Ref;
- show: () => Promise;
- hide: () => Promise;
- toggle: () => Promise;
-};
-
-```
\ No newline at end of file
diff --git a/packages/vue/src/useFadeElement/index.ts b/packages/vue/src/useFadeElement/index.ts
deleted file mode 100644
index c530ed9..0000000
--- a/packages/vue/src/useFadeElement/index.ts
+++ /dev/null
@@ -1,64 +0,0 @@
-import { watch, ref } from 'nativescript-vue';
-import { ViewRef } from '../types';
-import { unrefView } from '../unrefView';
-import { View, CoreTypes } from '@nativescript/core';
-import { useEventListener } from '../useEventListener';
-
-/**
- * Change opacity and visibility with animation of a NativeScript element.
- *
- * @param target
- * @param options
- */
-export function useFadeElement(
- target: ViewRef,
- options?: {
- initial?: { opacity: number; visibility: CoreTypes.VisibilityType };
- animationDuration?: number;
- }
-) {
- const { animationDuration = 250 } = options ?? {};
- const { opacity = 0, visibility = CoreTypes.Visibility.collapsed } = options?.initial ?? {};
-
- const isVisible = ref(opacity !== 0);
-
- useEventListener(target, {
- loaded(args) {
- args.object.opacity = opacity;
- args.object.visibility = visibility;
- },
- });
- watch(isVisible, () => {
- apply(isVisible.value);
- });
-
- function apply(show: boolean) {
- return new Promise((resolve) => {
- const view = unrefView(target);
- if (view) {
- isVisible.value = show;
- if (show) {
- view.visibility = CoreTypes.Visibility.visible;
- }
- view
- ?.animate({
- opacity: show ? 1 : 0,
- duration: animationDuration,
- })
- .then(() => {
- if (!show) {
- view.visibility = CoreTypes.Visibility.collapsed;
- }
- resolve();
- });
- }
- });
- }
-
- return {
- isVisible,
- show: () => apply(true),
- hide: () => apply(false),
- toggle: () => apply(!isVisible.value),
- };
-}
diff --git a/packages/vue/src/useIntersectionObserver/index.md b/packages/vue/src/useIntersectionObserver/index.md
deleted file mode 100644
index 94bb83f..0000000
--- a/packages/vue/src/useIntersectionObserver/index.md
+++ /dev/null
@@ -1,77 +0,0 @@
-
-
-# useIntersectionObserver
-
-Reactive detects that a target element visibility.
-
-Tracks a view inside a `ScrollView` and notifies when the view is visible on the screen.
-
-## Usage
-
-```vue
-
-
-
-
- ...
-
-
-
-
-
-
-
-
-
-
- ...
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { Ref, Readonly } from "nativescript-vue"
-import { ViewRef } from "@nativescript-use/vue";
-import { ScrollView, View } from "@nativescript/core";
-
-/**
- * Reactive detects that a target element visibility.
- *
- * @param target
- * @param parentView
- * @param options
- */
-export declare function useIntersectionObserver(target: View | ViewRef, parentView: ViewRef, options?: {
- onChange?: (isVisible: boolean) => void;
-}): {
- isVisible: Readonly[>;
- stopTrack: () => void;
-};
-
-```
-
-## Core dependency
-[@nativescript-use/nativescript-intersection-observer](https://github.com/NativeScript-Use/NativeScript-Use/tree/main/packages/nativescript-intersection-observer)
diff --git a/packages/vue/src/useIntersectionObserver/index.ts b/packages/vue/src/useIntersectionObserver/index.ts
deleted file mode 100644
index 5965d85..0000000
--- a/packages/vue/src/useIntersectionObserver/index.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-import { IntersectionObserver } from '@nativescript-use/nativescript-intersection-observer';
-import { ScrollView, View } from '@nativescript/core';
-import { readonly, ref } from 'nativescript-vue';
-import { ViewRef } from '../types';
-import { unrefView } from '../unrefView';
-import { useEventListener } from '../useEventListener';
-
-/**
- * Reactive detects that a target element visibility.
- *
- * @param target
- * @param options
- */
-export function useIntersectionObserver(target: View | ViewRef, parentView: ViewRef], options?: { onChange?: (isVisible: boolean) => void }) {
- let isVisibleInternal = false;
- let isVisible = ref(isVisibleInternal);
- let intersectionObserver: IntersectionObserver;
-
- useEventListener(parentView, {
- loaded: () => {
- setTimeout(() => {
- const view = unrefView(target);
- if (view) {
- const parent = unrefView(parentView);
- intersectionObserver = new IntersectionObserver();
- isVisibleInternal = intersectionObserver.isVisible(view, parent);
- isVisible.value = isVisibleInternal;
-
- intersectionObserver.track(view, parent, (visible) => {
- if (isVisibleInternal != visible) {
- isVisibleInternal = visible;
- isVisible.value = visible;
- if (options?.onChange) options.onChange(visible);
- }
- });
- }
- }, 10);
- },
- });
-
- function stopTrack() {
- intersectionObserver.stopTrack();
- }
-
- return {
- isVisible: readonly(isVisible),
- stopTrack,
- };
-}
diff --git a/packages/vue/src/useKeyboard/index.ts b/packages/vue/src/useKeyboard/index.ts
deleted file mode 100644
index 6692af1..0000000
--- a/packages/vue/src/useKeyboard/index.ts
+++ /dev/null
@@ -1,52 +0,0 @@
-import { onMounted, onUnmounted, readonly, ref } from 'nativescript-vue';
-import { ViewRef } from '../types';
-import { unrefView } from '../unrefView';
-import { Keyboard } from '@nativescript-use/nativescript-keyboard';
-import { onApplicationMounted } from '../onApplicationMounted';
-import { warn } from '../utils';
-import { View } from '@nativescript/core';
-
-/**
- * Reactive size of a NativeScript element.
- *
- * @param target
- * @param options
- */
-export function useKeyboard(options?: { onChange?: (isOpen: boolean) => void; defaultTarget?: View | ViewRef }) {
- const isOpen = ref(false);
- const keyboardCore = new Keyboard();
-
- //TODO: fix this
- onMounted(() => {
- onApplicationMounted(() => {
- keyboardCore.onChangeVisibility((status: boolean) => {
- if (isOpen.value !== status) {
- isOpen.value = status;
- if (options?.onChange) options.onChange(status);
- }
- });
- });
- });
-
- onUnmounted(() => {
- keyboardCore.offChangeVisibility();
- });
-
- const open = (target?: View | ViewRef) => {
- const viewTarget = unrefView(target!);
- const viewDefaultTarget = options?.defaultTarget ? unrefView(options?.defaultTarget!) : null;
-
- if (viewTarget) {
- keyboardCore.open(viewTarget);
- } else if (viewDefaultTarget) {
- keyboardCore.open(viewDefaultTarget);
- } else {
- warn('Error. Need to define a view to apply focus.');
- }
- };
- return {
- isOpen: readonly(isOpen),
- open,
- close: keyboardCore.close,
- };
-}
diff --git a/packages/vue/src/useMediaQuery/index.md b/packages/vue/src/useMediaQuery/index.md
deleted file mode 100644
index 8e04bae..0000000
--- a/packages/vue/src/useMediaQuery/index.md
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-# useMediaQuery
-
-Reactive Media Query. Returns a reactive variable that reacts to orientation changes.
-
-## Usage
-
-```vue
-
-
-```
-
-## Source
-
-
-## Type declaration
-```ts
-import { Ref } from "nativescript-vue"
-
-/**
- * Reactive Media Query.
- *
- * @param mediaQueryString
- */
-export declare function useMediaQuery(mediaQueryString: string): Ref;
-
-```
-
-## Core dependency
-[@nativescript-use/nativescript-media-query](https://github.com/NativeScript-Use/NativeScript-Use/tree/main/packages/nativescript-media-query)
\ No newline at end of file
diff --git a/packages/vue/src/useMediaQuery/index.ts b/packages/vue/src/useMediaQuery/index.ts
deleted file mode 100644
index 44b544c..0000000
--- a/packages/vue/src/useMediaQuery/index.ts
+++ /dev/null
@@ -1,25 +0,0 @@
-import { onMounted, onUnmounted, ref } from 'nativescript-vue';
-import { matchMedia, MediaQueryList, MediaQueryListListener } from '@nativescript-use/nativescript-media-query';
-
-/**
- * Reactive Media Query.
- *
- * @param mediaQueryString
- */
-export function useMediaQuery(mediaQueryString: string) {
- const mql = matchMedia(mediaQueryString);
- const matches = ref(mql.matches);
-
- const onChange: MediaQueryListListener = (event: MediaQueryList) => {
- matches.value = event.matches;
- };
-
- onMounted(() => {
- mql.addListener(onChange);
- });
- onUnmounted(() => {
- mql.removeListener(onChange);
- });
-
- return matches;
-}
diff --git a/packages/vue/src/useRootLayout/index.ts b/packages/vue/src/useRootLayout/index.ts
deleted file mode 100644
index 6ea189f..0000000
--- a/packages/vue/src/useRootLayout/index.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-import { createNativeView, ref } from 'nativescript-vue';
-import { Frame, RootLayoutOptions, View, ViewBase, getRootLayout } from '@nativescript/core';
-import { onApplicationMounted } from '../onApplicationMounted';
-import { warn } from '../utils';
-
-/**
- * Utility for the RootLayout view.
- *
- * @param component
- * @param options
- */
-export function useRootLayout(
- component: any,
- options?: {
- props?: any;
- on?: Record any>;
- rootLayoutOption?: RootLayoutOptions;
- onClose?: () => void;
- closeTimerMillis?: number;
- }
-) {
- const isShow = ref(false);
-
- const listeners = Object.entries(options?.on ?? {}).reduce((listeners, [key, value]) => {
- listeners['on' + key.charAt(0).toUpperCase() + key.slice(1)] = value;
- return listeners;
- }, {} as { [key: string]: (...args: any[]) => any });
-
- const propsAndListeners = Object.assign(options?.props ?? {}, listeners);
-
- let view: View | null = null;
-
- function buildView() {
- const node = createNativeView(component, propsAndListeners);
- node.mount();
- view = node.nativeView;
-
- view.on(ViewBase.unloadedEvent, () => {
- isShow.value = false;
- if (options?.onClose) options.onClose();
- });
- }
-
- onApplicationMounted(() => {
- if (!view) buildView();
- });
-
- function _show(resolve, reject) {
- isShow.value = true;
- if (options?.closeTimerMillis) {
- setTimeout(() => {
- getRootLayout().close(view, options?.rootLayoutOption?.animation?.exitTo);
- }, options.closeTimerMillis);
- }
- getRootLayout()
- .open(view, options?.rootLayoutOption)
- .then((params) => {
- resolve(params);
- })
- .catch((error) => {
- reject(error);
- });
- }
-
- function show() {
- const promise = new Promise((resolve, reject) => {
- setTimeout(() => {
- if (!view && Frame.topmost()) {
- buildView();
- _show(resolve, reject);
- } else if (view) {
- _show(resolve, reject);
- } else {
- reject();
- warn('[useRootLayout] If you are using show() in your main view call show() inside the onApplicationMounted hook or onMounted');
- }
- }, 0);
- });
- return promise;
- }
-
- function close() {
- getRootLayout().close(view);
- }
-
- return {
- show,
- close,
- isShow,
- view,
- };
-}
diff --git a/packages/vue/src/useScreenOrientation/index.ts b/packages/vue/src/useScreenOrientation/index.ts
deleted file mode 100644
index 3fc313e..0000000
--- a/packages/vue/src/useScreenOrientation/index.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-import { ref, readonly, onUnmounted } from 'nativescript-vue';
-import { CoreTypes } from '@nativescript/core';
-import { Orientation } from '@nativescript-use/nativescript-orientation';
-
-/**
- * Reactive screen orientation and utilities to manage the orientation.
- *
- * @param target
- * @param options
- */
-export function useScreenOrientation(options?: { onChange?: (orientation: CoreTypes.DeviceOrientationType) => void }) {
- const orientationCore = new Orientation();
- const orientation = ref(orientationCore.getOrientation());
-
- let tryCount = 0;
- function tryOrientation() {
- if (orientation.value === CoreTypes.DeviceOrientation.unknown) {
- if (tryCount < 4) {
- setTimeout(() => {
- tryCount++;
- tryOrientation();
- }, 100);
- }
- } else {
- orientation.value = orientationCore.getOrientation();
- if (options?.onChange) options.onChange(orientation.value);
- }
- }
- if (orientation.value === CoreTypes.DeviceOrientation.unknown) tryOrientation();
-
- orientationCore.onChangedOrientation((value: { newValue: CoreTypes.DeviceOrientationType }) => {
- orientation.value = value.newValue;
- if (options?.onChange) options.onChange(orientation.value);
- });
-
- onUnmounted(() => {
- orientationCore.offChangedOrientation();
- });
- const setOrientation = (value: 'landscape' | 'landscaperight' | 'landscapeleft' | 'portrait', animation = false) => orientationCore.setOrientation(value, animation);
- const enableRotation = () => orientationCore.enableRotation();
- const disableRotation = () => orientationCore.disableRotation();
- return {
- orientation: readonly(orientation),
- setOrientation,
- enableRotation,
- disableRotation,
- };
-}
diff --git a/packages/vue/src/useStorage/index.md b/packages/vue/src/useStorage/index.md
deleted file mode 100644
index 86aa660..0000000
--- a/packages/vue/src/useStorage/index.md
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-# useStorage
-
-Create a reactive ref that can be used to access & modify [ApplicationSettings](https://docs.nativescript.org/core/application-settings) and using [useStorage of VueUse](https://vueuse.org/core/useStorage/#usestorage).
-
-Uses [localStorage plugin](https://github.com/NativeScript-Use/NativeScript-Use/blob/main/packages/nativescript-localstorage/README.md) by default, other storage sources be specified via third argument.
-
-::: warning
-#### Breaking changes 0.0.43
-
-Breaking changes since version 0.0.43. It is now not used as a utility to access ApplicationSettings values.
-
-**Now returns a reactive object that is binded with ApplicationSettings.**
-:::
-
-## Usage
-
-```ts
-import { useStorage } from '@nativescript-use/vue'
-
-// bind object
-const state = useStorage('my-store', { hello: 'hi', greeting: 'Hello' }) // returns Ref<{ hello: string, greeting: string }>
-
-state.value.hello = 'Updated Hi!'; // 🔄 Automatically synchronize with ApplicationSettings (localStorage)
-
-// bind boolean
-const flag = useStorage('my-flag', true) // returns Ref
-
-flag.value = false; // 🔄 Automatically synchronize with ApplicationSettings (localStorage)
-
-// bind number
-const count = useStorage('my-count', 0) // returns Ref
-
-count.value = 15; // 🔄 Automatically synchronize with ApplicationSettings (localStorage)
-
-
-// delete data from storage
-state.value = null
-```
-
-You can find all the documentation at [useStorage of Vue Use](https://vueuse.org/core/useStorage/#usestorage).
-
-## Source
-
-
-## Type declaration
-
-```ts
-import { LocalStorage } from '@nativescript-use/nativescript-localstorage';
-import { RemovableRef, UseStorageOptions } from '@vueuse/core';
-
-export declare function useStorage(
- key: K,
- initialValue: T,
- storage?: LocalStorage,
- options?: UseStorageOptions
-): RemovableRef;
-```
\ No newline at end of file
diff --git a/packages/vue/src/useStorage/index.ts b/packages/vue/src/useStorage/index.ts
deleted file mode 100644
index e72e580..0000000
--- a/packages/vue/src/useStorage/index.ts
+++ /dev/null
@@ -1,18 +0,0 @@
-import localStorage, { LocalStorage } from '@nativescript-use/nativescript-localstorage';
-import { useStorage as useStorageCore, UseStorageOptions } from '@vueuse/core';
-
-function createStorage(key: string, initialValue: T, storage: LocalStorage, options?: UseStorageOptions) {
- return useStorageCore(
- key,
- initialValue,
- storage,
- Object.assign(options ?? {}, {
- listenToStorageChanges: false,
- window: null,
- })
- );
-}
-
-export function useStorage(key: K, initialValue: T, storage?: LocalStorage, options?: UseStorageOptions) {
- return createStorage