+
{{ "verificationCodeTotp" | i18n }}
From 456f02958a2938e9d8538b9610039bf28b99e095 Mon Sep 17 00:00:00 2001
From: Nick Krantz <125900171+nick-livefront@users.noreply.github.com>
Date: Tue, 9 Dec 2025 09:31:12 -0600
Subject: [PATCH 3/6] account for pre-set value of an angular form before the
options are set (#17872)
---
.../chip-select/chip-select.component.spec.ts | 18 ++++++++++++++++++
.../src/chip-select/chip-select.component.ts | 17 +++++++++++++++++
2 files changed, 35 insertions(+)
diff --git a/libs/components/src/chip-select/chip-select.component.spec.ts b/libs/components/src/chip-select/chip-select.component.spec.ts
index 3c2f71ef8d7..3a66b799652 100644
--- a/libs/components/src/chip-select/chip-select.component.spec.ts
+++ b/libs/components/src/chip-select/chip-select.component.spec.ts
@@ -451,6 +451,24 @@ describe("ChipSelectComponent", () => {
expect(disabledMenuItem?.disabled).toBe(true);
});
+
+ it("should handle writeValue called before options are initialized", async () => {
+ const testApp = fixture.componentInstance;
+
+ component["rootTree"] = null;
+
+ component.writeValue("opt1");
+
+ expect(component["pendingValue"]).toBe("opt1");
+ expect(component["selectedOption"]).toBeUndefined();
+
+ testApp.options.set(testOptions);
+ fixture.detectChanges();
+ await fixture.whenStable();
+
+ expect(component["selectedOption"]?.value).toBe("opt1");
+ expect(component["pendingValue"]).toBeUndefined();
+ });
});
});
diff --git a/libs/components/src/chip-select/chip-select.component.ts b/libs/components/src/chip-select/chip-select.component.ts
index bf6c6fb2aad..50e462dc815 100644
--- a/libs/components/src/chip-select/chip-select.component.ts
+++ b/libs/components/src/chip-select/chip-select.component.ts
@@ -100,10 +100,21 @@ export class ChipSelectComponent
implements ControlValueAccessor {
/** Tree constructed from `this.options` */
private rootTree?: ChipSelectOption | null;
+ /** Store the pending value when writeValue is called before options are initialized */
+ private pendingValue?: T;
+
constructor() {
// Initialize the root tree whenever options change
effect(() => {
this.initializeRootTree(this.options());
+
+ // If there's a pending value, apply it now that options are available
+ if (this.pendingValue !== undefined) {
+ this.selectedOption = this.findOption(this.rootTree, this.pendingValue);
+ this.setOrResetRenderedOptions();
+ this.pendingValue = undefined;
+ this.cdr.markForCheck();
+ }
});
// Focus the first menu item when menuItems change (e.g., navigating submenus)
@@ -255,6 +266,12 @@ export class ChipSelectComponent implements ControlValueAccessor {
/** Implemented as part of NG_VALUE_ACCESSOR */
writeValue(obj: T): void {
+ // If rootTree is not yet initialized, store the value to apply it later
+ if (!this.rootTree) {
+ this.pendingValue = obj;
+ return;
+ }
+
this.selectedOption = this.findOption(this.rootTree, obj);
this.setOrResetRenderedOptions();
// OnPush components require manual change detection when writeValue() is called
From 093e06e7874c170c8d7a59dbcbee686ccabdfa69 Mon Sep 17 00:00:00 2001
From: neuronull <9162534+neuronull@users.noreply.github.com>
Date: Tue, 9 Dec 2025 07:46:40 -0800
Subject: [PATCH 4/6] Bump Rust version to 1.91.1 (#17864)
* Bump Rust version to 1.91.1
* clippy
* clippy
---
.../desktop/desktop_native/core/src/biometric_v2/windows.rs | 6 +++---
apps/desktop/desktop_native/rust-toolchain.toml | 2 +-
.../desktop_native/windows_plugin_authenticator/src/lib.rs | 2 +-
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/apps/desktop/desktop_native/core/src/biometric_v2/windows.rs b/apps/desktop/desktop_native/core/src/biometric_v2/windows.rs
index 32d2eb7e6e6..669dd757c40 100644
--- a/apps/desktop/desktop_native/core/src/biometric_v2/windows.rs
+++ b/apps/desktop/desktop_native/core/src/biometric_v2/windows.rs
@@ -285,8 +285,8 @@ async fn windows_hello_authenticate_with_crypto(
return Err(anyhow!("Failed to sign data"));
}
- let signature_buffer = signature.Result()?;
- let signature_value = unsafe { as_mut_bytes(&signature_buffer)? };
+ let mut signature_buffer = signature.Result()?;
+ let signature_value = unsafe { as_mut_bytes(&mut signature_buffer)? };
// The signature is deterministic based on the challenge and keychain key. Thus, it can be
// hashed to a key. It is unclear what entropy this key provides.
@@ -368,7 +368,7 @@ fn decrypt_data(
Ok(plaintext)
}
-unsafe fn as_mut_bytes(buffer: &IBuffer) -> Result<&mut [u8]> {
+unsafe fn as_mut_bytes(buffer: &mut IBuffer) -> Result<&mut [u8]> {
let interop = buffer.cast::()?;
unsafe {
diff --git a/apps/desktop/desktop_native/rust-toolchain.toml b/apps/desktop/desktop_native/rust-toolchain.toml
index c1ab6b3240a..0992ce9d294 100644
--- a/apps/desktop/desktop_native/rust-toolchain.toml
+++ b/apps/desktop/desktop_native/rust-toolchain.toml
@@ -1,4 +1,4 @@
[toolchain]
-channel = "1.87.0"
+channel = "1.91.1"
components = [ "rustfmt", "clippy" ]
profile = "minimal"
diff --git a/apps/desktop/desktop_native/windows_plugin_authenticator/src/lib.rs b/apps/desktop/desktop_native/windows_plugin_authenticator/src/lib.rs
index 893fdf765fc..b38a1c725f2 100644
--- a/apps/desktop/desktop_native/windows_plugin_authenticator/src/lib.rs
+++ b/apps/desktop/desktop_native/windows_plugin_authenticator/src/lib.rs
@@ -153,7 +153,7 @@ fn add_authenticator() -> std::result::Result<(), String> {
}
}
-type EXPERIMENTAL_WebAuthNPluginAddAuthenticatorFnDeclaration = unsafe extern "cdecl" fn(
+type EXPERIMENTAL_WebAuthNPluginAddAuthenticatorFnDeclaration = unsafe extern "C" fn(
pPluginAddAuthenticatorOptions: *const webauthn::ExperimentalWebAuthnPluginAddAuthenticatorOptions,
ppPluginAddAuthenticatorResponse: *mut *mut webauthn::ExperimentalWebAuthnPluginAddAuthenticatorResponse,
) -> HRESULT;
From c1c3e432f7db97fc91c23875b5ba4db14ea5d795 Mon Sep 17 00:00:00 2001
From: Mike Amirault
Date: Tue, 9 Dec 2025 10:55:30 -0500
Subject: [PATCH 5/6] [PM-20080] Add spacing to new cipher/send buttons, unify
sizing (#17806)
* [PM-20080] Add spacing to new cipher/send buttons, unify sizing
* [PM-20080] Use logical css properties and increase spacing
---
.../new-item-dropdown/new-item-dropdown-v2.component.html | 4 ++--
.../src/new-send-dropdown/new-send-dropdown.component.html | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html b/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
index 7dd0a5a3bc7..fa8683c12dc 100644
--- a/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
+++ b/apps/browser/src/vault/popup/components/vault-v2/new-item-dropdown/new-item-dropdown-v2.component.html
@@ -1,5 +1,5 @@
-