diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 46bc8839..846e65e3 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -32,19 +32,9 @@ jobs: - name: Configure Pages uses: actions/configure-pages@v5 - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get -y install libgtk-3-dev libwebkit2gtk-4.1-dev - pnpm install - - name: Build shell: pwsh - run: | - pnpm run codegen - pnpm run build - pnpm run build:docs - touch docs/dist/.nojekyll + run: scripts/deploy-docs.ps1 - name: Upload artifact uses: actions/upload-pages-artifact@v3 diff --git a/.github/workflows/test-pr.yml b/.github/workflows/test-pr.yml index c998d750..8673752b 100644 --- a/.github/workflows/test-pr.yml +++ b/.github/workflows/test-pr.yml @@ -20,13 +20,6 @@ jobs: with: components: clippy - - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get -y install libgtk-3-dev libwebkit2gtk-4.1-dev - - name: Test shell: pwsh - run: | - cargo clippy --workspace - cargo test -p tauri-store --tests -- --test-threads=1 + run: scripts/test.ps1 -Ubuntu diff --git a/Cargo.lock b/Cargo.lock index 6a71977b..cea64550 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3935,7 +3935,7 @@ dependencies = [ [[package]] name = "tauri-plugin-pinia" -version = "1.1.2" +version = "1.2.0" dependencies = [ "serde", "tauri", @@ -3977,7 +3977,7 @@ dependencies = [ [[package]] name = "tauri-plugin-svelte" -version = "1.1.1" +version = "1.2.0" dependencies = [ "serde", "tauri", @@ -3988,7 +3988,7 @@ dependencies = [ [[package]] name = "tauri-plugin-valtio" -version = "1.0.0" +version = "1.1.0" dependencies = [ "serde", "tauri", @@ -4059,7 +4059,7 @@ dependencies = [ [[package]] name = "tauri-store" -version = "0.7.1" +version = "0.7.2" dependencies = [ "anyhow", "dashmap", @@ -4096,7 +4096,7 @@ dependencies = [ [[package]] name = "tauri-store-macros" -version = "0.7.1" +version = "0.7.2" dependencies = [ "proc-macro2", "quote", @@ -4105,7 +4105,7 @@ dependencies = [ [[package]] name = "tauri-store-utils" -version = "0.2.0" +version = "0.2.1" dependencies = [ "futures", "tauri", diff --git a/crates/tauri-plugin-pinia/Cargo.toml b/crates/tauri-plugin-pinia/Cargo.toml index 87141abb..6725df6d 100644 --- a/crates/tauri-plugin-pinia/Cargo.toml +++ b/crates/tauri-plugin-pinia/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-pinia" description = "Persistent Pinia stores for Tauri" -version = "1.1.2" +version = "1.2.0" documentation = "https://docs.rs/tauri-plugin-pinia" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" authors = ["Andrew Ferreira "] license = "MIT" readme = "./README.md" -keywords = ["tauri", "plugin", "store", "pinia", "vue"] +keywords = ["pinia", "plugin", "store", "tauri", "vue"] links = "tauri-plugin-pinia" [package.edition] @@ -36,6 +36,7 @@ tauri = "2" [dependencies.tauri-store] version = "0.7" path = "../tauri-store" +default-features = false features = ["derive"] [target."cfg(tauri_store_tracing)".dependencies] diff --git a/crates/tauri-plugin-pinia/README.md b/crates/tauri-plugin-pinia/README.md index 056a4786..700f030b 100644 --- a/crates/tauri-plugin-pinia/README.md +++ b/crates/tauri-plugin-pinia/README.md @@ -13,6 +13,16 @@ Persistent [Pinia](https://pinia.vuejs.org/) stores for Tauri and Vue. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/crates/tauri-plugin-svelte/Cargo.toml b/crates/tauri-plugin-svelte/Cargo.toml index fdffe71d..7c5fda43 100644 --- a/crates/tauri-plugin-svelte/Cargo.toml +++ b/crates/tauri-plugin-svelte/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-svelte" description = "Persistent Svelte stores for Tauri" -version = "1.1.1" +version = "1.2.0" documentation = "https://docs.rs/tauri-plugin-svelte" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" authors = ["Andrew Ferreira "] license = "MIT" readme = "./README.md" -keywords = ["tauri", "plugin", "store", "svelte"] +keywords = ["plugin", "store", "svelte", "tauri"] links = "tauri-plugin-svelte" [package.edition] @@ -36,6 +36,7 @@ tauri = "2" [dependencies.tauri-store] version = "0.7" path = "../tauri-store" +default-features = false features = ["derive"] [target."cfg(tauri_store_tracing)".dependencies] diff --git a/crates/tauri-plugin-svelte/README.md b/crates/tauri-plugin-svelte/README.md index fefee472..f1355c10 100644 --- a/crates/tauri-plugin-svelte/README.md +++ b/crates/tauri-plugin-svelte/README.md @@ -1,6 +1,6 @@ # tauri-plugin-svelte -Persistent Svelte stores for Tauri. +Persistent Svelte stores and runes for Tauri. ## Features @@ -13,6 +13,16 @@ Persistent Svelte stores for Tauri. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/crates/tauri-plugin-valtio/Cargo.toml b/crates/tauri-plugin-valtio/Cargo.toml index 1b3bcc92..7e0d5146 100644 --- a/crates/tauri-plugin-valtio/Cargo.toml +++ b/crates/tauri-plugin-valtio/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-plugin-valtio" description = "Persistent Valtio stores for Tauri" -version = "1.0.0" +version = "1.1.0" documentation = "https://docs.rs/tauri-plugin-valtio" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" authors = ["Andrew Ferreira "] license = "MIT" readme = "./README.md" -keywords = ["tauri", "plugin", "store", "react", "valtio"] +keywords = ["plugin", "react", "store", "tauri", "valtio"] links = "tauri-plugin-valtio" [package.edition] @@ -36,6 +36,7 @@ tauri = "2" [dependencies.tauri-store] version = "0.7" path = "../tauri-store" +default-features = false features = ["derive"] [target."cfg(tauri_store_tracing)".dependencies] diff --git a/crates/tauri-plugin-valtio/README.md b/crates/tauri-plugin-valtio/README.md index 58798171..985765fa 100644 --- a/crates/tauri-plugin-valtio/README.md +++ b/crates/tauri-plugin-valtio/README.md @@ -13,6 +13,16 @@ Persistent [Valtio](https://valtio.dev/) stores for Tauri and React. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/crates/tauri-store-macros/Cargo.toml b/crates/tauri-store-macros/Cargo.toml index bfb9130c..508ddc7b 100644 --- a/crates/tauri-store-macros/Cargo.toml +++ b/crates/tauri-store-macros/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tauri-store-macros" description = "Persistent stores for Tauri" -version = "0.7.1" +version = "0.7.2" documentation = "https://docs.rs/tauri-store" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" diff --git a/crates/tauri-store-macros/README.md b/crates/tauri-store-macros/README.md index ae1341bb..048ad0fc 100644 --- a/crates/tauri-store-macros/README.md +++ b/crates/tauri-store-macros/README.md @@ -9,6 +9,10 @@ Persistent stores for Tauri. - Debounce or throttle store updates. - Access the stores from both JavaScript and Rust. +## Documentation + +Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. + ## Plugins Currently, the following plugins are available: @@ -19,10 +23,6 @@ Currently, the following plugins are available: | [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | | [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | -## Documentation - -Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. - ## Supported Tauri Version The plugins require Tauri `2.0` or later. diff --git a/crates/tauri-store-utils/Cargo.toml b/crates/tauri-store-utils/Cargo.toml index 889839bc..43421b5f 100644 --- a/crates/tauri-store-utils/Cargo.toml +++ b/crates/tauri-store-utils/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "tauri-store-utils" description = "Utilities for the Tauri store" -version = "0.2.0" +version = "0.2.1" documentation = "https://docs.rs/tauri-store-utils" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" diff --git a/crates/tauri-store-utils/README.md b/crates/tauri-store-utils/README.md index ae1341bb..048ad0fc 100644 --- a/crates/tauri-store-utils/README.md +++ b/crates/tauri-store-utils/README.md @@ -9,6 +9,10 @@ Persistent stores for Tauri. - Debounce or throttle store updates. - Access the stores from both JavaScript and Rust. +## Documentation + +Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. + ## Plugins Currently, the following plugins are available: @@ -19,10 +23,6 @@ Currently, the following plugins are available: | [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | | [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | -## Documentation - -Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. - ## Supported Tauri Version The plugins require Tauri `2.0` or later. diff --git a/crates/tauri-store/Cargo.toml b/crates/tauri-store/Cargo.toml index 507d0d09..7977d587 100644 --- a/crates/tauri-store/Cargo.toml +++ b/crates/tauri-store/Cargo.toml @@ -1,14 +1,14 @@ [package] name = "tauri-store" description = "Persistent stores for Tauri" -version = "0.7.1" +version = "0.7.2" documentation = "https://docs.rs/tauri-store" homepage = "https://tb.dev.br/tauri-store" repository = "https://github.com/ferreira-tb/tauri-store" authors = ["Andrew Ferreira "] license = "MIT" readme = "./README.md" -keywords = ["tauri", "plugin", "store"] +keywords = ["plugin", "store", "tauri"] [package.edition] workspace = true diff --git a/crates/tauri-store/README.md b/crates/tauri-store/README.md index ae1341bb..048ad0fc 100644 --- a/crates/tauri-store/README.md +++ b/crates/tauri-store/README.md @@ -9,6 +9,10 @@ Persistent stores for Tauri. - Debounce or throttle store updates. - Access the stores from both JavaScript and Rust. +## Documentation + +Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. + ## Plugins Currently, the following plugins are available: @@ -19,10 +23,6 @@ Currently, the following plugins are available: | [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | | [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | -## Documentation - -Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. - ## Supported Tauri Version The plugins require Tauri `2.0` or later. diff --git a/docs/package.json b/docs/package.json index 26cdd28e..ae9d2517 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,7 +12,7 @@ "@sveltejs/adapter-static": "^3.0.8", "@sveltejs/kit": "^2.17.1", "@sveltejs/vite-plugin-svelte": "^5.0.3", - "@tb-dev/utils": "^4.1.3", + "@tb-dev/utils": "^4.1.5", "@types/semver": "^7.5.8", "autoprefixer": "^10.4.20", "bits-ui": "1.0.0-next.90", diff --git a/docs/src/lib/components/alert/alert-title.svelte b/docs/src/components/alert/alert-title.svelte similarity index 100% rename from docs/src/lib/components/alert/alert-title.svelte rename to docs/src/components/alert/alert-title.svelte diff --git a/docs/src/lib/components/alert/alert.svelte b/docs/src/components/alert/alert.svelte similarity index 100% rename from docs/src/lib/components/alert/alert.svelte rename to docs/src/components/alert/alert.svelte diff --git a/docs/src/lib/components/alert/index.ts b/docs/src/components/alert/index.ts similarity index 100% rename from docs/src/lib/components/alert/index.ts rename to docs/src/components/alert/index.ts diff --git a/docs/src/lib/components/badge/feature.svelte b/docs/src/components/badge/feature.svelte similarity index 100% rename from docs/src/lib/components/badge/feature.svelte rename to docs/src/components/badge/feature.svelte diff --git a/docs/src/lib/components/badge/index.ts b/docs/src/components/badge/index.ts similarity index 100% rename from docs/src/lib/components/badge/index.ts rename to docs/src/components/badge/index.ts diff --git a/docs/src/lib/components/base/accordion/accordion-content.svelte b/docs/src/components/base/accordion/accordion-content.svelte similarity index 100% rename from docs/src/lib/components/base/accordion/accordion-content.svelte rename to docs/src/components/base/accordion/accordion-content.svelte diff --git a/docs/src/lib/components/base/accordion/accordion-item.svelte b/docs/src/components/base/accordion/accordion-item.svelte similarity index 100% rename from docs/src/lib/components/base/accordion/accordion-item.svelte rename to docs/src/components/base/accordion/accordion-item.svelte diff --git a/docs/src/lib/components/base/accordion/accordion-trigger.svelte b/docs/src/components/base/accordion/accordion-trigger.svelte similarity index 100% rename from docs/src/lib/components/base/accordion/accordion-trigger.svelte rename to docs/src/components/base/accordion/accordion-trigger.svelte diff --git a/docs/src/lib/components/base/accordion/index.ts b/docs/src/components/base/accordion/index.ts similarity index 100% rename from docs/src/lib/components/base/accordion/index.ts rename to docs/src/components/base/accordion/index.ts diff --git a/docs/src/lib/components/base/alert/alert-description.svelte b/docs/src/components/base/alert/alert-description.svelte similarity index 100% rename from docs/src/lib/components/base/alert/alert-description.svelte rename to docs/src/components/base/alert/alert-description.svelte diff --git a/docs/src/lib/components/base/alert/alert-title.svelte b/docs/src/components/base/alert/alert-title.svelte similarity index 100% rename from docs/src/lib/components/base/alert/alert-title.svelte rename to docs/src/components/base/alert/alert-title.svelte diff --git a/docs/src/lib/components/base/alert/alert.svelte b/docs/src/components/base/alert/alert.svelte similarity index 100% rename from docs/src/lib/components/base/alert/alert.svelte rename to docs/src/components/base/alert/alert.svelte diff --git a/docs/src/lib/components/base/alert/index.ts b/docs/src/components/base/alert/index.ts similarity index 100% rename from docs/src/lib/components/base/alert/index.ts rename to docs/src/components/base/alert/index.ts diff --git a/docs/src/lib/components/base/badge/badge.svelte b/docs/src/components/base/badge/badge.svelte similarity index 100% rename from docs/src/lib/components/base/badge/badge.svelte rename to docs/src/components/base/badge/badge.svelte diff --git a/docs/src/lib/components/base/badge/index.ts b/docs/src/components/base/badge/index.ts similarity index 100% rename from docs/src/lib/components/base/badge/index.ts rename to docs/src/components/base/badge/index.ts diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-ellipsis.svelte b/docs/src/components/base/breadcrumb/breadcrumb-ellipsis.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-ellipsis.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-ellipsis.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-item.svelte b/docs/src/components/base/breadcrumb/breadcrumb-item.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-item.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-item.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-link.svelte b/docs/src/components/base/breadcrumb/breadcrumb-link.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-link.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-link.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-list.svelte b/docs/src/components/base/breadcrumb/breadcrumb-list.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-list.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-list.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-page.svelte b/docs/src/components/base/breadcrumb/breadcrumb-page.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-page.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-page.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb-separator.svelte b/docs/src/components/base/breadcrumb/breadcrumb-separator.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb-separator.svelte rename to docs/src/components/base/breadcrumb/breadcrumb-separator.svelte diff --git a/docs/src/lib/components/base/breadcrumb/breadcrumb.svelte b/docs/src/components/base/breadcrumb/breadcrumb.svelte similarity index 100% rename from docs/src/lib/components/base/breadcrumb/breadcrumb.svelte rename to docs/src/components/base/breadcrumb/breadcrumb.svelte diff --git a/docs/src/lib/components/base/breadcrumb/index.ts b/docs/src/components/base/breadcrumb/index.ts similarity index 100% rename from docs/src/lib/components/base/breadcrumb/index.ts rename to docs/src/components/base/breadcrumb/index.ts diff --git a/docs/src/lib/components/base/button/button.svelte b/docs/src/components/base/button/button.svelte similarity index 100% rename from docs/src/lib/components/base/button/button.svelte rename to docs/src/components/base/button/button.svelte diff --git a/docs/src/lib/components/base/button/index.ts b/docs/src/components/base/button/index.ts similarity index 100% rename from docs/src/lib/components/base/button/index.ts rename to docs/src/components/base/button/index.ts diff --git a/docs/src/lib/components/base/dialog/dialog-content.svelte b/docs/src/components/base/dialog/dialog-content.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-content.svelte rename to docs/src/components/base/dialog/dialog-content.svelte diff --git a/docs/src/lib/components/base/dialog/dialog-description.svelte b/docs/src/components/base/dialog/dialog-description.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-description.svelte rename to docs/src/components/base/dialog/dialog-description.svelte diff --git a/docs/src/lib/components/base/dialog/dialog-footer.svelte b/docs/src/components/base/dialog/dialog-footer.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-footer.svelte rename to docs/src/components/base/dialog/dialog-footer.svelte diff --git a/docs/src/lib/components/base/dialog/dialog-header.svelte b/docs/src/components/base/dialog/dialog-header.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-header.svelte rename to docs/src/components/base/dialog/dialog-header.svelte diff --git a/docs/src/lib/components/base/dialog/dialog-overlay.svelte b/docs/src/components/base/dialog/dialog-overlay.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-overlay.svelte rename to docs/src/components/base/dialog/dialog-overlay.svelte diff --git a/docs/src/lib/components/base/dialog/dialog-title.svelte b/docs/src/components/base/dialog/dialog-title.svelte similarity index 100% rename from docs/src/lib/components/base/dialog/dialog-title.svelte rename to docs/src/components/base/dialog/dialog-title.svelte diff --git a/docs/src/lib/components/base/dialog/index.ts b/docs/src/components/base/dialog/index.ts similarity index 100% rename from docs/src/lib/components/base/dialog/index.ts rename to docs/src/components/base/dialog/index.ts diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-checkbox-item.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-checkbox-item.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-checkbox-item.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-checkbox-item.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-content.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-content.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-content.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-content.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-group-heading.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-group-heading.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-group-heading.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-group-heading.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-item.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-item.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-item.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-item.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-label.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-label.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-label.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-label.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-radio-item.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-radio-item.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-radio-item.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-radio-item.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-separator.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-separator.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-separator.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-separator.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-shortcut.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-shortcut.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-shortcut.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-shortcut.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-sub-content.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-sub-content.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-sub-content.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-sub-content.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/dropdown-menu-sub-trigger.svelte b/docs/src/components/base/dropdown-menu/dropdown-menu-sub-trigger.svelte similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/dropdown-menu-sub-trigger.svelte rename to docs/src/components/base/dropdown-menu/dropdown-menu-sub-trigger.svelte diff --git a/docs/src/lib/components/base/dropdown-menu/index.ts b/docs/src/components/base/dropdown-menu/index.ts similarity index 100% rename from docs/src/lib/components/base/dropdown-menu/index.ts rename to docs/src/components/base/dropdown-menu/index.ts diff --git a/docs/src/lib/components/base/input/index.ts b/docs/src/components/base/input/index.ts similarity index 100% rename from docs/src/lib/components/base/input/index.ts rename to docs/src/components/base/input/index.ts diff --git a/docs/src/lib/components/base/input/input.svelte b/docs/src/components/base/input/input.svelte similarity index 100% rename from docs/src/lib/components/base/input/input.svelte rename to docs/src/components/base/input/input.svelte diff --git a/docs/src/lib/components/base/scroll-area/index.ts b/docs/src/components/base/scroll-area/index.ts similarity index 100% rename from docs/src/lib/components/base/scroll-area/index.ts rename to docs/src/components/base/scroll-area/index.ts diff --git a/docs/src/lib/components/base/scroll-area/scroll-area-scrollbar.svelte b/docs/src/components/base/scroll-area/scroll-area-scrollbar.svelte similarity index 100% rename from docs/src/lib/components/base/scroll-area/scroll-area-scrollbar.svelte rename to docs/src/components/base/scroll-area/scroll-area-scrollbar.svelte diff --git a/docs/src/lib/components/base/scroll-area/scroll-area.svelte b/docs/src/components/base/scroll-area/scroll-area.svelte similarity index 100% rename from docs/src/lib/components/base/scroll-area/scroll-area.svelte rename to docs/src/components/base/scroll-area/scroll-area.svelte diff --git a/docs/src/lib/components/base/separator/index.ts b/docs/src/components/base/separator/index.ts similarity index 100% rename from docs/src/lib/components/base/separator/index.ts rename to docs/src/components/base/separator/index.ts diff --git a/docs/src/lib/components/base/separator/separator.svelte b/docs/src/components/base/separator/separator.svelte similarity index 100% rename from docs/src/lib/components/base/separator/separator.svelte rename to docs/src/components/base/separator/separator.svelte diff --git a/docs/src/lib/components/base/sheet/index.ts b/docs/src/components/base/sheet/index.ts similarity index 100% rename from docs/src/lib/components/base/sheet/index.ts rename to docs/src/components/base/sheet/index.ts diff --git a/docs/src/lib/components/base/sheet/sheet-content.svelte b/docs/src/components/base/sheet/sheet-content.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-content.svelte rename to docs/src/components/base/sheet/sheet-content.svelte diff --git a/docs/src/lib/components/base/sheet/sheet-description.svelte b/docs/src/components/base/sheet/sheet-description.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-description.svelte rename to docs/src/components/base/sheet/sheet-description.svelte diff --git a/docs/src/lib/components/base/sheet/sheet-footer.svelte b/docs/src/components/base/sheet/sheet-footer.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-footer.svelte rename to docs/src/components/base/sheet/sheet-footer.svelte diff --git a/docs/src/lib/components/base/sheet/sheet-header.svelte b/docs/src/components/base/sheet/sheet-header.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-header.svelte rename to docs/src/components/base/sheet/sheet-header.svelte diff --git a/docs/src/lib/components/base/sheet/sheet-overlay.svelte b/docs/src/components/base/sheet/sheet-overlay.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-overlay.svelte rename to docs/src/components/base/sheet/sheet-overlay.svelte diff --git a/docs/src/lib/components/base/sheet/sheet-title.svelte b/docs/src/components/base/sheet/sheet-title.svelte similarity index 100% rename from docs/src/lib/components/base/sheet/sheet-title.svelte rename to docs/src/components/base/sheet/sheet-title.svelte diff --git a/docs/src/lib/components/base/sidebar/constants.ts b/docs/src/components/base/sidebar/constants.ts similarity index 100% rename from docs/src/lib/components/base/sidebar/constants.ts rename to docs/src/components/base/sidebar/constants.ts diff --git a/docs/src/lib/components/base/sidebar/context.svelte.ts b/docs/src/components/base/sidebar/context.svelte.ts similarity index 100% rename from docs/src/lib/components/base/sidebar/context.svelte.ts rename to docs/src/components/base/sidebar/context.svelte.ts diff --git a/docs/src/lib/components/base/sidebar/index.ts b/docs/src/components/base/sidebar/index.ts similarity index 100% rename from docs/src/lib/components/base/sidebar/index.ts rename to docs/src/components/base/sidebar/index.ts diff --git a/docs/src/lib/components/base/sidebar/sidebar-content.svelte b/docs/src/components/base/sidebar/sidebar-content.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-content.svelte rename to docs/src/components/base/sidebar/sidebar-content.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-footer.svelte b/docs/src/components/base/sidebar/sidebar-footer.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-footer.svelte rename to docs/src/components/base/sidebar/sidebar-footer.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-group-action.svelte b/docs/src/components/base/sidebar/sidebar-group-action.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-group-action.svelte rename to docs/src/components/base/sidebar/sidebar-group-action.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-group-content.svelte b/docs/src/components/base/sidebar/sidebar-group-content.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-group-content.svelte rename to docs/src/components/base/sidebar/sidebar-group-content.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-group-label.svelte b/docs/src/components/base/sidebar/sidebar-group-label.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-group-label.svelte rename to docs/src/components/base/sidebar/sidebar-group-label.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-group.svelte b/docs/src/components/base/sidebar/sidebar-group.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-group.svelte rename to docs/src/components/base/sidebar/sidebar-group.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-header.svelte b/docs/src/components/base/sidebar/sidebar-header.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-header.svelte rename to docs/src/components/base/sidebar/sidebar-header.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-input.svelte b/docs/src/components/base/sidebar/sidebar-input.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-input.svelte rename to docs/src/components/base/sidebar/sidebar-input.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-inset.svelte b/docs/src/components/base/sidebar/sidebar-inset.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-inset.svelte rename to docs/src/components/base/sidebar/sidebar-inset.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-action.svelte b/docs/src/components/base/sidebar/sidebar-menu-action.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-action.svelte rename to docs/src/components/base/sidebar/sidebar-menu-action.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-badge.svelte b/docs/src/components/base/sidebar/sidebar-menu-badge.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-badge.svelte rename to docs/src/components/base/sidebar/sidebar-menu-badge.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-button.svelte b/docs/src/components/base/sidebar/sidebar-menu-button.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-button.svelte rename to docs/src/components/base/sidebar/sidebar-menu-button.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-item.svelte b/docs/src/components/base/sidebar/sidebar-menu-item.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-item.svelte rename to docs/src/components/base/sidebar/sidebar-menu-item.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-skeleton.svelte b/docs/src/components/base/sidebar/sidebar-menu-skeleton.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-skeleton.svelte rename to docs/src/components/base/sidebar/sidebar-menu-skeleton.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-sub-button.svelte b/docs/src/components/base/sidebar/sidebar-menu-sub-button.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-sub-button.svelte rename to docs/src/components/base/sidebar/sidebar-menu-sub-button.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-sub-item.svelte b/docs/src/components/base/sidebar/sidebar-menu-sub-item.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-sub-item.svelte rename to docs/src/components/base/sidebar/sidebar-menu-sub-item.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu-sub.svelte b/docs/src/components/base/sidebar/sidebar-menu-sub.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu-sub.svelte rename to docs/src/components/base/sidebar/sidebar-menu-sub.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-menu.svelte b/docs/src/components/base/sidebar/sidebar-menu.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-menu.svelte rename to docs/src/components/base/sidebar/sidebar-menu.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-provider.svelte b/docs/src/components/base/sidebar/sidebar-provider.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-provider.svelte rename to docs/src/components/base/sidebar/sidebar-provider.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-rail.svelte b/docs/src/components/base/sidebar/sidebar-rail.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-rail.svelte rename to docs/src/components/base/sidebar/sidebar-rail.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-separator.svelte b/docs/src/components/base/sidebar/sidebar-separator.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-separator.svelte rename to docs/src/components/base/sidebar/sidebar-separator.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar-trigger.svelte b/docs/src/components/base/sidebar/sidebar-trigger.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar-trigger.svelte rename to docs/src/components/base/sidebar/sidebar-trigger.svelte diff --git a/docs/src/lib/components/base/sidebar/sidebar.svelte b/docs/src/components/base/sidebar/sidebar.svelte similarity index 100% rename from docs/src/lib/components/base/sidebar/sidebar.svelte rename to docs/src/components/base/sidebar/sidebar.svelte diff --git a/docs/src/lib/components/base/skeleton/index.ts b/docs/src/components/base/skeleton/index.ts similarity index 100% rename from docs/src/lib/components/base/skeleton/index.ts rename to docs/src/components/base/skeleton/index.ts diff --git a/docs/src/lib/components/base/skeleton/skeleton.svelte b/docs/src/components/base/skeleton/skeleton.svelte similarity index 100% rename from docs/src/lib/components/base/skeleton/skeleton.svelte rename to docs/src/components/base/skeleton/skeleton.svelte diff --git a/docs/src/lib/components/base/table/index.ts b/docs/src/components/base/table/index.ts similarity index 100% rename from docs/src/lib/components/base/table/index.ts rename to docs/src/components/base/table/index.ts diff --git a/docs/src/lib/components/base/table/table-body.svelte b/docs/src/components/base/table/table-body.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-body.svelte rename to docs/src/components/base/table/table-body.svelte diff --git a/docs/src/lib/components/base/table/table-caption.svelte b/docs/src/components/base/table/table-caption.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-caption.svelte rename to docs/src/components/base/table/table-caption.svelte diff --git a/docs/src/lib/components/base/table/table-cell.svelte b/docs/src/components/base/table/table-cell.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-cell.svelte rename to docs/src/components/base/table/table-cell.svelte diff --git a/docs/src/lib/components/base/table/table-footer.svelte b/docs/src/components/base/table/table-footer.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-footer.svelte rename to docs/src/components/base/table/table-footer.svelte diff --git a/docs/src/lib/components/base/table/table-head.svelte b/docs/src/components/base/table/table-head.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-head.svelte rename to docs/src/components/base/table/table-head.svelte diff --git a/docs/src/lib/components/base/table/table-header.svelte b/docs/src/components/base/table/table-header.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-header.svelte rename to docs/src/components/base/table/table-header.svelte diff --git a/docs/src/lib/components/base/table/table-row.svelte b/docs/src/components/base/table/table-row.svelte similarity index 100% rename from docs/src/lib/components/base/table/table-row.svelte rename to docs/src/components/base/table/table-row.svelte diff --git a/docs/src/lib/components/base/table/table.svelte b/docs/src/components/base/table/table.svelte similarity index 100% rename from docs/src/lib/components/base/table/table.svelte rename to docs/src/components/base/table/table.svelte diff --git a/docs/src/lib/components/base/tabs/index.ts b/docs/src/components/base/tabs/index.ts similarity index 100% rename from docs/src/lib/components/base/tabs/index.ts rename to docs/src/components/base/tabs/index.ts diff --git a/docs/src/lib/components/base/tabs/tabs-content.svelte b/docs/src/components/base/tabs/tabs-content.svelte similarity index 100% rename from docs/src/lib/components/base/tabs/tabs-content.svelte rename to docs/src/components/base/tabs/tabs-content.svelte diff --git a/docs/src/lib/components/base/tabs/tabs-list.svelte b/docs/src/components/base/tabs/tabs-list.svelte similarity index 100% rename from docs/src/lib/components/base/tabs/tabs-list.svelte rename to docs/src/components/base/tabs/tabs-list.svelte diff --git a/docs/src/lib/components/base/tabs/tabs-trigger.svelte b/docs/src/components/base/tabs/tabs-trigger.svelte similarity index 100% rename from docs/src/lib/components/base/tabs/tabs-trigger.svelte rename to docs/src/components/base/tabs/tabs-trigger.svelte diff --git a/docs/src/lib/components/base/tooltip/index.ts b/docs/src/components/base/tooltip/index.ts similarity index 100% rename from docs/src/lib/components/base/tooltip/index.ts rename to docs/src/components/base/tooltip/index.ts diff --git a/docs/src/lib/components/base/tooltip/tooltip-content.svelte b/docs/src/components/base/tooltip/tooltip-content.svelte similarity index 100% rename from docs/src/lib/components/base/tooltip/tooltip-content.svelte rename to docs/src/components/base/tooltip/tooltip-content.svelte diff --git a/docs/src/lib/components/breadcrumb/breadcrumb.svelte b/docs/src/components/breadcrumb/breadcrumb.svelte similarity index 100% rename from docs/src/lib/components/breadcrumb/breadcrumb.svelte rename to docs/src/components/breadcrumb/breadcrumb.svelte diff --git a/docs/src/lib/components/breadcrumb/index.ts b/docs/src/components/breadcrumb/index.ts similarity index 100% rename from docs/src/lib/components/breadcrumb/index.ts rename to docs/src/components/breadcrumb/index.ts diff --git a/docs/src/lib/components/code/code-block.svelte b/docs/src/components/code/code-block.svelte similarity index 100% rename from docs/src/lib/components/code/code-block.svelte rename to docs/src/components/code/code-block.svelte diff --git a/docs/src/lib/components/code/code-group.svelte b/docs/src/components/code/code-group.svelte similarity index 100% rename from docs/src/lib/components/code/code-group.svelte rename to docs/src/components/code/code-group.svelte diff --git a/docs/src/lib/components/code/index.ts b/docs/src/components/code/index.ts similarity index 100% rename from docs/src/lib/components/code/index.ts rename to docs/src/components/code/index.ts diff --git a/docs/src/lib/components/container/changelog/change/base.svelte b/docs/src/components/container/changelog/change/base.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/base.svelte rename to docs/src/components/container/changelog/change/base.svelte diff --git a/docs/src/lib/components/container/changelog/change/breaking-changes.svelte b/docs/src/components/container/changelog/change/breaking-changes.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/breaking-changes.svelte rename to docs/src/components/container/changelog/change/breaking-changes.svelte diff --git a/docs/src/lib/components/container/changelog/change/bug-fixes.svelte b/docs/src/components/container/changelog/change/bug-fixes.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/bug-fixes.svelte rename to docs/src/components/container/changelog/change/bug-fixes.svelte diff --git a/docs/src/lib/components/container/changelog/change/dependencies.svelte b/docs/src/components/container/changelog/change/dependencies.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/dependencies.svelte rename to docs/src/components/container/changelog/change/dependencies.svelte diff --git a/docs/src/lib/components/container/changelog/change/documentation.svelte b/docs/src/components/container/changelog/change/documentation.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/documentation.svelte rename to docs/src/components/container/changelog/change/documentation.svelte diff --git a/docs/src/lib/components/container/changelog/change/enhancements.svelte b/docs/src/components/container/changelog/change/enhancements.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/enhancements.svelte rename to docs/src/components/container/changelog/change/enhancements.svelte diff --git a/docs/src/lib/components/container/changelog/change/features.svelte b/docs/src/components/container/changelog/change/features.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/features.svelte rename to docs/src/components/container/changelog/change/features.svelte diff --git a/docs/src/lib/components/container/changelog/change/index.ts b/docs/src/components/container/changelog/change/index.ts similarity index 100% rename from docs/src/lib/components/container/changelog/change/index.ts rename to docs/src/components/container/changelog/change/index.ts diff --git a/docs/src/lib/components/container/changelog/change/performance.svelte b/docs/src/components/container/changelog/change/performance.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/change/performance.svelte rename to docs/src/components/container/changelog/change/performance.svelte diff --git a/docs/src/lib/components/container/changelog/index.ts b/docs/src/components/container/changelog/index.ts similarity index 100% rename from docs/src/lib/components/container/changelog/index.ts rename to docs/src/components/container/changelog/index.ts diff --git a/docs/src/lib/components/container/changelog/next.svelte b/docs/src/components/container/changelog/next.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/next.svelte rename to docs/src/components/container/changelog/next.svelte diff --git a/docs/src/lib/components/container/changelog/none.svelte b/docs/src/components/container/changelog/none.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/none.svelte rename to docs/src/components/container/changelog/none.svelte diff --git a/docs/src/lib/components/container/changelog/version.svelte b/docs/src/components/container/changelog/version.svelte similarity index 100% rename from docs/src/lib/components/container/changelog/version.svelte rename to docs/src/components/container/changelog/version.svelte diff --git a/docs/src/lib/components/container/container.svelte b/docs/src/components/container/container.svelte similarity index 100% rename from docs/src/lib/components/container/container.svelte rename to docs/src/components/container/container.svelte diff --git a/docs/src/lib/components/container/index.ts b/docs/src/components/container/index.ts similarity index 100% rename from docs/src/lib/components/container/index.ts rename to docs/src/components/container/index.ts diff --git a/docs/src/lib/components/icon/discord.svelte b/docs/src/components/icon/discord.svelte similarity index 100% rename from docs/src/lib/components/icon/discord.svelte rename to docs/src/components/icon/discord.svelte diff --git a/docs/src/lib/components/icon/github.svelte b/docs/src/components/icon/github.svelte similarity index 100% rename from docs/src/lib/components/icon/github.svelte rename to docs/src/components/icon/github.svelte diff --git a/docs/src/lib/components/icon/index.ts b/docs/src/components/icon/index.ts similarity index 100% rename from docs/src/lib/components/icon/index.ts rename to docs/src/components/icon/index.ts diff --git a/docs/src/lib/components/icon/pinia.svelte b/docs/src/components/icon/pinia.svelte similarity index 100% rename from docs/src/lib/components/icon/pinia.svelte rename to docs/src/components/icon/pinia.svelte diff --git a/docs/src/lib/components/icon/react.svelte b/docs/src/components/icon/react.svelte similarity index 100% rename from docs/src/lib/components/icon/react.svelte rename to docs/src/components/icon/react.svelte diff --git a/docs/src/lib/components/icon/svelte.svelte b/docs/src/components/icon/svelte.svelte similarity index 100% rename from docs/src/lib/components/icon/svelte.svelte rename to docs/src/components/icon/svelte.svelte diff --git a/docs/src/lib/components/icon/vue.svelte b/docs/src/components/icon/vue.svelte similarity index 100% rename from docs/src/lib/components/icon/vue.svelte rename to docs/src/components/icon/vue.svelte diff --git a/docs/src/lib/components/link/external-link.svelte b/docs/src/components/link/external-link.svelte similarity index 100% rename from docs/src/lib/components/link/external-link.svelte rename to docs/src/components/link/external-link.svelte diff --git a/docs/src/lib/components/link/index.ts b/docs/src/components/link/index.ts similarity index 100% rename from docs/src/lib/components/link/index.ts rename to docs/src/components/link/index.ts diff --git a/docs/src/lib/components/link/link.svelte b/docs/src/components/link/link.svelte similarity index 100% rename from docs/src/lib/components/link/link.svelte rename to docs/src/components/link/link.svelte diff --git a/docs/src/lib/components/link/plugin-link.svelte b/docs/src/components/link/plugin-link.svelte similarity index 100% rename from docs/src/lib/components/link/plugin-link.svelte rename to docs/src/components/link/plugin-link.svelte diff --git a/docs/src/content/changelog/tauri-plugin-pinia/v0/0.10.3.svelte b/docs/src/content/changelog/tauri-plugin-pinia/v0/0.10.3.svelte index a9c66ce3..58269759 100644 --- a/docs/src/content/changelog/tauri-plugin-pinia/v0/0.10.3.svelte +++ b/docs/src/content/changelog/tauri-plugin-pinia/v0/0.10.3.svelte @@ -1,5 +1,5 @@ + + + + +
    +
  • Deprecate StoreFrontendOptions.onError.
  • +
  • Add StoreHooks to the plugin options.
  • +
+
diff --git a/docs/src/content/changelog/tauri-plugin-svelte/v0/0.1.4.svelte b/docs/src/content/changelog/tauri-plugin-svelte/v0/0.1.4.svelte index 16216eee..8845e4d3 100644 --- a/docs/src/content/changelog/tauri-plugin-svelte/v0/0.1.4.svelte +++ b/docs/src/content/changelog/tauri-plugin-svelte/v0/0.1.4.svelte @@ -1,5 +1,5 @@ + + + + +
    +
  • Deprecate StoreFrontendOptions.onError.
  • +
  • Add StoreHooks to the plugin options.
  • +
+
diff --git a/docs/src/content/changelog/tauri-plugin-valtio/v0/0.2.1.svelte b/docs/src/content/changelog/tauri-plugin-valtio/v0/0.2.1.svelte index a8c58cdb..1e0f7c5e 100644 --- a/docs/src/content/changelog/tauri-plugin-valtio/v0/0.2.1.svelte +++ b/docs/src/content/changelog/tauri-plugin-valtio/v0/0.2.1.svelte @@ -1,5 +1,5 @@ + + + + +
    +
  • Deprecate StoreFrontendOptions.onError.
  • +
  • Add StoreHooks to the plugin options.
  • +
+
diff --git a/docs/src/content/changelog/tauri-store/v0/0.7.2.svelte b/docs/src/content/changelog/tauri-store/v0/0.7.2.svelte new file mode 100644 index 00000000..97fb1571 --- /dev/null +++ b/docs/src/content/changelog/tauri-store/v0/0.7.2.svelte @@ -0,0 +1,13 @@ + + + + + +
    +
  • Update README file.
  • +
+
diff --git a/docs/src/content/guide/accessing-from-rust/snippets.ts b/docs/src/content/guide/accessing-from-rust/snippets.ts index 5b99fb06..389b8259 100644 --- a/docs/src/content/guide/accessing-from-rust/snippets.ts +++ b/docs/src/content/guide/accessing-from-rust/snippets.ts @@ -1,5 +1,5 @@ import { snakeCase } from 'change-case'; -import { snippet, snippetGroup } from '$stores/snippet'; +import { snippet } from '$stores/snippet'; export const get = snippet((metadata) => { return ` @@ -54,19 +54,3 @@ fn watch_store(app: AppHandle) { } `; }); - -export const onLoad = snippetGroup((metadata) => { - return { - id: 'on-load', - label: 'src-tauri/src/main.rs', - lang: 'rust', - value: ` -${snakeCase(metadata.name)}::Builder::new() - .on_load(|store| { - println!("store loaded: {}", store.id()); - Ok(()) - }) - .build(); - `, - }; -}); diff --git a/docs/src/content/guide/lifecycle-hooks/snippets.ts b/docs/src/content/guide/lifecycle-hooks/snippets.ts new file mode 100644 index 00000000..c8193989 --- /dev/null +++ b/docs/src/content/guide/lifecycle-hooks/snippets.ts @@ -0,0 +1,89 @@ +import { snakeCase } from 'change-case'; +import { snippet, snippetGroup } from '$stores/snippet'; + +export const jsHooks = snippet((metadata) => { + const name = metadata.name as TauriPlugin; + switch (name) { + case 'tauri-plugin-pinia': { + return ` +import { defineStore } from 'pinia'; + +function store() { + return { counter: ref(0) }; +} + +export const useStore = defineStore('store', store, { + tauri: { + hooks: { + error: (err) => console.error(err), + beforeBackendSync: (state) => { + console.log(state); + return state; + }, + } + }, +}); + `; + } + + case 'tauri-plugin-svelte': + case 'tauri-plugin-valtio': { + return ` +import { store } from '${name}'; + +const value = { counter: 0 }; +const store = store('store', value, { + hooks: { + error: (err) => console.error(err), + beforeBackendSync: (state) => { + console.log(state); + return state; + }, + } +}); + `; + } + } +}); + +export const onBeforeBackendSync = ` +const hooks: StoreHooks = { + beforeBackendSync: (state) => { + state.foo = null; + state.nested.bar.baz = 'qux'; + return state; + } +}; +`; + +export const onBeforeFrontendSync = ` +const hooks: StoreHooks = { + beforeFrontendSync: (state) => { + state.foo = new Set(state.foo); + state.bar = state.bar.map((value) => value * 2); + return state; + } +}; +`; + +export const onError = ` +const hooks: StoreHooks = { + error: (err) => console.error(err) +}; +`; + +export const onLoad = snippetGroup((metadata) => { + return { + id: 'on-load', + label: 'src-tauri/src/main.rs', + lang: 'rust', + value: ` +${snakeCase(metadata.name)}::Builder::new() + .on_load(|store| { + println!("store loaded: {}", store.id()); + Ok(()) + }) + .build(); + `, + }; +}); diff --git a/docs/src/content/guide/persisting-state/snippets.ts b/docs/src/content/guide/persisting-state/snippets.ts new file mode 100644 index 00000000..ab1ec5ae --- /dev/null +++ b/docs/src/content/guide/persisting-state/snippets.ts @@ -0,0 +1,175 @@ +import { pascalCase, snakeCase } from 'change-case'; +import { snippet, snippetGroup } from '$stores/snippet'; + +export const saveStores = snippetGroup((metadata) => { + const title = snakeCase(metadata.title!); + return [ + { + id: 'save-stores-ts', + label: 'JavaScript', + lang: 'typescript', + value: ` +import { save, saveAll } from '${metadata.name}'; + +// Save a single store. +await save('my-store'); + +// Save some stores. +await save('store-1', 'store-2', 'store-3'); + +// Save all stores. +await saveAll(); + `, + }, + { + id: 'save-stores-rs', + label: 'Rust', + lang: 'rust', + value: ` +use ${snakeCase(metadata.name)}::ManagerExt; + +// Here, "manager" represents any type that implements the "Manager" trait provided by Tauri. +// This includes "AppHandle", "Window", and "WebviewWindow". +// See: https://docs.rs/tauri/latest/tauri/trait.Manager.html + +// Save a single store. +manager.${title}().save("my-store"); + +// Save some stores. +manager.${title}().save_some(&["my-store", "my-store-2"]); + +// Save all stores. +manager.${title}().save_all(); + `, + }, + ]; +}); + +export const saveOnChange = snippet((metadata) => { + const name = metadata.name as TauriPlugin; + switch (name) { + case 'tauri-plugin-pinia': { + return ` +import { ref } from 'vue'; +import { defineStore } from 'pinia'; + +function store() { + const counter = ref(0); + return { counter }; +} + +export const useStore = defineStore('store', store, { + tauri: { + saveOnChange: true, + + // You can also debounce or throttle when saving. + // This is optional. The default behavior is to save immediately. + saveStrategy: 'debounce', + saveInterval: 1000, + }, +}); + `; + } + + case 'tauri-plugin-svelte': { + return ` +import { Store } from 'tauri-plugin-svelte'; + +const value = { counter: 0 }; +const store = new Store('store', value, { + saveOnChange: true, + + // You can also debounce or throttle when saving. + // This is optional. The default behavior is to save immediately. + saveStrategy: 'debounce', + saveInterval: 1000, +}); + `; + } + + case 'tauri-plugin-valtio': { + return ` +import { store } from 'tauri-plugin-valtio'; + +const value = { counter: 0 }; +const store = store('store', value, { + saveOnChange: true, + + // You can also debounce or throttle when saving. + // This is optional. The default behavior is to save immediately. + saveStrategy: 'debounce', + saveInterval: 1000, +}); + `; + } + } +}); + +export const autosave = snippetGroup((metadata) => { + return { + id: 'autosave', + label: 'src-tauri/src/main.rs', + lang: 'rust', + value: ` +use std::time::Duration; + +// Save every five minutes. +${snakeCase(metadata.name)}::Builder::new() + .autosave(Duration::from_secs(300)) + .build(); + `, + }; +}); + +export const customDirectory = snippetGroup((metadata) => { + return { + id: 'custom-directory', + label: 'src-tauri/src/main.rs', + lang: 'rust', + value: ` +${snakeCase(metadata.name)}::Builder::new() + .path("/path/to/custom/directory") + .build(); + `, + }; +}); + +export const setCollectionPath = snippetGroup((metadata) => { + const title = snakeCase(metadata.title!); + const pascalTitle = pascalCase(metadata.title ?? ''); + return [ + { + id: 'set-collection-path-ts', + label: 'JavaScript', + lang: 'typescript', + value: ` +import { set${pascalTitle}Path } from '${metadata.name}'; + +await set${pascalTitle}Path('/path/to/new/directory'); + `, + }, + { + id: 'set-collection-path-rs', + label: 'Rust', + lang: 'rust', + value: ` +use ${snakeCase(metadata.name)}::ManagerExt; + +manager.${title}().set_path("/path/to/new/directory"); +`, + }, + ]; +}); + +export const saveDenylist = snippetGroup((metadata) => { + return { + id: 'save-denylist', + label: 'src-tauri/src/main.rs', + lang: 'rust', + value: ` +${snakeCase(metadata.name)}::Builder::new() + .save_denylist(&["store-1", "store-2"]) + .build(); + `, + }; +}); diff --git a/docs/src/content/guide/persisting-state/snippets/custom-directory.ts b/docs/src/content/guide/persisting-state/snippets/custom-directory.ts deleted file mode 100644 index bf165757..00000000 --- a/docs/src/content/guide/persisting-state/snippets/custom-directory.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { snippetGroup } from '$stores/snippet'; -import { pascalCase, snakeCase } from 'change-case'; - -export const customDirectory = snippetGroup((metadata) => { - return { - id: 'custom-directory', - label: 'src-tauri/src/main.rs', - lang: 'rust', - value: ` -${snakeCase(metadata.name)}::Builder::new() - .path("/path/to/custom/directory") - .build(); - `, - }; -}); - -export const setCollectionPath = snippetGroup((metadata) => { - const title = snakeCase(metadata.title!); - const pascalTitle = pascalCase(metadata.title ?? ''); - return [ - { - id: 'set-collection-path-ts', - label: 'JavaScript', - lang: 'typescript', - value: ` -import { set${pascalTitle}Path } from '${metadata.name}'; - -await set${pascalTitle}Path('/path/to/new/directory'); - `, - }, - { - id: 'set-collection-path-rs', - label: 'Rust', - lang: 'rust', - value: ` -use ${snakeCase(metadata.name)}::ManagerExt; - -manager.${title}().set_path("/path/to/new/directory"); -`, - }, - ]; -}); diff --git a/docs/src/content/guide/persisting-state/snippets/index.ts b/docs/src/content/guide/persisting-state/snippets/index.ts deleted file mode 100644 index 67e73f07..00000000 --- a/docs/src/content/guide/persisting-state/snippets/index.ts +++ /dev/null @@ -1,78 +0,0 @@ -import { snakeCase } from 'change-case'; -import { snippetGroup } from '$stores/snippet'; - -export * from './save-on-change'; -export * from './custom-directory'; - -export const saveStores = snippetGroup((metadata) => { - const title = snakeCase(metadata.title!); - return [ - { - id: 'save-stores-ts', - label: 'JavaScript', - lang: 'typescript', - value: ` -import { save, saveAll } from '${metadata.name}'; - -// Save a single store. -await save('my-store'); - -// Save some stores. -await save('store-1', 'store-2', 'store-3'); - -// Save all stores. -await saveAll(); - `, - }, - { - id: 'save-stores-rs', - label: 'Rust', - lang: 'rust', - value: ` -use ${snakeCase(metadata.name)}::ManagerExt; - -// Here, "manager" represents any type that implements the "Manager" trait provided by Tauri. -// This includes "AppHandle", "Window", and "WebviewWindow". -// See: https://docs.rs/tauri/latest/tauri/trait.Manager.html - -// Save a single store. -manager.${title}().save("my-store"); - -// Save some stores. -manager.${title}().save_some(&["my-store", "my-store-2"]); - -// Save all stores. -manager.${title}().save_all(); - `, - }, - ]; -}); - -export const autosave = snippetGroup((metadata) => { - return { - id: 'autosave', - label: 'src-tauri/src/main.rs', - lang: 'rust', - value: ` -use std::time::Duration; - -// Save every five minutes. -${snakeCase(metadata.name)}::Builder::new() - .autosave(Duration::from_secs(300)) - .build(); - `, - }; -}); - -export const saveDenylist = snippetGroup((metadata) => { - return { - id: 'save-denylist', - label: 'src-tauri/src/main.rs', - lang: 'rust', - value: ` -${snakeCase(metadata.name)}::Builder::new() - .save_denylist(&["store-1", "store-2"]) - .build(); - `, - }; -}); diff --git a/docs/src/content/guide/persisting-state/snippets/save-on-change.ts b/docs/src/content/guide/persisting-state/snippets/save-on-change.ts deleted file mode 100644 index 46c56a83..00000000 --- a/docs/src/content/guide/persisting-state/snippets/save-on-change.ts +++ /dev/null @@ -1,61 +0,0 @@ -import { snippet } from '$stores/snippet'; - -export const saveOnChange = snippet((metadata) => { - const name = metadata.name as TauriPlugin; - switch (name) { - case 'tauri-plugin-pinia': { - return ` -import { ref } from 'vue'; -import { defineStore } from 'pinia'; - -function store() { - const counter = ref(0); - return { counter }; -} - -export const useStore = defineStore('store', store, { - tauri: { - saveOnChange: true, - - // You can also debounce or throttle when saving. - // This is optional. The default behavior is to save immediately. - saveStrategy: 'debounce', - saveInterval: 1000, - }, -}); - `; - } - - case 'tauri-plugin-svelte': { - return ` -import { Store } from 'tauri-plugin-svelte'; - -const value = { counter: 0 }; -const store = new Store('store', value, { - saveOnChange: true, - - // You can also debounce or throttle when saving. - // This is optional. The default behavior is to save immediately. - saveStrategy: 'debounce', - saveInterval: 1000, -}); - `; - } - - case 'tauri-plugin-valtio': { - return ` -import { store } from 'tauri-plugin-valtio'; - -const value = { counter: 0 }; -const store = store('store', value, { - saveOnChange: true, - - // You can also debounce or throttle when saving. - // This is optional. The default behavior is to save immediately. - saveStrategy: 'debounce', - saveInterval: 1000, -}); - `; - } - } -}); diff --git a/docs/src/content/guide/synchronization/snippets/sync-options.ts b/docs/src/content/guide/synchronization/snippets.ts similarity index 70% rename from docs/src/content/guide/synchronization/snippets/sync-options.ts rename to docs/src/content/guide/synchronization/snippets.ts index 510a338e..cd9671c2 100644 --- a/docs/src/content/guide/synchronization/snippets/sync-options.ts +++ b/docs/src/content/guide/synchronization/snippets.ts @@ -1,4 +1,18 @@ -import { snippet } from '$stores/snippet'; +import { snakeCase } from 'change-case'; +import { snippet, snippetGroup } from '$stores/snippet'; + +export const syncDenylist = snippetGroup((metadata) => { + return { + id: 'sync-denylist', + label: 'src-tauri/src/main.rs', + lang: 'rust', + value: ` +${snakeCase(metadata.name)}::Builder::new() + .sync_denylist(&["store-1", "store-2"]) + .build(); + `, + }; +}); export const syncOptions = snippet((metadata) => { const name = metadata.name as TauriPlugin; diff --git a/docs/src/content/guide/synchronization/snippets/index.ts b/docs/src/content/guide/synchronization/snippets/index.ts deleted file mode 100644 index 0c5d9aa4..00000000 --- a/docs/src/content/guide/synchronization/snippets/index.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { snakeCase } from 'change-case'; -import { snippetGroup } from '$stores/snippet'; - -export * from './sync-options'; - -export const syncDenylist = snippetGroup((metadata) => { - return { - id: 'sync-denylist', - label: 'src-tauri/src/main.rs', - lang: 'rust', - value: ` -${snakeCase(metadata.name)}::Builder::new() - .sync_denylist(&["store-1", "store-2"]) - .build(); - `, - }; -}); diff --git a/docs/src/lib/layout/content/aside.svelte.ts b/docs/src/layout/content/aside.svelte.ts similarity index 100% rename from docs/src/lib/layout/content/aside.svelte.ts rename to docs/src/layout/content/aside.svelte.ts diff --git a/docs/src/lib/layout/content/content-aside.svelte b/docs/src/layout/content/content-aside.svelte similarity index 100% rename from docs/src/lib/layout/content/content-aside.svelte rename to docs/src/layout/content/content-aside.svelte diff --git a/docs/src/lib/layout/content/content-footer.svelte b/docs/src/layout/content/content-footer.svelte similarity index 100% rename from docs/src/lib/layout/content/content-footer.svelte rename to docs/src/layout/content/content-footer.svelte diff --git a/docs/src/lib/layout/content/content.svelte b/docs/src/layout/content/content.svelte similarity index 100% rename from docs/src/lib/layout/content/content.svelte rename to docs/src/layout/content/content.svelte diff --git a/docs/src/lib/layout/content/index.ts b/docs/src/layout/content/index.ts similarity index 100% rename from docs/src/lib/layout/content/index.ts rename to docs/src/layout/content/index.ts diff --git a/docs/src/lib/layout/index.ts b/docs/src/layout/index.ts similarity index 100% rename from docs/src/lib/layout/index.ts rename to docs/src/layout/index.ts diff --git a/docs/src/lib/layout/layout.svelte b/docs/src/layout/layout.svelte similarity index 100% rename from docs/src/lib/layout/layout.svelte rename to docs/src/layout/layout.svelte diff --git a/docs/src/lib/layout/navbar/constants.ts b/docs/src/layout/navbar/constants.ts similarity index 100% rename from docs/src/lib/layout/navbar/constants.ts rename to docs/src/layout/navbar/constants.ts diff --git a/docs/src/lib/layout/navbar/index.ts b/docs/src/layout/navbar/index.ts similarity index 100% rename from docs/src/lib/layout/navbar/index.ts rename to docs/src/layout/navbar/index.ts diff --git a/docs/src/lib/layout/navbar/navbar-desktop.svelte b/docs/src/layout/navbar/navbar-desktop.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar-desktop.svelte rename to docs/src/layout/navbar/navbar-desktop.svelte diff --git a/docs/src/lib/layout/navbar/navbar-menu.svelte b/docs/src/layout/navbar/navbar-menu.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar-menu.svelte rename to docs/src/layout/navbar/navbar-menu.svelte diff --git a/docs/src/lib/layout/navbar/navbar-mobile.svelte b/docs/src/layout/navbar/navbar-mobile.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar-mobile.svelte rename to docs/src/layout/navbar/navbar-mobile.svelte diff --git a/docs/src/lib/layout/navbar/navbar-plugin.svelte b/docs/src/layout/navbar/navbar-plugin.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar-plugin.svelte rename to docs/src/layout/navbar/navbar-plugin.svelte diff --git a/docs/src/lib/layout/navbar/navbar-social.svelte b/docs/src/layout/navbar/navbar-social.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar-social.svelte rename to docs/src/layout/navbar/navbar-social.svelte diff --git a/docs/src/lib/layout/navbar/navbar.svelte b/docs/src/layout/navbar/navbar.svelte similarity index 100% rename from docs/src/lib/layout/navbar/navbar.svelte rename to docs/src/layout/navbar/navbar.svelte diff --git a/docs/src/lib/layout/sidebar/header.ts b/docs/src/layout/sidebar/header.ts similarity index 100% rename from docs/src/lib/layout/sidebar/header.ts rename to docs/src/layout/sidebar/header.ts diff --git a/docs/src/lib/layout/sidebar/index.ts b/docs/src/layout/sidebar/index.ts similarity index 100% rename from docs/src/lib/layout/sidebar/index.ts rename to docs/src/layout/sidebar/index.ts diff --git a/docs/src/lib/layout/sidebar/mode.ts b/docs/src/layout/sidebar/mode.ts similarity index 100% rename from docs/src/lib/layout/sidebar/mode.ts rename to docs/src/layout/sidebar/mode.ts diff --git a/docs/src/lib/layout/sidebar/sidebar-footer.svelte b/docs/src/layout/sidebar/sidebar-footer.svelte similarity index 100% rename from docs/src/lib/layout/sidebar/sidebar-footer.svelte rename to docs/src/layout/sidebar/sidebar-footer.svelte diff --git a/docs/src/lib/layout/sidebar/sidebar-header.svelte b/docs/src/layout/sidebar/sidebar-header.svelte similarity index 100% rename from docs/src/lib/layout/sidebar/sidebar-header.svelte rename to docs/src/layout/sidebar/sidebar-header.svelte diff --git a/docs/src/lib/layout/sidebar/sidebar-menu-item.svelte b/docs/src/layout/sidebar/sidebar-menu-item.svelte similarity index 100% rename from docs/src/lib/layout/sidebar/sidebar-menu-item.svelte rename to docs/src/layout/sidebar/sidebar-menu-item.svelte diff --git a/docs/src/lib/layout/sidebar/sidebar.svelte b/docs/src/layout/sidebar/sidebar.svelte similarity index 97% rename from docs/src/lib/layout/sidebar/sidebar.svelte rename to docs/src/layout/sidebar/sidebar.svelte index 9cdd61a9..58dd4631 100644 --- a/docs/src/lib/layout/sidebar/sidebar.svelte +++ b/docs/src/layout/sidebar/sidebar.svelte @@ -26,6 +26,7 @@ {@render guide('persisting-state', 'Persisting state')} {@render guide('synchronization', 'Synchronization')} {@render guide('accessing-from-rust', 'Accessing from Rust')} + {@render guide('lifecycle-hooks', 'Lifecycle hooks')} diff --git a/docs/src/lib/glob/version.ts b/docs/src/lib/glob/version.ts index 099ba2fb..e79ad08a 100644 --- a/docs/src/lib/glob/version.ts +++ b/docs/src/lib/glob/version.ts @@ -12,7 +12,7 @@ export function sortVersions(versions: Record): ComponentTuple[ function parse(name: string) { const version = versionFileRegex.exec(name)?.[1]; if (!version) { - throw new TypeError(`Invalid version file name: ${name}`); + throw new TypeError(`invalid version file name: ${name}`); } return version; diff --git a/docs/src/lib/stores/persistent.ts b/docs/src/lib/stores/persistent.ts index f5d7f43c..40bbc654 100644 --- a/docs/src/lib/stores/persistent.ts +++ b/docs/src/lib/stores/persistent.ts @@ -17,10 +17,12 @@ class Persistent { public set(value: T) { this.value.set(value); - if (value.length === 0) { - localStorage.removeItem(this.key); - } else { - localStorage.setItem(this.key, value); + if (browser) { + if (value.length === 0) { + localStorage.removeItem(this.key); + } else { + localStorage.setItem(this.key, value); + } } } diff --git a/docs/src/lib/url.ts b/docs/src/lib/url.ts index 016f599d..d260b498 100644 --- a/docs/src/lib/url.ts +++ b/docs/src/lib/url.ts @@ -1,9 +1,6 @@ -export const npm = { - shared: 'https://www.npmjs.com/package/@tauri-store/shared', -} as const; - export const DISCORD = 'https://discord.gg/ARd7McmVNv'; export const GITHUB = 'https://github.com/ferreira-tb/tauri-store'; export const HOME = 'https://tb.dev.br/tauri-store/'; export const ISSUES = 'https://github.com/ferreira-tb/tauri-store/issues'; export const LICENSE = 'https://raw.githubusercontent.com/ferreira-tb/tauri-store/refs/heads/main/LICENSE'; +export const NPM_SHARED ='https://www.npmjs.com/package/@tauri-store/shared'; diff --git a/docs/src/routes/+page.svelte b/docs/src/routes/+page.svelte index 6d8cd6f9..7e5425af 100644 --- a/docs/src/routes/+page.svelte +++ b/docs/src/routes/+page.svelte @@ -4,9 +4,9 @@ import * as Alert from '$components/alert'; import { useSidebar } from '$layout/sidebar'; import metadata from '$lib/data/metadata.json'; + import * as Table from '$components/base/table'; import { Container } from '$components/container'; import { Ext, PluginLink } from '$components/link'; - import * as Table from '$lib/components/base/table'; import { resolveIcon, worksWith } from '$lib/plugin'; const sidebar = useSidebar(); diff --git a/docs/src/routes/guide/accessing-from-rust/+page.svelte b/docs/src/routes/guide/accessing-from-rust/+page.svelte index 2612de6e..f75bc9fd 100644 --- a/docs/src/routes/guide/accessing-from-rust/+page.svelte +++ b/docs/src/routes/guide/accessing-from-rust/+page.svelte @@ -1,11 +1,11 @@ + + + Lifecycle hooks | tauri-store + + + + + + + + +

+ JavaScript hooks can be registered using the hooks property of the store options. +

+ + +
+ + + {#snippet titleSnippet({ title })} + {title} + {/snippet} + +

+ Registers a hook to be called before a store sends its state to Rust. This is useful for + transforming the state before it is sent to the backend. +

+ + +
+ + + {#snippet titleSnippet({ title })} + {title} + {/snippet} + +

+ Registers a hook to be called before a store attempts to update itself with data from Rust. This + can be used to modify the state before the changes are applied. +

+ + +
+ + + {#snippet titleSnippet({ title })} + {title} + {/snippet} + +

Registers a hook to be called when an error is thrown by a store.

+ + +
+ + + + + {#snippet titleSnippet({ title })} + {title} + {/snippet} + +

Registers a hook to be called when a store is loaded.

+ + +
diff --git a/docs/svelte.config.js b/docs/svelte.config.js index 9835acba..1fa94d79 100644 --- a/docs/svelte.config.js +++ b/docs/svelte.config.js @@ -15,9 +15,9 @@ const config = { base: '/tauri-store', }, alias: { - $components: './src/lib/components', + $components: './src/components', $content: './src/content', - $layout: './src/lib/layout', + $layout: './src/layout', $stores: './src/lib/stores', }, }, diff --git a/eslint.config.js b/eslint.config.js index 1161de7a..5708d174 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -36,6 +36,7 @@ export default defineConfig({ 'svelte/no-inline-styles': 'off', }, typescript: { + '@typescript-eslint/consistent-type-definitions': 'off', '@typescript-eslint/naming-convention': 'off', '@typescript-eslint/no-confusing-void-expression': 'off', '@typescript-eslint/no-explicit-any': 'off', diff --git a/examples/.shared/javascript/package.json b/examples/.shared/javascript/package.json index 00d682de..3babcb70 100644 --- a/examples/.shared/javascript/package.json +++ b/examples/.shared/javascript/package.json @@ -3,6 +3,9 @@ "type": "module", "packageManager": "pnpm@10.0.0", "private": true, + "scripts": { + "type-check": "tsc --noEmit" + }, "dependencies": { "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", diff --git a/examples/.shared/javascript/src/stores.ts b/examples/.shared/javascript/src/stores.ts index 94b092a6..3d053917 100644 --- a/examples/.shared/javascript/src/stores.ts +++ b/examples/.shared/javascript/src/stores.ts @@ -1,34 +1,55 @@ -import type { StoreOptions } from '@tauri-store/shared'; +import type { Option, StoreOptions } from '@tauri-store/shared'; -export const counter = { +type Counter = { + counter: number; + counter2: Option; + counter3: Option; + nested: { foo: { bar: { baz: number } } }; + nested2: Option<{ foo: { bar: Option<{ baz: number }> } }>; + nested3: Option<{ foo: { bar: { baz: Option } } }>; +}; + +export const counter: Counter = { counter: 0, counter2: 0, counter3: 0, nested: { foo: { bar: { baz: 0 } } }, + nested2: { foo: { bar: { baz: 0 } } }, + nested3: { foo: { bar: { baz: 0 } } }, }; -export const debouncedCounter = { - debouncedCounter: 0, - debouncedCounter2: 0, - debouncedCounter3: 0, -}; - -export const throttledCounter = { - throttledCounter: 0, - throttledCounter2: 0, - throttledCounter3: 0, -}; - -export const counterOptions: StoreOptions = { - filterKeys: ['counter', 'counter2', 'nested'], +export const counterOptions: StoreOptions = { + filterKeys: ['counter', 'nested', 'nested2', 'nested3'], filterKeysStrategy: 'pick', saveOnExit: true, saveOnChange: true, saveStrategy: 'debounce', saveInterval: 1000, + + hooks: { + beforeBackendSync: (state) => { + state.counter2 &&= null; + if (state.nested2) { + state.nested2.foo.bar &&= null; + } + + log(state, 'beforeBackendSync'); + return state; + }, + beforeFrontendSync: (state) => { + state.nested3 = { foo: { bar: { baz: Date.now() } } }; + return state; + }, + }, +}; + +export const debouncedCounter = { + debouncedCounter: 0, + debouncedCounter2: 0, + debouncedCounter3: 0, }; -export const debouncedCounterOptions: StoreOptions = { +export const debouncedCounterOptions: StoreOptions = { filterKeys: ['debouncedCounter3'], filterKeysStrategy: 'omit', saveOnExit: true, @@ -37,7 +58,13 @@ export const debouncedCounterOptions: StoreOptions = { syncInterval: 1000, }; -export const throttledCounterOptions: StoreOptions = { +export const throttledCounter = { + throttledCounter: 0, + throttledCounter2: 0, + throttledCounter3: 0, +}; + +export const throttledCounterOptions: StoreOptions = { filterKeys: ['throttledCounter3'], filterKeysStrategy: 'omit', saveOnExit: false, @@ -45,3 +72,9 @@ export const throttledCounterOptions: StoreOptions = { syncStrategy: 'throttle', syncInterval: 1000, }; + +function log(state: unknown, label?: string) { + if (label) console.log(label); + console.log(state); + console.log('-'.repeat(20)); +} diff --git a/examples/.shared/pinia/package.json b/examples/.shared/pinia/package.json index bff10a10..2cd2241b 100644 --- a/examples/.shared/pinia/package.json +++ b/examples/.shared/pinia/package.json @@ -3,6 +3,9 @@ "type": "module", "packageManager": "pnpm@10.0.0", "private": true, + "scripts": { + "type-check": "tsc --noEmit" + }, "dependencies": { "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", diff --git a/examples/.shared/pinia/src/stores/counter.ts b/examples/.shared/pinia/src/stores/counter.ts index fb83cc8e..1aae7ea6 100644 --- a/examples/.shared/pinia/src/stores/counter.ts +++ b/examples/.shared/pinia/src/stores/counter.ts @@ -8,6 +8,8 @@ function store() { const counter2 = ref(value.counter2); const counter3 = ref(value.counter3); const nested = ref(value.nested); + const nested2 = ref(value.nested2); + const nested3 = ref(value.nested3); function increment() { counter.value++; @@ -22,6 +24,8 @@ function store() { counter2, counter3, nested, + nested2, + nested3, increment, incrementNested, }; diff --git a/examples/.shared/react/package.json b/examples/.shared/react/package.json index 6fc66927..1e815bdf 100644 --- a/examples/.shared/react/package.json +++ b/examples/.shared/react/package.json @@ -3,6 +3,9 @@ "type": "module", "packageManager": "pnpm@10.0.0", "private": true, + "scripts": { + "type-check": "tsc --noEmit" + }, "dependencies": { "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", diff --git a/examples/pinia/package.json b/examples/pinia/package.json index f589f180..5fe03281 100644 --- a/examples/pinia/package.json +++ b/examples/pinia/package.json @@ -4,6 +4,7 @@ "packageManager": "pnpm@10.2.1", "private": true, "scripts": { + "type-check": "vue-tsc --noEmit", "vite:dev": "vite dev", "vite:build": "vite build" }, diff --git a/examples/svelte-runes/package.json b/examples/svelte-runes/package.json index a7fb523f..d912361b 100644 --- a/examples/svelte-runes/package.json +++ b/examples/svelte-runes/package.json @@ -5,6 +5,7 @@ "private": true, "scripts": { "sync": "svelte-kit sync", + "type-check": "tsc --noEmit", "vite:dev": "svelte-kit sync && vite dev", "vite:build": "svelte-kit sync && vite build" }, @@ -15,7 +16,7 @@ "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", - "@tb-dev/utils": "^4.1.3", + "@tb-dev/utils": "^4.1.5", "example-shared-js": "workspace:*", "svelte": "^5.19.9", "svelte-check": "^4.1.4", diff --git a/examples/svelte/package.json b/examples/svelte/package.json index b96c33c8..50252b7c 100644 --- a/examples/svelte/package.json +++ b/examples/svelte/package.json @@ -5,6 +5,7 @@ "private": true, "scripts": { "sync": "svelte-kit sync", + "type-check": "tsc --noEmit", "vite:dev": "svelte-kit sync && vite dev", "vite:build": "svelte-kit sync && vite build" }, @@ -15,7 +16,7 @@ "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", - "@tb-dev/utils": "^4.1.3", + "@tb-dev/utils": "^4.1.5", "example-shared-js": "workspace:*", "svelte": "^5.19.9", "svelte-check": "^4.1.4", diff --git a/examples/valtio/package.json b/examples/valtio/package.json index e96bfb28..5e701880 100644 --- a/examples/valtio/package.json +++ b/examples/valtio/package.json @@ -4,6 +4,7 @@ "packageManager": "pnpm@10.2.1", "private": true, "scripts": { + "type-check": "tsc --noEmit", "vite:build": "vite build", "vite:dev": "vite dev" }, @@ -11,7 +12,7 @@ "@tauri-apps/api": "^2.2.0", "@tauri-apps/plugin-process": "^2.2.0", "@tauri-apps/plugin-shell": "^2.2.0", - "@tb-dev/utils": "^4.1.3", + "@tb-dev/utils": "^4.1.5", "@vitejs/plugin-react": "^4.3.4", "example-shared-js": "workspace:*", "example-shared-react": "workspace:*", diff --git a/package.json b/package.json index 8e89c759..1cbf309a 100644 --- a/package.json +++ b/package.json @@ -19,23 +19,23 @@ "format": "prettier . --write && cargo fmt --all", "install:cli": "cargo install --path ./crates/tauri-store-cli --force", "svelte:sync": "pnpm run --recursive --if-present sync", - "test:crate": "cargo +nightly test -p tauri-store --tests -- --test-threads=1", + "test:crate": "pwsh scripts/test.ps1", "type-check": "pnpm run -r type-check", "update": "pwsh scripts/update.ps1" }, "devDependencies": { - "@tb-dev/eslint-config": "^6.2.5", + "@tb-dev/eslint-config": "^6.2.6", "@types/node": "^22.13.1", "@types/react": "^19.0.8", "@types/react-dom": "^19.0.3", "eslint": "^9.20.0", - "prettier": "^3.4.2", + "prettier": "^3.5.0", "prettier-plugin-css-order": "^2.1.2", "prettier-plugin-svelte": "^3.3.3", "prettier-plugin-tailwindcss": "^0.6.11", "tslib": "^2.8.1", "typedoc": "^0.27.6", - "typedoc-plugin-mdn-links": "^4.0.11", + "typedoc-plugin-mdn-links": "^4.0.12", "typescript": "~5.7.3", "vite": "^6.1.0", "vite-plugin-dts": "^4.5.0" diff --git a/packages/shared/README.md b/packages/shared/README.md index da2e59eb..9c0d382c 100644 --- a/packages/shared/README.md +++ b/packages/shared/README.md @@ -3,3 +3,21 @@ Common utilities for [Tauri Store](https://tb.dev.br/tauri-store/) plugins. Reference: https://tb.dev.br/tauri-store/reference/shared/index.html + +## Documentation + +Check the [documentation](https://tb.dev.br/tauri-store/) for more information on how to install and use the plugins. + +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + +## Supported Tauri Version + +The plugins require Tauri `2.0` or later. diff --git a/packages/shared/package.json b/packages/shared/package.json index 422430af..87d0698e 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@tauri-store/shared", - "version": "0.4.2", + "version": "0.5.0", "description": "Utilities for Tauri Store", "type": "module", "private": false, diff --git a/packages/shared/src/defaults.ts b/packages/shared/src/defaults.ts index c7a0f6ef..8f1633f7 100644 --- a/packages/shared/src/defaults.ts +++ b/packages/shared/src/defaults.ts @@ -4,6 +4,10 @@ export const DEFAULT_FILTER_KEYS: Required['filterKeys'] = null; export const DEFAULT_FILTER_KEYS_STRATEGY: Required['filterKeysStrategy'] = 'omit'; +export const DEFAULT_HOOKS: Required['hooks'] = { + error: console.error.bind(console), +}; + export const DEFAULT_ON_ERROR: Required['onError'] = console.error.bind(console); export const DEFAULT_SAVE_INTERVAL: Required['saveInterval'] = 0; diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts index 1bd26173..1d26c444 100644 --- a/packages/shared/src/index.ts +++ b/packages/shared/src/index.ts @@ -11,6 +11,7 @@ export { type LooseTimeStrategyKind, TimeStrategy, type TimeStrategyKind } from export { DEFAULT_FILTER_KEYS, DEFAULT_FILTER_KEYS_STRATEGY, + DEFAULT_HOOKS, DEFAULT_ON_ERROR, DEFAULT_SAVE_INTERVAL, DEFAULT_SAVE_ON_CHANGE, @@ -25,13 +26,13 @@ export type { Fn, MaybePromise, Nil, - OnErrorFn, Option, State, StateChangePayload, StoreBackendOptions, StoreBackendRawOptions, StoreFrontendOptions, + StoreHooks, StoreKeyFilter, StoreKeyFilterStrategy, StoreOptions, diff --git a/packages/shared/src/store.ts b/packages/shared/src/store.ts index 82893cb9..d38ad08d 100644 --- a/packages/shared/src/store.ts +++ b/packages/shared/src/store.ts @@ -5,11 +5,11 @@ import { DEFAULT_FILTER_KEYS_STRATEGY } from './defaults'; import { type LooseTimeStrategyKind, TimeStrategy } from './time-strategy'; import type { ConfigChangePayload, - OnErrorFn, Option, State, StateChangePayload, StoreBackendRawOptions, + StoreHooks, StoreKeyFilter, StoreKeyFilterStrategy, StoreOptions, @@ -23,7 +23,7 @@ import type { */ export abstract class BaseStore { public abstract readonly id: string; - protected abstract readonly options: StoreOptions; + protected abstract readonly options: StoreOptions; /** Whether the synchronization is enabled. */ protected enabled = false; @@ -94,7 +94,7 @@ export abstract class BaseStore { /** Stops listening for state changes coming from the backend. */ protected unlisten: Option<() => void>; - private async listenOptions() { + private async listenOptions(): Promise<() => void> { return listen(StoreEvent.ConfigChange, ({ payload }) => { if (this.enabled && payload.id === this.id) { this.patchOptions(payload.config); @@ -122,16 +122,22 @@ export abstract class BaseStore { protected abstract patchBackend(state: S): void; - protected patchBackendHelper(fn: ReturnType, state: S) { + protected patchBackendHelper(fn: ReturnType, state: S): void { if (this.enabled) { - const _state = this.applyKeyFilters(state); - fn(this.id, _state).catch((err) => this.onError?.(err)); + let _state = this.options.hooks?.beforeBackendSync + ? this.options.hooks.beforeBackendSync(state) + : state; + + if (_state) { + _state = this.applyKeyFilters(_state); + fn(this.id, _state).catch((err) => this.onError?.(err)); + } } } protected abstract setOptions(): Promise; - protected async setOptionsHelper(fn: ReturnType) { + protected async setOptionsHelper(fn: ReturnType): Promise { try { await fn(this.id, { saveInterval: this.options.saveInterval, @@ -144,7 +150,7 @@ export abstract class BaseStore { } } - private patchOptions(config: StoreBackendRawOptions) { + private patchOptions(config: StoreBackendRawOptions): void { if (typeof config.saveOnChange === 'boolean') { this.options.saveOnChange = config.saveOnChange; } @@ -156,7 +162,7 @@ export abstract class BaseStore { } } - protected applyKeyFilters(state: S): Partial { + protected applyKeyFilters(state: Partial): Partial { if (!this.options.filterKeys) { return state; } @@ -189,10 +195,10 @@ export abstract class BaseStore { } /** - * {@link StoreOptions.onError} + * {@link StoreHooks.error} */ - protected get onError(): Option { - return this.options.onError; + protected get onError(): Option['error']> { + return this.options.onError ?? this.options.hooks?.error; } } diff --git a/packages/shared/src/types/store.ts b/packages/shared/src/types/store.ts index 88c914df..b6a874d9 100644 --- a/packages/shared/src/types/store.ts +++ b/packages/shared/src/types/store.ts @@ -1,22 +1,20 @@ import type { MaybePromise, Option } from './utils'; import type { LooseTimeStrategyKind, TimeStrategyRawTuple } from '../time-strategy'; -export type OnErrorFn = (error: unknown) => MaybePromise; - /** Options that can also be updated from Rust. */ export interface StoreBackendOptions { - /** - * Saves the store automatically on a graceful exit. - * @default true - */ - saveOnExit?: boolean; - /** * Saves the store whenever there is a state change. * @default false */ saveOnChange?: boolean; + /** + * Saves the store automatically on a graceful exit. + * @default true + */ + saveOnExit?: boolean; + /** * Interval in milliseconds to use when saving the store. * This option is only valid when {@link StoreBackendOptions.saveStrategy} is set to `debounce` or `throttle`. @@ -44,7 +42,7 @@ export interface StoreBackendRawOptions { } /** Options that can only be set from JavaScript. */ -export interface StoreFrontendOptions { +export interface StoreFrontendOptions { /** * Keys the plugin should save or ignore. * @@ -68,11 +66,18 @@ export interface StoreFrontendOptions { */ readonly filterKeysStrategy?: StoreKeyFilterStrategy; + /** + * Hooks to run custom logic at specific points in the store lifecycle. + */ + readonly hooks?: StoreHooks; + /** * Custom error handler. * @default console.error + * + * @deprecated Use {@link StoreHooks.error} instead. */ - readonly onError?: OnErrorFn; + readonly onError?: StoreHooks['error']; /** * Interval in milliseconds to use when syncing the store with the backend. @@ -100,8 +105,32 @@ export interface StoreFrontendOptions { readonly syncStrategy?: LooseTimeStrategyKind; } +export interface StoreHooks { + /** + * Hook that runs **before** the store sends its state to Rust. + * Can be used to modify the state before the sync. + * + * Returning a nullish value will abort the operation. + */ + readonly beforeBackendSync?: (state: S) => Option>; + + /** + * Hook that runs **before** the store attempts to update itself with data coming from Rust. + * Can be used to modify the state before the changes are applied. + * + * Returning a nullish value will abort the operation. + */ + readonly beforeFrontendSync?: (state: S) => Option>; + + /** + * Custom error handler. + * @default console.error + */ + readonly error?: (error: unknown) => MaybePromise; +} + /** Options to configure how the store should behave. */ -export type StoreOptions = StoreBackendOptions & StoreFrontendOptions; +export type StoreOptions = StoreBackendOptions & StoreFrontendOptions; /** A contract that a store must adhere to in order to be considered a valid implementation. */ export interface TauriStoreContract { diff --git a/packages/tauri-plugin-pinia/README.md b/packages/tauri-plugin-pinia/README.md index 056a4786..700f030b 100644 --- a/packages/tauri-plugin-pinia/README.md +++ b/packages/tauri-plugin-pinia/README.md @@ -13,6 +13,16 @@ Persistent [Pinia](https://pinia.vuejs.org/) stores for Tauri and Vue. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/packages/tauri-plugin-pinia/package.json b/packages/tauri-plugin-pinia/package.json index 81c66402..1a5f595c 100644 --- a/packages/tauri-plugin-pinia/package.json +++ b/packages/tauri-plugin-pinia/package.json @@ -1,6 +1,6 @@ { "name": "tauri-plugin-pinia", - "version": "1.1.2", + "version": "1.2.0", "description": "Persistent Pinia stores for Tauri", "type": "module", "private": false, diff --git a/packages/tauri-plugin-pinia/src/index.ts b/packages/tauri-plugin-pinia/src/index.ts index af354ca4..0e654775 100644 --- a/packages/tauri-plugin-pinia/src/index.ts +++ b/packages/tauri-plugin-pinia/src/index.ts @@ -9,6 +9,7 @@ export type { State, StoreBackendOptions, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriPluginPiniaOptions, TauriPluginPiniaStoreOptions, diff --git a/packages/tauri-plugin-pinia/src/store.ts b/packages/tauri-plugin-pinia/src/store.ts index 1d187a69..5a672f43 100644 --- a/packages/tauri-plugin-pinia/src/store.ts +++ b/packages/tauri-plugin-pinia/src/store.ts @@ -7,6 +7,7 @@ import { debounce, DEFAULT_FILTER_KEYS, DEFAULT_FILTER_KEYS_STRATEGY, + DEFAULT_HOOKS, DEFAULT_ON_ERROR, DEFAULT_SAVE_ON_CHANGE, DEFAULT_SAVE_ON_EXIT, @@ -36,7 +37,8 @@ export class Store extends BaseStore { filterKeys: options.filterKeys ?? DEFAULT_FILTER_KEYS, filterKeysStrategy: options.filterKeysStrategy ?? DEFAULT_FILTER_KEYS_STRATEGY, flush: options.flush ?? 'pre', - onError: options.onError ?? DEFAULT_ON_ERROR, + hooks: options.hooks ?? DEFAULT_HOOKS, + onError: options.onError ?? options.hooks?.error ?? DEFAULT_ON_ERROR, saveInterval: saveStrategy.interval, saveOnChange: options.saveOnChange ?? DEFAULT_SAVE_ON_CHANGE, saveOnExit: options.saveOnExit ?? DEFAULT_SAVE_ON_EXIT, @@ -77,8 +79,14 @@ export class Store extends BaseStore { } protected patchSelf(state: State): void { - const _state = this.applyKeyFilters(state); - this.ctx.store.$patch(_state as typeof this.ctx.store.$state); + let _state = this.options.hooks?.beforeFrontendSync + ? this.options.hooks.beforeFrontendSync(state) + : state; + + if (_state) { + _state = this.applyKeyFilters(_state); + this.ctx.store.$patch(_state as typeof this.ctx.store.$state); + } } protected patchBackend(state: State): void { diff --git a/packages/tauri-plugin-pinia/src/types.ts b/packages/tauri-plugin-pinia/src/types.ts index 603d5a4d..34278169 100644 --- a/packages/tauri-plugin-pinia/src/types.ts +++ b/packages/tauri-plugin-pinia/src/types.ts @@ -7,6 +7,7 @@ export type { State, StoreBackendOptions, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriStoreContract, } from '@tauri-store/shared'; diff --git a/packages/tauri-plugin-svelte/README.md b/packages/tauri-plugin-svelte/README.md index fefee472..19527334 100644 --- a/packages/tauri-plugin-svelte/README.md +++ b/packages/tauri-plugin-svelte/README.md @@ -13,6 +13,16 @@ Persistent Svelte stores for Tauri. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/packages/tauri-plugin-svelte/package.json b/packages/tauri-plugin-svelte/package.json index d10f04c9..e016d518 100644 --- a/packages/tauri-plugin-svelte/package.json +++ b/packages/tauri-plugin-svelte/package.json @@ -1,7 +1,7 @@ { "name": "tauri-plugin-svelte", - "version": "1.1.1", - "description": "Persistent Svelte stores for Tauri", + "version": "1.2.0", + "description": "Persistent Svelte stores and runes for Tauri", "type": "module", "private": false, "packageManager": "pnpm@10.2.1", diff --git a/packages/tauri-plugin-svelte/src/lib/index.ts b/packages/tauri-plugin-svelte/src/lib/index.ts index 712334a9..901df450 100644 --- a/packages/tauri-plugin-svelte/src/lib/index.ts +++ b/packages/tauri-plugin-svelte/src/lib/index.ts @@ -9,6 +9,7 @@ export type { StoreBackendOptions, StoreContract, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriPluginSvelteRuneStoreOptions, TauriPluginSvelteStoreOptions, diff --git a/packages/tauri-plugin-svelte/src/lib/runes/store.svelte.ts b/packages/tauri-plugin-svelte/src/lib/runes/store.svelte.ts index 7eaea50c..c0d400a9 100644 --- a/packages/tauri-plugin-svelte/src/lib/runes/store.svelte.ts +++ b/packages/tauri-plugin-svelte/src/lib/runes/store.svelte.ts @@ -6,17 +6,19 @@ import { debounce, DEFAULT_FILTER_KEYS, DEFAULT_FILTER_KEYS_STRATEGY, + DEFAULT_HOOKS, DEFAULT_ON_ERROR, DEFAULT_SAVE_ON_CHANGE, DEFAULT_SAVE_ON_EXIT, type Fn, type State, + type StoreHooks, type TauriStoreContract, throttle, TimeStrategy, } from '@tauri-store/shared'; -type Flush = TauriPluginSvelteRuneStoreOptions['flush']; +type Flush = TauriPluginSvelteRuneStoreOptions['flush']; const DEFAULT_FLUSH: NonNullable = 'post'; @@ -40,10 +42,10 @@ const DEFAULT_FLUSH: NonNullable = 'post'; export class RuneStore extends BaseStore implements TauriStoreContract { public readonly id: string; public readonly state: S = $state()!; - protected options: TauriPluginSvelteRuneStoreOptions; + protected options: TauriPluginSvelteRuneStoreOptions; protected override readonly flush = tick; - constructor(id: string, state: S, options: TauriPluginSvelteRuneStoreOptions = {}) { + constructor(id: string, state: S, options: TauriPluginSvelteRuneStoreOptions = {}) { super(); this.id = id; @@ -56,14 +58,15 @@ export class RuneStore extends BaseStore implements TauriSto filterKeys: options.filterKeys ?? DEFAULT_FILTER_KEYS, filterKeysStrategy: options.filterKeysStrategy ?? DEFAULT_FILTER_KEYS_STRATEGY, flush: options.flush ?? DEFAULT_FLUSH, - onError: options.onError ?? DEFAULT_ON_ERROR, + hooks: options.hooks ?? (DEFAULT_HOOKS as StoreHooks), + onError: options.onError ?? options.hooks?.error ?? DEFAULT_ON_ERROR, saveInterval: saveStrategy.interval, saveOnChange: options.saveOnChange ?? DEFAULT_SAVE_ON_CHANGE, saveOnExit: options.saveOnExit ?? DEFAULT_SAVE_ON_EXIT, saveStrategy: saveStrategy.strategy, syncInterval: syncStrategy.interval, syncStrategy: syncStrategy.strategy, - } satisfies Required; + } satisfies Required>; } protected readonly load = async (): Promise => { @@ -106,8 +109,14 @@ export class RuneStore extends BaseStore implements TauriSto }; protected readonly patchSelf = (state: S): void => { - const _state = this.applyKeyFilters(state); - Object.assign(this.state, _state); + let _state = this.options.hooks?.beforeFrontendSync + ? this.options.hooks.beforeFrontendSync(state) + : state; + + if (_state) { + _state = this.applyKeyFilters(_state); + Object.assign(this.state, _state); + } }; protected readonly patchBackend = (state: S): void => { @@ -167,7 +176,7 @@ function createEffectRoot(fn: Fn, flush: Flush = DEFAULT_FLUSH): Fn { export function runeStore( id: string, state: S, - options: TauriPluginSvelteRuneStoreOptions = {} + options: TauriPluginSvelteRuneStoreOptions = {} ): RuneStore { return new RuneStore(id, state, options); } diff --git a/packages/tauri-plugin-svelte/src/lib/store.ts b/packages/tauri-plugin-svelte/src/lib/store.ts index 41b5f841..8e33bc16 100644 --- a/packages/tauri-plugin-svelte/src/lib/store.ts +++ b/packages/tauri-plugin-svelte/src/lib/store.ts @@ -13,11 +13,13 @@ import { debounce, DEFAULT_FILTER_KEYS, DEFAULT_FILTER_KEYS_STRATEGY, + DEFAULT_HOOKS, DEFAULT_ON_ERROR, DEFAULT_SAVE_ON_CHANGE, DEFAULT_SAVE_ON_EXIT, type Fn, type State, + type StoreHooks, throttle, TimeStrategy, } from '@tauri-store/shared'; @@ -58,10 +60,10 @@ import { export class Store extends BaseStore implements StoreContract { public readonly id: string; private readonly store: Writable; - protected options: TauriPluginSvelteStoreOptions; + protected options: TauriPluginSvelteStoreOptions; protected override readonly flush = tick; - constructor(id: string, state: S, options: TauriPluginSvelteStoreOptions = {}) { + constructor(id: string, state: S, options: TauriPluginSvelteStoreOptions = {}) { super(); this.id = id; @@ -73,14 +75,15 @@ export class Store extends BaseStore implements StoreContrac this.options = { filterKeys: options.filterKeys ?? DEFAULT_FILTER_KEYS, filterKeysStrategy: options.filterKeysStrategy ?? DEFAULT_FILTER_KEYS_STRATEGY, - onError: options.onError ?? DEFAULT_ON_ERROR, + hooks: options.hooks ?? (DEFAULT_HOOKS as StoreHooks), + onError: options.onError ?? options.hooks?.error ?? DEFAULT_ON_ERROR, saveInterval: saveStrategy.interval, saveOnChange: options.saveOnChange ?? DEFAULT_SAVE_ON_CHANGE, saveOnExit: options.saveOnExit ?? DEFAULT_SAVE_ON_EXIT, saveStrategy: saveStrategy.strategy, syncInterval: syncStrategy.interval, syncStrategy: syncStrategy.strategy, - } satisfies Required; + } satisfies Required>; } public set(value: S): void { @@ -132,8 +135,14 @@ export class Store extends BaseStore implements StoreContrac } protected patchSelf(state: S): void { - const _state = this.applyKeyFilters(state); - this.update((value) => Object.assign(value, _state)); + let _state = this.options.hooks?.beforeFrontendSync + ? this.options.hooks.beforeFrontendSync(state) + : state; + + if (_state) { + _state = this.applyKeyFilters(_state); + this.update((value) => Object.assign(value, _state)); + } } protected patchBackend(state: S): void { @@ -180,7 +189,7 @@ export class Store extends BaseStore implements StoreContrac export function store( id: string, state: S, - options?: TauriPluginSvelteStoreOptions + options?: TauriPluginSvelteStoreOptions ): Store { return new Store(id, state, options); } diff --git a/packages/tauri-plugin-svelte/src/lib/types.ts b/packages/tauri-plugin-svelte/src/lib/types.ts index 5170fcb2..71d5db59 100644 --- a/packages/tauri-plugin-svelte/src/lib/types.ts +++ b/packages/tauri-plugin-svelte/src/lib/types.ts @@ -7,6 +7,7 @@ export type { State, StoreBackendOptions, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriStoreContract, } from '@tauri-store/shared'; @@ -14,7 +15,7 @@ export type { /** * Options for the Svelte store. */ -export type TauriPluginSvelteStoreOptions = StoreOptions; +export type TauriPluginSvelteStoreOptions = StoreOptions; /** * Implementing `Writable` ensures that the store also adheres to the Svelte store contract. @@ -26,7 +27,7 @@ export type StoreContract = TauriStoreContract & Writable; /** * Options for the Svelte rune store. */ -export interface TauriPluginSvelteRuneStoreOptions extends StoreOptions { +export interface TauriPluginSvelteRuneStoreOptions extends StoreOptions { /** * @see https://svelte.dev/docs/svelte/$effect#$effect.pre * @default 'post' diff --git a/packages/tauri-plugin-valtio/README.md b/packages/tauri-plugin-valtio/README.md index 58798171..985765fa 100644 --- a/packages/tauri-plugin-valtio/README.md +++ b/packages/tauri-plugin-valtio/README.md @@ -13,6 +13,16 @@ Persistent [Valtio](https://valtio.dev/) stores for Tauri and React. Check the [documentation](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) for more information on how to install and use the plugin. +## Plugins + +Currently, the following plugins are available: + +| Name | Version | Works with | +| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | +| [tauri-plugin-pinia](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-pinia) | [![npm](https://img.shields.io/npm/v/tauri-plugin-pinia.svg)](https://www.npmjs.com/package/tauri-plugin-pinia) | Vue, Nuxt | +| [tauri-plugin-svelte](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-svelte) | [![npm](https://img.shields.io/npm/v/tauri-plugin-svelte.svg)](https://www.npmjs.com/package/tauri-plugin-svelte) | Svelte | +| [tauri-plugin-valtio](https://tb.dev.br/tauri-store/guide/getting-started?plugin=tauri-plugin-valtio) | [![npm](https://img.shields.io/npm/v/tauri-plugin-valtio.svg)](https://www.npmjs.com/package/tauri-plugin-valtio) | React | + ## Supported Tauri Version -This plugin requires Tauri `2.0` or later. +The plugins require Tauri `2.0` or later. diff --git a/packages/tauri-plugin-valtio/package.json b/packages/tauri-plugin-valtio/package.json index 1395656c..32e1b781 100644 --- a/packages/tauri-plugin-valtio/package.json +++ b/packages/tauri-plugin-valtio/package.json @@ -1,6 +1,6 @@ { "name": "tauri-plugin-valtio", - "version": "1.0.0", + "version": "1.1.0", "description": "Persistent Valtio stores for Tauri", "type": "module", "private": false, diff --git a/packages/tauri-plugin-valtio/src/index.ts b/packages/tauri-plugin-valtio/src/index.ts index bd6609f2..7191ea78 100644 --- a/packages/tauri-plugin-valtio/src/index.ts +++ b/packages/tauri-plugin-valtio/src/index.ts @@ -7,6 +7,7 @@ export type { StoreBackendOptions, StoreBuilderReturn, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriPluginValtioStoreOptions, TauriStoreContract, diff --git a/packages/tauri-plugin-valtio/src/store.ts b/packages/tauri-plugin-valtio/src/store.ts index 07e656c3..9bfe32ff 100644 --- a/packages/tauri-plugin-valtio/src/store.ts +++ b/packages/tauri-plugin-valtio/src/store.ts @@ -6,11 +6,13 @@ import { debounce, DEFAULT_FILTER_KEYS, DEFAULT_FILTER_KEYS_STRATEGY, + DEFAULT_HOOKS, DEFAULT_ON_ERROR, DEFAULT_SAVE_ON_CHANGE, DEFAULT_SAVE_ON_EXIT, type Fn, type State, + type StoreHooks, throttle, TimeStrategy, } from '@tauri-store/shared'; @@ -18,9 +20,9 @@ import { export class Store extends BaseStore { public readonly id: string; public readonly state: S; - protected options: TauriPluginValtioStoreOptions; + protected options: TauriPluginValtioStoreOptions; - constructor(id: string, state: S, options: TauriPluginValtioStoreOptions = {}) { + constructor(id: string, state: S, options: TauriPluginValtioStoreOptions = {}) { super(); this.id = id; @@ -32,14 +34,15 @@ export class Store extends BaseStore { this.options = { filterKeys: options.filterKeys ?? DEFAULT_FILTER_KEYS, filterKeysStrategy: options.filterKeysStrategy ?? DEFAULT_FILTER_KEYS_STRATEGY, - onError: options.onError ?? DEFAULT_ON_ERROR, + hooks: options.hooks ?? (DEFAULT_HOOKS as StoreHooks), + onError: options.onError ?? options.hooks?.error ?? DEFAULT_ON_ERROR, saveInterval: saveStrategy.interval, saveOnChange: options.saveOnChange ?? DEFAULT_SAVE_ON_CHANGE, saveOnExit: options.saveOnExit ?? DEFAULT_SAVE_ON_EXIT, saveStrategy: saveStrategy.strategy, syncInterval: syncStrategy.interval, syncStrategy: syncStrategy.strategy, - } satisfies Required; + } satisfies Required>; } protected async load(): Promise { @@ -72,8 +75,14 @@ export class Store extends BaseStore { } protected patchSelf(state: S): void { - const _state = this.applyKeyFilters(state); - Object.assign(this.state, _state); + let _state = this.options.hooks?.beforeFrontendSync + ? this.options.hooks.beforeFrontendSync(state) + : state; + + if (_state) { + _state = this.applyKeyFilters(_state); + Object.assign(this.state, _state); + } } protected patchBackend(state: S): void { @@ -103,7 +112,7 @@ export class Store extends BaseStore { export function store( id: string, state: S, - options: TauriPluginValtioStoreOptions = {} + options: TauriPluginValtioStoreOptions = {} ): StoreBuilderReturn { const _store = new Store(id, state, options); return { diff --git a/packages/tauri-plugin-valtio/src/types.ts b/packages/tauri-plugin-valtio/src/types.ts index a1bfe20c..7de0a5d9 100644 --- a/packages/tauri-plugin-valtio/src/types.ts +++ b/packages/tauri-plugin-valtio/src/types.ts @@ -6,6 +6,7 @@ export type { State, StoreBackendOptions, StoreFrontendOptions, + StoreHooks, StoreOptions, TauriStoreContract, } from '@tauri-store/shared'; @@ -13,7 +14,7 @@ export type { /** * Options for the Valtio store. */ -export type TauriPluginValtioStoreOptions = StoreOptions; +export type TauriPluginValtioStoreOptions = StoreOptions; export interface StoreBuilderReturn extends TauriStoreContract { state: S; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eb97021d..8517e490 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@tb-dev/eslint-config': - specifier: ^6.2.5 - version: 6.2.5(eslint@9.20.0(jiti@2.4.2))(tailwindcss@3.4.17)(typescript@5.7.3) + specifier: ^6.2.6 + version: 6.2.6(eslint@9.20.0(jiti@2.4.2))(tailwindcss@3.4.17)(typescript@5.7.3) '@types/node': specifier: ^22.13.1 version: 22.13.1 @@ -24,17 +24,17 @@ importers: specifier: ^9.20.0 version: 9.20.0(jiti@2.4.2) prettier: - specifier: ^3.4.2 - version: 3.4.2 + specifier: ^3.5.0 + version: 3.5.0 prettier-plugin-css-order: specifier: ^2.1.2 - version: 2.1.2(postcss@8.5.1)(prettier@3.4.2) + version: 2.1.2(postcss@8.5.1)(prettier@3.5.0) prettier-plugin-svelte: specifier: ^3.3.3 - version: 3.3.3(prettier@3.4.2)(svelte@5.19.9) + version: 3.3.3(prettier@3.5.0)(svelte@5.19.9) prettier-plugin-tailwindcss: specifier: ^0.6.11 - version: 0.6.11(prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.4.2))(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.9))(prettier@3.4.2) + version: 0.6.11(prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.5.0))(prettier-plugin-svelte@3.3.3(prettier@3.5.0)(svelte@5.19.9))(prettier@3.5.0) tslib: specifier: ^2.8.1 version: 2.8.1 @@ -42,8 +42,8 @@ importers: specifier: ^0.27.6 version: 0.27.6(typescript@5.7.3) typedoc-plugin-mdn-links: - specifier: ^4.0.11 - version: 4.0.11(typedoc@0.27.6(typescript@5.7.3)) + specifier: ^4.0.12 + version: 4.0.12(typedoc@0.27.6(typescript@5.7.3)) typescript: specifier: ~5.7.3 version: 5.7.3 @@ -66,8 +66,8 @@ importers: specifier: ^5.0.3 version: 5.0.3(svelte@5.19.9)(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) '@tb-dev/utils': - specifier: ^4.1.3 - version: 4.1.3 + specifier: ^4.1.5 + version: 4.1.5 '@types/semver': specifier: ^7.5.8 version: 7.5.8 @@ -273,8 +273,8 @@ importers: specifier: ^2.2.0 version: 2.2.0 '@tb-dev/utils': - specifier: ^4.1.3 - version: 4.1.3 + specifier: ^4.1.5 + version: 4.1.5 example-shared-js: specifier: workspace:* version: link:../.shared/javascript @@ -309,8 +309,8 @@ importers: specifier: ^2.2.0 version: 2.2.0 '@tb-dev/utils': - specifier: ^4.1.3 - version: 4.1.3 + specifier: ^4.1.5 + version: 4.1.5 example-shared-js: specifier: workspace:* version: link:../.shared/javascript @@ -336,8 +336,8 @@ importers: specifier: ^2.2.0 version: 2.2.0 '@tb-dev/utils': - specifier: ^4.1.3 - version: 4.1.3 + specifier: ^4.1.5 + version: 4.1.5 '@vitejs/plugin-react': specifier: ^4.3.4 version: 4.3.4(vite@6.1.0(@types/node@22.13.1)(jiti@2.4.2)(terser@5.37.0)(yaml@2.7.0)) @@ -1433,8 +1433,8 @@ packages: '@tauri-apps/plugin-shell@2.2.0': resolution: {integrity: sha512-iC3Ic1hLmasoboG7BO+7p+AriSoqAwKrIk+Hpk+S/bjTQdXqbl2GbdclghI4gM32X0bls7xHzIFqhRdrlvJeaA==} - '@tb-dev/eslint-config@6.2.5': - resolution: {integrity: sha512-9CNQzGjDF8g5TKCzj/E2xxcIDLFCa3uu02TG704kiyQED7UEeG7nuQqvBKTf6/4Cav5Ye6795zZcegwgwxzvoQ==} + '@tb-dev/eslint-config@6.2.6': + resolution: {integrity: sha512-OL3mHXozbbbyfd+al3gvB3vITg9Uv7jtoOXhHxNDAc0z9BksDMjwALkGKnFjhHXOTBdj5dAgrYrtEuQLeUKa5w==} engines: {node: '>=22'} peerDependencies: eslint: ^9.17.0 @@ -1443,6 +1443,9 @@ packages: '@tb-dev/utils@4.1.3': resolution: {integrity: sha512-iAGkAfZktp+FgY7gFReMv+bQ2Bg/45yh6yVqhnJ1x3svkGmrVe354J+Xu570ZVk8VCI6Wb3c7NXydixGMrj52w==} + '@tb-dev/utils@4.1.5': + resolution: {integrity: sha512-Tx3m85auYem/Ipd4jJMk8jAjyTGKC5RJWpoczQwkqAqqZgjEwyHTBW5vBKaW8/AR5B7oa1HkRc2+tIDxwRtzuw==} + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -1509,76 +1512,51 @@ packages: '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} - '@typescript-eslint/eslint-plugin@8.22.0': - resolution: {integrity: sha512-4Uta6REnz/xEJMvwf72wdUnC3rr4jAQf5jnTkeRQ9b6soxLxhDEbS/pfMPoJLDfFPNVRdryqWUIV/2GZzDJFZw==} + '@typescript-eslint/eslint-plugin@8.23.0': + resolution: {integrity: sha512-vBz65tJgRrA1Q5gWlRfvoH+w943dq9K1p1yDBY2pc+a1nbBLZp7fB9+Hk8DaALUbzjqlMfgaqlVPT1REJdkt/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/parser@8.22.0': - resolution: {integrity: sha512-MqtmbdNEdoNxTPzpWiWnqNac54h8JDAmkWtJExBVVnSrSmi9z+sZUt0LfKqk9rjqmKOIeRhO4fHHJ1nQIjduIQ==} + '@typescript-eslint/parser@8.23.0': + resolution: {integrity: sha512-h2lUByouOXFAlMec2mILeELUbME5SZRN/7R9Cw2RD2lRQQY08MWMM+PmVVKKJNK1aIwqTo9t/0CvOxwPbRIE2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/scope-manager@8.20.0': - resolution: {integrity: sha512-J7+VkpeGzhOt3FeG1+SzhiMj9NzGD/M6KoGn9f4dbz3YzK9hvbhVTmLj/HiTp9DazIzJ8B4XcM80LrR9Dm1rJw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/scope-manager@8.22.0': - resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} + '@typescript-eslint/scope-manager@8.23.0': + resolution: {integrity: sha512-OGqo7+dXHqI7Hfm+WqkZjKjsiRtFUQHPdGMXzk5mYXhJUedO7e/Y7i8AK3MyLMgZR93TX4bIzYrfyVjLC+0VSw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.22.0': - resolution: {integrity: sha512-NzE3aB62fDEaGjaAYZE4LH7I1MUwHooQ98Byq0G0y3kkibPJQIXVUspzlFOmOfHhiDLwKzMlWxaNv+/qcZurJA==} + '@typescript-eslint/type-utils@8.23.0': + resolution: {integrity: sha512-iIuLdYpQWZKbiH+RkCGc6iu+VwscP5rCtQ1lyQ7TYuKLrcZoeJVpcLiG8DliXVkUxirW/PWlmS+d6yD51L9jvA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/types@8.20.0': - resolution: {integrity: sha512-cqaMiY72CkP+2xZRrFt3ExRBu0WmVitN/rYPZErA80mHjHx/Svgp8yfbzkJmDoQ/whcytOPO9/IZXnOc+wigRA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/types@8.22.0': - resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} + '@typescript-eslint/types@8.23.0': + resolution: {integrity: sha512-1sK4ILJbCmZOTt9k4vkoulT6/y5CHJ1qUYxqpF1K/DBAd8+ZUL4LlSCxOssuH5m4rUaaN0uS0HlVPvd45zjduQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.20.0': - resolution: {integrity: sha512-Y7ncuy78bJqHI35NwzWol8E0X7XkRVS4K4P4TCyzWkOJih5NDvtoRDW4Ba9YJJoB2igm9yXDdYI/+fkiiAxPzA==} + '@typescript-eslint/typescript-estree@8.23.0': + resolution: {integrity: sha512-LcqzfipsB8RTvH8FX24W4UUFk1bl+0yTOf9ZA08XngFwMg4Kj8A+9hwz8Cr/ZS4KwHrmo9PJiLZkOt49vPnuvQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/typescript-estree@8.22.0': - resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/utils@8.20.0': - resolution: {integrity: sha512-dq70RUw6UK9ei7vxc4KQtBRk7qkHZv447OUZ6RPQMQl71I3NZxQJX/f32Smr+iqWrB02pHKn2yAdHBb0KNrRMA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - peerDependencies: - eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' - - '@typescript-eslint/utils@8.22.0': - resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} + '@typescript-eslint/utils@8.23.0': + resolution: {integrity: sha512-uB/+PSo6Exu02b5ZEiVtmY6RVYO7YU5xqgzTIVZwTHvvK3HsL8tZZHFaTLFtRG3CsV4A5mhOv+NZx5BlhXPyIA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/visitor-keys@8.20.0': - resolution: {integrity: sha512-v/BpkeeYAsPkKCkR8BDwcno0llhzWVqPOamQrAEMdpZav2Y9OVjd9dwJyBLJWwf335B5DmlifECIkZRJCaGaHA==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - - '@typescript-eslint/visitor-keys@8.22.0': - resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} + '@typescript-eslint/visitor-keys@8.23.0': + resolution: {integrity: sha512-oWWhcWDLwDfu++BGTZcmXWqpwtkwb5o7fxUIGksMQQDSdPW9prsSnfIOZMlsj4vBOSrcnjIUZMiIjODgGosFhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.1': @@ -2492,8 +2470,8 @@ packages: peerDependencies: eslint: '>=6.0.0' - eslint-plugin-perfectionist@4.6.0: - resolution: {integrity: sha512-kOswTebUK0LlYExRwqz7YQtvyTUIRsKfp8XrwBBeHGh2e8MBOS6K+7VvG6HpmNckyKySi1I96uPeAlptMFGcRQ==} + eslint-plugin-perfectionist@4.8.0: + resolution: {integrity: sha512-ZF04IAPGItYMlj9xjgvvl/QpksZf79g0dkxbNcuxDjbcUSZ4CwucJ7h5Yzt5JuHe+i6igQbUYEp40j4ndfbvWQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: eslint: '>=8.0.0' @@ -2516,8 +2494,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-svelte@3.0.0-next.17: - resolution: {integrity: sha512-u93swjoIHewHx59A3FZCZtCB8iAMf00rbWwkAkKOokOsvNl+6CVjnombyIcneWiiKSDFZr1PE2fOQqa8a/Ua/Q==} + eslint-plugin-svelte@3.0.0-next.18: + resolution: {integrity: sha512-9WEUbzdGL27wK2P1CBpJZ7+TMntkJjBOjxFXLQEra2n/qYkBFa9RvYKpMu5E+HMO7zip8G/1yS+rDE/KbPx3qg==} engines: {node: ^18.20.4 || ^20.18.0 || >=22.10.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 @@ -4176,8 +4154,8 @@ packages: prettier-plugin-svelte: optional: true - prettier@3.4.2: - resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==} + prettier@3.5.0: + resolution: {integrity: sha512-quyMrVt6svPS7CjQ9gKb3GLEX/rl3BCL2oa/QkNcXv4YNVBC9olt3s+H7ukto06q7B1Qz46PbrKLO34PR6vXcA==} engines: {node: '>=14'} hasBin: true @@ -4800,8 +4778,8 @@ packages: trim-lines@3.0.1: resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - ts-api-utils@2.0.0: - resolution: {integrity: sha512-xCt/TOAc+EOHS1XPnijD3/yzpH6qg2xppZO1YDqGoVsNXfQfzHpOdNuXwrwOU8u4ITXJyDCTyt8w5g1sZv9ynQ==} + ts-api-utils@2.0.1: + resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -4852,8 +4830,8 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typedoc-plugin-mdn-links@4.0.11: - resolution: {integrity: sha512-xx9at8P8ABWYG9CLi04Y/uMcy3URIIzA+vy/JGN15Hn/VqDeapRIglwStS1MaQKwCixwZzoUpIoDaGcHdcoFWg==} + typedoc-plugin-mdn-links@4.0.12: + resolution: {integrity: sha512-pie8DmMoN9P6oUdwi5fWuPSfseqEqPAew5wJ3XOdQql5Pbuv/TQlS4RhBwV2hSy4u8eGqu00TbFjabicL9K1WQ==} peerDependencies: typedoc: 0.26.x || 0.27.x @@ -6614,16 +6592,16 @@ snapshots: dependencies: '@tauri-apps/api': 2.2.0 - '@tb-dev/eslint-config@6.2.5(eslint@9.20.0(jiti@2.4.2))(tailwindcss@3.4.17)(typescript@5.7.3)': + '@tb-dev/eslint-config@6.2.6(eslint@9.20.0(jiti@2.4.2))(tailwindcss@3.4.17)(typescript@5.7.3)': dependencies: - '@typescript-eslint/eslint-plugin': 8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.20.0(jiti@2.4.2) - eslint-plugin-perfectionist: 4.6.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-perfectionist: 4.8.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) eslint-plugin-react: 7.37.4(eslint@9.20.0(jiti@2.4.2)) eslint-plugin-react-compiler: 19.0.0-beta-e552027-20250112(eslint@9.20.0(jiti@2.4.2)) eslint-plugin-react-hooks: 5.1.0(eslint@9.20.0(jiti@2.4.2)) - eslint-plugin-svelte: 3.0.0-next.17(eslint@9.20.0(jiti@2.4.2))(svelte@5.19.9) + eslint-plugin-svelte: 3.0.0-next.18(eslint@9.20.0(jiti@2.4.2))(svelte@5.19.9) eslint-plugin-tailwindcss: 3.18.0(tailwindcss@3.4.17) eslint-plugin-unicorn: 56.0.1(eslint@9.20.0(jiti@2.4.2)) eslint-plugin-vue: 9.32.0(eslint@9.20.0(jiti@2.4.2)) @@ -6639,6 +6617,8 @@ snapshots: '@tb-dev/utils@4.1.3': {} + '@tb-dev/utils@4.1.5': {} + '@trysound/sax@0.2.0': {} '@types/argparse@1.0.38': {} @@ -6706,118 +6686,81 @@ snapshots: '@types/web-bluetooth@0.0.20': {} - '@typescript-eslint/eslint-plugin@8.22.0(@typescript-eslint/parser@8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.23.0(@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.22.0 - '@typescript-eslint/type-utils': 8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.22.0 + '@typescript-eslint/parser': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/type-utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 eslint: 9.20.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/scope-manager': 8.22.0 - '@typescript-eslint/types': 8.22.0 - '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.22.0 + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/visitor-keys': 8.23.0 debug: 4.4.0(supports-color@9.4.0) eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.20.0': + '@typescript-eslint/scope-manager@8.23.0': dependencies: - '@typescript-eslint/types': 8.20.0 - '@typescript-eslint/visitor-keys': 8.20.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 - '@typescript-eslint/scope-manager@8.22.0': + '@typescript-eslint/type-utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.22.0 - '@typescript-eslint/visitor-keys': 8.22.0 - - '@typescript-eslint/type-utils@8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': - dependencies: - '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0(supports-color@9.4.0) eslint: 9.20.0(jiti@2.4.2) - ts-api-utils: 2.0.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.20.0': {} - - '@typescript-eslint/types@8.22.0': {} - - '@typescript-eslint/typescript-estree@8.20.0(typescript@5.7.3)': - dependencies: - '@typescript-eslint/types': 8.20.0 - '@typescript-eslint/visitor-keys': 8.20.0 - debug: 4.4.0(supports-color@9.4.0) - fast-glob: 3.3.3 - is-glob: 4.0.3 - minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.0(typescript@5.7.3) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color + '@typescript-eslint/types@8.23.0': {} - '@typescript-eslint/typescript-estree@8.22.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.23.0(typescript@5.7.3)': dependencies: - '@typescript-eslint/types': 8.22.0 - '@typescript-eslint/visitor-keys': 8.22.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/visitor-keys': 8.23.0 debug: 4.4.0(supports-color@9.4.0) fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.0(typescript@5.7.3) + ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.20.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.20.0 - '@typescript-eslint/types': 8.20.0 - '@typescript-eslint/typescript-estree': 8.20.0(typescript@5.7.3) + '@typescript-eslint/scope-manager': 8.23.0 + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/typescript-estree': 8.23.0(typescript@5.7.3) eslint: 9.20.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.22.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/visitor-keys@8.23.0': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@2.4.2)) - '@typescript-eslint/scope-manager': 8.22.0 - '@typescript-eslint/types': 8.22.0 - '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.7.3) - eslint: 9.20.0(jiti@2.4.2) - typescript: 5.7.3 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/visitor-keys@8.20.0': - dependencies: - '@typescript-eslint/types': 8.20.0 - eslint-visitor-keys: 4.2.0 - - '@typescript-eslint/visitor-keys@8.22.0': - dependencies: - '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/types': 8.23.0 eslint-visitor-keys: 4.2.0 '@ungap/structured-clone@1.2.1': {} @@ -7900,10 +7843,10 @@ snapshots: eslint: 9.20.0(jiti@2.4.2) semver: 7.7.1 - eslint-plugin-perfectionist@4.6.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-perfectionist@4.8.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/types': 8.20.0 - '@typescript-eslint/utils': 8.20.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/types': 8.23.0 + '@typescript-eslint/utils': 8.23.0(eslint@9.20.0(jiti@2.4.2))(typescript@5.7.3) eslint: 9.20.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: @@ -7913,7 +7856,7 @@ snapshots: eslint-plugin-react-compiler@19.0.0-beta-e552027-20250112(eslint@9.20.0(jiti@2.4.2)): dependencies: '@babel/core': 7.26.0 - '@babel/parser': 7.26.3 + '@babel/parser': 7.26.7 '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.26.0) eslint: 9.20.0(jiti@2.4.2) hermes-parser: 0.25.1 @@ -7948,7 +7891,7 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-svelte@3.0.0-next.17(eslint@9.20.0(jiti@2.4.2))(svelte@5.19.9): + eslint-plugin-svelte@3.0.0-next.18(eslint@9.20.0(jiti@2.4.2))(svelte@5.19.9): dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.0(jiti@2.4.2)) '@jridgewell/sourcemap-codec': 1.5.0 @@ -9793,28 +9736,28 @@ snapshots: prelude-ls@1.2.1: {} - prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.4.2): + prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.5.0): dependencies: css-declaration-sorter: 7.2.0(postcss@8.5.1) postcss-less: 6.0.0(postcss@8.5.1) postcss-scss: 4.0.9(postcss@8.5.1) - prettier: 3.4.2 + prettier: 3.5.0 transitivePeerDependencies: - postcss - prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.9): + prettier-plugin-svelte@3.3.3(prettier@3.5.0)(svelte@5.19.9): dependencies: - prettier: 3.4.2 + prettier: 3.5.0 svelte: 5.19.9 - prettier-plugin-tailwindcss@0.6.11(prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.4.2))(prettier-plugin-svelte@3.3.3(prettier@3.4.2)(svelte@5.19.9))(prettier@3.4.2): + prettier-plugin-tailwindcss@0.6.11(prettier-plugin-css-order@2.1.2(postcss@8.5.1)(prettier@3.5.0))(prettier-plugin-svelte@3.3.3(prettier@3.5.0)(svelte@5.19.9))(prettier@3.5.0): dependencies: - prettier: 3.4.2 + prettier: 3.5.0 optionalDependencies: - prettier-plugin-css-order: 2.1.2(postcss@8.5.1)(prettier@3.4.2) - prettier-plugin-svelte: 3.3.3(prettier@3.4.2)(svelte@5.19.9) + prettier-plugin-css-order: 2.1.2(postcss@8.5.1)(prettier@3.5.0) + prettier-plugin-svelte: 3.3.3(prettier@3.5.0)(svelte@5.19.9) - prettier@3.4.2: {} + prettier@3.5.0: {} pretty-bytes@6.1.1: {} @@ -10610,7 +10553,7 @@ snapshots: trim-lines@3.0.1: {} - ts-api-utils@2.0.0(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.7.3): dependencies: typescript: 5.7.3 @@ -10665,7 +10608,7 @@ snapshots: possible-typed-array-names: 1.0.0 reflect.getprototypeof: 1.0.10 - typedoc-plugin-mdn-links@4.0.11(typedoc@0.27.6(typescript@5.7.3)): + typedoc-plugin-mdn-links@4.0.12(typedoc@0.27.6(typescript@5.7.3)): dependencies: typedoc: 0.27.6(typescript@5.7.3) diff --git a/scripts/deploy-docs.ps1 b/scripts/deploy-docs.ps1 new file mode 100644 index 00000000..b17162b0 --- /dev/null +++ b/scripts/deploy-docs.ps1 @@ -0,0 +1,12 @@ +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +sudo apt-get update +sudo apt-get -y install libgtk-3-dev libwebkit2gtk-4.1-dev + +pnpm install +pnpm run codegen +pnpm run build +pnpm run build:docs + +touch docs/dist/.nojekyll diff --git a/scripts/test.ps1 b/scripts/test.ps1 new file mode 100644 index 00000000..c5c0d068 --- /dev/null +++ b/scripts/test.ps1 @@ -0,0 +1,14 @@ +param( + [switch]$Ubuntu +) + +$ErrorActionPreference = 'Stop' +$PSNativeCommandUseErrorActionPreference = $true + +if ($Ubuntu) { + sudo apt-get update + sudo apt-get -y install libgtk-3-dev libwebkit2gtk-4.1-dev +} + +cargo +nightly clippy --workspace +cargo test -p tauri-store --tests -- --test-threads=1