diff --git a/.github/workflows/audit.yml b/.github/workflows/audit.yml index 157717061338..df055195c6ed 100644 --- a/.github/workflows/audit.yml +++ b/.github/workflows/audit.yml @@ -33,7 +33,7 @@ jobs: audit-rust: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: rust audit uses: rustsec/audit-check@v2 with: @@ -42,9 +42,9 @@ jobs: audit-js: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 'lts/*' - run: pnpm audit diff --git a/.github/workflows/bench.yml b/.github/workflows/bench.yml index 62fc97221fb9..8dd4216bd40d 100644 --- a/.github/workflows/bench.yml +++ b/.github/workflows/bench.yml @@ -90,7 +90,7 @@ jobs: - name: clone benchmarks_results if: github.repository == 'tauri-apps/tauri' && github.ref == 'refs/heads/dev' - uses: actions/checkout@v4 + uses: actions/checkout@v7 with: token: ${{ secrets.ORG_TAURI_BOT_PAT }} path: gh-pages diff --git a/.github/workflows/check-change-tags.yml b/.github/workflows/check-change-tags.yml index d10c5a09912b..1bc03df41bdd 100644 --- a/.github/workflows/check-change-tags.yml +++ b/.github/workflows/check-change-tags.yml @@ -17,7 +17,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: check change files end with .md run: | diff --git a/.github/workflows/check-generated-files.yml b/.github/workflows/check-generated-files.yml index fb1e59866d2f..934fdce138ab 100644 --- a/.github/workflows/check-generated-files.yml +++ b/.github/workflows/check-generated-files.yml @@ -26,7 +26,7 @@ jobs: api: ${{ steps.filter.outputs.api }} schema: ${{ steps.filter.outputs.schema }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dorny/paths-filter@v3 id: filter with: @@ -45,9 +45,9 @@ jobs: needs: changes if: needs.changes.outputs.api == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 'lts/*' cache: 'pnpm' @@ -65,7 +65,7 @@ jobs: needs: changes if: needs.changes.outputs.schema == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install stable uses: dtolnay/rust-toolchain@stable diff --git a/.github/workflows/check-license-header.yml b/.github/workflows/check-license-header.yml index 9b850deccb17..f99fd873a43b 100644 --- a/.github/workflows/check-license-header.yml +++ b/.github/workflows/check-license-header.yml @@ -15,7 +15,7 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dorny/paths-filter@v3 id: filter with: diff --git a/.github/workflows/covector-status.yml b/.github/workflows/covector-status.yml index 9b13dc2215d8..f91602fc32c6 100644 --- a/.github/workflows/covector-status.yml +++ b/.github/workflows/covector-status.yml @@ -10,7 +10,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 - name: covector status diff --git a/.github/workflows/covector-version-or-publish.yml b/.github/workflows/covector-version-or-publish.yml index 170bc3ef31b0..2f2cb570c5fd 100644 --- a/.github/workflows/covector-version-or-publish.yml +++ b/.github/workflows/covector-version-or-publish.yml @@ -19,14 +19,13 @@ jobs: platform: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: - node-version: 20 cache: 'pnpm' - name: install stable @@ -70,11 +69,11 @@ jobs: - run-integration-tests steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 with: fetch-depth: 0 - run: npm i -g --force corepack - - uses: actions/setup-node@v6 + - uses: actions/setup-node@v7 with: node-version: 24 @@ -108,7 +107,7 @@ jobs: - name: Create Pull Request With Versions Bumped if: steps.covector.outputs.commandRan == 'version' - uses: peter-evans/create-pull-request@67ccf781d68cd99b580ae25a5c18a1cc84ffff1f # 7.0.6 + uses: peter-evans/create-pull-request@v8.1.1 with: token: ${{ secrets.GITHUB_TOKEN }} branch: release/version-updates diff --git a/.github/workflows/docker.yml b/.github/workflows/docker.yml index ca9b2623640f..ef73aeff1328 100644 --- a/.github/workflows/docker.yml +++ b/.github/workflows/docker.yml @@ -17,7 +17,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: install stable uses: dtolnay/rust-toolchain@stable @@ -59,7 +59,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: install stable uses: dtolnay/rust-toolchain@stable @@ -68,7 +68,7 @@ jobs: - run: npm i -g --force corepack - name: Setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: 'lts/*' diff --git a/.github/workflows/fmt.yml b/.github/workflows/fmt.yml index db0a735cec63..767f40e52d88 100644 --- a/.github/workflows/fmt.yml +++ b/.github/workflows/fmt.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install Rust stable and rustfmt uses: dtolnay/rust-toolchain@stable @@ -25,9 +25,9 @@ jobs: prettier: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 'lts/*' cache: 'pnpm' @@ -38,7 +38,7 @@ jobs: name: taplo (.toml files) runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install Rust stable uses: dtolnay/rust-toolchain@stable diff --git a/.github/workflows/lint-js.yml b/.github/workflows/lint-js.yml index f997bb72cedf..4b0955a8f380 100644 --- a/.github/workflows/lint-js.yml +++ b/.github/workflows/lint-js.yml @@ -18,9 +18,9 @@ jobs: eslint: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 'lts/*' cache: 'pnpm' @@ -30,9 +30,9 @@ jobs: typescript: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - run: npm i -g --force corepack - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v7 with: node-version: 'lts/*' cache: 'pnpm' diff --git a/.github/workflows/publish-cli-js.yml b/.github/workflows/publish-cli-js.yml index d5960789d2a2..080f6ea9b3c6 100644 --- a/.github/workflows/publish-cli-js.yml +++ b/.github/workflows/publish-cli-js.yml @@ -71,16 +71,16 @@ jobs: setup: | sudo apt-get update sudo apt-get install gcc-riscv64-linux-gnu g++-riscv64-linux-gnu -y - name: stable - ${{ matrix.settings.target }} - node@20 + name: stable - ${{ matrix.settings.target }} - node@22 runs-on: ${{ matrix.settings.host }} steps: - uses: actions/checkout@v7 - run: npm i -g --force corepack - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 if: ${{ !matrix.settings.docker }} with: - node-version: 20 + node-version: 22 cache: 'pnpm' - name: Install Rust @@ -150,7 +150,7 @@ jobs: - uses: actions/checkout@v7 - run: npm i -g --force corepack - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: ${{ matrix.node }} cache: pnpm @@ -188,7 +188,7 @@ jobs: - uses: actions/checkout@v7 - run: npm i -g --force corepack - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: ${{ matrix.node }} cache: pnpm @@ -268,7 +268,7 @@ jobs: - uses: actions/checkout@v7 - run: npm i -g --force corepack - name: Setup node - uses: actions/setup-node@v6 + uses: actions/setup-node@v7 with: node-version: 24 cache: 'pnpm' diff --git a/.github/workflows/publish-cli-rs.yml b/.github/workflows/publish-cli-rs.yml index e40a2ddd42d4..7495cf67a7e1 100644 --- a/.github/workflows/publish-cli-rs.yml +++ b/.github/workflows/publish-cli-rs.yml @@ -45,7 +45,7 @@ jobs: cross: true steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: 'Setup Rust' if: ${{ !matrix.config.cross }} @@ -99,7 +99,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v4 + uses: actions/checkout@v7 - name: Download built CLIs uses: actions/download-artifact@v4.1.7 diff --git a/.github/workflows/test-android.yml b/.github/workflows/test-android.yml index 5790e5dafcf9..c24a0cbb1c10 100644 --- a/.github/workflows/test-android.yml +++ b/.github/workflows/test-android.yml @@ -31,7 +31,7 @@ jobs: platform: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install Rust 1.90 uses: dtolnay/rust-toolchain@1.90 @@ -44,7 +44,7 @@ jobs: - run: npm i -g --force corepack - name: setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: lts/* cache: 'pnpm' diff --git a/.github/workflows/test-cli-js.yml b/.github/workflows/test-cli-js.yml index 212a915551f2..a7f5516084d2 100644 --- a/.github/workflows/test-cli-js.yml +++ b/.github/workflows/test-cli-js.yml @@ -33,14 +33,14 @@ jobs: platform: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install Rust stable uses: dtolnay/rust-toolchain@stable - run: npm i -g --force corepack - name: setup node - uses: actions/setup-node@v4 + uses: actions/setup-node@v7 with: node-version: 'lts/*' cache: 'pnpm' diff --git a/.github/workflows/test-cli-rs.yml b/.github/workflows/test-cli-rs.yml index f7b935827f8f..559b1ff7ab85 100644 --- a/.github/workflows/test-cli-rs.yml +++ b/.github/workflows/test-cli-rs.yml @@ -43,7 +43,7 @@ jobs: - { target: x86_64-apple-darwin, os: macos-latest } steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: 'Setup Rust' uses: dtolnay/rust-toolchain@1.90 diff --git a/.github/workflows/test-core.yml b/.github/workflows/test-core.yml index d9c8ed5f0325..154098c393eb 100644 --- a/.github/workflows/test-core.yml +++ b/.github/workflows/test-core.yml @@ -76,7 +76,7 @@ jobs: - { args: --all-features, key: all } steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: install Rust uses: dtolnay/rust-toolchain@master diff --git a/.github/workflows/udeps.yml b/.github/workflows/udeps.yml index 155f09eb4333..99fbc54258fc 100644 --- a/.github/workflows/udeps.yml +++ b/.github/workflows/udeps.yml @@ -31,7 +31,7 @@ jobs: bundler: ${{ steps.filter.outputs.bundler }} cli: ${{ steps.filter.outputs.cli }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dorny/paths-filter@v3 id: filter with: @@ -74,7 +74,7 @@ jobs: needs.changes.outputs.macossign == 'true' steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust nightly uses: dtolnay/rust-toolchain@nightly @@ -125,7 +125,7 @@ jobs: matrix: path: ${{ fromJson(needs.setup.outputs.matrix) }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - name: Install Rust nightly uses: dtolnay/rust-toolchain@nightly diff --git a/crates/tauri-cli/templates/plugin/.github/workflows/audit.yml b/crates/tauri-cli/templates/plugin/.github/workflows/audit.yml index 4121fa6470da..3bc3a459280e 100644 --- a/crates/tauri-cli/templates/plugin/.github/workflows/audit.yml +++ b/crates/tauri-cli/templates/plugin/.github/workflows/audit.yml @@ -27,8 +27,8 @@ jobs: audit: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 - - uses: rustsec/audit-check@v1 + - uses: actions/checkout@v7 + - uses: rustsec/audit-check@v2 with: token: ${{ secrets.GITHUB_TOKEN }} {{{{/raw}}}} diff --git a/crates/tauri-cli/templates/plugin/.github/workflows/clippy.yml b/crates/tauri-cli/templates/plugin/.github/workflows/clippy.yml index 23556aeb345a..eed7681bfb43 100644 --- a/crates/tauri-cli/templates/plugin/.github/workflows/clippy.yml +++ b/crates/tauri-cli/templates/plugin/.github/workflows/clippy.yml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dtolnay/rust-toolchain@stable with: components: rustfmt @@ -41,7 +41,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dtolnay/rust-toolchain@stable with: components: clippy diff --git a/crates/tauri-cli/templates/plugin/.github/workflows/test.yml b/crates/tauri-cli/templates/plugin/.github/workflows/test.yml index c528a4506fde..4b17e7f4ce39 100644 --- a/crates/tauri-cli/templates/plugin/.github/workflows/test.yml +++ b/crates/tauri-cli/templates/plugin/.github/workflows/test.yml @@ -23,7 +23,7 @@ jobs: runs-on: ${{ matrix.platform }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v7 - uses: dtolnay/rust-toolchain@stable - name: install webkit2gtk if: matrix.platform == 'ubuntu-latest' diff --git a/crates/tauri-macros/src/lib.rs b/crates/tauri-macros/src/lib.rs index cf02da7f49c0..034f991447ab 100644 --- a/crates/tauri-macros/src/lib.rs +++ b/crates/tauri-macros/src/lib.rs @@ -131,27 +131,27 @@ pub fn default_runtime(attributes: TokenStream, input: TokenStream) -> TokenStre /// let kind = ItemKind::Check; /// let resources_table = app.resources_table(); /// match kind { -/// ItemKind::Submenu => { -/// let i = resources_table.get::>(rid)?; -/// i.set_text(text) -/// } -/// ItemKind::MenuItem => { -/// let i = resources_table.get::>(rid)?; -/// i.set_text(text) -/// } -/// ItemKind::Predefined => { -/// let i = resources_table.get::>(rid)?; -/// i.set_text(text) -/// } -/// ItemKind::Check => { -/// let i = resources_table.get::>(rid)?; -/// i.set_text(text) -/// } -/// ItemKind::Icon => { -/// let i = resources_table.get::>(rid)?; -/// i.set_text(text) -/// } -/// _ => unreachable!(), +/// ItemKind::Submenu => { +/// let i = resources_table.get::>(rid)?; +/// i.set_text(text) +/// } +/// ItemKind::MenuItem => { +/// let i = resources_table.get::>(rid)?; +/// i.set_text(text) +/// } +/// ItemKind::Predefined => { +/// let i = resources_table.get::>(rid)?; +/// i.set_text(text) +/// } +/// ItemKind::Check => { +/// let i = resources_table.get::>(rid)?; +/// i.set_text(text) +/// } +/// ItemKind::Icon => { +/// let i = resources_table.get::>(rid)?; +/// i.set_text(text) +/// } +/// _ => unreachable!(), /// } /// ``` #[proc_macro] diff --git a/crates/tauri/src/menu/plugin.rs b/crates/tauri/src/menu/plugin.rs index 7f6741d00315..658b5672679c 100644 --- a/crates/tauri/src/menu/plugin.rs +++ b/crates/tauri/src/menu/plugin.rs @@ -359,7 +359,6 @@ struct NewOptions { #[command(root = "crate")] fn new( - app: Webview, webview: Webview, kind: ItemKind, options: Option, @@ -367,11 +366,11 @@ fn new( handler: Channel, ) -> crate::Result<(ResourceId, MenuId)> { let options = options.unwrap_or_default(); - let mut resources_table = app.resources_table(); + let mut resources_table = webview.resources_table(); let (rid, id) = match kind { ItemKind::Menu => { - let mut builder = MenuBuilder::new(&app); + let mut builder = MenuBuilder::new(&webview); if let Some(id) = options.id { builder = builder.id(id); } diff --git a/examples/api/package.json b/examples/api/package.json index c0f15c0f1bac..0ba26f005ea4 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -15,10 +15,12 @@ "devDependencies": { "@iconify-json/codicon": "^1.2.49", "@iconify-json/ph": "^1.2.2", - "@sveltejs/vite-plugin-svelte": "^7.0.0", - "@unocss/extractor-svelte": "^66.6.6", - "svelte": "^5.55.7", - "unocss": "^66.6.6", - "vite": "^8.0.16" + "@sveltejs/vite-plugin-svelte": "^7.2.0", + "@types/sortablejs": "^1.15.9", + "@unocss/extractor-svelte": "^66.7.5", + "sortablejs": "^1.15.7", + "svelte": "^5.56.4", + "unocss": "^66.7.5", + "vite": "^8.1.4" } } diff --git a/examples/api/src-tauri/src/lib.rs b/examples/api/src-tauri/src/lib.rs index b569f25cb550..876978fdaecd 100644 --- a/examples/api/src-tauri/src/lib.rs +++ b/examples/api/src-tauri/src/lib.rs @@ -67,6 +67,7 @@ pub fn run_app) + Send + 'static>( #[allow(unused_mut)] let mut window_builder = WebviewWindowBuilder::new(app, "main", WebviewUrl::default()) + .disable_drag_drop_handler() .on_document_title_changed(|_window, title| { println!("document title changed: {title}"); }); diff --git a/examples/api/src/components/MenuBuilder.svelte b/examples/api/src/components/MenuBuilder.svelte index 006afecf5201..e0a614328e41 100644 --- a/examples/api/src/components/MenuBuilder.svelte +++ b/examples/api/src/components/MenuBuilder.svelte @@ -1,91 +1,293 @@ -
- + onMount(() => { + const sourceSortable1 = makeSourceSortable(sourceSortableEl1) + const sourceSortable2 = makeSourceSortable(sourceSortableEl2) + const targetSortable = new Sortable(targetSortableEl, { + dataIdAttr: 'data-id', + group: { + name: 'shared' + }, + async onAdd(event) { + const item = event.item + const kind = item.dataset.kind as MenuItemComponentKind + const text = item.dataset.text + const iconPath = item.dataset.iconPath + const checked = item.dataset.checked + + const newItem = { + id: currentId, + kind, + text, + iconPath, + checked: checked !== undefined ? checked === 'true' : checked + } as Item + currentId += 1 + + // HACK: We can't track the element created by Sortable, + // just make a new one and delete the one from Sortable + item.remove() + + if (event.newIndex !== undefined) { + items.splice(event.newIndex, 0, newItem) + } else { + items.push(newItem) + } + + newItem.menu = await create(newItem) -
- {#each items as item} -
-
-

{itemToString(item)}

+ await onItemAdded?.(newItem) + }, + onUpdate(event) { + const [item] = items.splice(event.oldIndex!, 1) + // Sortable's DOM manipulation doesn't work with Svelte, + // so we recreate all the nodes on order changes... + // This must be `toSpliced` to trigger the `#key` block re-render + items = items.toSpliced(event.newIndex!, 0, item!) + + onItemMoved?.(item, event.newIndex!) + }, + delayOnTouchOnly: true, + delay: 500, + animation: 200 + }) + return () => { + targetSortable.destroy() + sourceSortable1.destroy() + sourceSortable2.destroy() + } + }) + + onDestroy(() => { + for (const item of items) { + item.menu?.close() + } + items = [] + }) + + +
+
+
+

Custom

+
+ + +
- {/each} +
+
+

Predefined

+
+ {#each predefinedOptions as predefinedOption} + + {/each} +
+
+
+
+
+ {#key items} + {#each items as item, i (item.id)} + { + item.menu?.setText(item.text ?? '') + } + : undefined} + onIconPathChange={item.iconPath !== undefined + ? () => { + ;(item.menu as IconMenuItem | undefined)?.setIcon( + item.iconPath! + ) + } + : undefined} + onCheckedChange={item.checked !== undefined + ? () => { + ;(item.menu as CheckMenuItem | undefined)?.setChecked( + item.checked! + ) + } + : undefined} + onRemove={async () => { + items.splice(i, 1) + await onItemRemoved?.(item).finally(() => { + item.menu?.close() + }) + }} + /> + {:else} +
+ Drag and drop the menu items above to start building +
+ {/each} + {/key}
diff --git a/examples/api/src/components/MenuItemBuilder.svelte b/examples/api/src/components/MenuItemBuilder.svelte deleted file mode 100644 index 47b34b9733b7..000000000000 --- a/examples/api/src/components/MenuItemBuilder.svelte +++ /dev/null @@ -1,163 +0,0 @@ - - -
-
- {#each itemKinds as itemKind, i} -
- (kind = itemKind)} - type="radio" - name="kind" - value={itemKinds[i]} - /> - -
- {/each} -
- -
- -
- {#if kind == 'Normal' || kind == 'Icon' || kind == 'Check'} - - {/if} - {#if kind == 'Icon'} - - {:else if kind == 'Check'} -
- - -
- {:else if kind == 'Predefined'} -
- {#each predefinedOptions as predefinedOption, i} -
- (predefinedItem = predefinedOption)} - type="radio" - name="predefinedKind" - value={predefinedOptions[i]} - /> - -
- {/each} -
- {/if} -
- -
- -
- -
-
diff --git a/examples/api/src/components/MenuItemComponent.svelte b/examples/api/src/components/MenuItemComponent.svelte new file mode 100644 index 000000000000..5b828714a9fb --- /dev/null +++ b/examples/api/src/components/MenuItemComponent.svelte @@ -0,0 +1,79 @@ + + + + + diff --git a/examples/api/src/views/Menu.svelte b/examples/api/src/views/Menu.svelte index 6613d3ab3210..aa9cef7ed69d 100644 --- a/examples/api/src/views/Menu.svelte +++ b/examples/api/src/views/Menu.svelte @@ -1,49 +1,60 @@ -
- +
+ { + if (item.menu) { + await submenu?.append(item.menu) + } + }} + onItemRemoved={async (item) => { + if (item.menu) { + await submenu?.remove(item.menu) + } + }} + onItemMoved={(item, toIndex) => { + if (submenu) { + reorderMenuItems(submenu, item, toIndex) + } + }} + />
+
+ {#if tray} + + {:else} + + {/if} +
diff --git a/examples/api/src/views/Window.svelte b/examples/api/src/views/Window.svelte index 96f02642ac07..481c927969c2 100644 --- a/examples/api/src/views/Window.svelte +++ b/examples/api/src/views/Window.svelte @@ -400,7 +400,7 @@ }) -
+
@@ -513,7 +513,7 @@ Set focusable to {!focusable}
-
+
-
-
+
+
-
+
-
+
-
+