Web Activity Time Tracker
-diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..579aa61
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,28 @@
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
+node_modules
+dist
+artifacts
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+
+# Config files
+.webextrc
+.webextrc.*
diff --git a/.prettierrc.yml b/.prettierrc.yml
new file mode 100644
index 0000000..7dc5d17
--- /dev/null
+++ b/.prettierrc.yml
@@ -0,0 +1,6 @@
+singleQuote: true
+trailingComma: all
+endOfLine: lf
+printWidth: 100
+tabWidth: 2
+arrowParens: avoid
diff --git a/LICENSE b/LICENSE
index 8df8762..b4ce07f 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,54 +1,21 @@
-THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
-
-BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND CONDITIONS.
-
-1. Definitions
-
-"Adaptation" means a work based upon the Work, or upon the Work and other pre-existing works, such as a translation, adaptation, derivative work, arrangement of music or other alterations of a literary or artistic work, or phonogram or performance and includes cinematographic adaptations or any other form in which the Work may be recast, transformed, or adapted including in any form recognizably derived from the original, except that a work that constitutes a Collection will not be considered an Adaptation for the purpose of this License. For the avoidance of doubt, where the Work is a musical work, performance or phonogram, the synchronization of the Work in timed-relation with a moving image ("synching") will be considered an Adaptation for the purpose of this License.
-"Collection" means a collection of literary or artistic works, such as encyclopedias and anthologies, or performances, phonograms or broadcasts, or other works or subject matter other than works listed in Section 1(f) below, which, by reason of the selection and arrangement of their contents, constitute intellectual creations, in which the Work is included in its entirety in unmodified form along with one or more other contributions, each constituting separate and independent works in themselves, which together are assembled into a collective whole. A work that constitutes a Collection will not be considered an Adaptation (as defined above) for the purposes of this License.
-"Distribute" means to make available to the public the original and copies of the Work or Adaptation, as appropriate, through sale or other transfer of ownership.
-"Licensor" means the individual, individuals, entity or entities that offer(s) the Work under the terms of this License.
-"Original Author" means, in the case of a literary or artistic work, the individual, individuals, entity or entities who created the Work or if no individual or entity can be identified, the publisher; and in addition (i) in the case of a performance the actors, singers, musicians, dancers, and other persons who act, sing, deliver, declaim, play in, interpret or otherwise perform literary or artistic works or expressions of folklore; (ii) in the case of a phonogram the producer being the person or legal entity who first fixes the sounds of a performance or other sounds; and, (iii) in the case of broadcasts, the organization that transmits the broadcast.
-"Work" means the literary and/or artistic work offered under the terms of this License including without limitation any production in the literary, scientific and artistic domain, whatever may be the mode or form of its expression including digital form, such as a book, pamphlet and other writing; a lecture, address, sermon or other work of the same nature; a dramatic or dramatico-musical work; a choreographic work or entertainment in dumb show; a musical composition with or without words; a cinematographic work to which are assimilated works expressed by a process analogous to cinematography; a work of drawing, painting, architecture, sculpture, engraving or lithography; a photographic work to which are assimilated works expressed by a process analogous to photography; a work of applied art; an illustration, map, plan, sketch or three-dimensional work relative to geography, topography, architecture or science; a performance; a broadcast; a phonogram; a compilation of data to the extent it is protected as a copyrightable work; or a work performed by a variety or circus performer to the extent it is not otherwise considered a literary or artistic work.
-"You" means an individual or entity exercising rights under this License who has not previously violated the terms of this License with respect to the Work, or who has received express permission from the Licensor to exercise rights under this License despite a previous violation.
-"Publicly Perform" means to perform public recitations of the Work and to communicate to the public those public recitations, by any means or process, including by wire or wireless means or public digital performances; to make available to the public Works in such a way that members of the public may access these Works from a place and at a place individually chosen by them; to perform the Work to the public by any means or process and the communication to the public of the performances of the Work, including by public digital performance; to broadcast and rebroadcast the Work by any means including signs, sounds or images.
-"Reproduce" means to make copies of the Work by any means including without limitation by sound or visual recordings and the right of fixation and reproducing fixations of the Work, including storage of a protected performance or phonogram in digital form or other electronic medium.
-2. Fair Dealing Rights. Nothing in this License is intended to reduce, limit, or restrict any uses free from copyright or rights arising from limitations or exceptions that are provided for in connection with the copyright protection under copyright law or other applicable laws.
-
-3. License Grant. Subject to the terms and conditions of this License, Licensor hereby grants You a worldwide, royalty-free, non-exclusive, perpetual (for the duration of the applicable copyright) license to exercise the rights in the Work as stated below:
-
-to Reproduce the Work, to incorporate the Work into one or more Collections, and to Reproduce the Work as incorporated in the Collections;
-to create and Reproduce Adaptations provided that any such Adaptation, including any translation in any medium, takes reasonable steps to clearly label, demarcate or otherwise identify that changes were made to the original Work. For example, a translation could be marked "The original work was translated from English to Spanish," or a modification could indicate "The original work has been modified.";
-to Distribute and Publicly Perform the Work including as incorporated in Collections; and,
-to Distribute and Publicly Perform Adaptations.
-The above rights may be exercised in all media and formats whether now known or hereafter devised. The above rights include the right to make such modifications as are technically necessary to exercise the rights in other media and formats. Subject to Section 8(f), all rights not expressly granted by Licensor are hereby reserved, including but not limited to the rights set forth in Section 4(d).
-
-4. Restrictions. The license granted in Section 3 above is expressly made subject to and limited by the following restrictions:
-
-You may Distribute or Publicly Perform the Work only under the terms of this License. You must include a copy of, or the Uniform Resource Identifier (URI) for, this License with every copy of the Work You Distribute or Publicly Perform. You may not offer or impose any terms on the Work that restrict the terms of this License or the ability of the recipient of the Work to exercise the rights granted to that recipient under the terms of the License. You may not sublicense the Work. You must keep intact all notices that refer to this License and to the disclaimer of warranties with every copy of the Work You Distribute or Publicly Perform. When You Distribute or Publicly Perform the Work, You may not impose any effective technological measures on the Work that restrict the ability of a recipient of the Work from You to exercise the rights granted to that recipient under the terms of the License. This Section 4(a) applies to the Work as incorporated in a Collection, but this does not require the Collection apart from the Work itself to be made subject to the terms of this License. If You create a Collection, upon notice from any Licensor You must, to the extent practicable, remove from the Collection any credit as required by Section 4(c), as requested. If You create an Adaptation, upon notice from any Licensor You must, to the extent practicable, remove from the Adaptation any credit as required by Section 4(c), as requested.
-You may not exercise any of the rights granted to You in Section 3 above in any manner that is primarily intended for or directed toward commercial advantage or private monetary compensation. The exchange of the Work for other copyrighted works by means of digital file-sharing or otherwise shall not be considered to be intended for or directed toward commercial advantage or private monetary compensation, provided there is no payment of any monetary compensation in connection with the exchange of copyrighted works.
-If You Distribute, or Publicly Perform the Work or any Adaptations or Collections, You must, unless a request has been made pursuant to Section 4(a), keep intact all copyright notices for the Work and provide, reasonable to the medium or means You are utilizing: (i) the name of the Original Author (or pseudonym, if applicable) if supplied, and/or if the Original Author and/or Licensor designate another party or parties (e.g., a sponsor institute, publishing entity, journal) for attribution ("Attribution Parties") in Licensor's copyright notice, terms of service or by other reasonable means, the name of such party or parties; (ii) the title of the Work if supplied; (iii) to the extent reasonably practicable, the URI, if any, that Licensor specifies to be associated with the Work, unless such URI does not refer to the copyright notice or licensing information for the Work; and, (iv) consistent with Section 3(b), in the case of an Adaptation, a credit identifying the use of the Work in the Adaptation (e.g., "French translation of the Work by Original Author," or "Screenplay based on original Work by Original Author"). The credit required by this Section 4(c) may be implemented in any reasonable manner; provided, however, that in the case of a Adaptation or Collection, at a minimum such credit will appear, if a credit for all contributing authors of the Adaptation or Collection appears, then as part of these credits and in a manner at least as prominent as the credits for the other contributing authors. For the avoidance of doubt, You may only use the credit required by this Section for the purpose of attribution in the manner set out above and, by exercising Your rights under this License, You may not implicitly or explicitly assert or imply any connection with, sponsorship or endorsement by the Original Author, Licensor and/or Attribution Parties, as appropriate, of You or Your use of the Work, without the separate, express prior written permission of the Original Author, Licensor and/or Attribution Parties.
-For the avoidance of doubt:
-
-Non-waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme cannot be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License;
-Waivable Compulsory License Schemes. In those jurisdictions in which the right to collect royalties through any statutory or compulsory licensing scheme can be waived, the Licensor reserves the exclusive right to collect such royalties for any exercise by You of the rights granted under this License if Your exercise of such rights is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(b) and otherwise waives the right to collect royalties through any statutory or compulsory licensing scheme; and,
-Voluntary License Schemes. The Licensor reserves the right to collect royalties, whether individually or, in the event that the Licensor is a member of a collecting society that administers voluntary licensing schemes, via that society, from any exercise by You of the rights granted under this License that is for a purpose or use which is otherwise than noncommercial as permitted under Section 4(c).
-Except as otherwise agreed in writing by the Licensor or as may be otherwise permitted by applicable law, if You Reproduce, Distribute or Publicly Perform the Work either by itself or as part of any Adaptations or Collections, You must not distort, mutilate, modify or take other derogatory action in relation to the Work which would be prejudicial to the Original Author's honor or reputation. Licensor agrees that in those jurisdictions (e.g. Japan), in which any exercise of the right granted in Section 3(b) of this License (the right to make Adaptations) would be deemed to be a distortion, mutilation, modification or other derogatory action prejudicial to the Original Author's honor and reputation, the Licensor will waive or not assert, as appropriate, this Section, to the fullest extent permitted by the applicable national law, to enable You to reasonably exercise Your right under Section 3(b) of this License (right to make Adaptations) but not otherwise.
-5. Representations, Warranties and Disclaimer
-
-UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY, FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS, WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
-
-6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
-
-7. Termination
-
-This License and the rights granted hereunder will terminate automatically upon any breach by You of the terms of this License. Individuals or entities who have received Adaptations or Collections from You under this License, however, will not have their licenses terminated provided such individuals or entities remain in full compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will survive any termination of this License.
-Subject to the above terms and conditions, the license granted here is perpetual (for the duration of the applicable copyright in the Work). Notwithstanding the above, Licensor reserves the right to release the Work under different license terms or to stop distributing the Work at any time; provided, however that any such election will not serve to withdraw this License (or any other license that has been, or is required to be, granted under the terms of this License), and this License will continue in full force and effect unless terminated as stated above.
-8. Miscellaneous
-
-Each time You Distribute or Publicly Perform the Work or a Collection, the Licensor offers to the recipient a license to the Work on the same terms and conditions as the license granted to You under this License.
-Each time You Distribute or Publicly Perform an Adaptation, Licensor offers to the recipient a license to the original Work on the same terms and conditions as the license granted to You under this License.
-If any provision of this License is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this License, and without further action by the parties to this agreement, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.
-No term or provision of this License shall be deemed waived and no breach consented to unless such waiver or consent shall be in writing and signed by the party to be charged with such waiver or consent.
-This License constitutes the entire agreement between the parties with respect to the Work licensed here. There are no understandings, agreements or representations with respect to the Work not specified here. Licensor shall not be bound by any additional provisions that may appear in any communication from You. This License may not be modified without the mutual written agreement of the Licensor and You.
-The rights granted under, and the subject matter referenced, in this License were drafted utilizing the terminology of the Berne Convention for the Protection of Literary and Artistic Works (as amended on September 28, 1979), the Rome Convention of 1961, the WIPO Copyright Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996 and the Universal Copyright Convention (as revised on July 24, 1971). These rights and subject matter take effect in the relevant jurisdiction in which the License terms are sought to be enforced according to the corresponding provisions of the implementation of those treaty provisions in the applicable national law. If the standard suite of rights granted under applicable copyright law includes additional rights not granted under this License, such additional rights are deemed to be included in the License; this License is not intended to restrict the license of any rights under applicable law.
+MIT License
+
+Copyright (c) 2022 Alex Khrisanfov
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.md b/README.md
index 6d94366..2304c08 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,33 @@
# Web Activity Time Tracker
+⚠️⚠️⚠️ **Important notice! The Chrome extension has been sold. So I am not responsible for any changes to the functionality of the extension.** ⚠️⚠️⚠️
+
+**The new version is available on the Chrome Store https://chromewebstore.google.com/detail/timespy-block-websites-po/ggomgkmpcnmfhgmpfaphkbmnokllflom**
+
+[](https://chrome.google.com/webstore/detail/web-activity-time-tracker/hhfnghjdeddcfegfekjeihfmbjenlomm)
+[](https://chrome.google.com/webstore/detail/web-activity-time-tracker/hhfnghjdeddcfegfekjeihfmbjenlomm)
+[](https://chrome.google.com/webstore/detail/web-activity-time-tracker/hhfnghjdeddcfegfekjeihfmbjenlomm)
+
+[](https://microsoftedge.microsoft.com/addons/detail/web-activity-time-tracker/eepmlmdenlkkjieghjmedjahpofieogf)
+[](https://microsoftedge.microsoft.com/addons/detail/web-activity-time-tracker/eepmlmdenlkkjieghjmedjahpofieogf)
+[](https://microsoftedge.microsoft.com/addons/detail/web-activity-time-tracker/eepmlmdenlkkjieghjmedjahpofieogf)
+
Web Activity Time Tracker keeps track of how much time you spend on the web and presents the stats in a useful and intuitive way.
You can set a daily visit limit for sites and block it after the expiration of the limit.
-Extension uses only local [chrome.storage API](https://developer.chrome.com/apps/storage) chrome.storage API to store data and it does't send data anywhere.
+Extension uses only local [chrome.storage API](https://developer.chrome.com/apps/storage) chrome.storage API to store data and it doesn't send data anywhere.
+
+ 
+
+You can see your daily stats.
+
+
+
+
+And you can see your overall stats.
+
+
-
If you have suggestions or problems using the extension, please [submit a bug or a feature request](https://github.com/Stigmatoz/web-activity-time-tracker/issues).
@@ -20,6 +42,10 @@ Web Activity Time Tracker is available via the official [Chrome Web Store](https
3. Click on the "Load unpacked extension..." button.
4. Browse to the src directory of the unarchived folder and confirm.
+# Run
+
+```pnpm run dev```
+
# License
-This work is licensed under a GNU General Public License v3.0
+This work is licensed under an MIT License.
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..9690984
--- /dev/null
+++ b/package.json
@@ -0,0 +1,35 @@
+{
+ "name": "web-activity-time-tracker",
+ "private": true,
+ "version": "1.0.0",
+ "type": "module",
+ "scripts": {
+ "dev": "vite build --watch --mode development",
+ "start": "vite build --watch --mode production",
+ "format": "prettier --write .",
+ "script:zip": "vite build --mode production && powershell scripts/zip.ps1"
+ },
+ "dependencies": {
+ "@vueuse/core": "^10.11.1",
+ "chart.js": "^4.4.7",
+ "d3": "^7.9.0",
+ "date-fns": "^2.30.0",
+ "rollup-plugin-copy": "^3.5.0",
+ "vue": "^3.5.13",
+ "vue-chartjs": "^5.3.2",
+ "vue-i18n": "^9.14.2"
+ },
+ "devDependencies": {
+ "@intlify/unplugin-vue-i18n": "^0.12.3",
+ "@kyvg/vue3-notification": "^2.9.1",
+ "@types/d3": "^7.4.3",
+ "@types/webextension-polyfill": "^0.10.7",
+ "@vitejs/plugin-vue": "^4.6.2",
+ "@vuepic/vue-datepicker": "^5.4.0",
+ "typescript": "^5.7.2",
+ "vite": "^4.5.5",
+ "vite-plugin-web-extension": "^4.0.0",
+ "vue-tsc": "^2.2.0",
+ "webextension-polyfill": "^0.10.0"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..b18b78f
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,3129 @@
+lockfileVersion: 5.4
+
+specifiers:
+ '@intlify/unplugin-vue-i18n': ^0.12.3
+ '@kyvg/vue3-notification': ^2.9.1
+ '@types/d3': ^7.4.3
+ '@types/webextension-polyfill': ^0.10.7
+ '@vitejs/plugin-vue': ^4.6.2
+ '@vuepic/vue-datepicker': ^5.4.0
+ '@vueuse/core': ^10.11.1
+ chart.js: ^4.4.7
+ d3: ^7.9.0
+ date-fns: ^2.30.0
+ rollup-plugin-copy: ^3.5.0
+ typescript: ^5.7.2
+ vite: ^4.5.5
+ vite-plugin-web-extension: ^4.0.0
+ vue: ^3.5.13
+ vue-chartjs: ^5.3.2
+ vue-i18n: ^9.14.2
+ vue-tsc: ^2.2.0
+ webextension-polyfill: ^0.10.0
+
+dependencies:
+ '@vueuse/core': 10.11.1_vue@3.5.13
+ chart.js: 4.4.7
+ d3: 7.9.0
+ date-fns: 2.30.0
+ rollup-plugin-copy: 3.5.0
+ vue: 3.5.13_typescript@5.7.2
+ vue-chartjs: 5.3.2_chart.js@4.4.7+vue@3.5.13
+ vue-i18n: 9.14.2_vue@3.5.13
+
+devDependencies:
+ '@intlify/unplugin-vue-i18n': 0.12.3_vue-i18n@9.14.2
+ '@kyvg/vue3-notification': 2.9.1_vue@3.5.13
+ '@types/d3': 7.4.3
+ '@types/webextension-polyfill': 0.10.7
+ '@vitejs/plugin-vue': 4.6.2_vite@4.5.5+vue@3.5.13
+ '@vuepic/vue-datepicker': 5.4.0_vue@3.5.13
+ typescript: 5.7.2
+ vite: 4.5.5
+ vite-plugin-web-extension: 4.3.1
+ vue-tsc: 2.2.0_typescript@5.7.2
+ webextension-polyfill: 0.10.0
+
+packages:
+
+ /@babel/code-frame/7.26.2:
+ resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-validator-identifier': 7.25.9
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+ dev: true
+
+ /@babel/helper-string-parser/7.25.9:
+ resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/helper-validator-identifier/7.25.9:
+ resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
+ engines: {node: '>=6.9.0'}
+
+ /@babel/parser/7.26.3:
+ resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+ dependencies:
+ '@babel/types': 7.26.3
+
+ /@babel/runtime/7.24.7:
+ resolution: {integrity: sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.1
+ dev: true
+
+ /@babel/runtime/7.26.0:
+ resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ regenerator-runtime: 0.14.1
+
+ /@babel/types/7.26.3:
+ resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==}
+ engines: {node: '>=6.9.0'}
+ dependencies:
+ '@babel/helper-string-parser': 7.25.9
+ '@babel/helper-validator-identifier': 7.25.9
+
+ /@devicefarmer/adbkit-logcat/2.1.3:
+ resolution: {integrity: sha512-yeaGFjNBc/6+svbDeul1tNHtNChw6h8pSHAt5D+JsedUrMTN7tla7B15WLDyekxsuS2XlZHRxpuC6m92wiwCNw==}
+ engines: {node: '>= 4'}
+ dev: true
+
+ /@devicefarmer/adbkit-monkey/1.2.1:
+ resolution: {integrity: sha512-ZzZY/b66W2Jd6NHbAhLyDWOEIBWC11VizGFk7Wx7M61JZRz7HR9Cq5P+65RKWUU7u6wgsE8Lmh9nE4Mz+U2eTg==}
+ engines: {node: '>= 0.10.4'}
+ dev: true
+
+ /@devicefarmer/adbkit/3.2.6:
+ resolution: {integrity: sha512-8lO1hSeTgtxcOHhp4tTWq/JaOysp5KNbbyFoxNEBnwkCDZu/Bji3ZfOaG++Riv9jN6c9bgdLBOZqJTC5VJPRKQ==}
+ engines: {node: '>= 0.10.4'}
+ hasBin: true
+ dependencies:
+ '@devicefarmer/adbkit-logcat': 2.1.3
+ '@devicefarmer/adbkit-monkey': 1.2.1
+ bluebird: 3.7.2
+ commander: 9.5.0
+ debug: 4.3.7
+ node-forge: 1.3.1
+ split: 1.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /@esbuild/android-arm/0.18.20:
+ resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-arm64/0.18.20:
+ resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/android-x64/0.18.20:
+ resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-arm64/0.18.20:
+ resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/darwin-x64/0.18.20:
+ resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-arm64/0.18.20:
+ resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/freebsd-x64/0.18.20:
+ resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm/0.18.20:
+ resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-arm64/0.18.20:
+ resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ia32/0.18.20:
+ resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-loong64/0.18.20:
+ resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-mips64el/0.18.20:
+ resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-ppc64/0.18.20:
+ resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-riscv64/0.18.20:
+ resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-s390x/0.18.20:
+ resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/linux-x64/0.18.20:
+ resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/netbsd-x64/0.18.20:
+ resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/openbsd-x64/0.18.20:
+ resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/sunos-x64/0.18.20:
+ resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-arm64/0.18.20:
+ resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-ia32/0.18.20:
+ resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@esbuild/win32-x64/0.18.20:
+ resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@intlify/bundle-utils/7.5.1_vue-i18n@9.14.2:
+ resolution: {integrity: sha512-UovJl10oBIlmYEcWw+VIHdKY5Uv5sdPG0b/b6bOYxGLln3UwB75+2dlc0F3Fsa0RhoznQ5Rp589/BZpABpE4Xw==}
+ engines: {node: '>= 14.16'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue-i18n: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+ dependencies:
+ '@intlify/message-compiler': 9.14.2
+ '@intlify/shared': 9.14.2
+ acorn: 8.14.0
+ escodegen: 2.1.0
+ estree-walker: 2.0.2
+ jsonc-eslint-parser: 2.4.0
+ magic-string: 0.30.17
+ mlly: 1.7.3
+ source-map-js: 1.2.1
+ vue-i18n: 9.14.2_vue@3.5.13
+ yaml-eslint-parser: 1.2.3
+ dev: true
+
+ /@intlify/core-base/9.14.2:
+ resolution: {integrity: sha512-DZyQ4Hk22sC81MP4qiCDuU+LdaYW91A6lCjq8AWPvY3+mGMzhGDfOCzvyR6YBQxtlPjFqMoFk9ylnNYRAQwXtQ==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/message-compiler': 9.14.2
+ '@intlify/shared': 9.14.2
+
+ /@intlify/message-compiler/9.14.2:
+ resolution: {integrity: sha512-YsKKuV4Qv4wrLNsvgWbTf0E40uRv+Qiw1BeLQ0LAxifQuhiMe+hfTIzOMdWj/ZpnTDj4RSZtkXjJM7JDiiB5LQ==}
+ engines: {node: '>= 16'}
+ dependencies:
+ '@intlify/shared': 9.14.2
+ source-map-js: 1.2.1
+
+ /@intlify/shared/9.14.2:
+ resolution: {integrity: sha512-uRAHAxYPeF+G5DBIboKpPgC/Waecd4Jz8ihtkpJQD5ycb5PwXp0k/+hBGl5dAjwF7w+l74kz/PKA8r8OK//RUw==}
+ engines: {node: '>= 16'}
+
+ /@intlify/shared/9.3.0-beta.24:
+ resolution: {integrity: sha512-AKxJ8s7eKIQWkNaf4wyyoLRwf4puCuQgjSChlDJm5JBEt6T8HGgnYTJLRXu6LD/JACn3Qwu6hM/XRX1c9yvjmQ==}
+ engines: {node: '>= 16'}
+ dev: true
+
+ /@intlify/unplugin-vue-i18n/0.12.3_vue-i18n@9.14.2:
+ resolution: {integrity: sha512-0riPtSfTM58JmGNMmJho/aHD2z3K24BESYAmkLvKlo61/LbaPvnjYU1DbSbJEm6bSjE2oEjUj+di3QaYxXei/w==}
+ engines: {node: '>= 14.16'}
+ peerDependencies:
+ petite-vue-i18n: '*'
+ vue-i18n: '*'
+ vue-i18n-bridge: '*'
+ peerDependenciesMeta:
+ petite-vue-i18n:
+ optional: true
+ vue-i18n:
+ optional: true
+ vue-i18n-bridge:
+ optional: true
+ dependencies:
+ '@intlify/bundle-utils': 7.5.1_vue-i18n@9.14.2
+ '@intlify/shared': 9.3.0-beta.24
+ '@rollup/pluginutils': 5.1.4
+ '@vue/compiler-sfc': 3.5.13
+ debug: 4.4.0
+ fast-glob: 3.3.2
+ js-yaml: 4.1.0
+ json5: 2.2.3
+ pathe: 1.1.2
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+ unplugin: 1.16.0
+ vue-i18n: 9.14.2_vue@3.5.13
+ transitivePeerDependencies:
+ - rollup
+ - supports-color
+ dev: true
+
+ /@jridgewell/sourcemap-codec/1.5.0:
+ resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
+
+ /@kurkle/color/0.3.4:
+ resolution: {integrity: sha512-M5UknZPHRu3DEDWoipU6sE8PdkZ6Z/S+v4dD+Ke8IaNlpdSQah50lz1KtcFBa2vsdOnwbbnxJwVM4wty6udA5w==}
+ dev: false
+
+ /@kyvg/vue3-notification/2.9.1_vue@3.5.13:
+ resolution: {integrity: sha512-FsY8g25tQetr3etnarxHtCeNFKssH8sheFu13LyL2JJmOOel437QqKV5n4RBDDDTIo55iKgIVYXeojliXYdEhw==}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ vue: 3.5.13_typescript@5.7.2
+ dev: true
+
+ /@nodelib/fs.scandir/2.1.5:
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ /@nodelib/fs.stat/2.0.5:
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ /@nodelib/fs.walk/1.2.8:
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.18.0
+
+ /@pnpm/config.env-replace/1.1.0:
+ resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==}
+ engines: {node: '>=12.22.0'}
+ dev: true
+
+ /@pnpm/network.ca-file/1.0.2:
+ resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==}
+ engines: {node: '>=12.22.0'}
+ dependencies:
+ graceful-fs: 4.2.10
+ dev: true
+
+ /@pnpm/npm-conf/2.3.1:
+ resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==}
+ engines: {node: '>=12'}
+ dependencies:
+ '@pnpm/config.env-replace': 1.1.0
+ '@pnpm/network.ca-file': 1.0.2
+ config-chain: 1.1.13
+ dev: true
+
+ /@rollup/pluginutils/5.1.4:
+ resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+ dependencies:
+ '@types/estree': 1.0.6
+ estree-walker: 2.0.2
+ picomatch: 4.0.2
+ dev: true
+
+ /@sindresorhus/is/5.6.0:
+ resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /@szmarczak/http-timer/5.0.1:
+ resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ defer-to-connect: 2.0.1
+ dev: true
+
+ /@types/d3-array/3.2.1:
+ resolution: {integrity: sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==}
+ dev: true
+
+ /@types/d3-axis/3.0.6:
+ resolution: {integrity: sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==}
+ dependencies:
+ '@types/d3-selection': 3.0.11
+ dev: true
+
+ /@types/d3-brush/3.0.6:
+ resolution: {integrity: sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==}
+ dependencies:
+ '@types/d3-selection': 3.0.11
+ dev: true
+
+ /@types/d3-chord/3.0.6:
+ resolution: {integrity: sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==}
+ dev: true
+
+ /@types/d3-color/3.1.3:
+ resolution: {integrity: sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==}
+ dev: true
+
+ /@types/d3-contour/3.0.6:
+ resolution: {integrity: sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==}
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@types/geojson': 7946.0.15
+ dev: true
+
+ /@types/d3-delaunay/6.0.4:
+ resolution: {integrity: sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==}
+ dev: true
+
+ /@types/d3-dispatch/3.0.6:
+ resolution: {integrity: sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==}
+ dev: true
+
+ /@types/d3-drag/3.0.7:
+ resolution: {integrity: sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==}
+ dependencies:
+ '@types/d3-selection': 3.0.11
+ dev: true
+
+ /@types/d3-dsv/3.0.7:
+ resolution: {integrity: sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==}
+ dev: true
+
+ /@types/d3-ease/3.0.2:
+ resolution: {integrity: sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==}
+ dev: true
+
+ /@types/d3-fetch/3.0.7:
+ resolution: {integrity: sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==}
+ dependencies:
+ '@types/d3-dsv': 3.0.7
+ dev: true
+
+ /@types/d3-force/3.0.10:
+ resolution: {integrity: sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==}
+ dev: true
+
+ /@types/d3-format/3.0.4:
+ resolution: {integrity: sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==}
+ dev: true
+
+ /@types/d3-geo/3.1.0:
+ resolution: {integrity: sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==}
+ dependencies:
+ '@types/geojson': 7946.0.15
+ dev: true
+
+ /@types/d3-hierarchy/3.1.7:
+ resolution: {integrity: sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==}
+ dev: true
+
+ /@types/d3-interpolate/3.0.4:
+ resolution: {integrity: sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==}
+ dependencies:
+ '@types/d3-color': 3.1.3
+ dev: true
+
+ /@types/d3-path/3.1.0:
+ resolution: {integrity: sha512-P2dlU/q51fkOc/Gfl3Ul9kicV7l+ra934qBFXCFhrZMOL6du1TM0pm1ThYvENukyOn5h9v+yMJ9Fn5JK4QozrQ==}
+ dev: true
+
+ /@types/d3-polygon/3.0.2:
+ resolution: {integrity: sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==}
+ dev: true
+
+ /@types/d3-quadtree/3.0.6:
+ resolution: {integrity: sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==}
+ dev: true
+
+ /@types/d3-random/3.0.3:
+ resolution: {integrity: sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==}
+ dev: true
+
+ /@types/d3-scale-chromatic/3.1.0:
+ resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==}
+ dev: true
+
+ /@types/d3-scale/4.0.8:
+ resolution: {integrity: sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==}
+ dependencies:
+ '@types/d3-time': 3.0.4
+ dev: true
+
+ /@types/d3-selection/3.0.11:
+ resolution: {integrity: sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==}
+ dev: true
+
+ /@types/d3-shape/3.1.6:
+ resolution: {integrity: sha512-5KKk5aKGu2I+O6SONMYSNflgiP0WfZIQvVUMan50wHsLG1G94JlxEVnCpQARfTtzytuY0p/9PXXZb3I7giofIA==}
+ dependencies:
+ '@types/d3-path': 3.1.0
+ dev: true
+
+ /@types/d3-time-format/4.0.3:
+ resolution: {integrity: sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==}
+ dev: true
+
+ /@types/d3-time/3.0.4:
+ resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==}
+ dev: true
+
+ /@types/d3-timer/3.0.2:
+ resolution: {integrity: sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==}
+ dev: true
+
+ /@types/d3-transition/3.0.9:
+ resolution: {integrity: sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==}
+ dependencies:
+ '@types/d3-selection': 3.0.11
+ dev: true
+
+ /@types/d3-zoom/3.0.8:
+ resolution: {integrity: sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==}
+ dependencies:
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-selection': 3.0.11
+ dev: true
+
+ /@types/d3/7.4.3:
+ resolution: {integrity: sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==}
+ dependencies:
+ '@types/d3-array': 3.2.1
+ '@types/d3-axis': 3.0.6
+ '@types/d3-brush': 3.0.6
+ '@types/d3-chord': 3.0.6
+ '@types/d3-color': 3.1.3
+ '@types/d3-contour': 3.0.6
+ '@types/d3-delaunay': 6.0.4
+ '@types/d3-dispatch': 3.0.6
+ '@types/d3-drag': 3.0.7
+ '@types/d3-dsv': 3.0.7
+ '@types/d3-ease': 3.0.2
+ '@types/d3-fetch': 3.0.7
+ '@types/d3-force': 3.0.10
+ '@types/d3-format': 3.0.4
+ '@types/d3-geo': 3.1.0
+ '@types/d3-hierarchy': 3.1.7
+ '@types/d3-interpolate': 3.0.4
+ '@types/d3-path': 3.1.0
+ '@types/d3-polygon': 3.0.2
+ '@types/d3-quadtree': 3.0.6
+ '@types/d3-random': 3.0.3
+ '@types/d3-scale': 4.0.8
+ '@types/d3-scale-chromatic': 3.1.0
+ '@types/d3-selection': 3.0.11
+ '@types/d3-shape': 3.1.6
+ '@types/d3-time': 3.0.4
+ '@types/d3-time-format': 4.0.3
+ '@types/d3-timer': 3.0.2
+ '@types/d3-transition': 3.0.9
+ '@types/d3-zoom': 3.0.8
+ dev: true
+
+ /@types/estree/1.0.6:
+ resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
+ dev: true
+
+ /@types/fs-extra/8.1.5:
+ resolution: {integrity: sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==}
+ dependencies:
+ '@types/node': 22.10.2
+ dev: false
+
+ /@types/geojson/7946.0.15:
+ resolution: {integrity: sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==}
+ dev: true
+
+ /@types/glob/7.2.0:
+ resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==}
+ dependencies:
+ '@types/minimatch': 5.1.2
+ '@types/node': 22.10.2
+ dev: false
+
+ /@types/http-cache-semantics/4.0.4:
+ resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==}
+ dev: true
+
+ /@types/minimatch/3.0.5:
+ resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==}
+ dev: true
+
+ /@types/minimatch/5.1.2:
+ resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==}
+ dev: false
+
+ /@types/node/22.10.2:
+ resolution: {integrity: sha512-Xxr6BBRCAOQixvonOye19wnzyDiUtTeqldOOmj3CkeblonbccA12PFwlufvRdrpjXxqnmUaeiU5EOA+7s5diUQ==}
+ dependencies:
+ undici-types: 6.20.0
+
+ /@types/web-bluetooth/0.0.20:
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
+ dev: false
+
+ /@types/webextension-polyfill/0.10.7:
+ resolution: {integrity: sha512-10ql7A0qzBmFB+F+qAke/nP1PIonS0TXZAOMVOxEUsm+lGSW6uwVcISFNa0I4Oyj0884TZVWGGMIWeXOVSNFHw==}
+ dev: true
+
+ /@vitejs/plugin-vue/4.6.2_vite@4.5.5+vue@3.5.13:
+ resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ vite: ^4.0.0 || ^5.0.0
+ vue: ^3.2.25
+ dependencies:
+ vite: 4.5.5
+ vue: 3.5.13_typescript@5.7.2
+ dev: true
+
+ /@volar/language-core/2.4.11:
+ resolution: {integrity: sha512-lN2C1+ByfW9/JRPpqScuZt/4OrUUse57GLI6TbLgTIqBVemdl1wNcZ1qYGEo2+Gw8coYLgCy7SuKqn6IrQcQgg==}
+ dependencies:
+ '@volar/source-map': 2.4.11
+ dev: true
+
+ /@volar/source-map/2.4.11:
+ resolution: {integrity: sha512-ZQpmafIGvaZMn/8iuvCFGrW3smeqkq/IIh9F1SdSx9aUl0J4Iurzd6/FhmjNO5g2ejF3rT45dKskgXWiofqlZQ==}
+ dev: true
+
+ /@volar/typescript/2.4.11:
+ resolution: {integrity: sha512-2DT+Tdh88Spp5PyPbqhyoYavYCPDsqbHLFwcUI9K1NlY1YgUJvujGdrqUp0zWxnW7KWNTr3xSpMuv2WnaTKDAw==}
+ dependencies:
+ '@volar/language-core': 2.4.11
+ path-browserify: 1.0.1
+ vscode-uri: 3.0.8
+ dev: true
+
+ /@vue/compiler-core/3.5.13:
+ resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==}
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@vue/shared': 3.5.13
+ entities: 4.5.0
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ /@vue/compiler-dom/3.5.13:
+ resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==}
+ dependencies:
+ '@vue/compiler-core': 3.5.13
+ '@vue/shared': 3.5.13
+
+ /@vue/compiler-sfc/3.5.13:
+ resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==}
+ dependencies:
+ '@babel/parser': 7.26.3
+ '@vue/compiler-core': 3.5.13
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ estree-walker: 2.0.2
+ magic-string: 0.30.17
+ postcss: 8.4.49
+ source-map-js: 1.2.1
+
+ /@vue/compiler-ssr/3.5.13:
+ resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==}
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/shared': 3.5.13
+
+ /@vue/compiler-vue2/2.7.16:
+ resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==}
+ dependencies:
+ de-indent: 1.0.2
+ he: 1.2.0
+ dev: true
+
+ /@vue/devtools-api/6.6.4:
+ resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==}
+
+ /@vue/language-core/2.2.0_typescript@5.7.2:
+ resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@volar/language-core': 2.4.11
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-vue2': 2.7.16
+ '@vue/shared': 3.5.13
+ alien-signals: 0.4.10
+ minimatch: 9.0.5
+ muggle-string: 0.4.1
+ path-browserify: 1.0.1
+ typescript: 5.7.2
+ dev: true
+
+ /@vue/reactivity/3.5.13:
+ resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==}
+ dependencies:
+ '@vue/shared': 3.5.13
+
+ /@vue/runtime-core/3.5.13:
+ resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==}
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/shared': 3.5.13
+
+ /@vue/runtime-dom/3.5.13:
+ resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==}
+ dependencies:
+ '@vue/reactivity': 3.5.13
+ '@vue/runtime-core': 3.5.13
+ '@vue/shared': 3.5.13
+ csstype: 3.1.3
+
+ /@vue/server-renderer/3.5.13_vue@3.5.13:
+ resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==}
+ peerDependencies:
+ vue: 3.5.13
+ dependencies:
+ '@vue/compiler-ssr': 3.5.13
+ '@vue/shared': 3.5.13
+ vue: 3.5.13_typescript@5.7.2
+
+ /@vue/shared/3.5.13:
+ resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==}
+
+ /@vuepic/vue-datepicker/5.4.0_vue@3.5.13:
+ resolution: {integrity: sha512-9f1ZqRDfak/UmBbD81BdqMDpUku2YphTwQXG8DF6hsrjIXsq5sX7BWJB6LhyVgvX9QFrSyFIp4fsHE3UFofZ7A==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ vue: '>=3.2.0'
+ dependencies:
+ date-fns: 2.30.0
+ date-fns-tz: 1.3.8_date-fns@2.30.0
+ vue: 3.5.13_typescript@5.7.2
+ dev: true
+
+ /@vueuse/core/10.11.1_vue@3.5.13:
+ resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==}
+ dependencies:
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.11.1
+ '@vueuse/shared': 10.11.1_vue@3.5.13
+ vue-demi: 0.14.10_vue@3.5.13
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /@vueuse/metadata/10.11.1:
+ resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==}
+ dev: false
+
+ /@vueuse/shared/10.11.1_vue@3.5.13:
+ resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==}
+ dependencies:
+ vue-demi: 0.14.10_vue@3.5.13
+ transitivePeerDependencies:
+ - '@vue/composition-api'
+ - vue
+ dev: false
+
+ /acorn-jsx/5.3.2_acorn@8.14.0:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ dependencies:
+ acorn: 8.14.0
+ dev: true
+
+ /acorn/8.14.0:
+ resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+ dev: true
+
+ /adm-zip/0.5.16:
+ resolution: {integrity: sha512-TGw5yVi4saajsSEgz25grObGHEUaDrniwvA2qwSC060KfqGPdglhvPMA2lPIoxs3PQIItj2iag35fONcQqgUaQ==}
+ engines: {node: '>=12.0'}
+ dev: true
+
+ /ajv/8.17.1:
+ resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==}
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.0.3
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+ dev: true
+
+ /alien-signals/0.4.10:
+ resolution: {integrity: sha512-7S60rz/mMjz0Djq1VI9rd4bGqKNgxTUGE6k7kwrRO6tF95qt1S3ohz1qaQisvUsfbGh7yXnm6DPRrOhOl1ho1A==}
+ dev: true
+
+ /ansi-align/3.0.1:
+ resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
+ dependencies:
+ string-width: 4.2.3
+ dev: true
+
+ /ansi-regex/5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /ansi-regex/6.1.0:
+ resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /ansi-styles/6.2.1:
+ resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /any-promise/1.3.0:
+ resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
+ dev: true
+
+ /argparse/2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+ dev: true
+
+ /array-differ/4.0.0:
+ resolution: {integrity: sha512-Q6VPTLMsmXZ47ENG3V+wQyZS1ZxXMxFyYzA+Z/GMrJ6yIutAIEf9wTyroTzmGjNfox9/h3GdGBCVh43GVFx4Uw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /array-union/2.1.0:
+ resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /array-union/3.0.1:
+ resolution: {integrity: sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /async-lock/1.4.1:
+ resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==}
+ dev: true
+
+ /async/3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+ dev: true
+
+ /at-least-node/1.0.0:
+ resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
+ /balanced-match/1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ /bluebird/3.7.2:
+ resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ dev: true
+
+ /boolbase/1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+ dev: true
+
+ /boxen/7.1.1:
+ resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ ansi-align: 3.0.1
+ camelcase: 7.0.1
+ chalk: 5.4.1
+ cli-boxes: 3.0.0
+ string-width: 5.1.2
+ type-fest: 2.19.0
+ widest-line: 4.0.1
+ wrap-ansi: 8.1.0
+ dev: true
+
+ /brace-expansion/1.1.11:
+ resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ /brace-expansion/2.0.1:
+ resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
+ dependencies:
+ balanced-match: 1.0.2
+ dev: true
+
+ /braces/3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.1.1
+
+ /buffer-from/1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+ dev: true
+
+ /bunyan/1.8.15:
+ resolution: {integrity: sha512-0tECWShh6wUysgucJcBAoYegf3JJoZWibxdqhTm7OHPeT42qdjkZ29QCMcKwbgU1kiH+auSIasNRXMLWXafXig==}
+ engines: {'0': node >=0.10.0}
+ hasBin: true
+ optionalDependencies:
+ dtrace-provider: 0.8.8
+ moment: 2.30.1
+ mv: 2.1.1
+ safe-json-stringify: 1.2.0
+ dev: true
+
+ /cacheable-lookup/7.0.0:
+ resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /cacheable-request/10.2.14:
+ resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ '@types/http-cache-semantics': 4.0.4
+ get-stream: 6.0.1
+ http-cache-semantics: 4.1.1
+ keyv: 4.5.4
+ mimic-response: 4.0.0
+ normalize-url: 8.0.1
+ responselike: 3.0.0
+ dev: true
+
+ /camelcase/7.0.1:
+ resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /chalk/5.4.1:
+ resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
+ engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ dev: true
+
+ /charenc/0.0.2:
+ resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==}
+ dev: true
+
+ /chart.js/4.4.7:
+ resolution: {integrity: sha512-pwkcKfdzTMAU/+jNosKhNL2bHtJc/sSmYgVbuGTEDhzkrhmyihmP7vUc/5ZK9WopidMDHNe3Wm7jOd/WhuHWuw==}
+ engines: {pnpm: '>=8'}
+ dependencies:
+ '@kurkle/color': 0.3.4
+ dev: false
+
+ /chrome-launcher/1.1.0:
+ resolution: {integrity: sha512-rJYWeEAERwWIr3c3mEVXwNiODPEdMRlRxHc47B1qHPOolHZnkj7rMv1QSUfPoG6MgatWj5AxSpnKKR4QEwEQIQ==}
+ engines: {node: '>=12.13.0'}
+ hasBin: true
+ dependencies:
+ '@types/node': 22.10.2
+ escape-string-regexp: 4.0.0
+ is-wsl: 2.2.0
+ lighthouse-logger: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /ci-info/3.9.0:
+ resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /cli-boxes/3.0.0:
+ resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /colorette/1.4.0:
+ resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==}
+ dev: false
+
+ /commander/2.9.0:
+ resolution: {integrity: sha512-bmkUukX8wAOjHdN26xj5c4ctEV22TQ7dQYhSmuckKhToXrkUn0iIaolHdIxYYqD55nhpSPA9zPQ1yP57GdXP2A==}
+ engines: {node: '>= 0.6.x'}
+ dependencies:
+ graceful-readlink: 1.0.1
+ dev: true
+
+ /commander/7.2.0:
+ resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
+ engines: {node: '>= 10'}
+ dev: false
+
+ /commander/9.5.0:
+ resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
+ engines: {node: ^12.20.0 || >=14}
+ dev: true
+
+ /concat-map/0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ /concat-stream/1.6.2:
+ resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==}
+ engines: {'0': node >= 0.8}
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 2.3.8
+ typedarray: 0.0.6
+ dev: true
+
+ /confbox/0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+ dev: true
+
+ /config-chain/1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+ dev: true
+
+ /configstore/6.0.0:
+ resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==}
+ engines: {node: '>=12'}
+ dependencies:
+ dot-prop: 6.0.1
+ graceful-fs: 4.2.11
+ unique-string: 3.0.0
+ write-file-atomic: 3.0.3
+ xdg-basedir: 5.1.0
+ dev: true
+
+ /core-util-is/1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ dev: true
+
+ /crypt/0.0.2:
+ resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==}
+ dev: true
+
+ /crypto-random-string/4.0.0:
+ resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==}
+ engines: {node: '>=12'}
+ dependencies:
+ type-fest: 1.4.0
+ dev: true
+
+ /css-select/5.1.0:
+ resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==}
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.1.0
+ domhandler: 5.0.3
+ domutils: 3.2.1
+ nth-check: 2.1.1
+ dev: true
+
+ /css-what/6.1.0:
+ resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==}
+ engines: {node: '>= 6'}
+ dev: true
+
+ /cssom/0.5.0:
+ resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==}
+ dev: true
+
+ /csstype/3.1.3:
+ resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
+
+ /d3-array/3.2.4:
+ resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==}
+ engines: {node: '>=12'}
+ dependencies:
+ internmap: 2.0.3
+ dev: false
+
+ /d3-axis/3.0.0:
+ resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-brush/3.0.0:
+ resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1_d3-selection@3.0.0
+ dev: false
+
+ /d3-chord/3.0.1:
+ resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-path: 3.1.0
+ dev: false
+
+ /d3-color/3.1.0:
+ resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-contour/4.0.2:
+ resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-delaunay/6.0.4:
+ resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==}
+ engines: {node: '>=12'}
+ dependencies:
+ delaunator: 5.0.1
+ dev: false
+
+ /d3-dispatch/3.0.1:
+ resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-drag/3.0.0:
+ resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-selection: 3.0.0
+ dev: false
+
+ /d3-dsv/3.0.1:
+ resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dependencies:
+ commander: 7.2.0
+ iconv-lite: 0.6.3
+ rw: 1.3.3
+ dev: false
+
+ /d3-ease/3.0.1:
+ resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-fetch/3.0.1:
+ resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dsv: 3.0.1
+ dev: false
+
+ /d3-force/3.0.0:
+ resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-timer: 3.0.1
+ dev: false
+
+ /d3-format/3.1.0:
+ resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-geo/3.1.1:
+ resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-hierarchy/3.1.2:
+ resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-interpolate/3.0.1:
+ resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-color: 3.1.0
+ dev: false
+
+ /d3-path/3.1.0:
+ resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-polygon/3.0.1:
+ resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-quadtree/3.0.1:
+ resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-random/3.0.1:
+ resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-scale-chromatic/3.1.0:
+ resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-color: 3.1.0
+ d3-interpolate: 3.0.1
+ dev: false
+
+ /d3-scale/4.0.2:
+ resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ d3-format: 3.1.0
+ d3-interpolate: 3.0.1
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ dev: false
+
+ /d3-selection/3.0.0:
+ resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-shape/3.2.0:
+ resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-path: 3.1.0
+ dev: false
+
+ /d3-time-format/4.1.0:
+ resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-time: 3.1.0
+ dev: false
+
+ /d3-time/3.1.0:
+ resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ dev: false
+
+ /d3-timer/3.0.1:
+ resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /d3-transition/3.0.1_d3-selection@3.0.0:
+ resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ d3-selection: 2 - 3
+ dependencies:
+ d3-color: 3.1.0
+ d3-dispatch: 3.0.1
+ d3-ease: 3.0.1
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-timer: 3.0.1
+ dev: false
+
+ /d3-zoom/3.0.0:
+ resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-interpolate: 3.0.1
+ d3-selection: 3.0.0
+ d3-transition: 3.0.1_d3-selection@3.0.0
+ dev: false
+
+ /d3/7.9.0:
+ resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==}
+ engines: {node: '>=12'}
+ dependencies:
+ d3-array: 3.2.4
+ d3-axis: 3.0.0
+ d3-brush: 3.0.0
+ d3-chord: 3.0.1
+ d3-color: 3.1.0
+ d3-contour: 4.0.2
+ d3-delaunay: 6.0.4
+ d3-dispatch: 3.0.1
+ d3-drag: 3.0.0
+ d3-dsv: 3.0.1
+ d3-ease: 3.0.1
+ d3-fetch: 3.0.1
+ d3-force: 3.0.0
+ d3-format: 3.1.0
+ d3-geo: 3.1.1
+ d3-hierarchy: 3.1.2
+ d3-interpolate: 3.0.1
+ d3-path: 3.1.0
+ d3-polygon: 3.0.1
+ d3-quadtree: 3.0.1
+ d3-random: 3.0.1
+ d3-scale: 4.0.2
+ d3-scale-chromatic: 3.1.0
+ d3-selection: 3.0.0
+ d3-shape: 3.2.0
+ d3-time: 3.1.0
+ d3-time-format: 4.1.0
+ d3-timer: 3.0.1
+ d3-transition: 3.0.1_d3-selection@3.0.0
+ d3-zoom: 3.0.0
+ dev: false
+
+ /date-fns-tz/1.3.8_date-fns@2.30.0:
+ resolution: {integrity: sha512-qwNXUFtMHTTU6CFSFjoJ80W8Fzzp24LntbjFFBgL/faqds4e5mo9mftoRLgr3Vi1trISsg4awSpYVsOQCRnapQ==}
+ peerDependencies:
+ date-fns: '>=2.0.0'
+ dependencies:
+ date-fns: 2.30.0
+ dev: true
+
+ /date-fns/2.30.0:
+ resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==}
+ engines: {node: '>=0.11'}
+ dependencies:
+ '@babel/runtime': 7.26.0
+
+ /de-indent/1.0.2:
+ resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
+ dev: true
+
+ /debounce/1.2.1:
+ resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==}
+ dev: true
+
+ /debug/2.6.9:
+ resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.0.0
+ dev: true
+
+ /debug/4.3.7:
+ resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /debug/4.4.0:
+ resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+ dependencies:
+ ms: 2.1.3
+ dev: true
+
+ /decompress-response/6.0.0:
+ resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ mimic-response: 3.1.0
+ dev: true
+
+ /deep-extend/0.6.0:
+ resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==}
+ engines: {node: '>=4.0.0'}
+ dev: true
+
+ /defer-to-connect/2.0.1:
+ resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /delaunator/5.0.1:
+ resolution: {integrity: sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==}
+ dependencies:
+ robust-predicates: 3.0.2
+ dev: false
+
+ /dir-glob/3.0.1:
+ resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
+ engines: {node: '>=8'}
+ dependencies:
+ path-type: 4.0.0
+ dev: false
+
+ /dom-serializer/2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+ dev: true
+
+ /domelementtype/2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+ dev: true
+
+ /domhandler/5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+ dependencies:
+ domelementtype: 2.3.0
+ dev: true
+
+ /domutils/3.2.1:
+ resolution: {integrity: sha512-xWXmuRnN9OMP6ptPd2+H0cCbcYBULa5YDTbMm/2lvkWvNA3O4wcW+GvzooqBuNM8yy6pl3VIAeJTUUWUbfI5Fw==}
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ dev: true
+
+ /dot-prop/6.0.1:
+ resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==}
+ engines: {node: '>=10'}
+ dependencies:
+ is-obj: 2.0.0
+ dev: true
+
+ /dtrace-provider/0.8.8:
+ resolution: {integrity: sha512-b7Z7cNtHPhH9EJhNNbbeqTcXB8LGFFZhq1PGgEvpeHlzd36bhbdTWoE/Ba/YguqpBSlAPKnARWhVlhunCMwfxg==}
+ engines: {node: '>=0.10'}
+ requiresBuild: true
+ dependencies:
+ nan: 2.22.0
+ dev: true
+ optional: true
+
+ /eastasianwidth/0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+ dev: true
+
+ /emoji-regex/8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+ dev: true
+
+ /emoji-regex/9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+ dev: true
+
+ /entities/4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ /error-ex/1.3.2:
+ resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
+ dependencies:
+ is-arrayish: 0.2.1
+ dev: true
+
+ /es6-error/4.1.1:
+ resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==}
+ dev: true
+
+ /esbuild/0.18.20:
+ resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.18.20
+ '@esbuild/android-arm64': 0.18.20
+ '@esbuild/android-x64': 0.18.20
+ '@esbuild/darwin-arm64': 0.18.20
+ '@esbuild/darwin-x64': 0.18.20
+ '@esbuild/freebsd-arm64': 0.18.20
+ '@esbuild/freebsd-x64': 0.18.20
+ '@esbuild/linux-arm': 0.18.20
+ '@esbuild/linux-arm64': 0.18.20
+ '@esbuild/linux-ia32': 0.18.20
+ '@esbuild/linux-loong64': 0.18.20
+ '@esbuild/linux-mips64el': 0.18.20
+ '@esbuild/linux-ppc64': 0.18.20
+ '@esbuild/linux-riscv64': 0.18.20
+ '@esbuild/linux-s390x': 0.18.20
+ '@esbuild/linux-x64': 0.18.20
+ '@esbuild/netbsd-x64': 0.18.20
+ '@esbuild/openbsd-x64': 0.18.20
+ '@esbuild/sunos-x64': 0.18.20
+ '@esbuild/win32-arm64': 0.18.20
+ '@esbuild/win32-ia32': 0.18.20
+ '@esbuild/win32-x64': 0.18.20
+ dev: true
+
+ /escape-goat/4.0.0:
+ resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /escape-string-regexp/4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /escodegen/2.1.0:
+ resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==}
+ engines: {node: '>=6.0'}
+ hasBin: true
+ dependencies:
+ esprima: 4.0.1
+ estraverse: 5.3.0
+ esutils: 2.0.3
+ optionalDependencies:
+ source-map: 0.6.1
+ dev: true
+
+ /eslint-visitor-keys/3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dev: true
+
+ /espree/9.6.1:
+ resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.14.0
+ acorn-jsx: 5.3.2_acorn@8.14.0
+ eslint-visitor-keys: 3.4.3
+ dev: true
+
+ /esprima/4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+ dev: true
+
+ /estraverse/5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /estree-walker/2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ /esutils/2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /fast-deep-equal/3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ dev: true
+
+ /fast-glob/3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ /fast-uri/3.0.3:
+ resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
+ dev: true
+
+ /fastq/1.18.0:
+ resolution: {integrity: sha512-QKHXPW0hD8g4UET03SdOdunzSouc9N4AuHdsX8XNcTsuz+yYFILVNIX4l9yHABMhiEI9Db0JTTIpu0wB+Y1QQw==}
+ dependencies:
+ reusify: 1.0.4
+
+ /fill-range/7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+
+ /firefox-profile/4.6.0:
+ resolution: {integrity: sha512-I9rAm1w8U3CdhgO4EzTJsCvgcbvynZn9lOySkZf78wUdUIQH2w9QOKf3pAX+THt2XMSSR3kJSuM8P7bYux9j8g==}
+ hasBin: true
+ dependencies:
+ adm-zip: 0.5.16
+ fs-extra: 9.0.1
+ ini: 2.0.0
+ minimist: 1.2.8
+ xml2js: 0.5.0
+ dev: true
+
+ /form-data-encoder/2.1.4:
+ resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==}
+ engines: {node: '>= 14.17'}
+ dev: true
+
+ /fs-extra/10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra/11.2.0:
+ resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ engines: {node: '>=14.14'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 2.0.1
+ dev: true
+
+ /fs-extra/8.1.0:
+ resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
+ engines: {node: '>=6 <7 || >=8'}
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 4.0.0
+ universalify: 0.1.2
+ dev: false
+
+ /fs-extra/9.0.1:
+ resolution: {integrity: sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ at-least-node: 1.0.0
+ graceful-fs: 4.2.11
+ jsonfile: 6.1.0
+ universalify: 1.0.0
+ dev: true
+
+ /fs.realpath/1.0.0:
+ resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
+ dev: false
+
+ /fsevents/2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /fx-runner/1.4.0:
+ resolution: {integrity: sha512-rci1g6U0rdTg6bAaBboP7XdRu01dzTAaKXxFf+PUqGuCv6Xu7o8NZdY1D5MvKGIjb6EdS1g3VlXOgksir1uGkg==}
+ hasBin: true
+ dependencies:
+ commander: 2.9.0
+ shell-quote: 1.7.3
+ spawn-sync: 1.0.15
+ when: 3.7.7
+ which: 1.2.4
+ winreg: 0.0.12
+ dev: true
+
+ /get-stream/6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /glob-parent/5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+ dependencies:
+ is-glob: 4.0.3
+
+ /glob-to-regexp/0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+ dev: true
+
+ /glob/6.0.4:
+ resolution: {integrity: sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: true
+ optional: true
+
+ /glob/7.2.3:
+ resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
+ deprecated: Glob versions prior to v9 are no longer supported
+ dependencies:
+ fs.realpath: 1.0.0
+ inflight: 1.0.6
+ inherits: 2.0.4
+ minimatch: 3.1.2
+ once: 1.4.0
+ path-is-absolute: 1.0.1
+ dev: false
+
+ /global-dirs/3.0.1:
+ resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==}
+ engines: {node: '>=10'}
+ dependencies:
+ ini: 2.0.0
+ dev: true
+
+ /globby/10.0.1:
+ resolution: {integrity: sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ '@types/glob': 7.2.0
+ array-union: 2.1.0
+ dir-glob: 3.0.1
+ fast-glob: 3.3.2
+ glob: 7.2.3
+ ignore: 5.3.2
+ merge2: 1.4.1
+ slash: 3.0.0
+ dev: false
+
+ /got/12.6.1:
+ resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ '@sindresorhus/is': 5.6.0
+ '@szmarczak/http-timer': 5.0.1
+ cacheable-lookup: 7.0.0
+ cacheable-request: 10.2.14
+ decompress-response: 6.0.0
+ form-data-encoder: 2.1.4
+ get-stream: 6.0.1
+ http2-wrapper: 2.2.1
+ lowercase-keys: 3.0.0
+ p-cancelable: 3.0.0
+ responselike: 3.0.0
+ dev: true
+
+ /graceful-fs/4.2.10:
+ resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==}
+ dev: true
+
+ /graceful-fs/4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ /graceful-readlink/1.0.1:
+ resolution: {integrity: sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==}
+ dev: true
+
+ /growly/1.3.0:
+ resolution: {integrity: sha512-+xGQY0YyAWCnqy7Cd++hc2JqMYzlm0dG30Jd0beaA64sROr8C4nt8Yc9V5Ro3avlSUDTN0ulqP/VBKi1/lLygw==}
+ dev: true
+
+ /has-yarn/3.0.0:
+ resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /he/1.2.0:
+ resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==}
+ hasBin: true
+ dev: true
+
+ /html-escaper/3.0.3:
+ resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==}
+ dev: true
+
+ /htmlparser2/8.0.2:
+ resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ domutils: 3.2.1
+ entities: 4.5.0
+ dev: true
+
+ /http-cache-semantics/4.1.1:
+ resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==}
+ dev: true
+
+ /http2-wrapper/2.2.1:
+ resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==}
+ engines: {node: '>=10.19.0'}
+ dependencies:
+ quick-lru: 5.1.1
+ resolve-alpn: 1.2.1
+ dev: true
+
+ /iconv-lite/0.6.3:
+ resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ safer-buffer: 2.1.2
+ dev: false
+
+ /ignore/5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+ dev: false
+
+ /immediate/3.0.6:
+ resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==}
+ dev: true
+
+ /import-lazy/4.0.0:
+ resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /imurmurhash/0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+ dev: true
+
+ /inflight/1.0.6:
+ resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
+ deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
+ dependencies:
+ once: 1.4.0
+ wrappy: 1.0.2
+
+ /inherits/2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ /ini/1.3.8:
+ resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==}
+ dev: true
+
+ /ini/2.0.0:
+ resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /internmap/2.0.3:
+ resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==}
+ engines: {node: '>=12'}
+ dev: false
+
+ /is-absolute/0.1.7:
+ resolution: {integrity: sha512-Xi9/ZSn4NFapG8RP98iNPMOeaV3mXPisxKxzKtHVqr3g56j/fBn+yZmnxSVAA8lmZbl2J9b/a4kJvfU3hqQYgA==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-relative: 0.1.3
+ dev: true
+
+ /is-arrayish/0.2.1:
+ resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
+ dev: true
+
+ /is-buffer/1.1.6:
+ resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==}
+ dev: true
+
+ /is-ci/3.0.1:
+ resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==}
+ hasBin: true
+ dependencies:
+ ci-info: 3.9.0
+ dev: true
+
+ /is-docker/2.2.1:
+ resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dev: true
+
+ /is-extglob/2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ /is-fullwidth-code-point/3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-glob/4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ is-extglob: 2.1.1
+
+ /is-installed-globally/0.4.0:
+ resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
+ engines: {node: '>=10'}
+ dependencies:
+ global-dirs: 3.0.1
+ is-path-inside: 3.0.3
+ dev: true
+
+ /is-npm/6.0.0:
+ resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /is-number/7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ /is-obj/2.0.0:
+ resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-path-inside/3.0.3:
+ resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
+ engines: {node: '>=8'}
+ dev: true
+
+ /is-plain-object/2.0.4:
+ resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==}
+ engines: {node: '>=0.10.0'}
+ dependencies:
+ isobject: 3.0.1
+ dev: true
+
+ /is-plain-object/3.0.1:
+ resolution: {integrity: sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==}
+ engines: {node: '>=0.10.0'}
+ dev: false
+
+ /is-primitive/3.0.1:
+ resolution: {integrity: sha512-GljRxhWvlCNRfZyORiH77FwdFwGcMO620o37EOYC0ORWdq+WYNVqW0w2Juzew4M+L81l6/QS3t5gkkihyRqv9w==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-relative/0.1.3:
+ resolution: {integrity: sha512-wBOr+rNM4gkAZqoLRJI4myw5WzzIdQosFAAbnvfXP5z1LyzgAI3ivOKehC5KfqlQJZoihVhirgtCBj378Eg8GA==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /is-typedarray/1.0.0:
+ resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==}
+ dev: true
+
+ /is-wsl/2.2.0:
+ resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
+ engines: {node: '>=8'}
+ dependencies:
+ is-docker: 2.2.1
+ dev: true
+
+ /is-yarn-global/0.4.1:
+ resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /isarray/1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+ dev: true
+
+ /isexe/1.1.2:
+ resolution: {integrity: sha512-d2eJzK691yZwPHcv1LbeAOa91yMJ9QmfTgSO1oXB65ezVhXQsxBac2vEB4bMVms9cGzaA99n6V2viHMq82VLDw==}
+ dev: true
+
+ /isexe/2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+ dev: true
+
+ /isobject/3.0.1:
+ resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /js-tokens/4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+ dev: true
+
+ /js-yaml/4.1.0:
+ resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
+ hasBin: true
+ dependencies:
+ argparse: 2.0.1
+ dev: true
+
+ /json-buffer/3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ dev: true
+
+ /json-parse-even-better-errors/3.0.2:
+ resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+ dev: true
+
+ /json-schema-traverse/1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+ dev: true
+
+ /json5/2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+ dev: true
+
+ /jsonc-eslint-parser/2.4.0:
+ resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ dependencies:
+ acorn: 8.14.0
+ eslint-visitor-keys: 3.4.3
+ espree: 9.6.1
+ semver: 7.6.3
+ dev: true
+
+ /jsonfile/4.0.0:
+ resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: false
+
+ /jsonfile/6.1.0:
+ resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
+ dependencies:
+ universalify: 2.0.1
+ optionalDependencies:
+ graceful-fs: 4.2.11
+ dev: true
+
+ /jszip/3.10.1:
+ resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==}
+ dependencies:
+ lie: 3.3.0
+ pako: 1.0.11
+ readable-stream: 2.3.8
+ setimmediate: 1.0.5
+ dev: true
+
+ /keyv/4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ dependencies:
+ json-buffer: 3.0.1
+ dev: true
+
+ /latest-version/7.0.0:
+ resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ package-json: 8.1.1
+ dev: true
+
+ /lie/3.3.0:
+ resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==}
+ dependencies:
+ immediate: 3.0.6
+ dev: true
+
+ /lighthouse-logger/2.0.1:
+ resolution: {integrity: sha512-ioBrW3s2i97noEmnXxmUq7cjIcVRjT5HBpAYy8zE11CxU9HqlWHHeRxfeN1tn8F7OEMVPIC9x1f8t3Z7US9ehQ==}
+ dependencies:
+ debug: 2.6.9
+ marky: 1.2.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /lines-and-columns/2.0.4:
+ resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /linkedom/0.14.26:
+ resolution: {integrity: sha512-mK6TrydfFA7phrnp+1j57ycBwFI5bGSW6YXlw9acHoqF+mP/y+FooEYYyniOt5Ot57FSKB3iwmnuQ1UUyNLm5A==}
+ dependencies:
+ css-select: 5.1.0
+ cssom: 0.5.0
+ html-escaper: 3.0.3
+ htmlparser2: 8.0.2
+ uhyphen: 0.2.0
+ dev: true
+
+ /lodash.uniq/4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+ dev: true
+
+ /lodash.uniqby/4.7.0:
+ resolution: {integrity: sha512-e/zcLx6CSbmaEgFHCA7BnoQKyCtKMxnuWrJygbwPs/AIn+IMKl66L8/s+wBUn5LRw2pZx3bUHibiV1b6aTWIww==}
+ dev: true
+
+ /lodash/4.17.21:
+ resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
+ dev: true
+
+ /lowercase-keys/3.0.0:
+ resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /magic-string/0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.0
+
+ /make-error/1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+ dev: true
+
+ /marky/1.2.5:
+ resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==}
+ dev: true
+
+ /md5/2.3.0:
+ resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==}
+ dependencies:
+ charenc: 0.0.2
+ crypt: 0.0.2
+ is-buffer: 1.1.6
+ dev: true
+
+ /merge2/1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ /micromatch/4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+
+ /mimic-response/3.1.0:
+ resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /mimic-response/4.0.0:
+ resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dev: true
+
+ /minimatch/3.1.2:
+ resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
+ dependencies:
+ brace-expansion: 1.1.11
+
+ /minimatch/9.0.5:
+ resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
+ engines: {node: '>=16 || 14 >=14.17'}
+ dependencies:
+ brace-expansion: 2.0.1
+ dev: true
+
+ /minimist/1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ dev: true
+
+ /mkdirp/0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+ dependencies:
+ minimist: 1.2.8
+ dev: true
+ optional: true
+
+ /mkdirp/3.0.1:
+ resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dev: true
+
+ /mlly/1.7.3:
+ resolution: {integrity: sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==}
+ dependencies:
+ acorn: 8.14.0
+ pathe: 1.1.2
+ pkg-types: 1.2.1
+ ufo: 1.5.4
+ dev: true
+
+ /moment/2.30.1:
+ resolution: {integrity: sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /ms/2.0.0:
+ resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
+ dev: true
+
+ /ms/2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+ dev: true
+
+ /muggle-string/0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+ dev: true
+
+ /multimatch/6.0.0:
+ resolution: {integrity: sha512-I7tSVxHGPlmPN/enE3mS1aOSo6bWBfls+3HmuEeCUBCE7gWnm3cBXCBkpurzFjVRwC6Kld8lLaZ1Iv5vOcjvcQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ '@types/minimatch': 3.0.5
+ array-differ: 4.0.0
+ array-union: 3.0.1
+ minimatch: 3.1.2
+ dev: true
+
+ /mv/2.1.1:
+ resolution: {integrity: sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==}
+ engines: {node: '>=0.8.0'}
+ requiresBuild: true
+ dependencies:
+ mkdirp: 0.5.6
+ ncp: 2.0.0
+ rimraf: 2.4.5
+ dev: true
+ optional: true
+
+ /mz/2.7.0:
+ resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==}
+ dependencies:
+ any-promise: 1.3.0
+ object-assign: 4.1.1
+ thenify-all: 1.6.0
+ dev: true
+
+ /nan/2.22.0:
+ resolution: {integrity: sha512-nbajikzWTMwsW+eSsNm3QwlOs7het9gGJU5dDZzRTQGk03vyBOauxgI4VakDzE0PtsGTmXPsXTbbjVhRwR5mpw==}
+ dev: true
+ optional: true
+
+ /nanoid/3.3.8:
+ resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ /ncp/2.0.0:
+ resolution: {integrity: sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==}
+ hasBin: true
+ dev: true
+ optional: true
+
+ /node-forge/1.3.1:
+ resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
+ engines: {node: '>= 6.13.0'}
+ dev: true
+
+ /node-notifier/10.0.1:
+ resolution: {integrity: sha512-YX7TSyDukOZ0g+gmzjB6abKu+hTGvO8+8+gIFDsRCU2t8fLV/P2unmt+LGFaIa4y64aX98Qksa97rgz4vMNeLQ==}
+ dependencies:
+ growly: 1.3.0
+ is-wsl: 2.2.0
+ semver: 7.6.3
+ shellwords: 0.1.1
+ uuid: 8.3.2
+ which: 2.0.2
+ dev: true
+
+ /normalize-url/8.0.1:
+ resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /nth-check/2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+ dependencies:
+ boolbase: 1.0.0
+ dev: true
+
+ /object-assign/4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /once/1.4.0:
+ resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
+ dependencies:
+ wrappy: 1.0.2
+
+ /os-shim/0.1.3:
+ resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==}
+ engines: {node: '>= 0.4.0'}
+ dev: true
+
+ /p-cancelable/3.0.0:
+ resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==}
+ engines: {node: '>=12.20'}
+ dev: true
+
+ /package-json/8.1.1:
+ resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ got: 12.6.1
+ registry-auth-token: 5.0.3
+ registry-url: 6.0.1
+ semver: 7.6.3
+ dev: true
+
+ /pako/1.0.11:
+ resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
+ dev: true
+
+ /parse-json/7.1.1:
+ resolution: {integrity: sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw==}
+ engines: {node: '>=16'}
+ dependencies:
+ '@babel/code-frame': 7.26.2
+ error-ex: 1.3.2
+ json-parse-even-better-errors: 3.0.2
+ lines-and-columns: 2.0.4
+ type-fest: 3.13.1
+ dev: true
+
+ /path-browserify/1.0.1:
+ resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
+ dev: true
+
+ /path-is-absolute/1.0.1:
+ resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
+ engines: {node: '>=0.10.0'}
+
+ /path-type/4.0.0:
+ resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /pathe/1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+ dev: true
+
+ /picocolors/1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ /picomatch/2.3.1:
+ resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
+ engines: {node: '>=8.6'}
+
+ /picomatch/4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /pkg-types/1.2.1:
+ resolution: {integrity: sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==}
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.7.3
+ pathe: 1.1.2
+ dev: true
+
+ /postcss/8.4.49:
+ resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ engines: {node: ^10 || ^12 || >=14}
+ dependencies:
+ nanoid: 3.3.8
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ /process-nextick-args/2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ dev: true
+
+ /promise-toolbox/0.21.0:
+ resolution: {integrity: sha512-NV8aTmpwrZv+Iys54sSFOBx3tuVaOBvvrft5PNppnxy9xpU/akHbaWIril22AB22zaPgrgwKdD0KsrM0ptUtpg==}
+ engines: {node: '>=6'}
+ dependencies:
+ make-error: 1.3.6
+ dev: true
+
+ /proto-list/1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ dev: true
+
+ /pupa/3.1.0:
+ resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==}
+ engines: {node: '>=12.20'}
+ dependencies:
+ escape-goat: 4.0.0
+ dev: true
+
+ /queue-microtask/1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ /quick-lru/5.1.1:
+ resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /rc/1.2.8:
+ resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==}
+ hasBin: true
+ dependencies:
+ deep-extend: 0.6.0
+ ini: 1.3.8
+ minimist: 1.2.8
+ strip-json-comments: 2.0.1
+ dev: true
+
+ /readable-stream/2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+ dev: true
+
+ /regenerator-runtime/0.14.1:
+ resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
+
+ /registry-auth-token/5.0.3:
+ resolution: {integrity: sha512-1bpc9IyC+e+CNFRaWyn77tk4xGG4PPUyfakSmA6F6cvUDjrm58dfyJ3II+9yb10EDkHoy1LaPSmHaWLOH3m6HA==}
+ engines: {node: '>=14'}
+ dependencies:
+ '@pnpm/npm-conf': 2.3.1
+ dev: true
+
+ /registry-url/6.0.1:
+ resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==}
+ engines: {node: '>=12'}
+ dependencies:
+ rc: 1.2.8
+ dev: true
+
+ /require-from-string/2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /resolve-alpn/1.2.1:
+ resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==}
+ dev: true
+
+ /responselike/3.0.0:
+ resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ lowercase-keys: 3.0.0
+ dev: true
+
+ /reusify/1.0.4:
+ resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ /rimraf/2.4.5:
+ resolution: {integrity: sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==}
+ deprecated: Rimraf versions prior to v4 are no longer supported
+ hasBin: true
+ dependencies:
+ glob: 6.0.4
+ dev: true
+ optional: true
+
+ /robust-predicates/3.0.2:
+ resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==}
+ dev: false
+
+ /rollup-plugin-copy/3.5.0:
+ resolution: {integrity: sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==}
+ engines: {node: '>=8.3'}
+ dependencies:
+ '@types/fs-extra': 8.1.5
+ colorette: 1.4.0
+ fs-extra: 8.1.0
+ globby: 10.0.1
+ is-plain-object: 3.0.1
+ dev: false
+
+ /rollup/3.29.5:
+ resolution: {integrity: sha512-GVsDdsbJzzy4S/v3dqWPJ7EfvZJfCHiDqe80IyrF59LYuP+e6U1LJoUqeuqRbwAWoMNoXivMNeNAOf5E22VA1w==}
+ engines: {node: '>=14.18.0', npm: '>=8.0.0'}
+ hasBin: true
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /run-parallel/1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ dependencies:
+ queue-microtask: 1.2.3
+
+ /rw/1.3.3:
+ resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==}
+ dev: false
+
+ /safe-buffer/5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+ dev: true
+
+ /safe-json-stringify/1.2.0:
+ resolution: {integrity: sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==}
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /safer-buffer/2.1.2:
+ resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
+ dev: false
+
+ /sax/1.4.1:
+ resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==}
+ dev: true
+
+ /semver-diff/4.0.0:
+ resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==}
+ engines: {node: '>=12'}
+ dependencies:
+ semver: 7.6.3
+ dev: true
+
+ /semver/7.6.3:
+ resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
+ engines: {node: '>=10'}
+ hasBin: true
+ dev: true
+
+ /set-value/4.1.0:
+ resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==}
+ engines: {node: '>=11.0'}
+ dependencies:
+ is-plain-object: 2.0.4
+ is-primitive: 3.0.1
+ dev: true
+
+ /setimmediate/1.0.5:
+ resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
+ dev: true
+
+ /shell-quote/1.7.3:
+ resolution: {integrity: sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==}
+ dev: true
+
+ /shellwords/0.1.1:
+ resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==}
+ dev: true
+
+ /signal-exit/3.0.7:
+ resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
+ dev: true
+
+ /slash/3.0.0:
+ resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
+ engines: {node: '>=8'}
+ dev: false
+
+ /source-map-js/1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ /source-map-support/0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+ dev: true
+
+ /source-map/0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /spawn-sync/1.0.15:
+ resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==}
+ requiresBuild: true
+ dependencies:
+ concat-stream: 1.6.2
+ os-shim: 0.1.3
+ dev: true
+
+ /split/1.0.1:
+ resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==}
+ dependencies:
+ through: 2.3.8
+ dev: true
+
+ /string-width/4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+ dev: true
+
+ /string-width/5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /string_decoder/1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+ dependencies:
+ safe-buffer: 5.1.2
+ dev: true
+
+ /strip-ansi/6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+ dependencies:
+ ansi-regex: 5.0.1
+ dev: true
+
+ /strip-ansi/7.1.0:
+ resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-regex: 6.1.0
+ dev: true
+
+ /strip-bom/5.0.0:
+ resolution: {integrity: sha512-p+byADHF7SzEcVnLvc/r3uognM1hUhObuHXxJcgLCfD194XAkaLbjq3Wzb0N5G2tgIjH0dgT708Z51QxMeu60A==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /strip-json-comments/2.0.1:
+ resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
+ /strip-json-comments/5.0.1:
+ resolution: {integrity: sha512-0fk9zBqO67Nq5M/m45qHCJxylV/DhBlIOVExqgOMiCCrzrhU6tCibRXNqE3jwJLftzE9SNuZtYbpzcO+i9FiKw==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /thenify-all/1.6.0:
+ resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==}
+ engines: {node: '>=0.8'}
+ dependencies:
+ thenify: 3.3.1
+ dev: true
+
+ /thenify/3.3.1:
+ resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==}
+ dependencies:
+ any-promise: 1.3.0
+ dev: true
+
+ /through/2.3.8:
+ resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
+ dev: true
+
+ /tmp/0.2.3:
+ resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==}
+ engines: {node: '>=14.14'}
+ dev: true
+
+ /to-regex-range/5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+ dependencies:
+ is-number: 7.0.0
+
+ /type-fest/1.4.0:
+ resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==}
+ engines: {node: '>=10'}
+ dev: true
+
+ /type-fest/2.19.0:
+ resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
+ engines: {node: '>=12.20'}
+ dev: true
+
+ /type-fest/3.13.1:
+ resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==}
+ engines: {node: '>=14.16'}
+ dev: true
+
+ /typedarray-to-buffer/3.1.5:
+ resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==}
+ dependencies:
+ is-typedarray: 1.0.0
+ dev: true
+
+ /typedarray/0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+ dev: true
+
+ /typescript/5.7.2:
+ resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ /ufo/1.5.4:
+ resolution: {integrity: sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==}
+ dev: true
+
+ /uhyphen/0.2.0:
+ resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==}
+ dev: true
+
+ /undici-types/6.20.0:
+ resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
+
+ /unique-string/3.0.0:
+ resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ crypto-random-string: 4.0.0
+ dev: true
+
+ /universalify/0.1.2:
+ resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
+ engines: {node: '>= 4.0.0'}
+ dev: false
+
+ /universalify/1.0.0:
+ resolution: {integrity: sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /universalify/2.0.1:
+ resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
+ engines: {node: '>= 10.0.0'}
+ dev: true
+
+ /unplugin/1.16.0:
+ resolution: {integrity: sha512-5liCNPuJW8dqh3+DM6uNM2EI3MLLpCKp/KY+9pB5M2S2SR2qvvDHhKgBOaTWEbZTAws3CXfB0rKTIolWKL05VQ==}
+ engines: {node: '>=14.0.0'}
+ dependencies:
+ acorn: 8.14.0
+ webpack-virtual-modules: 0.6.2
+ dev: true
+
+ /update-notifier/6.0.2:
+ resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==}
+ engines: {node: '>=14.16'}
+ dependencies:
+ boxen: 7.1.1
+ chalk: 5.4.1
+ configstore: 6.0.0
+ has-yarn: 3.0.0
+ import-lazy: 4.0.0
+ is-ci: 3.0.1
+ is-installed-globally: 0.4.0
+ is-npm: 6.0.0
+ is-yarn-global: 0.4.1
+ latest-version: 7.0.0
+ pupa: 3.1.0
+ semver: 7.6.3
+ semver-diff: 4.0.0
+ xdg-basedir: 5.1.0
+ dev: true
+
+ /util-deprecate/1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+ dev: true
+
+ /uuid/8.3.2:
+ resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
+ hasBin: true
+ dev: true
+
+ /vite-plugin-web-extension/4.3.1:
+ resolution: {integrity: sha512-yG/07Rzk70SxLUQIfZMbNm0472gbFPkoPCAJvcGhyblTrg0FPSKfkQJ4yug0//IxoYCaTv5WIcNJCuVntUz4rQ==}
+ engines: {node: '>=16'}
+ dependencies:
+ ajv: 8.17.1
+ async-lock: 1.4.1
+ fs-extra: 10.1.0
+ json5: 2.2.3
+ linkedom: 0.14.26
+ lodash.uniq: 4.5.0
+ lodash.uniqby: 4.7.0
+ md5: 2.3.0
+ vite: 4.5.5
+ web-ext-run: 0.2.2
+ webextension-polyfill: 0.10.0
+ yaml: 2.6.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - utf-8-validate
+ dev: true
+
+ /vite/4.5.5:
+ resolution: {integrity: sha512-ifW3Lb2sMdX+WU91s3R0FyQlAyLxOzCSCP37ujw0+r5POeHPwe6udWVIElKQq8gk3t7b8rkmvqC6IHBpCff4GQ==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': '>= 14'
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ esbuild: 0.18.20
+ postcss: 8.4.49
+ rollup: 3.29.5
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vscode-uri/3.0.8:
+ resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==}
+ dev: true
+
+ /vue-chartjs/5.3.2_chart.js@4.4.7+vue@3.5.13:
+ resolution: {integrity: sha512-NrkbRRoYshbXbWqJkTN6InoDVwVb90C0R7eAVgMWcB9dPikbruaOoTFjFYHE/+tNPdIe6qdLCDjfjPHQ0fw4jw==}
+ peerDependencies:
+ chart.js: ^4.1.1
+ vue: ^3.0.0-0 || ^2.7.0
+ dependencies:
+ chart.js: 4.4.7
+ vue: 3.5.13_typescript@5.7.2
+ dev: false
+
+ /vue-demi/0.14.10_vue@3.5.13:
+ resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ peerDependencies:
+ '@vue/composition-api': ^1.0.0-rc.1
+ vue: ^3.0.0-0 || ^2.6.0
+ peerDependenciesMeta:
+ '@vue/composition-api':
+ optional: true
+ dependencies:
+ vue: 3.5.13_typescript@5.7.2
+ dev: false
+
+ /vue-i18n/9.14.2_vue@3.5.13:
+ resolution: {integrity: sha512-JK9Pm80OqssGJU2Y6F7DcM8RFHqVG4WkuCqOZTVsXkEzZME7ABejAUqUdA931zEBedc4thBgSUWxeQh4uocJAQ==}
+ engines: {node: '>= 16'}
+ peerDependencies:
+ vue: ^3.0.0
+ dependencies:
+ '@intlify/core-base': 9.14.2
+ '@intlify/shared': 9.14.2
+ '@vue/devtools-api': 6.6.4
+ vue: 3.5.13_typescript@5.7.2
+
+ /vue-tsc/2.2.0_typescript@5.7.2:
+ resolution: {integrity: sha512-gtmM1sUuJ8aSb0KoAFmK9yMxb8TxjewmxqTJ1aKphD5Cbu0rULFY6+UQT51zW7SpUcenfPUuflKyVwyx9Qdnxg==}
+ hasBin: true
+ peerDependencies:
+ typescript: '>=5.0.0'
+ dependencies:
+ '@volar/typescript': 2.4.11
+ '@vue/language-core': 2.2.0_typescript@5.7.2
+ typescript: 5.7.2
+ dev: true
+
+ /vue/3.5.13_typescript@5.7.2:
+ resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+ dependencies:
+ '@vue/compiler-dom': 3.5.13
+ '@vue/compiler-sfc': 3.5.13
+ '@vue/runtime-dom': 3.5.13
+ '@vue/server-renderer': 3.5.13_vue@3.5.13
+ '@vue/shared': 3.5.13
+ typescript: 5.7.2
+
+ /watchpack/2.4.1:
+ resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==}
+ engines: {node: '>=10.13.0'}
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ dev: true
+
+ /web-ext-run/0.2.2:
+ resolution: {integrity: sha512-GD59q5/1wYQJXTHrljMZaBa3cCz+Jj3FMDLYgKyAa34TPcHSuMaGqp7TcLJ66PCe43C3hmbEAZd8QCpAB34eiw==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ dependencies:
+ '@babel/runtime': 7.24.7
+ '@devicefarmer/adbkit': 3.2.6
+ bunyan: 1.8.15
+ chrome-launcher: 1.1.0
+ debounce: 1.2.1
+ es6-error: 4.1.1
+ firefox-profile: 4.6.0
+ fs-extra: 11.2.0
+ fx-runner: 1.4.0
+ mkdirp: 3.0.1
+ multimatch: 6.0.0
+ mz: 2.7.0
+ node-notifier: 10.0.1
+ parse-json: 7.1.1
+ promise-toolbox: 0.21.0
+ set-value: 4.1.0
+ source-map-support: 0.5.21
+ strip-bom: 5.0.0
+ strip-json-comments: 5.0.1
+ tmp: 0.2.3
+ update-notifier: 6.0.2
+ watchpack: 2.4.1
+ ws: 8.18.0
+ zip-dir: 2.0.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ dev: true
+
+ /webextension-polyfill/0.10.0:
+ resolution: {integrity: sha512-c5s35LgVa5tFaHhrZDnr3FpQpjj1BB+RXhLTYUxGqBVN460HkbM8TBtEqdXWbpTKfzwCcjAZVF7zXCYSKtcp9g==}
+ dev: true
+
+ /webpack-virtual-modules/0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ dev: true
+
+ /when/3.7.7:
+ resolution: {integrity: sha512-9lFZp/KHoqH6bPKjbWqa+3Dg/K/r2v0X/3/G2x4DBGchVS2QX2VXL3cZV994WQVnTM1/PD71Az25nAzryEUugw==}
+ dev: true
+
+ /which/1.2.4:
+ resolution: {integrity: sha512-zDRAqDSBudazdfM9zpiI30Fu9ve47htYXcGi3ln0wfKu2a7SmrT6F3VDoYONu//48V8Vz4TdCRNPjtvyRO3yBA==}
+ hasBin: true
+ dependencies:
+ is-absolute: 0.1.7
+ isexe: 1.1.2
+ dev: true
+
+ /which/2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+ dependencies:
+ isexe: 2.0.0
+ dev: true
+
+ /widest-line/4.0.1:
+ resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==}
+ engines: {node: '>=12'}
+ dependencies:
+ string-width: 5.1.2
+ dev: true
+
+ /winreg/0.0.12:
+ resolution: {integrity: sha512-typ/+JRmi7RqP1NanzFULK36vczznSNN8kWVA9vIqXyv8GhghUlwhGp1Xj3Nms1FsPcNnsQrJOR10N58/nQ9hQ==}
+ dev: true
+
+ /wrap-ansi/8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 5.1.2
+ strip-ansi: 7.1.0
+ dev: true
+
+ /wrappy/1.0.2:
+ resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
+
+ /write-file-atomic/3.0.3:
+ resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==}
+ dependencies:
+ imurmurhash: 0.1.4
+ is-typedarray: 1.0.0
+ signal-exit: 3.0.7
+ typedarray-to-buffer: 3.1.5
+ dev: true
+
+ /ws/8.18.0:
+ resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+ dev: true
+
+ /xdg-basedir/5.1.0:
+ resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /xml2js/0.5.0:
+ resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==}
+ engines: {node: '>=4.0.0'}
+ dependencies:
+ sax: 1.4.1
+ xmlbuilder: 11.0.1
+ dev: true
+
+ /xmlbuilder/11.0.1:
+ resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==}
+ engines: {node: '>=4.0'}
+ dev: true
+
+ /yaml-eslint-parser/1.2.3:
+ resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==}
+ engines: {node: ^14.17.0 || >=16.0.0}
+ dependencies:
+ eslint-visitor-keys: 3.4.3
+ lodash: 4.17.21
+ yaml: 2.6.1
+ dev: true
+
+ /yaml/2.6.1:
+ resolution: {integrity: sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==}
+ engines: {node: '>= 14'}
+ hasBin: true
+ dev: true
+
+ /zip-dir/2.0.0:
+ resolution: {integrity: sha512-uhlsJZWz26FLYXOD6WVuq+fIcZ3aBPGo/cFdiLlv3KNwpa52IF3ISV8fLhQLiqVu5No3VhlqlgthN6gehil1Dg==}
+ dependencies:
+ async: 3.2.6
+ jszip: 3.10.1
+ dev: true
diff --git a/src/icons/128x128.png b/public/128x128.png
similarity index 100%
rename from src/icons/128x128.png
rename to public/128x128.png
diff --git a/src/icons/16x16.png b/public/16x16.png
similarity index 100%
rename from src/icons/16x16.png
rename to public/16x16.png
diff --git a/src/icons/32x32.png b/public/32x32.png
similarity index 100%
rename from src/icons/32x32.png
rename to public/32x32.png
diff --git a/src/icons/48x48.png b/public/48x48.png
similarity index 100%
rename from src/icons/48x48.png
rename to public/48x48.png
diff --git a/scripts/zip.ps1 b/scripts/zip.ps1
new file mode 100644
index 0000000..3e258e5
--- /dev/null
+++ b/scripts/zip.ps1
@@ -0,0 +1,7 @@
+$sourceFolder = ".\dist\*"
+$targetFolder = ".\artifacts"
+If (!(test-path -PathType container $targetFolder)) {
+ New-Item -ItemType Directory -Path $targetFolder
+}
+$version = $(node -pe "require('./src/manifest.json').version")
+Compress-Archive -Path $sourceFolder -DestinationPath $targetFolder/web-activity-time-tracker-$version.zip
\ No newline at end of file
diff --git a/src/_locales/de/messages.json b/src/_locales/de/messages.json
new file mode 100644
index 0000000..c9f366d
--- /dev/null
+++ b/src/_locales/de/messages.json
@@ -0,0 +1,431 @@
+{
+ "extName": {
+ "message": "Web Activity Time Tracker - Websites sperren, Pomodoro & Webanalyse"
+ },
+ "extDescription": {
+ "message": "Verfolgen und begrenzen Sie die Zeit Ihrer Webaktivitäten und blockieren Sie den Zugang zu den Websites."
+ },
+ "settings": {
+ "message": "Einstellungen"
+ },
+ "today": {
+ "message": "Heute"
+ },
+ "allTime": {
+ "message": "Gesamte Zeit"
+ },
+ "byDays": {
+ "message": "Täglich"
+ },
+ "noData": {
+ "message": "Keine Daten verfügbar"
+ },
+ "noDataForPeriod": {
+ "message": "Keine Daten für den ausgewählten Zeitraum"
+ },
+ "showAll": {
+ "message": "Alle Websites anzeigen"
+ },
+ "sortBy": {
+ "message": "Sortieren nach"
+ },
+ "usageTime": {
+ "message": "Verwendungszeit"
+ },
+ "session": {
+ "message": "Sitzung"
+ },
+ "someSession": {
+ "message": "Sitzungen"
+ },
+ "sessions": {
+ "message": "Sitzungen"
+ },
+ "days": {
+ "message": "Tage"
+ },
+ "aggregate": {
+ "message": "Gesammelte Daten seit"
+ },
+ "websites": {
+ "message": "Webseiten"
+ },
+ "cannotOpenFile": {
+ "message": "Aufgrund des Sicherheitsprotokolls können Sie eine lokale Datei nicht öffnen"
+ },
+ "document": {
+ "message": "Dokument"
+ },
+ "limit": {
+ "message": "Limit"
+ },
+ "d": {
+ "message": "d"
+ },
+ "h": {
+ "message": "h"
+ },
+ "m": {
+ "message": "m"
+ },
+ "s": {
+ "message": "s"
+ },
+ "firstActiveDay": {
+ "message": "Der erste aktive Tag"
+ },
+ "numberOfActiveDays": {
+ "message": "Gesamtzahl der aktiven Tage"
+ },
+ "totalNumberOfDays": {
+ "message": "Alle Tage"
+ },
+ "todayTime": {
+ "message": "Gesamtzeit heute"
+ },
+ "averageTime": {
+ "message": "Durchschnittliche Zeit an aktiven Tagen"
+ },
+ "averageDailyUsage": {
+ "message": "Durchschnittliche tägliche Nutzung"
+ },
+ "mostActiveDay": {
+ "message": "Der aktivste Tag"
+ },
+ "mostInactiveDay": {
+ "message": "Der inaktivste Tag"
+ },
+ "todayInclude": {
+ "message": "Der heutige Tag ist in der Statistik enthalten. Aus der Statistik ausschließen."
+ },
+ "todayEcclude": {
+ "message": "Der heutige Tag ist aus der Statistik ausgeschlossen. In die Statistik einbeziehen."
+ },
+ "averageTimeByDays": {
+ "message": "Durchschnittliche Zeit für ausgewählte Tage"
+ },
+ "exportToCsv": {
+ "message": "Als CSV exportieren"
+ },
+ "week": {
+ "message": "Diese Woche"
+ },
+ "month": {
+ "message": "Diesen Monat"
+ },
+ "lastMonth": {
+ "message": "Letzter Monat"
+ },
+ "generalSettings": {
+ "message": "Einstellungen"
+ },
+ "whiteListSettings": {
+ "message": "Weiße Liste"
+ },
+ "limitsSettings": {
+ "message": "Beschränkungen"
+ },
+ "notificationsSettings": {
+ "message": "Benachrichtigungen"
+ },
+ "pomodoroMode": {
+ "message": "Pomodoro"
+ },
+ "pomodoroSettings": {
+ "message": "Pomodoro Einstellungen"
+ },
+ "pomodoro": {
+ "message": "Pomodoro",
+ "description": "Die Pomodoro-Methode ist eine Zeitmanagementtechnik, die auf dem Wechsel von konzentrierten Arbeits- und Ruhephasen basiert. Bei der klassischen Pomodoro-Methode dauert die Arbeitsphase 25 Minuten und die Ruhephase 5 Minuten."
+ },
+ "pomodoroExplanationIcon": {
+ "message": "Wenn der Pomodoro-Modus aktiviert ist und der Betriebsmodus aktiv ist, sehen Sie dieses Symbol",
+ "description": "Während der Ruhezeiten sehen Sie dieses Erweiterungssymbol"
+ },
+ "pomodoroExplanationTime": {
+ "message": "Während des Pomodoro-Modus berücksichtigt die Erweiterung weiterhin die Zeit, die Sie auf den Seiten verbracht haben, alle Grenzen und Benachrichtigungen funktionieren."
+ },
+ "pomodoroExplanationStop": {
+ "message": "Nach dem Drücken von 'Stop' werden die Betriebs- und Ruhezeiten auf Null zurückgesetzt."
+ },
+ "pomodoroWork": {
+ "message": "Zeitraum der Arbeit"
+ },
+ "pomodoroRest": {
+ "message": "Ruhezeit"
+ },
+ "pomodoroFrequency": {
+ "message": "Anzahl der Wiederholungen"
+ },
+ "start": {
+ "message": "Starten Sie"
+ },
+ "stop": {
+ "message": "Stop"
+ },
+ "pomodoroIsEnabled": {
+ "message": "Der Pomodoro-Modus ist aktiviert"
+ },
+ "pomodoroSoundAfter": {
+ "message": "Ton nach vollständiger Periode"
+ },
+ "clickToPreview": {
+ "message": "Zum Anhören klicken"
+ },
+ "sound": {
+ "message": "Ton"
+ },
+ "aboutSettings": {
+ "message": "Über die Erweiterung"
+ },
+ "viewTimeInBadge": {
+ "message": "Zeitindikator anzeigen",
+ "description": "Die aktuellen Informationen zur \"verbrauchten Zeit\" im Kurzformat anzeigen"
+ },
+ "deferringDescription": {
+ "message": "Die Sperre kann nur einmal pro Tag um 5 Minuten verschoben werden"
+ },
+ "allowDeferringBlock": {
+ "message": "Verzögerung der Sperre um 5 Minuten zulassen",
+ "description": "Nachdem die Site gesperrt wurde, können Sie die Sperrung einmal täglich um 5 Minuten verschieben"
+ },
+ "intervalInactivity": {
+ "message": "Zeiterfassung stoppen, bei Inaktivität für:",
+ "description": "Betrifft alle Aktionen mit der Maus oder der Tastatur"
+ },
+ "exportToCsvSetting": {
+ "message": "Ihre Webaktivitätsdaten als CSV-Datei exportieren",
+ "description": "Ihre Webaktivitäten für einen beliebigen Zeitraum exportieren"
+ },
+ "sec": {
+ "message": "Sekunden"
+ },
+ "min": {
+ "message": "Minute"
+ },
+ "2min": {
+ "message": "Minuten"
+ },
+ "mins": {
+ "message": "Minuten"
+ },
+ "whiteList": {
+ "message": "Aktivität und Zeit für diese Websites werden nicht erfasst."
+ },
+ "addWebsite": {
+ "message": "Website hinzufügen"
+ },
+ "enterWebsite": {
+ "message": "Namen der Website eingeben..."
+ },
+ "enterNotification": {
+ "message": "Text für die Benachrichtigung eingeben..."
+ },
+ "limits": {
+ "message": "Tägliche Zugriffsbeschränkungen für Websites",
+ "description": "Legen Sie die maximale Zeit fest, die pro Tag für den Besuch der Website zulässig ist. Nach dieser Zeit wird die Website gesperrt."
+ },
+ "limitsTip": {
+ "message": "Setzen Sie die Blockierungszeit auf 0 Stunden 0 Minuten, um die Website sofort zu blockieren."
+ },
+ "save": {
+ "message": "Speichern"
+ },
+ "showDailyNotification": {
+ "message": "Tägliche Zusammenfassung als Benachrichtigung",
+ "description": "Am Ende jedes Tages erhalten Sie eine Benachrichtigung mit einer Zusammenfassung Ihrer täglichen Nutzung."
+ },
+ "notificationTime": {
+ "message": "Benachrichtigungen für Websites",
+ "description": "Jedes Mal eine Benachrichtigung anzeigen, wenn Sie den angegebenen Zeitraum auf einer Website verbringen."
+ },
+ "notificationMessage": {
+ "message": "Benachrichtigungstext",
+ "description": "Dieser Text wird in der Benachrichtigung für Websites angezeigt"
+ },
+ "notificationTimeSetting": {
+ "message": "Tägliche Zusammenfassung um folgende Uhrzeit anzeigen:"
+ },
+ "github": {
+ "message": "Feedback zur Erweiterung geben oder ein Problem melden: "
+ },
+ "question": {
+ "message": "Eine Frage stellen oder Verbesserungen vorschlagen: "
+ },
+ "supportForm": {
+ "message": "Unterstützungsformular"
+ },
+ "doYouEnjoy": {
+ "message": "Gefällt Ihnen diese Erweiterung?"
+ },
+ "review": {
+ "message": "Schreiben Sie eine Bewertung!"
+ },
+ "block": {
+ "message": "Sie haben Ihr tägliches Nutzungslimit erreicht für "
+ },
+ "5mins": {
+ "message": "+ 5 Minuten"
+ },
+ "todayUsageTime": {
+ "message": "Bisherige Gesamtnutzungszeit "
+ },
+ "comparedToYesterday": {
+ "message": " im Vergleich zu gestern "
+ },
+ "mostVisited": {
+ "message": "Die meistbesuchte Website "
+ },
+ "dashboard": {
+ "message": "Übersicht"
+ },
+ "timeChartDescription": {
+ "message": "Dies ist eine stundenweise Zeitleiste für den Tag"
+ },
+ "enjoyAndReview": {
+ "message": "Gefällt Ihnen diese Erweiterung?",
+ "description": "Web Activity Time Tracker bewerten"
+ },
+ "removeAllData": {
+ "message": "Alle Daten entfernen",
+ "description": "Alle Daten und Statistiken der besuchten Websites für immer löschen."
+ },
+ "remove": {
+ "message": "Löschen"
+ },
+ "removeAllDataConfirm": {
+ "message": "Sind Sie sicher, dass Sie alle Daten löschen möchten?"
+ },
+ "cancel": {
+ "message": "Abbrechen"
+ },
+ "backupAndRestore": {
+ "message": "Sicherung und Wiederherstellen",
+ "description": "Sie können eine Sicherungskopie aller Daten für alle besuchten Websites herunterladen"
+ },
+ "backup": {
+ "message": "Sicherung"
+ },
+ "restore": {
+ "message": "Wiederherstellen"
+ },
+ "welcome": {
+ "message": "Willkommen bei Web Activity Time Tracker",
+ "description": "Web Activity Time Tracker ist eine open-source, kostenlose und werbefreie Erweiterung, mit der Sie die Zeit, die Sie für das Durchsuchen von Websites aufgewendet haben, und die Anzahl der Besuche nachverfolgen können."
+ },
+ "getStarted": {
+ "message": "Anleitung"
+ },
+ "welcomeStart": {
+ "message": "Sie können die Erweiterung in nur 3 einfachen Schritten schnell verwenden"
+ },
+ "pinIcon": {
+ "message": "Pin das Symbol"
+ },
+ "pinIconPart1": {
+ "message": "Um diese Erweiterung bequemer zu verwenden, können Sie das Symbol an die Symbolleiste anheften. Klicken Sie auf das Symbol"
+ },
+ "pinIconPart2": {
+ "message": "und klicken Sie dann auf das Pin-Symbol"
+ },
+ "browse": {
+ "message": "Durchsuchen Sie alle Websites",
+ "description": "Wenn Sie eine Website besuchen, werden Sie sehen, dass die Uhrzeit auf dem Symbol angezeigt wird, genau wie hier"
+ },
+ "seeData": {
+ "message": "Zeigen Sie Ihre Daten auf der Popup-Seite und im Dashboard an",
+ "description": "Klicken Sie auf das Erweiterungssymbol, um eine Popup-Seite zu öffnen, und Sie können die mit einem Kreisdiagramm gerenderten Daten für heute, für alle Zeiten oder für Tage lesen. In einem Popup-Fenster können Sie das Dashboard öffnen, und es zeigt Ihnen die heutige Zeit nach Stunden an. Und Sie können ein tägliches Zeitlimit für alle Websites festlegen, Benachrichtigungen für Websites festlegen oder Daten in CSV exportieren."
+ },
+ "close": {
+ "message": "Schließen"
+ },
+ "useExtension": {
+ "message": "Verwenden Sie die Erweiterung"
+ },
+ "next": {
+ "message": "Weiter"
+ },
+ "showChangelog": {
+ "message": "Änderungsliste anzeigen",
+ "description": "Zeigen Sie die Liste der Änderungen nach dem Aktualisieren der Erweiterung an"
+ },
+ "byHours": {
+ "message": "Stundenweise"
+ },
+ "intervals": {
+ "message": "Intervalle"
+ },
+ "intervalsChart": {
+ "message": "Nur Zeitintervalle größer als",
+ "description": "werden angezeigt"
+ },
+ "promoClearYoutube": {
+ "message": "Möchten Sie Kurzfilme, Kommentare, empfohlene Videos, Abonnements und andere YouTube-Ablenkungen blockieren? Wir haben eine weitere Erweiterung erstellt, mit der Sie YouTube ohne Ablenkung ansehen können.",
+ "description": "Versuchen Clean YouTube"
+ },
+ "completelyBlocked": {
+ "message": "Vollständig blockiert",
+ "description": "Vollständig blockieren"
+ },
+ "tryMyOtherApps": {
+ "message": "Probieren Sie meine anderen Apps aus"
+ },
+ "clearYoutube": {
+ "message": "Clean YouTube",
+ "description": "Chrome-Erweiterung, die YouTube-Shorts, empfohlene Videos, Kommentare, Feeds, Homepage-Empfehlungen und andere Ablenkungen ausblenden kann. Sieh dir YouTube ohne Ablenkungen an."
+ },
+ "darkTheme": {
+ "message": "Dunkles Thema"
+ },
+ "cleanYoutube_promo": {
+ "message": "Probieren Sie unsere neue Erweiterung Clean Youtube"
+ },
+ "cleanYoutube_description": {
+ "message": "Möchten Sie Kurzfilme, empfohlene Videos und Kommentare auf YouTube ausblenden?"
+ },
+ "cleanYoutube_description2": {
+ "message": "Clean Youtube ist ein YouTube™-Inhaltsblocker."
+ },
+ "cleanYoutube_features": {
+ "message": "Unsere Funktionen:"
+ },
+ "cleanYoutube_features1": {
+ "message": "Clean Mode - Nur Videoplayer auf der Seite anzeigen"
+ },
+ "cleanYoutube_features2": {
+ "message": "Kurze Videos, Kommentare und verwandte Videos ausblenden. 15+ Optionen."
+ },
+ "cleanYoutube_features3": {
+ "message": "AutoPlay deaktivieren"
+ },
+ "cleanYoutube_features4": {
+ "message": "Endscreen-Karten deaktivieren"
+ },
+ "cleanYoutube_features5": {
+ "message": "Schwarz/Weiß-Modus"
+ },
+ "try": {
+ "message": "Testen Sie"
+ },
+ "donate":{
+ "message": "Spende"
+ },
+ "enjoy":{
+ "message": "Haben Sie Spaß an Web Activity Time Tracker?"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Tracker ist eine kostenlose Erweiterung. Sie können mich für die weitere Entwicklung mit Kryptowährung unterstützen."
+ },
+ "thanks":{
+ "message": "Vielen Dank dafür! 🙏"
+ },
+ "coin":{
+ "message": "Münze"
+ },
+ "chain":{
+ "message": "Kette"
+ },
+ "address":{
+ "message": "Adresse"
+ }
+}
\ No newline at end of file
diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json
new file mode 100644
index 0000000..216b4c1
--- /dev/null
+++ b/src/_locales/en/messages.json
@@ -0,0 +1,431 @@
+{
+ "extName": {
+ "message": "Web Activity Time Tracker - Block Websites, Pomodoro & Web Analytics"
+ },
+ "extDescription": {
+ "message": "Track time of your web activity, limit and block distracting websites. Monitor your web usage."
+ },
+ "settings": {
+ "message": "Settings"
+ },
+ "today": {
+ "message": "Today"
+ },
+ "allTime": {
+ "message": "Total time"
+ },
+ "byDays": {
+ "message": "Daily"
+ },
+ "noData": {
+ "message": "No data"
+ },
+ "noDataForPeriod": {
+ "message": "No data for the selected period"
+ },
+ "showAll": {
+ "message": "Show all the websites"
+ },
+ "sortBy": {
+ "message": "Sorting by"
+ },
+ "usageTime": {
+ "message": "Usage Time"
+ },
+ "session": {
+ "message": "session"
+ },
+ "someSession": {
+ "message": "sessions"
+ },
+ "sessions": {
+ "message": "Sessions"
+ },
+ "days": {
+ "message": "days"
+ },
+ "aggregate": {
+ "message": "Aggregate data since"
+ },
+ "websites": {
+ "message": "websites"
+ },
+ "cannotOpenFile": {
+ "message": "You cannot open a local file due to security protocol"
+ },
+ "document": {
+ "message": "Document"
+ },
+ "limit": {
+ "message": "Limit"
+ },
+ "d": {
+ "message": "d"
+ },
+ "h": {
+ "message": "h"
+ },
+ "m": {
+ "message": "m"
+ },
+ "s": {
+ "message": "s"
+ },
+ "firstActiveDay": {
+ "message": "The first active day"
+ },
+ "numberOfActiveDays": {
+ "message": "Number of active days"
+ },
+ "totalNumberOfDays": {
+ "message": "Total number of days"
+ },
+ "todayTime": {
+ "message": "All the time today"
+ },
+ "averageTime": {
+ "message": "Average time for active days"
+ },
+ "averageDailyUsage": {
+ "message": "Average daily usage"
+ },
+ "mostActiveDay": {
+ "message": "The most active day"
+ },
+ "mostInactiveDay": {
+ "message": "The most inactive day"
+ },
+ "todayInclude": {
+ "message": "Today is included in the statistics. Click to exclude."
+ },
+ "todayEcclude": {
+ "message": "Today is excluded from the statistics. Click to include."
+ },
+ "averageTimeByDays": {
+ "message": "Average time on selected days"
+ },
+ "exportToCsv": {
+ "message": "Export to CSV"
+ },
+ "week": {
+ "message": "This week"
+ },
+ "month": {
+ "message": "This month"
+ },
+ "lastMonth": {
+ "message": "Last month"
+ },
+ "generalSettings": {
+ "message": "Settings"
+ },
+ "whiteListSettings": {
+ "message": "Whitelist"
+ },
+ "limitsSettings": {
+ "message": "Limits"
+ },
+ "notificationsSettings": {
+ "message": "Notifications"
+ },
+ "pomodoroMode": {
+ "message": "Pomodoro"
+ },
+ "pomodoroSettings": {
+ "message": "Pomodoro Settings"
+ },
+ "pomodoro": {
+ "message": "Pomodoro",
+ "description": "The Pomodoro method is a time management technique based on alternating periods of focused work and rest. According to the classics of the Pomodoro method, the work period lasts 25 minutes, the rest period is 5 minutes."
+ },
+ "pomodoroExplanationIcon": {
+ "message": "When Pomodoro mode is on and operation mode is active, you will see this icon",
+ "description": "During rest periods, you will see this extension icon"
+ },
+ "pomodoroExplanationTime": {
+ "message": "During Pomodoro mode, the extension continues to take into account the time you spent on the sites, all limits and notifications work."
+ },
+ "pomodoroExplanationStop": {
+ "message": "After clicking 'Stop', work and rest time is reset to zero."
+ },
+ "pomodoroWork": {
+ "message": "Period of work"
+ },
+ "pomodoroRest": {
+ "message": "Period of rest"
+ },
+ "pomodoroFrequency": {
+ "message": "Number of repetitions"
+ },
+ "start": {
+ "message": "Run"
+ },
+ "stop": {
+ "message": "Stop"
+ },
+ "pomodoroIsEnabled": {
+ "message": "Pomodoro Mode is enabled"
+ },
+ "pomodoroSoundAfter": {
+ "message": "Sound after complete period"
+ },
+ "clickToPreview": {
+ "message": "Click to listen"
+ },
+ "sound": {
+ "message": "Sound"
+ },
+ "aboutSettings": {
+ "message": "About"
+ },
+ "viewTimeInBadge": {
+ "message": "Display time tracker in icon",
+ "description": "You are able to see current 'spent time' information in short format on the extension icon"
+ },
+ "deferringDescription": {
+ "message": "You can postpone the blocking for 5 minutes only once during the day"
+ },
+ "allowDeferringBlock": {
+ "message": "Allow deferring block for 5 minutes",
+ "description": "After the site is blocked, you can postpone the blocking for 5 minutes during the day only once"
+ },
+ "intervalInactivity": {
+ "message": "Stop the tracker if there is no action for",
+ "description": "These are any actions with the mouse or keyboard"
+ },
+ "exportToCsvSetting": {
+ "message": "Exporting your web activity data to CSV",
+ "description": "You can export your web activity for any date range"
+ },
+ "sec": {
+ "message": "seconds"
+ },
+ "min": {
+ "message": "minute"
+ },
+ "2min": {
+ "message": "minutes"
+ },
+ "mins": {
+ "message": "minutes"
+ },
+ "whiteList": {
+ "message": "Activity and spent time for these websites will not be tracked"
+ },
+ "addWebsite": {
+ "message": "Add Website"
+ },
+ "enterWebsite": {
+ "message": "Enter website name..."
+ },
+ "enterNotification": {
+ "message": "Enter notification message..."
+ },
+ "limits": {
+ "message": "Daily access restrictions for the websites",
+ "description": "Set the maximum time allowed to visit the website per day. After this time, the site will be blocked."
+ },
+ "limitsTip": {
+ "message": "If you set the blocking time to 0 hours 0 minutes, the website will be blocked immediately"
+ },
+ "save": {
+ "message": "Save"
+ },
+ "showDailyNotification": {
+ "message": "Daily Summary Notifications",
+ "description": "At the end of each day, you will receive a notification with a summary of your daily usage"
+ },
+ "notificationTime": {
+ "message": "Notifications for websites",
+ "description": "Show notifications every time you spend a selected period of time on the website"
+ },
+ "notificationMessage": {
+ "message": "Notification message",
+ "description": "You will see this message in notification for websites every time"
+ },
+ "notificationTimeSetting": {
+ "message": "Notification time with summary information about your daily usage"
+ },
+ "github": {
+ "message": "Leave your feedback or report an issue on "
+ },
+ "question": {
+ "message": "You can also ask questions and leave your suggestions"
+ },
+ "supportForm": {
+ "message": "support form"
+ },
+ "doYouEnjoy": {
+ "message": "Do you enjoy Web Activity Time Tracker?"
+ },
+ "review": {
+ "message": "Leave a review!"
+ },
+ "promoClearYoutube": {
+ "message": "Would you like to block shorts, comments, recommended videos, subscriptions, and other YouTube distractions? We've created another extension that will help you watch YouTube without distractions.",
+ "description": "Try Clean Youtube"
+ },
+ "block": {
+ "message": "You've reached your limit for today on "
+ },
+ "5mins": {
+ "message": "+ 5 minutes"
+ },
+ "todayUsageTime": {
+ "message": "Total usage time for today "
+ },
+ "comparedToYesterday": {
+ "message": " compared to yesterday "
+ },
+ "mostVisited": {
+ "message": "Most visited website "
+ },
+ "dashboard": {
+ "message": "Dashboard"
+ },
+ "timeChartDescription": {
+ "message": "This is a chart of time during the day by the hour"
+ },
+ "enjoyAndReview": {
+ "message": "Enjoying the extension?",
+ "description": "Rate Web Activity Time Tracker"
+ },
+ "removeAllData": {
+ "message": "Remove all data",
+ "description": "You can delete all data and statistics of visited websites for all time"
+ },
+ "remove": {
+ "message": "Remove"
+ },
+ "removeAllDataConfirm": {
+ "message": "Are you sure you want to delete all data?"
+ },
+ "cancel": {
+ "message": "Cancel"
+ },
+ "backupAndRestore": {
+ "message": "Backup and restore",
+ "description": "You can download a backup copy of all data for all visited sites"
+ },
+ "backup": {
+ "message": "Backup"
+ },
+ "restore": {
+ "message": "Restore"
+ },
+ "welcome": {
+ "message": "Welcome to Web Activity Time Tracker",
+ "description": "Web Activity Time Tracker is open-source, free and no ads extension, which can help you track the time you spent on browsing websites and the count of visit."
+ },
+ "getStarted": {
+ "message": "Get started"
+ },
+ "welcomeStart": {
+ "message": "You can quickly start using the extension in just 3 easy steps"
+ },
+ "pinIcon": {
+ "message": "Pin the icon"
+ },
+ "pinIconPart1": {
+ "message": "To use this extension more conveniently, you can pin the icon to toolbar. Click the icon"
+ },
+ "pinIconPart2": {
+ "message": "and then click the pin icon"
+ },
+ "browse": {
+ "message": "Browse any websites",
+ "description": "When you visit any website, you will see that the time is displayed on the icon, just like here"
+ },
+ "seeData": {
+ "message": "View your data on the popup page and on the dashboard",
+ "description": "Click on the extension icon to open a popup page and you will be able to read the data visualized using a pie chart, for today, for all time or by day. In the popup window, you can open the dashboard and it will show you today's time by the clock. And you can set a daily time limit for any websites, notifications for websites, or export data to CSV."
+ },
+ "close": {
+ "message": "Close"
+ },
+ "useExtension": {
+ "message": "Use the extension"
+ },
+ "next": {
+ "message": "Next"
+ },
+ "showChangelog": {
+ "message": "Show changelog",
+ "description": "Show the list of changes after updating extension"
+ },
+ "byHours": {
+ "message": "Hourly"
+ },
+ "intervals": {
+ "message": "Intervals"
+ },
+ "intervalsChart": {
+ "message": "Only time intervals greater than",
+ "description": "are shown"
+ },
+ "completelyBlocked": {
+ "message": "Completely Blocked",
+ "description": "Completely Block"
+ },
+ "tryMyOtherApps": {
+ "message": "Try my other apps"
+ },
+ "clearYoutube": {
+ "message": "Clean YouTube",
+ "description": "Chrome extension that can hide YouTube shorts, recomended videos, comments, feed, homepage recommendations and other distractions. Watch YouTube free of distractions."
+ },
+ "darkTheme": {
+ "message": "Dark theme"
+ },
+ "cleanYoutube_promo": {
+ "message": "Try our new extension Clean Youtube"
+ },
+ "cleanYoutube_description": {
+ "message": "Would you like to hide shorts, recommended videos, comments on YouTube?"
+ },
+ "cleanYoutube_description2": {
+ "message": "Clean Youtube is a YouTube™ content blocker."
+ },
+ "cleanYoutube_features": {
+ "message": "Our features:"
+ },
+ "cleanYoutube_features1": {
+ "message": "Clean Mode - Show only Video Player on Page"
+ },
+ "cleanYoutube_features2": {
+ "message": "Hide Shorts, Comments, Related Videos. 15+ options."
+ },
+ "cleanYoutube_features3": {
+ "message": "Disable AutoPlay"
+ },
+ "cleanYoutube_features4": {
+ "message": "Disable End Screen Cards"
+ },
+ "cleanYoutube_features5": {
+ "message": "Black and White Mode"
+ },
+ "try": {
+ "message": "Try"
+ },
+ "donate": {
+ "message": "Donate"
+ },
+ "enjoy":{
+ "message": "Do you enjoy Web Activity Time Tracker?"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Tracker is free extension. You can support me for the further development with cryptocurrency."
+ },
+ "thanks":{
+ "message": "Thank you! 🙏"
+ },
+ "coin":{
+ "message": "Coin"
+ },
+ "chain":{
+ "message": "Chain"
+ },
+ "address":{
+ "message": "Address"
+ }
+}
diff --git a/src/_locales/es/messages.json b/src/_locales/es/messages.json
new file mode 100644
index 0000000..c607eb2
--- /dev/null
+++ b/src/_locales/es/messages.json
@@ -0,0 +1,431 @@
+{
+ "extName": {
+ "message": "Web Activity Time Tracker - Sitios bloqueados, Pomodoro y análisis web"
+ },
+ "extDescription": {
+ "message": "Controla el tiempo de tu actividad web, limita y bloquea los sitios web que te distraen. Monitoriza tu uso de la web."
+ },
+ "settings": {
+ "message": "Ajustes"
+ },
+ "today": {
+ "message": "Hoy"
+ },
+ "allTime": {
+ "message": "Tiempo total"
+ },
+ "byDays": {
+ "message": "Diario"
+ },
+ "noData": {
+ "message": "Sin datos"
+ },
+ "noDataForPeriod": {
+ "message": "No hay datos para el periodo seleccionado"
+ },
+ "showAll": {
+ "message": "Mostrar todos los sitios web"
+ },
+ "sortBy": {
+ "message": "Clasificación por"
+ },
+ "usageTime": {
+ "message": "Tiempo de uso"
+ },
+ "session": {
+ "message": "sesión"
+ },
+ "someSession": {
+ "message": "sesiones"
+ },
+ "sessions": {
+ "message": "Sesiones"
+ },
+ "days": {
+ "message": "días"
+ },
+ "aggregate": {
+ "message": "Datos agregados desde"
+ },
+ "websites": {
+ "message": "sitios web"
+ },
+ "cannotOpenFile": {
+ "message": "No se puede abrir un archivo local debido al protocolo de seguridad"
+ },
+ "document": {
+ "message": "Documento"
+ },
+ "limit": {
+ "message": "Límite"
+ },
+ "d": {
+ "message": "d"
+ },
+ "h": {
+ "message": "h"
+ },
+ "m": {
+ "message": "m"
+ },
+ "s": {
+ "message": "s"
+ },
+ "firstActiveDay": {
+ "message": "El primer día activo"
+ },
+ "numberOfActiveDays": {
+ "message": "Número de días activos"
+ },
+ "totalNumberOfDays": {
+ "message": "Número total de días"
+ },
+ "todayTime": {
+ "message": "Todo el tiempo hoy"
+ },
+ "averageTime": {
+ "message": "Tiempo medio de los días activos"
+ },
+ "averageDailyUsage": {
+ "message": "Uso medio diario"
+ },
+ "mostActiveDay": {
+ "message": "El día más activo"
+ },
+ "mostInactiveDay": {
+ "message": "El día más inactivo"
+ },
+ "todayInclude": {
+ "message": "Hoy está incluido en las estadísticas. Haga clic para excluir."
+ },
+ "todayEcclude": {
+ "message": "El día de hoy está excluido de las estadísticas. Haga clic para incluir."
+ },
+ "averageTimeByDays": {
+ "message": "Tiempo medio en los días seleccionados"
+ },
+ "exportToCsv": {
+ "message": "Exportar a CSV"
+ },
+ "week": {
+ "message": "Esta semana"
+ },
+ "month": {
+ "message": "Este mes"
+ },
+ "lastMonth": {
+ "message": "El mes pasado"
+ },
+ "generalSettings": {
+ "message": "Ajustes"
+ },
+ "whiteListSettings": {
+ "message": "ListaBlanca"
+ },
+ "limitsSettings": {
+ "message": "Límites"
+ },
+ "notificationsSettings": {
+ "message": "Notificaciones"
+ },
+ "pomodoroMode": {
+ "message": "Pomodoro"
+ },
+ "pomodoroSettings": {
+ "message": "Ajustes Pomodoro"
+ },
+ "pomodoro": {
+ "message": "Pomodoro",
+ "description": "El método Pomodoro es una técnica de gestión del tiempo basada en la alternancia de periodos de trabajo concentrado y de descanso. Según los clásicos del método Pomodoro, el periodo de trabajo dura 25 minutos, el de descanso 5 minutos."
+ },
+ "pomodoroExplanationIcon": {
+ "message": "Cuando el modo Pomodoro está activado y el modo de funcionamiento está activo, verá este icono",
+ "description": "Durante los periodos de descanso, verá este icono de extensión"
+ },
+ "pomodoroExplanationTime": {
+ "message": "Durante el modo Pomodoro, la extensión sigue teniendo en cuenta el tiempo que pasó en los sitios, todos los límites y las notificaciones de trabajo."
+ },
+ "pomodoroExplanationStop": {
+ "message": "Tras pulsar 'Parar', el tiempo de trabajo y de descanso se pone a cero."
+ },
+ "pomodoroWork": {
+ "message": "Período de trabajo"
+ },
+ "pomodoroRest": {
+ "message": "Periodo de descanso"
+ },
+ "pomodoroFrequency": {
+ "message": "Número de repeticiones"
+ },
+ "start": {
+ "message": "Ejecutar"
+ },
+ "stop": {
+ "message": "Stop"
+ },
+ "pomodoroIsEnabled": {
+ "message": "Modo Pomodoro activado"
+ },
+ "pomodoroSoundAfter": {
+ "message": "Sonido tras periodo completo"
+ },
+ "clickToPreview": {
+ "message": "Haga clic para escuchar"
+ },
+ "sound": {
+ "message": "Sonido"
+ },
+ "aboutSettings": {
+ "message": "Acerca de"
+ },
+ "viewTimeInBadge": {
+ "message": "Mostrar el cronómetro en un icono",
+ "description": "En el icono de extensión puede ver la información actual sobre el 'tiempo transcurrido' en formato abreviado"
+ },
+ "deferringDescription": {
+ "message": "Puedes posponer el bloqueo durante 5 minutos sólo una vez al día"
+ },
+ "allowDeferringBlock": {
+ "message": "Permitir el bloqueo diferido durante 5 minutos",
+ "description": "Una vez bloqueado el sitio, puede posponer el bloqueo durante 5 minutos a lo largo del día una sola vez"
+ },
+ "intervalInactivity": {
+ "message": "Detener el rastreador si no hay ninguna acción para",
+ "description": "Se trata de cualquier acción con el ratón o el teclado"
+ },
+ "exportToCsvSetting": {
+ "message": "Exportación de los datos de actividad web a CSV",
+ "description": "Puede exportar su actividad web para cualquier intervalo de fechas"
+ },
+ "sec": {
+ "message": "segundos"
+ },
+ "min": {
+ "message": "minuto"
+ },
+ "2min": {
+ "message": "minutos"
+ },
+ "mins": {
+ "message": "minutos"
+ },
+ "whiteList": {
+ "message": "La actividad y el tiempo de permanencia en estos sitios web no se rastrearán."
+ },
+ "addWebsite": {
+ "message": "Añadir sitio web"
+ },
+ "enterWebsite": {
+ "message": "Introduzca el nombre del sitio web..."
+ },
+ "enterNotification": {
+ "message": "Introducir mensaje de notificación..."
+ },
+ "limits": {
+ "message": "Restricciones diarias de acceso a los sitios web",
+ "description": "Establezca el tiempo máximo permitido para visitar el sitio web al día. Transcurrido este tiempo, el sitio se bloqueará."
+ },
+ "limitsTip": {
+ "message": "Si establece el tiempo de bloqueo en 0 horas 0 minutos, el sitio web se bloqueará inmediatamente"
+ },
+ "save": {
+ "message": "Guardar"
+ },
+ "showDailyNotification": {
+ "message": "Notificaciones diarias resumidas",
+ "description": "Al final de cada día, recibirás una notificación con un resumen de tu uso diario"
+ },
+ "notificationTime": {
+ "message": "Notificaciones para sitios web",
+ "description": "Mostrar notificaciones cada vez que pase un periodo de tiempo seleccionado en el sitio web."
+ },
+ "notificationMessage": {
+ "message": "Mensaje de notificación",
+ "description": "Verás este mensaje en la notificación de sitios web cada vez que"
+ },
+ "notificationTimeSetting": {
+ "message": "Hora de notificación con información resumida sobre su uso diario"
+ },
+ "github": {
+ "message": "Deje su opinión o informe de un problema en"
+ },
+ "question": {
+ "message": "También puede hacer preguntas y dejar sus sugerencias"
+ },
+ "supportForm": {
+ "message": "formulario de asistencia"
+ },
+ "doYouEnjoy": {
+ "message": "¿Te gusta Web Activity Time Tracker?"
+ },
+ "review": {
+ "message": "Deja tu opinión"
+ },
+ "promoClearYoutube": {
+ "message": "¿Te gustaría bloquear los cortos, los comentarios, los vídeos recomendados, las suscripciones y otras distracciones de YouTube? Hemos creado otra extensión que te ayudará a ver YouTube sin distracciones.",
+ "description": "Prueba Clean YouTube"
+ },
+ "block": {
+ "message": "Has alcanzado tu límite por hoy en"
+ },
+ "5mins": {
+ "message": "+ 5 minutos"
+ },
+ "todayUsageTime": {
+ "message": "Tiempo total de uso para hoy "
+ },
+ "comparedToYesterday": {
+ "message": " en comparación con ayer "
+ },
+ "mostVisited": {
+ "message": "Sitio web más visitado "
+ },
+ "dashboard": {
+ "message": "Cuadro de mandos"
+ },
+ "timeChartDescription": {
+ "message": "Este es un gráfico del tiempo durante el día por horas"
+ },
+ "enjoyAndReview": {
+ "message": "¿Disfrutando de la ampliación?",
+ "description": "Valora Web Activity Time Tracker"
+ },
+ "removeAllData": {
+ "message": "Eliminar todos los datos",
+ "description": "Puede borrar todos los datos y estadísticas de los sitios web visitados para siempre"
+ },
+ "remove": {
+ "message": "Eliminar"
+ },
+ "removeAllDataConfirm": {
+ "message": "¿Estás seguro de que quieres borrar todos los datos?"
+ },
+ "cancel": {
+ "message": "Cancelar"
+ },
+ "backupAndRestore": {
+ "message": "Copia de seguridad y restauración",
+ "description": "Puedes descargar una copia de seguridad de todos los datos de todos los sitios visitados"
+ },
+ "backup": {
+ "message": "Copia de seguridad"
+ },
+ "restore": {
+ "message": "Restaurar"
+ },
+ "welcome": {
+ "message": "Bienvenido a Web Activity Time Tracker",
+ "description": "Web Activity Time Tracker es una extensión de código abierto, gratuita y sin publicidad, que puede ayudarte a controlar el tiempo que pasas navegando por páginas web y el recuento de visitas."
+ },
+ "getStarted": {
+ "message": "Empezar"
+ },
+ "welcomeStart": {
+ "message": "Puede empezar a utilizar rápidamente la extensión en sólo 3 sencillos pasos"
+ },
+ "pinIcon": {
+ "message": "Anclar el icono"
+ },
+ "pinIconPart1": {
+ "message": "Para utilizar esta extensión más cómodamente, puede fijar el icono a la barra de herramientas. Haga clic en el icono"
+ },
+ "pinIconPart2": {
+ "message": "y, a continuación, haga clic en el icono de la chincheta"
+ },
+ "browse": {
+ "message": "Navegar por cualquier sitio web",
+ "description": "Cuando visite cualquier sitio web, verá que la hora aparece en el icono, como aquí"
+ },
+ "seeData": {
+ "message": "Visualiza tus datos en la página emergente y en el cuadro de mandos",
+ "description": "Haz clic en el icono de la extensión para abrir una página emergente y podrás leer los datos visualizados mediante un gráfico circular, para hoy, para todo el tiempo o por día. En la ventana emergente, puedes abrir el panel de control y te mostrará el tiempo de hoy según el reloj. Y puedes establecer un límite de tiempo diario para cualquier sitio web, notificaciones para sitios web o exportar los datos a CSV."
+ },
+ "close": {
+ "message": "Cerrar"
+ },
+ "useExtension": {
+ "message": "Utilizar la extensión"
+ },
+ "next": {
+ "message": "Siguiente"
+ },
+ "showChangelog": {
+ "message": "Mostrar el registro de cambios",
+ "description": "Mostrar la lista de cambios tras actualizar la extensión"
+ },
+ "byHours": {
+ "message": "Por hora"
+ },
+ "intervals": {
+ "message": "Intervalos"
+ },
+ "intervalsChart": {
+ "message": "Sólo los intervalos de tiempo superiores a",
+ "description": "se muestran"
+ },
+ "completelyBlocked": {
+ "message": "Completamente bloqueado",
+ "description": "Completamente bloqueado"
+ },
+ "tryMyOtherApps": {
+ "message": "Pruebe mis otras aplicaciones"
+ },
+ "clearYoutube": {
+ "message": "Clean YouTube",
+ "description": "Extensión de Chrome que puede ocultar los cortos de YouTube, los vídeos recomendados, los comentarios, el feed, las recomendaciones de la página de inicio y otras distracciones. Vea YouTube sin distracciones."
+ },
+ "darkTheme": {
+ "message": "Tema oscuro"
+ },
+ "cleanYoutube_promo": {
+ "message": "Prueba nuestra nueva extensión Clean Youtube"
+ },
+ "cleanYoutube_description": {
+ "message": "Te gustaría ocultar cortos, vídeos recomendados, comentarios en YouTube?"
+ },
+ "cleanYoutube_description2": {
+ "message": "Clean Youtube es un bloqueador de contenido de YouTube™."
+ },
+ "cleanYoutube_features": {
+ "message": "Nuestras características:"
+ },
+ "cleanYoutube_features1": {
+ "message": "Modo Limpio - Muestra sólo el reproductor de vídeo en la página"
+ },
+ "cleanYoutube_features2": {
+ "message": "Ocultar cortos, comentarios, vídeos relacionados. Más de 15 opciones."
+ },
+ "cleanYoutube_features3": {
+ "message": "Desactivar reproducción automática"
+ },
+ "cleanYoutube_features4": {
+ "message": "Desactivar tarjetas de fin de pantalla"
+ },
+ "cleanYoutube_features5": {
+ "message": "Modo Blanco y Negro"
+ },
+ "try": {
+ "message": "Pruebe"
+ },
+ "donate":{
+ "message": "Donación"
+ },
+ "enjoy":{
+ "message": "¿Te gusta Web Activity Time Tracker?"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Tracker es una extensión gratuita. Usted me puede apoyar para el desarrollo futuro con cryptocurrency."
+ },
+ "thanks":{
+ "message": "Muchas gracias! 🙏"
+ },
+ "coin":{
+ "message": "Moneda"
+ },
+ "chain":{
+ "message": "Cadena"
+ },
+ "address":{
+ "message": "Dirección"
+ }
+}
diff --git a/src/_locales/ja/messages.json b/src/_locales/ja/messages.json
new file mode 100644
index 0000000..86f408f
--- /dev/null
+++ b/src/_locales/ja/messages.json
@@ -0,0 +1,431 @@
+{
+ "extName": {
+ "message": "ウェブ活動時間トラッカー - ブロックウェブサイト,ポモドーロ&ウ:ェブ分析"
+ },
+ "extDescription": {
+ "message": "あなたのウェブ活動の時間を追跡し,制限し,気が散るウェブサイトをブロックします。あなたのウェブ利用を監視します。"
+ },
+ "settings": {
+ "message": "設定"
+ },
+ "today": {
+ "message": "今日"
+ },
+ "allTime": {
+ "message": "合計時間"
+ },
+ "byDays": {
+ "message": "毎日"
+ },
+ "noData": {
+ "message": "データなし"
+ },
+ "noDataForPeriod": {
+ "message": "選択された期間のデータがありません"
+ },
+ "showAll": {
+ "message": "すべてのウェブサイトを表示"
+ },
+ "sortBy": {
+ "message": "ソート順"
+ },
+ "usageTime": {
+ "message": "使用時間"
+ },
+ "session": {
+ "message": "セッション"
+ },
+ "someSession": {
+ "message": "セッション"
+ },
+ "sessions": {
+ "message": "セッション"
+ },
+ "days": {
+ "message": "日数"
+ },
+ "aggregate": {
+ "message": "からの集計データ"
+ },
+ "websites": {
+ "message": "ウェブサイト"
+ },
+ "cannotOpenFile": {
+ "message": "セキュリティ・プロトコルのため,ローカル・ファイルを開けません。"
+ },
+ "docmument": {
+ "message": "ドキュメント"
+ },
+ "limit": {
+ "message": "リミット"
+ },
+ "d": {
+ "message": "d"
+ },
+ "h": {
+ "message": "h"
+ },
+ "m": {
+ "message": "m"
+ },
+ "s": {
+ "message": "s"
+ },
+ "firstActiveDay": {
+ "message": "最初の活動日"
+ },
+ "numberOfActiveDays": {
+ "message": "アクティブな日数"
+ },
+ "totalNumberOfDays": {
+ "message": "合計日数"
+ },
+ "todayTime": {
+ "message": "今日のすべての時間"
+ },
+ "averageTime": {
+ "message": "アクティブな日の平均時間"
+ },
+ "averageDailyUsage": {
+ "message": "1日の平均使用量"
+ },
+ "mostActiveDay": {
+ "message": "最もアクティブな日"
+ },
+ "mostInactiveDay": {
+ "message": "最もアクティブでない日"
+ },
+ "todayInclude": {
+ "message": "今日は統計に含まれます。除外するにはクリックしてください。"
+ },
+ "todayEcclude": {
+ "message": "今日は統計から除外されています。クリックすると含まれます。"
+ },
+ "averageTimeByDays": {
+ "message": "選択した日の平均時間"
+ },
+ "exportToCsv": {
+ "message": "CSVにエクスポート"
+ },
+ "week": {
+ "message": "今週"
+ },
+ "month": {
+ "message": "今月"
+ },
+ "lastMonth": {
+ "message": "今月"
+ },
+ "generalSettings": {
+ "message": "設定"
+ },
+ "whiteListSettings": {
+ "message": "ホワイトリスト"
+ },
+ "limitsSettings": {
+ "message": "制限"
+ },
+ "notificationsSettings": {
+ "message": "通知"
+ },
+ "pomodoroMode": {
+ "message": "ポモドーロ"
+ },
+ "pomodoroSettings": {
+ "message": "ポモドーロ設定"
+ },
+ "pomodoro": {
+ "message": "ポモドーロ",
+ "description": "ポモドーロ法は,集中した作業と休息を交互に繰り返すことに基づく時間管理手法である。ポモドーロ法の古典によれば,作業時間は25分,休憩時間は5分である。"
+ },
+ "pomodoroExplanationIcon": {
+ "message": "ポモドーロモードがオンで,操作モードがアクティブなとき,このアイコンを見ることができます,",
+ "description": "休憩時間中は,この拡張アイコンが表示されます"
+ },
+ "pomodoroExplanationTime": {
+ "message": "ポモドーロモードの間,エクステンションはサイトに費やした時間を考慮し続け,すべての制限と通知作業を行います。"
+ },
+ "pomodoroExplanationStop": {
+ "message": "停止」をクリックすると、作業時間と休憩時間はゼロにリセットされる。"
+ },
+ "pomodoroWork": {
+ "message": "仕事の期間"
+ },
+ "pomodoroRest": {
+ "message": "休息期間"
+ },
+ "pomodoroFrequency": {
+ "message": "繰り返し回数"
+ },
+ "start": {
+ "message": "実行"
+ },
+ "stop": {
+ "message": "停止"
+ },
+ "pomodoroIsEnabled": {
+ "message": "ポモドーロモードは有効です"
+ },
+ "pomodoroSoundAfter": {
+ "message": "期間終了後の音"
+ },
+ "clickToPreview": {
+ "message": "クリックで試聴"
+ },
+ "sound": {
+ "message": "サウンド"
+ },
+ "aboutSettings": {
+ "message": "について"
+ },
+ "viewTimeInBadge": {
+ "message": "アイコンにタイムトラッカーを表示する,",
+ "description": "拡張機能アイコンをクリックすると、現在の「滞在時間」情報を短いフォーマットで見ることができます。"
+ },
+ "deferringDescription": {
+ "message": "一日のうち一度だけ,5分間だけブロック時間を延期することができます。"
+ },
+ "allowDeferringBlock": {
+ "message": "5分間のブロック延期を許可",
+ "description": "サイトがブロックされた後,一度だけ日中5分間ブロックを延期できる"
+ },
+ "intervalInactivity": {
+ "message": "のアクションがない場合,トラッカーを停止します,",
+ "description": "マウスやキーボードによるアクション"
+ },
+ "exportToCsvSetting": {
+ "message": "WebアクティビティデータをCSVにエクスポートします,",
+ "説明": "任意の日付範囲のウェブ活動をエクスポートできます。"
+ },
+ "sec": {
+ "message": "秒"
+ },
+ "min": {
+ "message": "分"
+ },
+ "2min": {
+ "message": "分"
+ },
+ "mins": {
+ "message": "分"
+ },
+ "whiteList": {
+ "message": "これらのウェブサイトのアクティビティと滞在時間は追跡されません。"
+ },
+ "addWebsite": {
+ "message": "ウェブサイトを追加"
+ },
+ "enterWebsite": {
+ "message": "ウェブサイト名を入力してください..."
+ },
+ "enterNotification": {
+ "message": "通知messageを入力..."
+ },
+ "limits": {
+ "message": "ウェブサイトの毎日のアクセス制限",
+ "description": "1日にウェブサイトにアクセスできる最大時間を設定します。この時間を過ぎると,サイトはブロックされます。"
+ },
+ "limitsTip": {
+ "message": "ブロック時間を0時間0分に設定した場合,ウェブサイトは直ちにブロックされます。"
+ },
+ "save": {
+ "message": "保存"
+ },
+ "showDailyNotification": {
+ "message": "デイリーサマリー通知",
+ "description": "一日の終わりに,一日の使用量を要約した通知を受け取ります"
+ },
+ "notificationTime": {
+ "message": "ウェブサイトの通知",
+ "description": "選択した時間をウェブサイトに費やすたびに通知を表示する"
+ },
+ "notificationMessage": {
+ "message": "通知メッセージ",
+ "description": "ウェブサイトの通知で毎回このmessageが表示されます"
+ },
+ "notificationTimeSetting": {
+ "message": "1日の利用状況についてのサマリー情報を通知時間に表示"
+ },
+ "github": {
+ "message": "ご意見をお寄せください。"
+ },
+ "question": {
+ "message": "質問や提案を残すこともできます。"
+ },
+ "supportForm": {
+ "message": "サポートフォーム"
+ },
+ "doYouEnjoy": {
+ "message": "Web Activity Time Trackerを楽しんでいますか?"
+ },
+ "review": {
+ "message": "レビューを書く"
+ },
+ "promoClearYoutube": {
+ "message": "ショートフィルム,コメント,おすすめ動画,購読,その他のYouTubeの邪魔なものをブロックしたいですか?気晴らしにYouTubeを見るのに役立つ別の拡張機能を作りました。",
+ "description": "クリーンユーチューブを試す"
+ },
+ "block": {
+ "message": "で今日の制限に達した。"
+ },
+ "5mins": {
+ "message": "+5分"
+ },
+ "todayUsageTime": {
+ "message": "今日の総使用時間"
+ },
+ "comparedToYesterday": {
+ "message": " 昨日との比較 "
+ },
+ "mostVisited": {
+ "message": "最も訪問されたウェブサイト"
+ },
+ "dashboard": {
+ "message": "ダッシュボード"
+ },
+ "timeChartDescription": {
+ "message": "日中の時間を時間単位で表したチャートです"
+ },
+ "enjoyAndReview": {
+ "message": "エクステンションを楽しんでいますか?",
+ "description": "ウェブ活動時間トラッカーを評価する"
+ },
+ "removeAllData": {
+ "message": "すべてのデータを削除する,",
+ "description": "訪問したウェブサイトのすべてのデータと統計情報を削除することができます。"
+ },
+ "remove": {
+ "message": "削除"
+ },
+ "removeAllDataConfirm": {
+ "message": "本当に全データを削除しますか?"
+ },
+ "cancel": {
+ "message": "キャンセル"
+ },
+ "backupAndRestore": {
+ "message": "バックアップとリストア",
+ "説明": "訪問したすべてのサイトのすべてのデータのバックアップコピーをダウンロードすることができます。"
+ },
+ "backup": {
+ "message": "バックアップ"
+ },
+ "restore": {
+ "message": "リストア"
+ },
+ "welcome": {
+ "message": "Web Activity Time Trackerへようこそ",
+ "description": "Web Activity Time Trackerは、オープンソース、無料、広告なしの拡張機能で、ウェブサイトの閲覧に費やした時間や訪問回数を記録することができます。"
+ },
+ "getStarted": {
+ "message": "スタート"
+ },
+ "welcomeStart": {
+ "message": "簡単な3ステップで、すぐに拡張機能を使い始めることができます。"
+ },
+ "pinIcon": {
+ "message": "アイコンをピン留めする"
+ },
+ "pinIconPart1": {
+ "message": "この拡張機能をより便利に使用するには、アイコンをツールバーに固定します。アイコンをクリック"
+ },
+ "pinIconPart2": {
+ "message": "をクリックし、ピンのアイコンをクリックします。"
+ },
+ "browse": {
+ "message": "任意のウェブサイトをブラウズする,",
+ "description": "ウェブサイトにアクセスすると,アイコンに時刻が表示されます。"
+ },
+ "seeData": {
+ "message": "ポップアップページとダッシュボードでデータを見る",
+ "description": "拡張機能のアイコンをクリックすると,ポップアップページが開き,円グラフを使って視覚化されたデータを,今日,すべての時間,または日ごとに読むことができます。ポップアップウィンドウでは,ダッシュボードを開くことができ,時計で今日の時間を表示します。また,任意のウェブサイトに対して1日の時間制限を設定したり,ウェブサイトに対する通知を設定したり,データをCSVにエクスポートしたりすることができます。"
+ },
+ "close": {
+ "message": "閉じる"
+ },
+ "useExtension": {
+ "message": "拡張機能を使用する"
+ },
+ "next": {
+ "message": "次"
+ },
+ "showChangelog": {
+ "message": "変更履歴を表示",
+ "description": "エクステンションの更新後に変更点の一覧を表示する"
+ },
+ "byHours": {
+ "message": "時間単位"
+ },
+ "interval": {
+ "message": "間隔"
+ },
+ "intervalsChart": {
+ "message": "より大きい時間間隔のみ",
+ "description": "が表示される。"
+ },
+ "completelyBlocked": {
+ "message": "完全にブロックされました,",
+ "description": "完全にブロック"
+ },
+ "tryMyOtherApps": {
+ "message": "他のアプリを試す"
+ },
+ "clearYoutube": {
+ "message": "YouTubeをクリーン",
+ "description": "YouTubeのショートムービー,おすすめビデオ,コメント,フィード,ホームページのおすすめやその他の邪魔なものを隠すことができるChrome拡張機能です。気晴らしにYouTubeを見よう。"
+ },
+ "darkTheme": {
+ "message": "ダークテーマ"
+ },
+ "cleanYoutube_promo": {
+ "message": "新しい拡張機能Clean Youtubeをお試しください"
+ },
+ "cleanYoutube_description": {
+ "message": "YouTubeのショートフィルム,おすすめ動画,コメントを非表示にしますか?"
+ },
+ "cleanYoutube_description2": {
+ "message": "クリーンYoutubeはYouTube™コンテンツブロッカーです。"
+ },
+ "cleanYoutube_features": {
+ "message": "私たちの機能:"
+ },
+ "cleanYoutube_features1": {
+ "message": "クリーンモード - ページに動画プレーヤーのみを表示"
+ },
+ "cleanYoutube_features2": {
+ "message": "ショートカット、コメント、関連ビデオを隠す。15以上のオプション"
+ },
+ "cleanYoutube_features3": {
+ "message": "自動再生を無効にする"
+ },
+ "cleanYoutube_features4": {
+ "message": "終了画面カードを無効にする"
+ },
+ "cleanYoutube_features5": {
+ "message": "白黒モード"
+ },
+ "try": {
+ "message": "トライ"
+ },
+ "donate": {
+ "message": "寄付する"
+ },
+ "enjoy":{
+ "message": "Web Activity Time Trackerを楽しんでいますか?"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Trackerは無料の拡張機能です。さらなる開発のために、暗号通貨でご支援ください。"
+ },
+ "thanks":{
+ "message": "ありがとうございます! 🙏"
+ },
+ "coin":{
+ "message": "コイン"
+ },
+ "chain":{
+ "message": "チェーン"
+ },
+ "address":{
+ "message": "アドレス"
+ }
+}
diff --git a/src/_locales/ru/messages.json b/src/_locales/ru/messages.json
new file mode 100644
index 0000000..29768c3
--- /dev/null
+++ b/src/_locales/ru/messages.json
@@ -0,0 +1,432 @@
+{
+ "extName": {
+ "message": "Web Activity Time Tracker - Блокировка сайтов, Pomodoro и \u0412\u0435\u0431 аналитика"
+ },
+ "extDescription": {
+ "message": "Отслеживайте время вашей веб-активности и блокируйте отвлекающие сайты. Следите за тем, сколько времени вы проводите на сайтах."
+ },
+ "settings": {
+ "message": "Настройки"
+ },
+ "today": {
+ "message": "Сегодня"
+ },
+ "allTime": {
+ "message": "\u0417\u0430 все время"
+ },
+ "byDays": {
+ "message": "По дням"
+ },
+ "noData": {
+ "message": "Нет данных"
+ },
+ "noDataForPeriod": {
+ "message": "Нет данных за выбранный период"
+ },
+ "showAll": {
+ "message": "Показать все сайты"
+ },
+ "sortBy": {
+ "message": "Сортировать по"
+ },
+ "usageTime": {
+ "message": "Время использования"
+ },
+ "session": {
+ "message": "сессия"
+ },
+ "someSession": {
+ "message": "сессий"
+ },
+ "sessions": {
+ "message": "Сессии"
+ },
+ "days": {
+ "message": "дней"
+ },
+ "aggregate": {
+ "message": "Данные \u0441 "
+ },
+ "websites": {
+ "message": "сайтов"
+ },
+ "cannotOpenFile": {
+ "message": "Вы не можете открыть локальный файл из-за правил безопасности"
+ },
+ "document": {
+ "message": "Документ"
+ },
+ "limit": {
+ "message": "Лимит"
+ },
+ "d": {
+ "message": "д"
+ },
+ "h": {
+ "message": "ч"
+ },
+ "m": {
+ "message": "мин"
+ },
+ "s": {
+ "message": "\u0441\u0435к"
+ },
+ "firstActiveDay": {
+ "message": "Первый активный день"
+ },
+ "numberOfActiveDays": {
+ "message": "\u0412\u0441\u0435\u0433\u043E активных дней"
+ },
+ "totalNumberOfDays": {
+ "message": "\u0412\u0441\u0435\u0433\u043E дней"
+ },
+ "todayTime": {
+ "message": "Общее время сегодня"
+ },
+ "averageTime": {
+ "message": "Среднее время по активным дням"
+ },
+ "averageDailyUsage": {
+ "message": "Среднее ежедневное использование"
+ },
+ "mostActiveDay": {
+ "message": "Самый активный день"
+ },
+ "mostInactiveDay": {
+ "message": "Самый неактивный день"
+ },
+ "todayInclude": {
+ "message": "Сегодняшний день включен в статистику. Нажмите, если хотите исключить из статистики."
+ },
+ "todayEcclude": {
+ "message": "Сегодняшний день исключен из статистику. Нажмите, если хотите включить в статистику."
+ },
+ "averageTimeByDays": {
+ "message": "Среднее время по выбранным дням"
+ },
+ "exportToCsv": {
+ "message": "Экспортировать в CSV"
+ },
+ "week": {
+ "message": "Эта неделя"
+ },
+ "month": {
+ "message": "Этот месяц"
+ },
+ "lastMonth": {
+ "message": "Последний месяц"
+ },
+ "generalSettings": {
+ "message": "Настройки"
+ },
+ "whiteListSettings": {
+ "message": "Белый список"
+ },
+ "limitsSettings": {
+ "message": "Лимиты"
+ },
+ "notificationsSettings": {
+ "message": "Уведомления"
+ },
+ "pomodoroMode": {
+ "message": "Pomodoro"
+ },
+ "pomodoroSettings": {
+ "message": "Настройки Pomodoro"
+ },
+ "pomodoro": {
+ "message": "Pomodoro",
+ "description": "Метод Pomodoro — это техника тайм-менеджмента, завязанная на чередовании периодов сфокусированной работы и отдыха. По классике метода помодоро период работы длится 25 минут, период отдыха 5 минут."
+ },
+ "pomodoroExplanationIcon": {
+ "message": "Когда режим Pomodoro включен и активен режим работы, то вы будете видеть эту иконку",
+ "description": "В периоды отдыха вы будете видеть эту иконку расширения"
+ },
+ "pomodoroExplanationTime": {
+ "message": "Во время режима Pomodoro, расширение продолжает учитывать время, которые вы провели на сайтах,работают все лимиты и уведомления."
+ },
+ "pomodoroExplanationStop": {
+ "message": "После нажатия 'Остановить', время работы и отдыха обнуляется."
+ },
+ "pomodoroWork": {
+ "message": "Период работы"
+ },
+ "pomodoroRest": {
+ "message": "Период отдыха"
+ },
+ "pomodoroFrequency": {
+ "message": "Количество повторов"
+ },
+ "start": {
+ "message": "Запустить"
+ },
+ "stop": {
+ "message": "Остановить"
+ },
+ "pomodoroIsEnabled": {
+ "message": "Режим Pomodoro включен"
+ },
+ "pomodoroSoundAfter": {
+ "message": "Воспроизведение после завершения периода"
+ },
+ "clickToPreview": {
+ "message": "Нажмите для прослушивания"
+ },
+ "sound": {
+ "message": "Мелодия"
+ },
+ "aboutSettings": {
+ "message": "\u041E программе"
+ },
+ "viewTimeInBadge": {
+ "message": "Показывать индикатор времени",
+ "description": "Вы можете увидеть текущее затраченное время в сокращенном формате на значке расширения"
+ },
+ "deferringDescription": {
+ "message": "Вы можете отложить блокировку на 5 минут только один раз в течение дня"
+ },
+ "allowDeferringBlock": {
+ "message": "Разрешить отсрочку блокировки на 5 минут",
+ "description": "После того, как сайт будет заблокирован, вы можете один раз в течение дня отложить блокировку на 5 минут"
+ },
+ "intervalInactivity": {
+ "message": "Остановить трекер, если нет никаких действий в течение:",
+ "description": "Это любые действия \u0441 помощью мыши или клавиатуры"
+ },
+ "exportToCsvSetting": {
+ "message": "Экспорт данных вашей веб-активности в формат CSV",
+ "description": "Вы можете экспортировать свою веб-активность для любого диапазона дат"
+ },
+ "sec": {
+ "message": "секунд"
+ },
+ "min": {
+ "message": "минута"
+ },
+ "2min": {
+ "message": "минуты"
+ },
+ "mins": {
+ "message": "минут"
+ },
+ "whiteList": {
+ "message": "Активность и время для этих сайтов отслеживаться не будут"
+ },
+ "addWebsite": {
+ "message": "Добавить сайт"
+ },
+ "enterWebsite": {
+ "message": "Введите сайт..."
+ },
+ "enterNotification": {
+ "message": "Введите текст уведомления..."
+ },
+ "limits": {
+ "message": "Ежедневные ограничения доступа к сайтам",
+ "description": "Установите максимальное время, разрешенное для посещения сайта в день. По истечении этого времени сайт будет заблокирован."
+ },
+ "limitsTip": {
+ "message": "Если вы установите время блокировки на 0 часов 0 минут, сайт будет немедленно заблокирован"
+ },
+ "save": {
+ "message": "Сохранить"
+ },
+ "showDailyNotification": {
+ "message": "Ежедневные итоговые уведомления",
+ "description": "\u0412 конце каждого дня вы будете получать уведомление \u0441 краткой информацией \u043E вашем ежедневном использовании"
+ },
+ "notificationTimeSetting": {
+ "message": "Время показа уведомления \u0441 краткой информацией \u043E вашем ежедневном использовании"
+ },
+ "notificationTime": {
+ "message": "Уведомления для сайтов",
+ "description": "Показывать уведомления каждый раз, когда вы проводите указанный период времени на сайте"
+ },
+ "notificationMessage": {
+ "message": "Текст уведомления",
+ "description": "Вы будете видеть это сообщение в уведомлении для сайтов"
+ },
+ "github": {
+ "message": "Если \u0443 вас есть вопрос или вы хотели бы сообщить \u043E проблеме, вы можете сделать это на"
+ },
+ "question": {
+ "message": "Также вы можете задать вопросы или оставить свои предложения "
+ },
+ "supportForm": {
+ "message": "поддержка"
+ },
+ "doYouEnjoy": {
+ "message": "Вам нравится Web Activity Time Tracker?"
+ },
+ "review": {
+ "message": "Оставьте отзыв!"
+ },
+ "block": {
+ "message": "Вы достигли лимита использования сегодня на "
+ },
+ "5mins": {
+ "message": "+ 5 минут"
+ },
+ "todayUsageTime": {
+ "message": "Общее время использования на сегодняшний день "
+ },
+ "comparedToYesterday": {
+ "message": " по сравнению \u0441\u043e вчерашним днем "
+ },
+ "mostVisited": {
+ "message": "Самый посещаемый сайт "
+ },
+ "dashboard": {
+ "message": "Дашборд"
+ },
+ "timeChartDescription": {
+ "message": "Это график времени в течение дня по часам"
+ },
+ "enjoyAndReview": {
+ "message": "Вам нравится расширение?",
+ "description": "Оцените Web Activity Time Tracker"
+ },
+ "promoClearYoutube": {
+ "message": "Хотели бы вы блокировать шортсы, комментарии, рекомендованные видео, подписки и другие отвлекающие элементы YouTube? Мы создали еще одно расширение, которое поможет вам смотреть YouTube без отвлекающих факторов.",
+ "description": "Попробовать Clean YouTube"
+ },
+ "removeAllData": {
+ "message": "Удалить все данные",
+ "description": "Вы можете удалить все данные и статистику посещенных сайтов за все время"
+ },
+ "remove": {
+ "message": "Удалить"
+ },
+ "removeAllDataConfirm": {
+ "message": "Вы уверены, что хотите удалить все данные, включая статистику посещенных сайтов?"
+ },
+ "cancel": {
+ "message": "Отмена"
+ },
+ "backupAndRestore": {
+ "message": "Резервное копирование и восстановление",
+ "description": "Вы можете скачать резервную копию всех данных по всем посещенным сайтам"
+ },
+ "backup": {
+ "message": "Скачать резервную копию"
+ },
+ "restore": {
+ "message": "Восстановить из резервной копиии"
+ },
+ "welcome": {
+ "message": "Добро пожаловать в Web Activity Time Tracker",
+ "description": "Web Activity Time Tracker это бесплатное, без рекламы и \u0441 открытым исходным кодом расширение, которое поможем вам отслеживать время, потраченное вами на просмотр веб-сайтов, и покажет количество посещений."
+ },
+ "getStarted": {
+ "message": "Руководство"
+ },
+ "welcomeStart": {
+ "message": "Вы можете быстро начать использовать расширение всего за 3 простых шага"
+ },
+ "pinIcon": {
+ "message": "Закрепите значок"
+ },
+ "pinIconPart1": {
+ "message": "Чтобы более удобно использовать это расширение, вы можете прикрепить значок к панели инструментов. Нажмите на значок"
+ },
+ "pinIconPart2": {
+ "message": "и затем нажмите на значок закрепления"
+ },
+ "browse": {
+ "message": "Просматривайте любые веб-сайты",
+ "description": "При посещении любого веб-сайта вы увидите, что время отображается на значке, точно так же, как здесь"
+ },
+ "seeData": {
+ "message": "Просматривайте ваши данные на всплывающей странице и на панели мониторинга",
+ "description": "Нажмите на значок расширения, чтобы открыть всплывающую страницу, и вы сможете увидеть данные посещения сайтов за сегодня, за все время и по дням. Во всплывающем окне вы можете открыть панель мониторинга, и вы увидите сегодняшнее время по часам. Там же вы можете установить ежедневное ограничение по времени для любых веб-сайтов, уведомления для веб-сайтов или экспортировать данные в CSV."
+ },
+ "close": {
+ "message": "Закрыть"
+ },
+ "useExtension": {
+ "message": "Начать пользоваться"
+ },
+ "next": {
+ "message": "Продолжить"
+ },
+ "showChangelog": {
+ "message": "Показывать список изменений",
+ "description": "Показывать список изменений после обновления расширения"
+ },
+ "byHours": {
+ "message": "По часам"
+ },
+ "intervals": {
+ "message": "Интервалы",
+ "description": "Отображаются только временные интервалы, превышающие 5 секунд"
+ },
+ "intervalsChart": {
+ "message": "Отображаются только временные интервалы, превышающие",
+ "description": ""
+ },
+ "completelyBlocked": {
+ "message": "Полностью заблокирован",
+ "description": "Полностью заблокировать"
+ },
+ "tryMyOtherApps": {
+ "message": "Попробуйте другие мои приложения"
+ },
+ "clearYoutube": {
+ "message": "Clean YouTube",
+ "description": "Расширение для Chrome, которое может скрывать шортс YouTube, рекомендуемые видео, комментарии, ленту новостей, рекомендации по домашней странице и другие отвлекающие факторы. Смотрите YouTube без отвлекающих факторов."
+ },
+ "darkTheme": {
+ "message": "Темная тема"
+ },
+ "cleanYoutube_promo": {
+ "message": "Попробуйте наше новое расширение Clean Youtube"
+ },
+ "cleanYoutube_description": {
+ "message": "Хотите скрыть шортсы, рекомендуемые видео, комментарии на YouTube?"
+ },
+ "cleanYoutube_description2": {
+ "message": "Clean Youtube - это блокировщик контента YouTube™."
+ },
+ "cleanYoutube_features": {
+ "message": "Наши возможности:"
+ },
+ "cleanYoutube_features1": {
+ "message": "Clean Mode - покажите только видеоплеер на странице"
+ },
+ "cleanYoutube_features2": {
+ "message": "Скрыть шортсы, комментарии, связанные видео. 15+ опций."
+ },
+ "cleanYoutube_features3": {
+ "message": "Отключить автовоспроизведение"
+ },
+ "cleanYoutube_features4": {
+ "message": "Отключить карточки в конце видео"
+ },
+ "cleanYoutube_features5": {
+ "message": "Черно-белый режим"
+ },
+ "try": {
+ "message": "Попробовать"
+ },
+ "donate":{
+ "message": "Donate"
+ },
+ "enjoy":{
+ "message": "Нравится ли вам Web Activity Time Tracker?"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Tracker - это бесплатное расширение. Вы можете поддержать меня для дальнейшего развития с помощью криптовалюты."
+ },
+ "thanks":{
+ "message": "Спасибо! 🙏"
+ },
+ "coin":{
+ "message": "Монета"
+ },
+ "chain":{
+ "message": "Цепочка"
+ },
+ "address":{
+ "message": "Адрес"
+ }
+}
diff --git a/src/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json
new file mode 100644
index 0000000..673e348
--- /dev/null
+++ b/src/_locales/zh_CN/messages.json
@@ -0,0 +1,431 @@
+{
+ "extName": {
+ "message": "Web Activity Time Tracker - 封鎖網站、Pomodoro 與網頁分析"
+ },
+ "extDescription": {
+ "message": "追踪和限制您的网站活动时间,并阻止访问网站。监控您的网站使用情况"
+ },
+ "settings": {
+ "message": "设置"
+ },
+ "today": {
+ "message": "今天"
+ },
+ "allTime": {
+ "message": "总时间"
+ },
+ "byDays": {
+ "message": "每天"
+ },
+ "noData": {
+ "message": "无数据"
+ },
+ "noDataForPeriod": {
+ "message": "所选时间段内无数据"
+ },
+ "showAll": {
+ "message": "显示所有网站"
+ },
+ "sortBy": {
+ "message": "排序"
+ },
+ "usageTime": {
+ "message": "使用时间"
+ },
+ "session": {
+ "message": "会话"
+ },
+ "someSession": {
+ "message": "会话"
+ },
+ "sessions": {
+ "message": "会话"
+ },
+ "days": {
+ "message": "天"
+ },
+ "aggregate": {
+ "message": "汇总数据自"
+ },
+ "websites": {
+ "message": "网站"
+ },
+ "cannotOpenFile": {
+ "message": "由于安全协议,您无法打开本地文件"
+ },
+ "document": {
+ "message": "文件"
+ },
+ "limit": {
+ "message": "限制"
+ },
+ "d": {
+ "message": "d"
+ },
+ "h": {
+ "message": "h"
+ },
+ "m": {
+ "message": "m"
+ },
+ "s": {
+ "message": "s"
+ },
+ "firstActiveDay": {
+ "message": "第一个活动日"
+ },
+ "numberOfActiveDays": {
+ "message": "活动天数"
+ },
+ "totalNumberOfDays": {
+ "message": "总天数"
+ },
+ "todayTime": {
+ "message": "今天所有的时间"
+ },
+ "averageTime": {
+ "message": "活动日的平均时间"
+ },
+ "averageDailyUsage": {
+ "message": "平均每日使用量"
+ },
+ "mostActiveDay": {
+ "message": "最活跃的一天"
+ },
+ "mostInactiveDay": {
+ "message": "最不活跃的一天"
+ },
+ "todayInclude": {
+ "message": "今天包含在统计数据中。点击以排除。"
+ },
+ "todayEcclude": {
+ "message": "今天不包含在统计数据中。点击以包含。"
+ },
+ "averageTimeByDays": {
+ "message": "所选日期的平均时间"
+ },
+ "exportToCsv": {
+ "message": "导出 CSV"
+ },
+ "week": {
+ "message": "本周"
+ },
+ "month": {
+ "message": "本月"
+ },
+ "lastMonth": {
+ "message": "上月"
+ },
+ "generalSettings": {
+ "message": "设置"
+ },
+ "whiteListSettings": {
+ "message": "白名单"
+ },
+ "limitsSettings": {
+ "message": "限制"
+ },
+ "notificationsSettings": {
+ "message": "通知"
+ },
+ "pomodoroMode": {
+ "message": "Pomodoro"
+ },
+ "pomodoroSettings": {
+ "message": "Pomodoro 设置"
+ },
+ "pomodoro": {
+ "message": "Pomodoro",
+ "description": "Pomodoro 工作法是一种时间管理技术,以交替集中工作和休息为基础。根据经典的 Pomodoro 方法,工作时间为 25 分钟,休息时间为 5 分钟。"
+ },
+ "pomodoroExplanationIcon": {
+ "message": "启用 Pomodoro 模式并激活操作模式后,您将看到以下图标",
+ "description": "在休息时间,您会看到这个扩展图标"
+ },
+ "pomodoroExplanationTime": {
+ "message": "在 Pomodoro 模式下,扩展会继续考虑你在网站上花费的时间、所有限制和通知。"
+ },
+ "pomodoroExplanationStop": {
+ "message": "按下 '停止' 键后,运行时间和休息时间将重置为零"
+ },
+ "pomodoroWork": {
+ "message": "工作期限"
+ },
+ "pomodoroRest": {
+ "message": "休息时间"
+ },
+ "pomodoroFrequency": {
+ "message": "重复次数"
+ },
+ "start": {
+ "message": "启动"
+ },
+ "stop": {
+ "message": "停止"
+ },
+ "pomodoroIsEnabled": {
+ "message": "番茄钟模式已启用"
+ },
+ "pomodoroSoundAfter": {
+ "message": "完整时段后的声音"
+ },
+ "clickToPreview": {
+ "message": "点击收听"
+ },
+ "sound": {
+ "message": "声音"
+ },
+ "aboutSettings": {
+ "message": "关于"
+ },
+ "viewTimeInBadge": {
+ "message": "在图标中显示时间跟踪器",
+ "description": "您可以在扩展程序图标上以简短格式查看当前的“花费时间”信息。"
+ },
+ "deferringDescription": {
+ "message": "您一天只能将拦截推迟 5 分钟一次。"
+ },
+ "allowDeferringBlock": {
+ "message": "允许推迟拦截 5 分钟",
+ "description": "站点被拦截后,您一天中只能将拦截推迟 5 分钟一次。"
+ },
+ "intervalInactivity": {
+ "message": "如果没有操作,则停止跟踪器:",
+ "description": "可以是使用鼠标或键盘进行的任何操作"
+ },
+ "exportToCsvSetting": {
+ "message": "将您的网站活动数据导出为 CSV 格式",
+ "description": "您可以导出任何日期范围内的网站活动。"
+ },
+ "sec": {
+ "message": "秒"
+ },
+ "min": {
+ "message": "分钟"
+ },
+ "2min": {
+ "message": "分钟"
+ },
+ "mins": {
+ "message": "分钟"
+ },
+ "whiteList": {
+ "message": "这些网站的活动和花费时间将不会被跟踪。"
+ },
+ "addWebsite": {
+ "message": "添加网站"
+ },
+ "enterWebsite": {
+ "message": "输入网站名称..."
+ },
+ "enterNotification": {
+ "message": "输入通知消息..."
+ },
+ "limits": {
+ "message": "网站的每日访问限制",
+ "description": "设置每天允许访问网站的最长时间。超过此时间后,该网站将被拦截。"
+ },
+ "limitsTip": {
+ "message": "如果您将拦截时间设置为 0 小时 0 分钟,那么该网站将立即被拦截。"
+ },
+ "save": {
+ "message": "保存"
+ },
+ "showDailyNotification": {
+ "message": "每日摘要通知",
+ "description": "每天结束时,您将收到一条通知,其中包含您的每日使用情况摘要。"
+ },
+ "notificationTime": {
+ "message": "网站通知",
+ "description": "每次在网站上花费特定时间时显示通知。"
+ },
+ "notificationMessage": {
+ "message": "通知消息",
+ "description": "每次在网站通知中,您都会看到这条消息。"
+ },
+ "notificationTimeSetting": {
+ "message": "包含有关您日常使用情况的摘要信息的通知时间:"
+ },
+ "github": {
+ "message": "在以下位置留下您的反馈或报告问题:"
+ },
+ "question": {
+ "message": "您还可以提问并留下您的建议。"
+ },
+ "supportForm": {
+ "message": "支持表单"
+ },
+ "doYouEnjoy": {
+ "message": "您喜欢 Web Activity Time Tracker 吗?"
+ },
+ "review": {
+ "message": "留下评论吧!"
+ },
+ "block": {
+ "message": "您今天已达到限制在 "
+ },
+ "5mins": {
+ "message": "再加 5 分钟"
+ },
+ "todayUsageTime": {
+ "message": "今天的总使用时间"
+ },
+ "comparedToYesterday": {
+ "message": " 与昨天相比 "
+ },
+ "mostVisited": {
+ "message": "访问最多的网站 "
+ },
+ "dashboard": {
+ "message": "仪表板"
+ },
+ "timeChartDescription": {
+ "message": "这是按小时显示一天时间的图表。"
+ },
+ "enjoyAndReview": {
+ "message": "喜欢这个扩展程序吗?",
+ "description": "给 Web Activity Time Tracker 评分"
+ },
+ "removeAllData": {
+ "message": "删除所有数据",
+ "description": "您可以删除所有访问过网站的所有数据和统计信息。"
+ },
+ "remove": {
+ "message": "删除"
+ },
+ "removeAllDataConfirm": {
+ "message": "您确定要删除所有数据吗?"
+ },
+ "cancel": {
+ "message": "取消"
+ },
+ "backupAndRestore": {
+ "message": "备份和恢复",
+ "description": "您可以下载所有访问过网站的所有数据的备份副本。"
+ },
+ "backup": {
+ "message": "备份"
+ },
+ "restore": {
+ "message": "恢复"
+ },
+ "welcome": {
+ "message": "欢迎使用 Web Activity Time Tracker",
+ "description": "Web Activity Time Tracker 是一款开源、免费且无广告的扩展程序,它可以帮助您跟踪在浏览网站上花费的时间和访问次数。"
+ },
+ "getStarted": {
+ "message": "开始使用"
+ },
+ "welcomeStart": {
+ "message": "您可以通过三个简单的步骤快速开始使用扩展程序:"
+ },
+ "pinIcon": {
+ "message": "固定图标"
+ },
+ "pinIconPart1": {
+ "message": "为了更方便地使用此扩展程序,您可以将图标固定到工具栏上。点击图标:"
+ },
+ "pinIconPart2": {
+ "message": "然后点击固定图标。"
+ },
+ "browse": {
+ "message": "浏览任何网站",
+ "description": "当您访问任何网站时,您会看到时间显示在图标上,就像这里一样:"
+ },
+ "seeData": {
+ "message": "在弹出页面和仪表板上查看您的数据",
+ "description": "点击扩展图标以打开弹出页面,您将能够使用饼图读取数据可视化信息,包括今天、所有时间或按天分类。在弹出窗口中,您可以打开仪表板,它将按时钟显示您今天的时间。您还可以为任何网站设置每日时间限制、网站通知或导出数据到 CSV。"
+ },
+ "close": {
+ "message": "关闭"
+ },
+ "useExtension": {
+ "message": "使用扩展程序"
+ },
+ "next": {
+ "message": "接下来"
+ },
+ "showChangelog": {
+ "message": "显示更新日志",
+ "description": "显示更新扩展程序后的更改列表"
+ },
+ "byHours": {
+ "message": "每小时"
+ },
+ "intervals": {
+ "message": "时间间隔"
+ },
+ "intervalsChart": {
+ "message": "只有时间间隔大于",
+ "description": "展示"
+ },
+ "promoClearYoutube": {
+ "message": "您想屏蔽短片、评论、推荐视频、订阅和其他 YouTube 干扰内容吗? 我们创建了另一个扩展程序,可帮助您不受干扰地观看 YouTube",
+ "description": "嘗試 Clean YouTube"
+ },
+ "completelyBlocked": {
+ "message": "完全封锁",
+ "description": "完全封锁"
+ },
+ "tryMyOtherApps": {
+ "message": "试试我的其他应用程序"
+ },
+ "clearYoutube": {
+ "message": "Clean YouTube",
+ "description": "Chrome扩展程序,可以隐藏YouTube短片,推荐视频,评论,feed,主页推荐和其他分心。 观看YouTube免费分心。"
+ },
+ "darkTheme": {
+ "message": "黑暗主题"
+ },
+ "cleanYoutube_promo": {
+ "message": "试试我们的新扩展 Clean Youtube"
+ },
+ "cleanYoutube_description": {
+ "message": "想隐藏 YouTube 上的短片、推荐视频和评论?"
+ },
+ "cleanYoutube_description2": {
+ "message": "Clean Youtube 是一款 YouTube™ 内容拦截器。"
+ },
+ "cleanYoutube_features": {
+ "message": "我们的特色"
+ },
+ "cleanYoutube_features1": {
+ "message": "清洁模式--只显示页面上的视频播放器"
+ },
+ "cleanYoutube_features2": {
+ "message": "隐藏短片、评论和相关视频。15+ 个选项。"
+ },
+ "cleanYoutube_features3": {
+ "message": "禁用自动播放"
+ },
+ "cleanYoutube_features4": {
+ "message": "禁用结束屏幕卡片"
+ },
+ "cleanYoutube_features5": {
+ "message": "黑白模式"
+ },
+ "try": {
+ "message": "试用"
+ },
+ "donate":{
+ "message": "捐赠"
+ },
+ "enjoy":{
+ "message": "您喜欢 Web Activity Time Tracker 吗"
+ },
+ "canDonate":{
+ "message": "Web Activity Time Tracker 是永久免费的扩展。您可以使用加密货币支持我进一步开发。"
+ },
+ "thanks":{
+ "message": "谢谢! 🙏"
+ },
+ "coin":{
+ "message": "币"
+ },
+ "chain":{
+ "message": "链"
+ },
+ "address":{
+ "message": "币链地址"
+ }
+}
diff --git a/src/assets/clear-youtube-promo.png b/src/assets/clear-youtube-promo.png
new file mode 100644
index 0000000..e0f07e8
Binary files /dev/null and b/src/assets/clear-youtube-promo.png differ
diff --git a/src/assets/css/dark.css b/src/assets/css/dark.css
new file mode 100644
index 0000000..b976124
--- /dev/null
+++ b/src/assets/css/dark.css
@@ -0,0 +1,91 @@
+.dark{
+ background-color: #303030;
+ color: white;
+}
+.dark .headerBlock .header {
+ color: #ffffff !important;
+}
+.dark .headerBlock .icons-block a:hover{
+ filter: invert(40%) sepia(94%) saturate(3371%) hue-rotate(227deg) brightness(99%) contrast(92%);
+}
+.dark .headerBlock .icons-block a.filter img {
+ filter: invert(100%) sepia(17%) saturate(0%) hue-rotate(24deg) brightness(103%) contrast(102%);
+}
+.dark .header-block {
+ background-color: #616161;
+}
+.dark .tab-item .progress-bar{
+ border: 1.5px rgb(107 107 107) solid;
+}
+.dark .tab-item:hover{
+ border: 1px rgb(107 107 107) solid;
+}
+.dark .tab-item .links .link{
+ filter: invert(100%) sepia(17%) saturate(0%) hue-rotate(24deg) brightness(103%) contrast(102%);
+}
+.dark .stats-block .block p{
+ color: #b9b9b9 !important;
+}
+.dark .stats-block .block .header {
+ background-color: #595959;
+ color: rgb(255 255 255);
+}
+.dark .stats-block.block .header{
+ background-color: #595959;
+ color: rgb(255 255 255);
+}
+.dark .stats-block.block p{
+ color: #b9b9b9 !important;
+}
+.dark .expander-body{
+ background-color: #595959 !important;
+}
+.dark .expander .header span{
+ color: #b9b9b9 !important;
+}
+.dark .expander.total {
+ background-color: #6f6f6f !important;
+}
+.dark .url-list{
+ border: 1px solid #494949 !important;
+}
+.dark .header span{
+ color: rgb(255 255 255);
+}
+.dark .settings-tab label[name="tabName"] img{
+ background-color: grey;
+ border-radius: 10px;
+ padding: 5px;
+}
+.dark .settings-tab label[name="tabName"]{
+ background-color: #303030 !important;
+ color: #f7f7f7;
+}
+.dark .settings-content{
+ background-color: #303030 !important;
+ border-left: 1px solid #494949 !important;
+}
+.dark .app-block{
+ background-color: #919191 !important;
+}
+.dark .app-block .title{
+ color: rgb(255, 255, 255);
+}
+.dark .app-block .description{
+ color: white !important;
+}
+.dark .settings-tab label[name="tabName"]:hover, .dark [type='radio']:checked ~ label{
+ background-color: #666666 !important;
+}
+.dark .container p.value{
+ color: black;
+}
+.dark .review-block p{
+ color:#303030;
+}
+.dark .pomodoro-popup-block p{
+ color:#303030;
+}
+.dark .promo{
+ color: black !important;
+}
\ No newline at end of file
diff --git a/src/assets/css/dashboard.css b/src/assets/css/dashboard.css
new file mode 100644
index 0000000..daaebce
--- /dev/null
+++ b/src/assets/css/dashboard.css
@@ -0,0 +1,327 @@
+body {
+ font-family: 'Segoe UI', Tahoma, sans-serif !important;
+ color: #262626;
+ background-color: #eee;
+ margin: 0;
+}
+
+.container {
+ width: 850px;
+ margin: 10px auto;
+}
+
+.title {
+ font-size: 18px;
+ font-weight: 600;
+}
+
+.setting-header {
+ font-weight: 600;
+ font-size: 16px;
+}
+
+.description {
+ font-size: 14px;
+ color: grey;
+ margin: 7px 0 15px 0;
+ font-weight: normal;
+}
+
+.url-list {
+ border-radius: 3px;
+ border: 1px solid #ccc;
+ width: 655px;
+ min-height: 300px;
+ cursor: pointer;
+ list-style: none;
+ padding-left: 10px;
+ max-height: 600px;
+ overflow: auto;
+}
+
+.url-list li {
+ font-size: 14px;
+}
+
+.url-list li span{
+ font-weight: 600;
+ margin-left: 10px;
+}
+
+input[type='number'],input[type='text'] {
+ height: 36px;
+ padding: 0 0 0 5px;
+ width: 400px;
+ border-radius: 3px;
+ border: 1px solid #ccc;
+}
+
+input[type='button'].small-btn {
+ padding: 0 5px;
+ width: 120px;
+}
+
+.option {
+ min-width: 170px;
+ color: #444;
+ background: #fff;
+ border-radius: 3px;
+ margin: 0;
+ padding: 10px 30px 10px 15px;
+ font-size: 14px;
+ border-color: #ccc;
+ position: relative;
+ cursor: pointer;
+}
+
+.header {
+ grid-area: h;
+ margin: 0 0 10px;
+ font-size: 20px;
+}
+
+a {
+ color: #3477db;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+label {
+ font-size: 14px;
+}
+
+[type='checkbox']:not(:checked),
+[type='checkbox']:checked {
+ position: absolute;
+ opacity: 0;
+ pointer-events: none;
+}
+
+[type='checkbox'] + span {
+ position: relative;
+ padding-left: 30px;
+ cursor: pointer;
+ display: inline-block;
+ height: 25px;
+ line-height: 25px;
+ font-size: 14px;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+
+[type='checkbox'] + span:before,
+[type='checkbox']:not(.filled-in) + span:after {
+ content: '';
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 18px;
+ height: 18px;
+ z-index: 0;
+ border: 2px solid #5a5a5a;
+ border-radius: 1px;
+ margin-top: 3px;
+}
+
+[type='checkbox']:not(:checked):disabled + span:before {
+ border: none;
+ background-color: rgba(0, 0, 0, 0.42);
+}
+
+[type='checkbox']:checked:disabled + span:before {
+ border-right: 2px solid rgba(0, 0, 0, 0.42);
+ border-bottom: 2px solid rgba(0, 0, 0, 0.42);
+}
+
+[type='checkbox'].filled-in + span:after {
+ border-radius: 2px;
+}
+
+[type='checkbox'].filled-in + span:before,
+[type='checkbox'].filled-in + span:after {
+ content: '';
+ left: 0;
+ position: absolute;
+ z-index: 1;
+}
+
+[type='checkbox'].filled-in:not(:checked) + span:before {
+ width: 0;
+ height: 0;
+ border: 3px solid transparent;
+ left: 6px;
+ top: 10px;
+ -webkit-transform: rotateZ(37deg);
+ transform: rotateZ(37deg);
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type='checkbox'].filled-in:not(:checked) + span:after {
+ height: 17px;
+ width: 17px;
+ background-color: transparent;
+ border: 2px solid #5a5a5a;
+ top: 0px;
+ z-index: 0;
+}
+
+[type='checkbox'].filled-in:checked + span:before {
+ top: -3px;
+ left: -2px;
+ width: 7px;
+ height: 12px;
+ border-top: 3px solid transparent;
+ border-left: 3px solid transparent;
+ border-right: 3px solid #fff;
+ border-bottom: 3px solid #fff;
+ -webkit-transform: rotateZ(35deg);
+ transform: rotateZ(35deg);
+ -webkit-transform-origin: 100% 100%;
+ transform-origin: 100% 100%;
+}
+
+[type='checkbox'].filled-in:checked + span:after {
+ top: 0;
+ width: 17px;
+ height: 17px;
+ border: 2px solid #3477db;
+ background-color: #3477db;
+ z-index: 0;
+}
+
+.hidden {
+ display: none !important;
+}
+
+.notify {
+ width: 220px;
+ height: 27px;
+ margin: auto;
+ background-color: rgb(21, 104, 0);
+ color: rgb(255, 255, 255);
+ text-align: center;
+ font-weight: 600;
+ border-radius: 5px;
+ position: fixed;
+ z-index: 1;
+ top: 10px;
+ right: 20px;
+ font-size: 15px;
+ white-space: nowrap;
+ padding: 10px;
+}
+
+.block {
+ display: block;
+}
+
+.readonly-input {
+ cursor: default;
+ border: 0;
+ display: block;
+}
+
+.setting-notify-block {
+ width: 450px;
+ height: 100px;
+ margin-top: 15px;
+ background-color: rgb(175, 175, 175);
+ border-radius: 10px;
+}
+
+.setting-notify-block .setting-notify-title {
+ padding: 15px 20px 5px 0;
+ font-weight: 700;
+ color: #ffffff;
+ font-size: 15px;
+ text-align: left;
+ display: block;
+}
+
+.setting-notify-block .setting-notify-message {
+ padding: 3px 20px 5px 0;
+ font-size: 14px;
+ display: block;
+ width: 320px;
+}
+.setting-notify-block .setting-notify-message-g {
+ padding: 0 30px 5px 0;
+ color: rgb(199, 199, 199);
+ font-size: 11px;
+ display: block;
+}
+
+.setting-notify-block .setting-notify-img {
+ height: 50px;
+ padding: 25px 15px 25px 25px;
+}
+
+.setting-notify-block .setting-notify-message-block {
+ display: inline-block;
+ position: absolute;
+}
+
+.settings-tabs {
+}
+.settings-tab {
+ clear: both;
+ width: 286px;
+}
+.settings-tab label[name='tabName'] {
+ background: #eee;
+ padding: 5px 0 5px 20px;
+ font-size: 16px;
+ vertical-align: middle;
+ width: 266px;
+ height: 40px;
+ display: table-cell;
+ cursor: pointer;
+}
+.settings-tab label[name='tabName']:hover {
+ background-color: #cccccc !important;
+}
+.settings-tab [type='radio'] {
+ display: none;
+}
+.settings-tab img{
+ vertical-align: middle;
+ margin-right: 10px;
+}
+.settings-content {
+ position: absolute;
+ top: 0;
+ left: 286px;
+ background: white;
+ right: 0;
+ bottom: 0;
+ padding: 50px;
+ border-left: 1px solid #ccc;
+ overflow-y: auto;
+}
+.settings-content span {
+ animation: 0.5s ease-out 0s 1 slideInFromTop;
+}
+[type='radio']:checked ~ label {
+ background: white;
+ border-bottom: 2px solid #8bc34a;
+ z-index: 2;
+}
+[type='radio']:checked ~ label ~ .settings-content {
+ z-index: 1;
+}
+.settings-item {
+ margin-bottom: 30px;
+}
+.url-list img {
+ vertical-align: middle;
+ margin-right: 10px;
+ cursor: pointer;
+}
+
+.url-list .time-value {
+ margin-top: 5px;
+ margin-left: 55px;
+}
diff --git a/src/assets/css/general.css b/src/assets/css/general.css
new file mode 100644
index 0000000..d15af6b
--- /dev/null
+++ b/src/assets/css/general.css
@@ -0,0 +1,168 @@
+:root {
+ --main-color: #6ebf5d;
+ --popup-header: #efefef;
+ --progress-bar: #428bff;
+}
+
+.no-data {
+ text-align: center;
+ font-size: 16px;
+ font-weight: 600;
+ margin-top: 30%;
+}
+
+.float-right {
+ float: right;
+}
+.d-inline-block {
+ display: inline-block;
+}
+.mt-0 {
+ margin-top: 0;
+}
+.mt-20 {
+ margin-top: 20px;
+}
+.mt-30 {
+ margin-top: 30px;
+}
+.mb-20 {
+ margin-bottom: 20px;
+}
+.ml-5 {
+ margin-left: 5px;
+}
+.ml-10 {
+ margin-left: 10px;
+}
+.mr-10 {
+ margin-right: 10px;
+}
+.ml-20 {
+ margin-left: 20px;
+}
+.mr-20 {
+ margin-right: 20px;
+}
+.mr-5 {
+ margin-right: 5px;
+}
+.pr-5 {
+ padding-right: 5px;
+}
+.p-5 {
+ padding: 5px;
+}
+.text-right {
+ text-align: right;
+}
+.text-center {
+ text-align: center;
+}
+
+.mt-10 {
+ margin-top: 10px;
+}
+
+.mt-15 {
+ margin-top: 15px;
+}
+select {
+ border-color: #ccc;
+ border-radius: 5px;
+}
+.w-100 {
+ width: 100%;
+}
+input[type='button'] {
+ background: #5377af;
+ color: #fff;
+ border-radius: 7px;
+ height: 36px;
+ line-height: 35px;
+ padding: 0 20px;
+ border: 0;
+ font-size: 14px;
+ font-weight: 500;
+ cursor: pointer;
+ min-width: 80px;
+ text-align: center;
+ width: 200px;
+}
+
+input[type='button']:hover {
+ background: #314158;
+ text-decoration: none;
+}
+
+input[type='button'].alert {
+ background: #fe5c5c !important;
+}
+
+input[type='button'].info {
+ background: #ffffff !important;
+ color: black;
+ border: 1px solid rgb(151, 151, 151);
+}
+
+input[type='button'][disabled] {
+ border: 1px solid #999999;
+ background-color: #cccccc;
+ color: #666666;
+}
+.modal {
+ display: block;
+ position: fixed;
+ z-index: 1;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+ overflow: auto;
+ background-color: rgb(0,0,0);
+ background-color: rgba(0,0,0,0.4);
+}
+
+.modal-content {
+ background-color: #fefefe;
+ margin: 15% auto;
+ padding: 20px;
+ border: 1px solid #888;
+ width: 40%;
+ border-radius: 10px;
+}
+
+.modal-content p{
+ font-size: 18px;
+ font-weight: 600;
+}
+
+.close {
+ color: #aaa;
+ float: right;
+ font-size: 28px;
+ font-weight: bold;
+}
+
+.close:hover,
+.close:focus {
+ color: black;
+ text-decoration: none;
+ cursor: pointer;
+}
+.no-data .date-picker {
+ font-weight: normal;
+ text-align: center;
+ width: 250px;
+ margin: auto;
+ margin-top: 15px;
+}
+.date-block .date-picker {
+ width: 250px;
+}
+.font-bold{
+ font-weight: 600;
+}
+.font-16{
+ font-size: 16px;
+}
\ No newline at end of file
diff --git a/src/assets/css/main.css b/src/assets/css/main.css
new file mode 100644
index 0000000..955b6c4
--- /dev/null
+++ b/src/assets/css/main.css
@@ -0,0 +1,223 @@
+::-webkit-scrollbar-track {
+ border-radius: 10px;
+ background-color: #f5f5f5;
+}
+
+::-webkit-scrollbar {
+ width: 7px;
+ background-color: #f5f5f5;
+}
+
+::-webkit-scrollbar-thumb {
+ border-radius: 10px;
+ background-color: #7c7c7c;
+}
+html,
+body {
+ width: 600px;
+ height: 590px;
+ padding: 0;
+ margin: 0;
+}
+.tabs {
+}
+.tabs input[name='tab-control'] {
+ display: none;
+}
+.tabs .content section h2,
+.tabs ul li label {
+
+ font-size: 15px;
+ color: #428bff;
+}
+.tabs ul {
+ list-style-type: none;
+ padding-left: 0;
+ display: flex;
+ flex-direction: row;
+ margin-bottom: 10px;
+ justify-content: space-between;
+ align-items: flex-end;
+ flex-wrap: wrap;
+}
+.tabs ul li {
+ box-sizing: border-box;
+ flex: 1;
+ width: 25%;
+ padding: 0 10px;
+ text-align: center;
+}
+.tabs ul li label {
+ transition: all 0.3s ease-in-out;
+ color: #929daf;
+ padding: 5px auto;
+ overflow: hidden;
+ display: block;
+ cursor: pointer;
+ transition: all 0.2s ease-in-out;
+ white-space: nowrap;
+ -webkit-touch-callout: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ user-select: none;
+}
+.tabs ul li label br {
+ display: none;
+}
+.tabs ul li label img {
+ filter: brightness(0) saturate(100%) invert(67%) sepia(15%) saturate(342%) hue-rotate(178deg)
+ brightness(91%) contrast(89%);
+ vertical-align: bottom;
+ margin-right: 0.2em;
+ transition: all 0.2s ease-in-out;
+}
+.tabs ul li label:hover,
+.tabs ul li label:focus,
+.tabs ul li label:active {
+ outline: 0;
+ color: #bec5cf;
+}
+.tabs ul li label:hover img,
+.tabs ul li label:focus img,
+.tabs ul li label:active img {
+ filter: #bec5cf;
+}
+.tabs .slider {
+ position: relative;
+ width: 25%;
+ transition: all 0.33s cubic-bezier(0.38, 0.8, 0.32, 1.07);
+}
+.tabs .slider .indicator {
+ position: relative;
+ width: 50px;
+ max-width: 100%;
+ margin: 0 auto;
+ height: 4px;
+ background: #428bff;
+ border-radius: 1px;
+}
+.tabs .content {
+ margin-top: 10px;
+}
+.tabs .content section {
+ display: none;
+ -webkit-animation-name: content;
+ animation-name: content;
+ -webkit-animation-direction: normal;
+ animation-direction: normal;
+ -webkit-animation-duration: 0.3s;
+ animation-duration: 0.3s;
+ -webkit-animation-timing-function: ease-in-out;
+ animation-timing-function: ease-in-out;
+ -webkit-animation-iteration-count: 1;
+ animation-iteration-count: 1;
+ line-height: 1.4;
+}
+.tabs .content section h2 {
+ color: #428bff;
+ display: none;
+}
+.tabs .content section h2::after {
+ content: '';
+ position: relative;
+ display: block;
+ width: 30px;
+ height: 3px;
+ background: #428bff;
+ margin-top: 5px;
+ left: 1px;
+}
+.tabs input[name='tab-control']:nth-of-type(1):checked ~ ul > li:nth-child(1) > label {
+ cursor: default;
+ color: #428bff;
+}
+.tabs input[name='tab-control']:nth-of-type(1):checked ~ ul > li:nth-child(1) > label img {
+ filter: brightness(0) saturate(100%) invert(59%) sepia(82%) saturate(4677%) hue-rotate(202deg)
+ brightness(103%) contrast(101%);
+}
+.tabs input[name='tab-control']:nth-of-type(1):checked ~ .slider {
+ transform: translateX(17%);
+}
+.tabs input[name='tab-control']:nth-of-type(1):checked ~ .content > section:nth-child(1) {
+ display: block;
+}
+.tabs input[name='tab-control']:nth-of-type(2):checked ~ ul > li:nth-child(2) > label {
+ cursor: default;
+ color: #428bff;
+}
+.tabs input[name='tab-control']:nth-of-type(2):checked ~ ul > li:nth-child(2) > label img {
+ filter: brightness(0) saturate(100%) invert(59%) sepia(82%) saturate(4677%) hue-rotate(202deg)
+ brightness(103%) contrast(101%);
+}
+.tabs input[name='tab-control']:nth-of-type(2):checked ~ .slider {
+ transform: translateX(150%);
+}
+.tabs input[name='tab-control']:nth-of-type(2):checked ~ .content > section:nth-child(2) {
+ display: block;
+}
+.tabs input[name='tab-control']:nth-of-type(3):checked ~ ul > li:nth-child(3) > label {
+ cursor: default;
+ color: #428bff;
+}
+.tabs input[name='tab-control']:nth-of-type(3):checked ~ ul > li:nth-child(3) > label img {
+ filter: brightness(0) saturate(100%) invert(59%) sepia(82%) saturate(4677%) hue-rotate(202deg)
+ brightness(103%) contrast(101%);
+}
+.tabs input[name='tab-control']:nth-of-type(3):checked ~ .slider {
+ transform: translateX(290%);
+}
+.tabs input[name='tab-control']:nth-of-type(3):checked ~ .content > section:nth-child(3) {
+ display: block;
+}
+@-webkit-keyframes content {
+ from {
+ opacity: 0;
+ transform: translateY(5%);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+@keyframes content {
+ from {
+ opacity: 0;
+ transform: translateY(5%);
+ }
+ to {
+ opacity: 1;
+ transform: translateY(0%);
+ }
+}
+.tabs ul li label {
+ white-space: initial;
+}
+.tabs ul li label img {
+ height: 1.2em;
+}
+.tooltip {
+ position: relative;
+ display: inline-block;
+ vertical-align: middle;
+}
+.tooltip .tooltiptext {
+ font-size: 11px;
+ font-weight: 500;
+ visibility: hidden;
+ width: 180px;
+ background-color: #555;
+ color: #fff;
+ text-align: center;
+ padding: 10px 10px;
+ border-radius: 6px;
+ position: absolute;
+ z-index: 1;
+ transform: translate(-55%) translateY(-125%);
+ opacity: 0;
+ transition: opacity 0.3s;
+}
+.tooltip:hover .tooltiptext {
+ visibility: visible;
+ opacity: 1;
+}
diff --git a/src/assets/icons/128x128.png b/src/assets/icons/128x128.png
new file mode 100644
index 0000000..8915f31
Binary files /dev/null and b/src/assets/icons/128x128.png differ
diff --git a/src/assets/icons/16x16.png b/src/assets/icons/16x16.png
new file mode 100644
index 0000000..4916da6
Binary files /dev/null and b/src/assets/icons/16x16.png differ
diff --git a/src/assets/icons/32x32.png b/src/assets/icons/32x32.png
new file mode 100644
index 0000000..f6812bb
Binary files /dev/null and b/src/assets/icons/32x32.png differ
diff --git a/src/assets/icons/48x48.png b/src/assets/icons/48x48.png
new file mode 100644
index 0000000..336d1ef
Binary files /dev/null and b/src/assets/icons/48x48.png differ
diff --git a/src/assets/icons/by-hours.svg b/src/assets/icons/by-hours.svg
new file mode 100644
index 0000000..da7c058
--- /dev/null
+++ b/src/assets/icons/by-hours.svg
@@ -0,0 +1,4 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/by-intervals.svg b/src/assets/icons/by-intervals.svg
new file mode 100644
index 0000000..9c151bd
--- /dev/null
+++ b/src/assets/icons/by-intervals.svg
@@ -0,0 +1,2 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/clear-youtube-logo.svg b/src/assets/icons/clear-youtube-logo.svg
new file mode 100644
index 0000000..5854613
--- /dev/null
+++ b/src/assets/icons/clear-youtube-logo.svg
@@ -0,0 +1,11 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/close.svg b/src/assets/icons/close.svg
new file mode 100644
index 0000000..79b0d2f
--- /dev/null
+++ b/src/assets/icons/close.svg
@@ -0,0 +1,7 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/dark-mode.svg b/src/assets/icons/dark-mode.svg
new file mode 100644
index 0000000..c2f0dce
--- /dev/null
+++ b/src/assets/icons/dark-mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/dashboard.svg b/src/assets/icons/dashboard.svg
new file mode 100644
index 0000000..099ec8c
--- /dev/null
+++ b/src/assets/icons/dashboard.svg
@@ -0,0 +1,6 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/delete.png b/src/assets/icons/delete.png
new file mode 100644
index 0000000..1899aff
Binary files /dev/null and b/src/assets/icons/delete.png differ
diff --git a/src/assets/icons/details-link.svg b/src/assets/icons/details-link.svg
new file mode 100644
index 0000000..339e00b
--- /dev/null
+++ b/src/assets/icons/details-link.svg
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/donate.png b/src/assets/icons/donate.png
new file mode 100644
index 0000000..8f90408
Binary files /dev/null and b/src/assets/icons/donate.png differ
diff --git a/src/assets/icons/donation-qr.png b/src/assets/icons/donation-qr.png
new file mode 100644
index 0000000..06f400e
Binary files /dev/null and b/src/assets/icons/donation-qr.png differ
diff --git a/src/assets/icons/edit.svg b/src/assets/icons/edit.svg
new file mode 100644
index 0000000..c06b44d
--- /dev/null
+++ b/src/assets/icons/edit.svg
@@ -0,0 +1,27 @@
+
+
+
\ No newline at end of file
diff --git a/src/icons/empty.png b/src/assets/icons/empty.png
similarity index 100%
rename from src/icons/empty.png
rename to src/assets/icons/empty.png
diff --git a/src/assets/icons/extension.svg b/src/assets/icons/extension.svg
new file mode 100644
index 0000000..0897782
--- /dev/null
+++ b/src/assets/icons/extension.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/icon.png b/src/assets/icons/icon.png
new file mode 100644
index 0000000..9c86246
Binary files /dev/null and b/src/assets/icons/icon.png differ
diff --git a/src/assets/icons/light-mode.svg b/src/assets/icons/light-mode.svg
new file mode 100644
index 0000000..cff0d6f
--- /dev/null
+++ b/src/assets/icons/light-mode.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/no-today.svg b/src/assets/icons/no-today.svg
new file mode 100644
index 0000000..9933b25
--- /dev/null
+++ b/src/assets/icons/no-today.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/open-link.svg b/src/assets/icons/open-link.svg
new file mode 100644
index 0000000..ad17a47
--- /dev/null
+++ b/src/assets/icons/open-link.svg
@@ -0,0 +1,202 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/pin.svg b/src/assets/icons/pin.svg
new file mode 100644
index 0000000..2a91ad0
--- /dev/null
+++ b/src/assets/icons/pin.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/src/assets/icons/pomodoro-rest.png b/src/assets/icons/pomodoro-rest.png
new file mode 100644
index 0000000..5c8a25e
Binary files /dev/null and b/src/assets/icons/pomodoro-rest.png differ
diff --git a/src/assets/icons/pomodoro.png b/src/assets/icons/pomodoro.png
new file mode 100644
index 0000000..1bca502
Binary files /dev/null and b/src/assets/icons/pomodoro.png differ
diff --git a/src/assets/icons/pomodoro.svg b/src/assets/icons/pomodoro.svg
new file mode 100644
index 0000000..d3ec461
--- /dev/null
+++ b/src/assets/icons/pomodoro.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/preloader.gif b/src/assets/icons/preloader.gif
new file mode 100644
index 0000000..32ac2b4
Binary files /dev/null and b/src/assets/icons/preloader.gif differ
diff --git a/src/assets/icons/s-about.svg b/src/assets/icons/s-about.svg
new file mode 100644
index 0000000..bb28eac
--- /dev/null
+++ b/src/assets/icons/s-about.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/s-dashboard.svg b/src/assets/icons/s-dashboard.svg
new file mode 100644
index 0000000..fc057b7
--- /dev/null
+++ b/src/assets/icons/s-dashboard.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/s-limits.svg b/src/assets/icons/s-limits.svg
new file mode 100644
index 0000000..3b0ce8d
--- /dev/null
+++ b/src/assets/icons/s-limits.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/s-notifications.svg b/src/assets/icons/s-notifications.svg
new file mode 100644
index 0000000..1303469
--- /dev/null
+++ b/src/assets/icons/s-notifications.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/s-settings.svg b/src/assets/icons/s-settings.svg
new file mode 100644
index 0000000..1734f08
--- /dev/null
+++ b/src/assets/icons/s-settings.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/s-whitelist.svg b/src/assets/icons/s-whitelist.svg
new file mode 100644
index 0000000..0774698
--- /dev/null
+++ b/src/assets/icons/s-whitelist.svg
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/settings.svg b/src/assets/icons/settings.svg
new file mode 100644
index 0000000..4096f43
--- /dev/null
+++ b/src/assets/icons/settings.svg
@@ -0,0 +1,5 @@
+
+
\ No newline at end of file
diff --git a/src/assets/icons/start.svg b/src/assets/icons/start.svg
new file mode 100644
index 0000000..144f821
--- /dev/null
+++ b/src/assets/icons/start.svg
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/src/assets/icons/stop.svg b/src/assets/icons/stop.svg
new file mode 100644
index 0000000..8d35481
--- /dev/null
+++ b/src/assets/icons/stop.svg
@@ -0,0 +1,17 @@
+
+
+
\ No newline at end of file
diff --git a/src/icons/success.png b/src/assets/icons/success.png
similarity index 100%
rename from src/icons/success.png
rename to src/assets/icons/success.png
diff --git a/src/icons/today.svg b/src/assets/icons/today.svg
similarity index 100%
rename from src/icons/today.svg
rename to src/assets/icons/today.svg
diff --git a/src/assets/icons/trackerjam-logo.png b/src/assets/icons/trackerjam-logo.png
new file mode 100644
index 0000000..dc6d052
Binary files /dev/null and b/src/assets/icons/trackerjam-logo.png differ
diff --git a/src/assets/initial.jpg b/src/assets/initial.jpg
new file mode 100644
index 0000000..d70547a
Binary files /dev/null and b/src/assets/initial.jpg differ
diff --git a/src/assets/pin-tutorial.png b/src/assets/pin-tutorial.png
new file mode 100644
index 0000000..ebece96
Binary files /dev/null and b/src/assets/pin-tutorial.png differ
diff --git a/src/assets/pomodoro-sounds/1.mp3 b/src/assets/pomodoro-sounds/1.mp3
new file mode 100644
index 0000000..2c4babb
Binary files /dev/null and b/src/assets/pomodoro-sounds/1.mp3 differ
diff --git a/src/assets/pomodoro-sounds/10.mp3 b/src/assets/pomodoro-sounds/10.mp3
new file mode 100644
index 0000000..371a5b8
Binary files /dev/null and b/src/assets/pomodoro-sounds/10.mp3 differ
diff --git a/src/assets/pomodoro-sounds/11.mp3 b/src/assets/pomodoro-sounds/11.mp3
new file mode 100644
index 0000000..e000b73
Binary files /dev/null and b/src/assets/pomodoro-sounds/11.mp3 differ
diff --git a/src/assets/pomodoro-sounds/12.mp3 b/src/assets/pomodoro-sounds/12.mp3
new file mode 100644
index 0000000..b949f38
Binary files /dev/null and b/src/assets/pomodoro-sounds/12.mp3 differ
diff --git a/src/assets/pomodoro-sounds/13.mp3 b/src/assets/pomodoro-sounds/13.mp3
new file mode 100644
index 0000000..a255ca5
Binary files /dev/null and b/src/assets/pomodoro-sounds/13.mp3 differ
diff --git a/src/assets/pomodoro-sounds/2.mp3 b/src/assets/pomodoro-sounds/2.mp3
new file mode 100644
index 0000000..2e526e3
Binary files /dev/null and b/src/assets/pomodoro-sounds/2.mp3 differ
diff --git a/src/assets/pomodoro-sounds/3.mp3 b/src/assets/pomodoro-sounds/3.mp3
new file mode 100644
index 0000000..185ddb4
Binary files /dev/null and b/src/assets/pomodoro-sounds/3.mp3 differ
diff --git a/src/assets/pomodoro-sounds/4.mp3 b/src/assets/pomodoro-sounds/4.mp3
new file mode 100644
index 0000000..4fcab3f
Binary files /dev/null and b/src/assets/pomodoro-sounds/4.mp3 differ
diff --git a/src/assets/pomodoro-sounds/5.mp3 b/src/assets/pomodoro-sounds/5.mp3
new file mode 100644
index 0000000..8009774
Binary files /dev/null and b/src/assets/pomodoro-sounds/5.mp3 differ
diff --git a/src/assets/pomodoro-sounds/6.mp3 b/src/assets/pomodoro-sounds/6.mp3
new file mode 100644
index 0000000..21d0827
Binary files /dev/null and b/src/assets/pomodoro-sounds/6.mp3 differ
diff --git a/src/assets/pomodoro-sounds/7.mp3 b/src/assets/pomodoro-sounds/7.mp3
new file mode 100644
index 0000000..901fc3d
Binary files /dev/null and b/src/assets/pomodoro-sounds/7.mp3 differ
diff --git a/src/assets/pomodoro-sounds/8.mp3 b/src/assets/pomodoro-sounds/8.mp3
new file mode 100644
index 0000000..8843950
Binary files /dev/null and b/src/assets/pomodoro-sounds/8.mp3 differ
diff --git a/src/assets/pomodoro-sounds/9.mp3 b/src/assets/pomodoro-sounds/9.mp3
new file mode 100644
index 0000000..59845ea
Binary files /dev/null and b/src/assets/pomodoro-sounds/9.mp3 differ
diff --git a/src/background.ts b/src/background.ts
new file mode 100644
index 0000000..88ffeb1
--- /dev/null
+++ b/src/background.ts
@@ -0,0 +1,92 @@
+import Browser from 'webextension-polyfill';
+import { initTracker } from './tracker';
+import { logger } from './utils/logger';
+import { scheduleJobs } from './jobs/sheduler';
+import { Settings } from './functions/settings';
+import { StorageParams } from './storage/storage-params';
+import { injectStorage } from './storage/inject-storage';
+import { todayLocalDate } from './utils/date';
+import { checkPomodoro } from './functions/pomodoro';
+import { Messages } from './utils/messages';
+import { injectTabsRepositorySingleton } from './repository/inject-tabs-repository';
+
+logger.log('Start background script');
+let pomodoroTimer: number;
+
+self.onerror = err => {
+ console.error('Unhandled error:', err);
+};
+
+Browser.storage.onChanged.addListener(async (changes, namespace) => {
+ for (var key in changes) {
+ if (Object.values(StorageParams).includes(key as StorageParams))
+ await Settings.getInstance().reloadSetting(key as StorageParams);
+
+ if (key == StorageParams.IS_POMODORO_ENABLED) {
+ const value = changes[StorageParams.IS_POMODORO_ENABLED].newValue;
+ pomodoro(value);
+ }
+ }
+});
+
+Browser.runtime.setUninstallURL('https://webtracker.online/goodbye.html');
+
+Browser.runtime.onInstalled.addListener(async details => {
+ if (details.reason == 'install') {
+ logger.log('Extension installed:', details);
+ const settingsStorage = injectStorage();
+ await settingsStorage.saveValue(StorageParams.INSTALL_DATE, todayLocalDate());
+
+ const initialPageUrl = Browser.runtime.getURL('src/welcome.html');
+ await Browser.tabs.create({
+ url: initialPageUrl,
+ active: true,
+ });
+ }
+ if (details.reason == 'update' && !details.previousVersion) {
+ const showChangelog = (await Settings.getInstance().getSetting(
+ StorageParams.SHOW_CHANGELOG,
+ )) as boolean;
+ if (showChangelog)
+ await Browser.tabs.create({
+ url: 'https://webtracker.online/releasenotes.html',
+ active: true,
+ });
+ }
+});
+
+Browser.runtime.onStartup.addListener(() => {
+ logger.log(`onStartup event`);
+});
+
+Browser.windows.onFocusChanged.addListener(() => {
+ logger.log('onFocusChanged');
+});
+
+async function pomodoro(value?: boolean) {
+ if (value == undefined) {
+ const settingsStorage = injectStorage();
+ value = await settingsStorage.getValue(StorageParams.IS_POMODORO_ENABLED);
+ }
+ if (value == true) pomodoroTimer = setInterval(checkPomodoro, 1000);
+ else clearInterval(pomodoroTimer);
+}
+
+pomodoro();
+scheduleJobs();
+initTracker();
+
+Browser.runtime.onMessage.addListener(async message => {
+ if (message == Messages.ClearAllData) {
+ const storage = injectStorage();
+ const repo = await injectTabsRepositorySingleton();
+ repo.removeAllTabs();
+ await storage.saveTabs([]);
+ }
+ if (message.message == Messages.Restore) {
+ const storage = injectStorage();
+ await storage.saveTabs(message.data);
+ const repo = await injectTabsRepositorySingleton();
+ repo.initAsync();
+ }
+});
diff --git a/src/block.html b/src/block.html
index cbeaf6f..1b72d23 100644
--- a/src/block.html
+++ b/src/block.html
@@ -1,25 +1,15 @@
-
-
-
Time limit
-Web Activity Time Tracker
- - - \ No newline at end of file + + + + + +{{ convertSummaryTimeToString(tabsByDays!.averageTime) }}
++ {{ t('enjoy.message') }} +
+ ++ {{ t('canDonate.message') }} +
+ +{{ t('coin.message') }} USDT
+{{ t('chain.message') }} Ethereum (ERC20)
++ {{ t('address.message') }} + 0x427a22e1f4ba81351c22465faf6cfcf6095583d1 +
++ {{ t('thanks.message') }} +
+{{ t('intervalInactivity.description') }}
+{{ t('exportToCsvSetting.description') }}
+{{ t('removeAllData.description') }}
+ +{{ t('backupAndRestore.description') }}
+ + + +{{ t('timeChartDescription.message') }}
+{{ t('limits.message') }}
++ {{ t('limits.description') }} +
++ {{ t('limitsTip.message') }} +
++ {{ t('limit.message') }} : {{ getTime(limit.time) }} +
++ {{ t('completelyBlocked.message') }} +
+{{ t('tryMyOtherApps.message') }}
+{{ t('clearYoutube.message') }}
++ {{ t('clearYoutube.description') }} +
++ {{ t('notificationTimeSetting.message') }} +
++ {{ t('notificationTime.description') }} +
++ {{ t('notificationMessage.description') }} +
+ + +{{ data.firstDay.toLocaleDateString() }}
+{{ data.activeDaysTotal }}
+{{ data.daysTotal }}
+{{ convertSummaryTimeToString(data.todaySummaryTime) }}
+{{ convertSummaryTimeToString(data.summaryTime) }}
+{{ convertSummaryTimeToString(data.averageTimeByActiveDays) }}
+{{ mostActiveDay }}
+{{ mostActiveDayTime }}
+{{ mostInActiveDay }}
++ {{ mostInActiveDayTime }} +
+{{ t('pomodoro.message') }}
++ {{ t('pomodoro.description') }} +
+
+ {{ t('pomodoroExplanationIcon.message') }}
+
.
+ {{ t('pomodoroExplanationIcon.description') }}
+
.
+
+ {{ t('pomodoroExplanationTime.message') }} +
+{{ t('pomodoroExplanationStop.message') }}
+{{ t('pomodoroWork.message') }}
+{{ t('pomodoroRest.message') }}
+{{ t('pomodoroFrequency.message') }}
+ +{{ t('pomodoroIsEnabled.message') }}
+ {{ t('pomodoroWork.message') }} + {{ t('pomodoroRest.message') }} + +{{ t('pomodoroSoundAfter.message') }}
+ +{{ t('promoClearYoutube.message') }}
+ +{{ t('enjoyAndReview.message') }}
+{{ url }}
+
+
+
+
+
{{ summaryTimeForTab }}
+{{ percent }} %
+{{ sessions }}
+{{ title }}
+{{ summaryTimeString }}
+{{ t('intervalsChart.message') }}
+{{ t('intervalsChart.description') }}
+{{ t('allTime.message') }}
++ {{ convertSummaryTimeToString(details.summaryTime) }} +
+{{ t('sessions.message') }}
++ {{ details.sessions }} +
+{{ t('averageDailyUsage.message') }}
++ {{ convertSummaryTimeToString(details.averageTime) }} +
+{{ t('whiteList.message') }}
+Web Activity Time Tracker
-Overall statistics
-Web Activity Time Tracker
-Web Activity Time Tracker
++ {{ t('block.message') }} +
+{{ sourceUrl }}
+| {{ t('limit.message') }}: | +{{ limitTimeString }} | +
| {{ t('sessions.message') }}: | +{{ summaryCounter }} | +
{{ t('deferringDescription.message') }}
+Web Activity Time Tracker
+Web Activity Time Tracker
+{{ t('welcome.message') }}
+
+
+
+ {{ t('getStarted.message') }}
+{{ t('welcomeStart.message') }}
+1. {{ t('pinIcon.message') }}
+
+ {{ t('pinIconPart1.message') }}
+ {{ t('pinIconPart2.message') }}
+
+
+ 2. {{ t('browse.message') }}
+
+ {{ t('browse.description') }}
+
+
3. {{ t('seeData.message') }}
++ {{ t('seeData.description') }} +
+