* Enable @angular-eslint/template/elements-content lint rule
Enables the elements-content rule with bitIconButton exempted via allowList,
since icon buttons use that directive in place of text content. Suppresses
false positives in WebAuthn connector pages where content is injected at
runtime, and flags a genuine empty <a> in change-plan-dialog for follow-up.
* Add FIXME lint suppressions for elements-content in copy-click spec
---------
Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
* update row selected state and hover stat
* also show bg change when check is focused
* fix border color changes missed in error
* fix css class
* remove dupe classes
* adding bulk actions bar
* responsive bulk actions bar
* allow for custom position of menu
* remove border from compact container
* do not screenshot table story
* supress tooltip showing when a menu is open
* updated docs
* add aria-label to icon only actions
* add aria-label to additional actions button
* fix spec descriptions
* add missing translations
* more grammatically corrrect annoucement
* have consumer provide their own menu
* use data holder components to solve for menu complexities
* use actual icon
* fix trigger being added twice
* rebuild focusKeyManager in case actions change
* address strong agree feedback comments
* update spacing tovisually align dividers
* rename input to avoid collision with popover/coachmark position input
* merge positions
* fix test
* simplify compact mode logic
* more verbose keydown handling for a11y
* remove commented code left in error
* [CL-1203] Place tab overflow More button next to last visible tab
Introduces `bitOverflowTrigger` so the overflow list reserves space for —
and manages the visibility of — a trailing affordance. The More button
now lives inside the overflow list and sits immediately after the last
visible tab instead of being pinned to the far right of the header.
* Unify overflow-list trigger hiding with item hiding
The list now toggles the trigger's `hidden` property in its effect — the
same way it hides overflowed items — once first-pass measurement is
ready. The trigger directive drops its own visibility/aria-hidden host
bindings, and consumers drop the redundant aria-hidden skipPredicate
check. Also avoids reserving trigger space when every item already fits
in the container without it (otherwise a single hidden item would only
exist to make room for the affordance summoning it).
* Realign keyboard focus to More button on overflow menu close
When an item is picked from the overflow menu, selection logic moves
the key manager's active item to the newly selected tab — but CDK's
overlay restores DOM focus to the trigger. The next arrow key would
then jump from the trigger past the just-reintroduced item. Sync the
key manager to the trigger on menu close so navigation continues from
where focus actually is.
* [PM-37229] Add bwi-passport icon and wire it to the passport cipher type
* Fix icons:build script to compile style.css and avoid duplicate SCSS keys
* [PM-37229] Update passport cipher icon tests to expect bwi-passport
* prune desktop packages
* Fix @napi-rs/cli version mismatch in desktop napi workspace
Aligns package.json declaration with the locked version (3.2.0) to
resolve npm workspace inconsistency that was blocking ng update.
* update Storybook to v10
* update Angular to v21
* override jest in ng builder
* Add jest-environment-jsdom as explicit dependency
Previously installed as a side effect of a jest@29 override; removing
that override caused it to disappear from node_modules.
* Add .claude/worktrees/ to .gitignore
* Restore @napi-rs/cli to 3.5.1 to match main
* Pin jest-environment-jsdom to 29.7.0 and add to renovate config
* Override jest-environment-jsdom to 29.7.0 in build-angular context
* Add isolatedModules to libs/subscription tsconfig.spec.json to fix Angular 21 module resolution
* Change moduleResolution to bundler for Angular 21 subpath export compatibility
* Add isolatedModules to Angular libs with old spec tsconfig pattern
* Disable emitDecoratorMetadata in spec tsconfigs with isolatedModules
* Fix HostListener event parameter types for Angular 21 compiler strictness
* Revert accidental change to access-selector spec
* Remove accidentally generated desktop package-lock.json
* Fix type-only imports/exports caught by Rolldown in Storybook v10/Vite v8
* fix vault-wrapper type error from Angular 21 stricter generic inference
ngComponentOutlet accepts Type<unknown>; annotate computed() explicitly
since VaultComponent is generic and VaultOrigComponent is not, preventing
TypeScript from inferring a compatible union constructor type.
* Fix kitchen-sink interaction tests for Storybook v10
Replace fire-and-forget navigateTo + synchronous getByRole with
navigateAndWaitFor<T>, which sets the hash and retries the ready
callback via waitFor. Storybook v10 starts play functions before
Angular's initial router navigation completes, so synchronous DOM
queries after navigation were failing intermittently.
* Provide ZoneJS change detection scheduler for Storybook stories
Angular 21 no longer sets up the ZoneJS change detection scheduler by
default in bootstrapApplication. Storybook's Angular renderer uses
bootstrapApplication internally and does not add provideZoneChangeDetection
automatically, so Default CD components relying on zone.js to trigger
re-renders after async operations were not updating before Chromatic
snapshots.
* Wait for dialog/side nav to render before Chromatic snapshot
After userEvent.click the dialog and side nav open asynchronously.
Without an explicit waitFor, Chromatic captures the snapshot before the
resulting UI state is present.
* Fix kitchen-sink waitFor: re-query side nav button, use querySelector for dialog
- openSideNav: re-query the toggle button inside waitFor to avoid reading
a stale DOM reference after Angular re-renders the element post-click
- SimpleDialogOpen / VirtualScrollBlockingDialog: replace getByRole("dialog")
with querySelector("cdk-dialog-container") to avoid testing-library's
visibility check failing on a momentarily inaccessible overlay element
* Revert kitchen-sink stories to main
* Bump Angular, Storybook, and ng-select to latest patch versions
* Trigger pre-commit hooks on merge
* Regenerate package-lock.json with --force to fix npm ci sync
* WIP updated tab styles and added responsive behavior
* fixes after converting class properties to readonly signals
* - updated host binding to component definition
- converted static class properties to `readonly`
* fixed overflow more button tabindex
* - named `tw-group` in `tab-list-item.directive`
- exported `tabListContainerGap` px value
* migrated `@Input` to `model`
* added tab ordering behavior when selecting from overflow menu
* - updated tabs mdx and stories
- updated tab header margin
- fixed selected tab bottom border not displaying
- fixed keyboard nav between tabs
* fixed type error
* - added 'preserveContentTabs' and 'keyboardNavigation' stories to mdx
- updated 'preserveContent' jsdoc to fix formatting in story
* renamed to `TAB_LIST_CONTAINER_GAP`
* - removed `tw-border-0`
- added "more" translation
* added "more" translation to desktop and browser
* added new line
* updated navigation tabs to include 'bitLabelDirective', trailing icons, overflow responsive behavior
* - removed horizontal spacing from tab group and tab body content
- updated tabs in dialog story and 'header' component to horizontally align tabs correctly
* added "more" translation to kitchen-sink stories
* fixed 'EmptyTab' story for overflow tab behavior
* fix chromatic build error
* updated to `contentChild()`
* fixing keyboard navigation
* add specs for tabs components
* remove debugging text
* remove unused input
* use signal and update styles
* fix keyboard navigation and misalignment
* fix berry rendering bug
* remove tab role from more button
* remove getters and use inject
* remove disablePadding left in error
* remove obsolete input
* fix broken aria attr
* update trailingIcon to endIcon
* remove label directive and use start icon
* apply gap to host style property
* fix broken exports and imports
* remove active getter
* use anchors for overflow menu
* render start icon in tab link component
* remove unneeded aria attr
* display start icon in list and use correct menu item slots
* fix overflow label not rendering
* minor grammar update
* remove unused imports
* [CL-667] refactor(components): extract reusable overflow-list directive (#20651)
* refactor(components): extract reusable overflow-list directive
* refactor(overflow-list): collapse measurement effect into afterNextRender
The closure-flag effect was working around a timing claim that doesn't hold:
content queries are populated by ngAfterContentInit, well before afterNextRender
runs. A single afterNextRender callback covers measurement, RO attachment, and
cleanup — no mutable flag, no zombie effect re-firing on every items() change.
* fix(overflow-list): drop host overflow:hidden clipping focus rings
The host's overflow:hidden was clipping tab focus rings (and any other
legitimate visual overflow). Items get [hidden] applied synchronously
when they overflow, so the clipping safety net wasn't earning its cost.
* fix(tab-nav-bar): apply roving tabindex to align with tab-group
tab-nav-bar already installs a FocusKeyManager for arrow-key navigation,
but every tab-link was also a natural tab stop — so users tabbing through
the page hit each link individually instead of one stop for the nav.
Push tabindex state down from the parent in updateActiveLink: the active
(or first non-disabled) link gets 0, the rest get -1. Seeded once from
ngAfterViewInit so the initial route lands with correct tab order.
* update tab group
---------
Co-authored-by: Bryan Cunningham <bryan.cunningham@me.com>
Co-authored-by: Will Martin <contact@willmartian.com>
* add accordion component
* use aria-labelledby for content region
* cleanup inactive styles
* add accordion group component to enable single select
* Use title for input name. Update based on PR feedback
* use formatted storybook args
* fix open not working correctly with single select. Add max-height
* fix accordion specs
* apply css fixes
* Add mroe transition to panel hide/show
* updated accordion transition
* Add border radius back to button
* ensure visually hidden content can not be tabbed to
* remove border when closed
* add nav item to spotlight tour
* check target element display and look for parent block element
* add ability to include border on spotlight element
* measuer sentinel element if target element can contain it
* make nav-item display block for resize to work correctly
* add documentation around block level requirement
* remove with border story from docs as it's open by default
* use data selector to spotlight inner element
* always apply padding and border to spotlight
* remove unneeded story
* remove inputs left in error
* remove dead code
* remove more dead code
* remove old new target check
---------
Co-authored-by: Bryan Cunningham <bryan.cunningham@me.com>
* created tests, matched tw classes to Figma vals
* remove shape, updated docs & test, fix build err
* corrections to documentation and type issue
* updated types and init banner updates
* fixed icon sizing issue & vertical spacing
* got tests working, updated docs, stb wip
* updated docs and action slot top gap
* updated bit-banner breaking instances
* readded icon descritption to md
* wip - adding better stories
* better stories added to md
* fixed expanded action slot top spacing
* [CL-1009] button style updates (#18301)
* add new button styles
* update disabled styles
* updated size stories
* update disabled button story names
* updated button stories
* add more explicit screenshots
* make class list a computed signal
* updated button docs
* allow unstyled button to inherit color
* use unstyled button in callouts until callout updates
* base button directive WIP
* add base button directive
* fix focus and hover styles
* fix lint error
* remove commented code that moved to base directive
* ensure buttonStype defaults correctly
* migrate legacy icon button types
* contrast button wips
* pull in latest and fix disabled with attr
* fix legacy variant
* add back nav contrast button variant
* updated icon button docs
* rename nav contrast variant and fix contrast focus
* fix button sizing
* fix product switcher button classes
* add contrast icon button story
* fix border color
* update to primaryGhost variant
* [CL-1025] icon font refresh (#18727)
* adding new icons
* migrate to new icon names
* updated icon build docs
* resolve conflicts and re-run migration
* add icons deps to uif ownership
* fix incorrect migration
* fix misnamed icon
* create filter icon and fix mapping error
* updated readme and add migration script to package.json
* fix prettier warnings
* remove browser alt from definition list
* add missing icon types
* fix image name migrated in error and update regex to not change these
* ensure icon array is updated automatically
* updated build comment
* remove unnecessary direct execution command
* remove direct run command
* allow legacy icon names to map to new icons
* [CL-1025] Icon font refresh - Temporary migration state with legacy names (#18948)
* Revert icon name migrations, preserve migration tooling
Reverted all icon name changes that were applied by the migration scripts,
while preserving:
- New icon SVG files in libs/assets/src/material-icons/
- Icon font files in libs/angular/src/scss/bwicons/
- Migration scripts in scripts/material-icons/
- NPM scripts and dependencies for icon tooling
This allows running the migration fresh when ready.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Build icon font with bidirectional legacy/new name mapping
Ran icons:build to generate bidirectional icon mappings:
- SCSS now includes 155 icons (both Figma and legacy BWI names)
- TypeScript icon.ts updated with all 155 names
- All legacy names (e.g., bwi-question-circle, bwi-plus) point to new icon assets
- All new names (e.g., bwi-help, bwi-add) also available
- Codebase can continue using legacy names with new icon designs
This enables the temporary migration state where code uses existing
legacy icon names but displays the new refreshed icon assets.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Fix: revert bwi-filter back to bwi-grid across codebase
bwi-grid is the correct new icon name and should not be reverted.
The changes from bwi-filter to bwi-grid were manual corrections,
not part of the automated migration.
Updated 16 files to restore bwi-grid icon references.
Addresses feedback from Bryan Cunningham on PR #18948
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* remove duplicate key and add back dep ownership change
* fix formatting errors
---------
Co-authored-by: Will Martin <contact@willmartian.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* storybook banner dupe
* fixed imports
* updated failing test
* updated icon values to match icontile
* fixing type issue for banner using icons
* pulled in work prev branch - functional working
* updated stories to match comp
* fixed border placement
* removed files pulled in from wrong branch
* clean up wip
* touched up to icon name
* updated docs
* updated imports to fix issue
* updated imports to fix issue
* improved generic naming for slots
* updated typography for title and content
* addressing image sizing adjustment
* use slots rather than directives
* use empty selector
* use components instead of slots
* remove unused imports and use noMargin input
* update arrow size and use correct colors
* migrate to footer component
* do not assume content is paragraph
* remove noMargin
* add back spotlight stories and fix positioning
* remove null from aria-label
* use different button if header is rendered
* add padding so title does not overlap close button
* conditionally apply padding
* remove unneeded slot
* cleanup icon usage and remove img
* update popover max-width
* add more padding to header
---------
Co-authored-by: Bryan Cunningham <bcunningham@bitwarden.com>
Co-authored-by: Will Martin <contact@willmartian.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
Co-authored-by: Bryan Cunningham <bryan.cunningham@me.com>
* Enhance logout process in AppComponent to ensure navigation occurs before state clearance. This allows canDeactivate guards to function properly, preventing state changes if the user cancels the logout. Refactor logout logic to improve user experience during logout flow.
* ac/pm-36512 fixes discard warning not shown when closing by X
* ac/pm-36532 do not warn user when they revert changes
* ac/pm-36516 user logged out despite selecting back to editing fix
* ac/pm-36518 double warning when locking vault with edited policy open fix
* ac/pm-31364 fix double warning when locking vault with edited policy open
* Refactor policies deactivation logic to improve user experience during logout and navigation. Removed unused canDeactivate registration in PoliciesComponent and streamlined the PoliciesDeactivateGuard to directly check user authentication status. This ensures smoother transitions when locking the vault or logging out, preventing unnecessary warnings and enhancing overall functionality.
* Refactor PoliciesDeactivateGuard and PolicyEditDialogComponent to handle null active accounts during logout. This change improves user experience by ensuring that the guards disarm correctly when the active account is null, preventing unnecessary warnings and enhancing navigation flow during logout and policy editing.
* Refactor PolicyEditDialogComponent to simplify change detection logic. Removed unused initial value signals and streamlined the dirty state checks for form components, enhancing clarity and maintainability of the code.
* Remove unused HostListener for window beforeunload in PolicyEditDialogComponent to simplify the component and improve code maintainability.
* Refactor AutoConfirmPolicyEditComponent to implement close functionality for dialog interactions. Updated button actions to call close method, ensuring proper dialog closure and integration with the discard-edits dialog when there are unsaved changes. Enhanced MultiStepPolicyEditDialogComponent to reset dirty state on step advancement, improving user experience during policy editing.
* Refactor AppComponent and AccountMenuComponent to enhance logout and lock functionality. Removed unused Injector dependency in AppComponent and streamlined logout process to ensure canDeactivate guards are respected. Updated AccountMenuComponent to utilize LockService for locking the vault, improving user experience during state transitions.
* Revert app.component.ts to origin/main state
Remove navigate-before-logout change; no net changes to this file should be on this branch.
Co-authored-by: Cursor <cursoragent@cursor.com>
* Add AuthService mock to PolicyEditDialogComponent tests and update comments for clarity
* Introduced AuthService mock in the PolicyEditDialogComponent test suite.
* Revised comments in the component to enhance clarity regarding the discard guard behavior during logout and component teardown.
* Refactor dialog close functionality to use directive
* Updated dialog component to utilize the new `bitDialogClose` directive for closing dialogs.
* Enhanced `DialogCloseDirective` to normalize input values, ensuring consistent behavior when the directive is used without a value.
* Update DialogCloseDirective to use void for close method call
* Changed the dialog close method call to use 'void' for better clarity and to indicate that the return value is intentionally ignored.
* This change enhances the directive's behavior by making it clear that the close operation does not need to be awaited.
* Refactor PolicyEditDialogComponent to improve close logic
* Updated the close condition in the PolicyEditDialogComponent to check for a truthy result instead of just defined, enhancing clarity on intentional dialog closures.
* Adjusted comments to better explain the behavior of the dialog close mechanism.
* Add AuthService mock to MultiStepPolicyEditDialogComponent tests
* Introduced AuthService mock in the MultiStepPolicyEditDialogComponent test suite to enhance test coverage.
* Updated the test providers to include the new AuthService mock for improved clarity and functionality in tests.
* Update DialogCloseDirective to enhance close condition check
* Modified the close method to include a check for the existence of dialogRef, preventing closure when it is not defined.
* This change improves the robustness of the dialog closing logic by ensuring that the directive behaves correctly even when the dialog reference is missing.
* Update buttons in auto-confirm policy component to use bitDialogClose directive
* Replaced (click)="close()" with bitDialogClose in the cancel and close buttons for improved dialog closure consistency.
* This change aligns with recent enhancements to the dialog close functionality, ensuring a more standardized approach across components.
* Remove unused dialogRef injection and close method from AutoConfirmPolicyEditComponent to streamline the component's functionality. This change simplifies the code by eliminating unnecessary dependencies and methods related to dialog closure.
---------
Co-authored-by: Cursor <cursoragent@cursor.com>
* docs(components): document banner dismiss button binding behavior
Add JSDoc to the banner's dismiss output and a NotDismissible Storybook
story showing that the close button is omitted when no (dismiss) handler
is bound.
* docs(components): document banner dismissibility in mdx
Add a Dismissibility section to banner.mdx referencing the
NotDismissible story.
* [PM-34804] Implement policy drawer feature for editing policies
* Added `openDrawer` method to `PolicyDialogComponent` and `MultiStepPolicyEditDialogComponent` to support opening dialogs in a drawer format.
* Updated `edit` method in `PoliciesComponent` to conditionally use the drawer based on the `PolicyDrawers` feature flag.
* Introduced `PolicyDrawers` feature flag in `feature-flag.enum.ts` to control the new drawer functionality.
* Enhance policy edit dialogs with drawer support
* Updated `policy-edit-dialog.component.html` and `multi-step-policy-edit-dialog.component.html` to conditionally apply full height class based on drawer state.
* Modified `PolicyEditDialogComponent` to include a host binding for full height when in drawer mode.
* Enhance MultiStepPolicyEditDialogComponent to support full height in drawer mode by adding a host binding for the full height class based on the dialog reference state.
* Enhance PoliciesComponent to manage dialog references and ensure proper cleanup on destroy. Added drawerRef to handle drawer state and close it when the component is destroyed.
* Refactor PoliciesComponent to change drawerRef from readonly to mutable, allowing for potential updates to the dialog reference during component lifecycle.
* Add PoliciesDeactivateGuard to manage unsaved changes in PoliciesComponent
- Introduced PoliciesDeactivateGuard to prevent navigation away from the PoliciesComponent if there are unsaved changes in the drawer.
- Enhanced PoliciesComponent with a canDeactivate method to check for unsaved changes.
- Updated policy-edit-dialog components to implement discard edits confirmation dialogs.
- Added localization messages for discard edits confirmation prompts.
- Modified organization-settings-routing to include the new guard for the policies route.
* Update policy edit dialog to enhance user experience
- Changed cancel button text from "Keep editing" to "Back to editing" for clarity.
- Updated dialog type to "danger" to better reflect the action's implications.
- Added option to hide the dialog icon for a cleaner interface.
- Localized new button text and updated existing localization for discard edits confirmation.
* Update discard edits confirmation message for clarity in user interface
* Refactor PoliciesComponent to utilize signals for drawerRef management
- Updated drawerRef to use signal for better state management.
- Modified edit method calls in tests to be asynchronous, ensuring proper handling of dialog interactions.
- Adjusted cleanup logic in component lifecycle to accommodate new signal implementation.
* Update PoliciesComponent and PolicyEditDialogComponent for improved dialog handling
- Changed drawerRef type to allow for any DialogRef in PoliciesComponent.
- Set closePredicate to undefined in PolicyEditDialogComponent before closing the dialog to ensure proper cleanup.
* Enhance PoliciesComponent tests to support async operations and add new test for drawer functionality. Update policy-edit-dialog components to remove deprecated host bindings. Adjust layout component styles for drawer container.
* Refactor layout component: Simplify drawer container markup by removing unnecessary grid styling.
* Refactor PoliciesComponent: Replace drawerRef with signal for improved state management and update cleanup logic on component destruction.
* Refactor policy edit dialog components: Simplify form markup by integrating dialog properties directly into the form tag and enhancing title template handling for improved readability and maintainability.
* Update dialog components: Change discard edits confirmation type from "danger" to "warning" in PolicyEditDialogComponent and adjust button type in SimpleConfigurableDialogComponent to "primary" for consistency.
* Update dialog components: Change discard edits confirmation type from "warning" to "danger" in PolicyEditDialogComponent and adjust button type in SimpleConfigurableDialogComponent to reflect the new danger type.
* Refactor loading indicator in policy edit dialog to use @if syntax for improved readability
* Refactor policy edit dialog to dynamically set title and subtitle based on current step content
* Refactor policy edit dialog to improve cancel functionality and dialog closing behavior. Updated cancel button to trigger a confirmation dialog for unsaved changes and removed unused close predicate logic.
* Enhance discard edits functionality in policy edit dialogs by implementing a discard guard. This allows for confirmation before closing when there are unsaved changes, improving user experience. Refactored dialog closing behavior to utilize a close predicate for drawer dialogs.
* Add bulk auto-confirm functionality for organization users
- Introduced methods to retrieve pending auto-confirm users and to bulk auto-confirm them in the OrganizationUserApiService.
- Added OrganizationUserPendingAutoConfirmResponse model to handle responses for pending auto-confirmation.
- Implemented logic in DefaultAutomaticUserConfirmationService to automatically confirm users who accepted their invitations while the admin was offline.
- Updated feature flags to enable bulk auto-confirmation on login.
These changes enhance the user management experience by streamlining the confirmation process for organization users.
* Enhance MainBackground class by adding authService, accountService, and configService dependencies to the constructor. This update improves service integration for background operations.
* Add bulk auto-confirm functionality on user login
- Implemented the `initBulkAutoConfirmOnLoginSweep` method in `DefaultAutomaticUserConfirmationService` to trigger bulk auto-confirmation for users transitioning from Locked to Unlocked status.
- Enhanced unit tests to verify the behavior of the sweep service under different authentication states.
- Updated the service to utilize `AuthenticationStatus` for improved state management during user confirmation processes.
These changes streamline the user confirmation workflow, ensuring timely processing of pending confirmations upon user login.
* Add canDeactivate method to PoliciesComponent and enhance DrawerDialogRef with tryClose method
- Implemented canDeactivate method in PoliciesComponent to manage navigation based on drawer state.
- Added tryClose method in DrawerDialogRef to facilitate closing the dialog and returning a resolved promise.
* Refactor PoliciesComponent and Dialog service for improved cleanup and documentation
- Updated PoliciesComponent to use void in the onDestroy callback for better clarity.
- Removed the tryClose method from DialogRef and its implementations in DrawerDialogRef and CdkDialogRef, simplifying the dialog closing logic and documentation.
* Enhance Policy Edit Dialog functionality and tests
- Updated the cancel button in both policy edit dialog components to call the cancel method directly.
- Added keydown event handling for the Escape key to trigger the cancel action in the PolicyEditDialogComponent.
- Modified the dialog reference mock in tests to include keydownEvents for improved test coverage.
* Enhance tests by adding mock implementations for ResizeObserver and DialogRef, and suppressing specific console errors in Menu component tests.
* Refactor DefaultAutomaticUserConfirmationService for improved user confirmation handling
- Updated the `initBulkAutoConfirmOnLoginSweep` method to utilize a set for tracking seen user IDs, preventing duplicate processing during user state transitions.
- Enhanced error handling in the bulk auto-confirmation process to gracefully manage transient errors.
- Introduced a new `resolveAutoConfirmOrg` method to streamline organization retrieval logic for user confirmation.
- Updated unit tests to reflect changes in the handling of account information and ensure correct behavior during user confirmation processes.
These modifications enhance the efficiency and reliability of the user confirmation workflow, particularly during login transitions.
* Refactor DialogRef usage in FreeBitwardenFamiliesComponent and update createInjector method in DialogService to use generic types for improved type safety.
* Remove unnecessary whitespace in createInjector method of DialogService for cleaner code.
* Update BulkAutoConfirmOnLogin feature flag value to reflect new implementation
* Enhance unit tests for DefaultAutomaticUserConfirmationService to validate feature flag behavior. Added checks to ensure subscriptions are not set up when the feature flag is disabled and confirmed correct behavior during user state transitions. Updated the `initBulkAutoConfirmOnLoginSweep` method to be asynchronous for proper feature flag handling.
* Integrate ConfigService to manage feature flags in PolicyEditDialog and MultiStepPolicyEditDialog components. Update discard guard logic to utilize feature flag for improved user experience during policy edits. Enhance unit tests to reflect these changes.
* Refactor PolicyEditDialogComponent to enable discard guard based on feature flag. Updated feature flag from BulkAutoConfirmOnLogin to PolicyDrawers and changed discardGuardEnabled to a non-private property for better accessibility.
* Refactor PolicyEditDialogComponent to utilize signals for discard guard state management. Updated discardGuardEnabled to a signal and adjusted related logic for feature flag handling and form dirty checks.
* Add devclarity commands
* added doc and skills
* Added cipher type skill
* Refined the cipher type skills a bit
* core models and enum
* Wire BankAccount into cipher container classes
* Add BankAccount icon(incomplete), vault filters, and shared UI components
* Localization keys
* Add BankAccount into web vault UI
* Add BankAccount into browser extension UI
* Add BankAccount into desktop vault UI
* Add BankAccount support to CLI
* copy actions
* Remove .claude/commands files from branch
* Updated to match vault/PM-32687-cipher-type-skill
* update bank account copy options on web
* add copy options for bank account on browser
* update bank account copy fields for both versions of the vault
* update `hasBankAccount` logic to consider all fields
* add PIN and Account Number to protected fields for reprompt service
* update bank account section to have readonly properties
* localize bank account view - account type
* remove duplicate import
* add events for bank account
* migrate form field to use content children to allow for OnPush consumers to update fields
* fix strict typings
* fix failing tests from bank account changes
* display all bank account details for the cli
* add bank icon
* add copy option for iban
* remove bank account from cipher menu
* update bank account implementation based on main
* address local claude feedback
* address the fixme
* local code review changes
* update SDK and fix BankAccount adjacent typings
* make IBAN and SWIFT fields hidden by default
* clean up encrypted string tests
* add IBAN and Swift to protected fields
* fix test
* add BankAccount to cipher-types.md
* remove filtering for cli commands
---------
Co-authored-by: Patrick Honkonen <phonkonen@bitwarden.com>
Co-authored-by: Nick Krantz <nick@livefront.com>
Co-authored-by: Nick Krantz <125900171+nick-livefront@users.noreply.github.com>
* remove berry default limit
* format number and remove protected for Storybook inference
* updated docs to show new behavior
* more obsolete docs updates
* add back previous char limit for padding logic
* fix max digits story
* fix type error
* remove undfined from type union
---------
Co-authored-by: Will Martin <contact@willmartian.com>
* [PM-31438] Add save edits dialog to web vault Send page
* Fix Access Intelligence component
* Match design spec, address PR comment
* Fix lint problem
* Lots of lint fixes
* Test fix, add change lost during merge conflict
* Change close methods return type to DialogCloseRef
* Fix Dialog types
* One more type fix
* Address QA findings, fix problems from merge
* A couple of build fixes
* Address AI review comments
* Fix desktop build and lint
* when the footer is not present in the dialog remove empty div
* add new item type feature flag
* add subtitle text to cipher menu items
* add add item dialog and associated components
* integrate the new item dialog into web and AC vaults
* add dialog header start slot for dialog
* fix menu trigger when feature flag is disabled
* add back button for cipher dialogs
* bind `this` for back action
* only show back button when a new cipher is being created
* fix edit access for new ciphers
* fix logic for adding a cipher and showing the back button
* add back action to the collection dialog
* add back action to folder dialog
* fix formatting and strict types
* update backAction getter for consistency
* add story without footer
* prettier fixes
* address local claude feedback
* update icons on dialog
* adjust spacing and sizes
* fix strict typings
* add typography import
* design pass after working on other platforms
* update to use the icon tile component
* address feedback from design
* update grid to use bit item
* remove dialog description
* update to single column when less than 6 items
* Revert "add dialog header start slot for dialog"
This reverts commit e029cdecdc.
* remove back action for new cipher dialog
* match padding-top of dialog when there is no footer
* fix alignment of carrot
* remove tests associated back action
* use default bit-item styles for typography
* reduce margin of bit-item
* prefer `inject` function
* add readonly and protected
* move types into the grid component to streamline the api integration
* use new badge api for icon
* new default max width for badges
* update js doc comment
* remove margin that was not rendering previously and keep whitespace for spacing
* fix: warn user about unsaved changes before applying desktop update
* fix: update dialog
* fix: update restart to properly clean up IPC listeners on timeout and warn about unsaved Send forms
* revert: Revert AddEditComponent changes
* fix: solve type error
* fix: warn user about unsaved chagnes
* fix: use FormGroupDirective in DirtyFormService to detect dirty forms after form reassignment
---------
Co-authored-by: bittoby <bittoby@users.noreply.github.com>
* [CL-1009] button style updates (#18301)
* add new button styles
* update disabled styles
* updated size stories
* update disabled button story names
* updated button stories
* add more explicit screenshots
* make class list a computed signal
* updated button docs
* allow unstyled button to inherit color
* use unstyled button in callouts until callout updates
* base button directive WIP
* add base button directive
* fix focus and hover styles
* fix lint error
* remove commented code that moved to base directive
* ensure buttonStype defaults correctly
* migrate legacy icon button types
* contrast button wips
* pull in latest and fix disabled with attr
* fix legacy variant
* add back nav contrast button variant
* updated icon button docs
* rename nav contrast variant and fix contrast focus
* fix button sizing
* fix product switcher button classes
* add contrast icon button story
* fix border color
* update to primaryGhost variant
* [CL-1025] icon font refresh (#18727)
* adding new icons
* migrate to new icon names
* updated icon build docs
* resolve conflicts and re-run migration
* add icons deps to uif ownership
* fix incorrect migration
* fix misnamed icon
* create filter icon and fix mapping error
* updated readme and add migration script to package.json
* fix prettier warnings
* remove browser alt from definition list
* add missing icon types
* fix image name migrated in error and update regex to not change these
* ensure icon array is updated automatically
* updated build comment
* remove unnecessary direct execution command
* remove direct run command
* allow legacy icon names to map to new icons
* [CL-1025] Icon font refresh - Temporary migration state with legacy names (#18948)
* Revert icon name migrations, preserve migration tooling
Reverted all icon name changes that were applied by the migration scripts,
while preserving:
- New icon SVG files in libs/assets/src/material-icons/
- Icon font files in libs/angular/src/scss/bwicons/
- Migration scripts in scripts/material-icons/
- NPM scripts and dependencies for icon tooling
This allows running the migration fresh when ready.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Build icon font with bidirectional legacy/new name mapping
Ran icons:build to generate bidirectional icon mappings:
- SCSS now includes 155 icons (both Figma and legacy BWI names)
- TypeScript icon.ts updated with all 155 names
- All legacy names (e.g., bwi-question-circle, bwi-plus) point to new icon assets
- All new names (e.g., bwi-help, bwi-add) also available
- Codebase can continue using legacy names with new icon designs
This enables the temporary migration state where code uses existing
legacy icon names but displays the new refreshed icon assets.
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
* Fix: revert bwi-filter back to bwi-grid across codebase
bwi-grid is the correct new icon name and should not be reverted.
The changes from bwi-filter to bwi-grid were manual corrections,
not part of the automated migration.
Updated 16 files to restore bwi-grid icon references.
Addresses feedback from Bryan Cunningham on PR #18948
---------
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* remove duplicate key and add back dep ownership change
* fix formatting errors
---------
Co-authored-by: Will Martin <contact@willmartian.com>
Co-authored-by: Claude Sonnet 4.5 <noreply@anthropic.com>
* fix button variant
* [CL-1040] updated palette colors (#19401)
* [CL-973] chip component (#18798)
* wip
* WIP
* create chip filter component
* trying to get truncation to work
* fix truncation
* create chip-action component
* fix type errors
* add chip component
* add shared story args
* have chips take label input
* fix test template and imports
* fixing arg types and disabled states
* simplify disabled logic
* fix dimssis button alignment
* update menu focus color
* updated chip docs
* update chip-select usage to chip-filter
* fix full width icon layout
* remove commited code
* export chip component
* remove commented code
* expose full width
* chip component should not go full width
* use bit-icon in filter template
* remove commented code
* updated chip docs
* remove extra truncate class
* fix dupe input definitions
* move import to correct line
* read base chip values directly
* remove standlaone as it's the default
* forward size correctly
* create full width arg type
* let type be infered
* updated jsdoc comments
* use more modern angular syntax
* rename components to use kebab case
* remove redundant docs
* remove inaccurate link docs
* remove enum like types
* remove dead code
* remove unused spec
* remove host bindings
* restructure chips folders
* add max width class
* remove full width docs
* add internal comment
* bind to missing controls
* fixing docs
* replace disabled verbiage with inactive
* remove unnecessary comment
* default to primary
* do not allow end icon in action chip
* take chip action screenshots in both themes
* use selected input for base directive
* fix width error
* coerce to boolean
* fixed end icon reference
* fix code reference to endIcon
* fixing chip filter specs
* fix missing input transform
* fix docs
* fix input and add truncate
* ensure chip content truncates
* updated slot naming
* updated example to use new flow control
* fix typing for option.icon
* fix failing test, fix filter type, and support colored icons in filter options
* fix failing test
* doc updates
* change dismissed event name
* remove standalone
* fix selector
* fix docs
* remove unused fvw data property and fix docs links
* use base as host directive in chip
* fix spec button selectors
* fix duplicate class binding
* fix incorrect variant resolution
* handle undefined size
* fix signal type
* remove duplicate input
* fix failing spec
* updated styles for trailing icon spacing and font size
* padding tweaks for visual design
* make variant a writable model
* use logical text align
* update slot names
* remove dismissible input
* add back missing import
* remove ability to set chip filter to small size
* create size arg type
---------
Co-authored-by: Vicki League <vleague@bitwarden.com>
* [CL-987] Update Nav Group and Nav Item components (#18965)
* updated side nav `nav-group` and `nav-item` components
* - added focus states
- set cursor pointer for nav-item
- updated arrow orientations
* - updated `navItemIndentationPadding`
- reverted `[treeDepth]` for `nav-group`
- removed placeholder arrow
* - removed text style from starting slot container
- fixed routes in story
* created shared container classes var
* fixes from rebase, override `border-radius` for collapse arrow button
* updated `tw-theme`: reverted `--color-bg-hover` and added `--color-bg-sidenav-hover`
* removed end slot `div` styles from rebase, updated `buttonType` in `nav-group` story
* added dark mode `--color-bg-sidenav-hover`
* added `xsmall` size variant to 'Icon Button'
* - updated navs to use 'xsmall' button
- fixed container padding
- removed custom arrow button styles
* fixed type error
* fixed focus-visible state by adding `tw-outline-none` to `nav-item`
* fixed type error
* placed arrow button directly in start slot
* defined `containerClasses` in template
* renamed 'item-active-hover' to 'active-item-hover' for consistency
* missed renaming from `item-active-hover` to `active-item-hover`
* fixed 'hover' and 'active' colors, added colors for arrow hover states
* - separated buttons sizes for 'Button' and 'Icon Button' from `BaseButtonDirective` into respective components
- moved `border-radius` style from Directive into own components
* fixed/simplified focus colors, added sidenav specific focus colors
* updated 'arrow' icon size for nav group, updated 'xsmall' font size
* trigger Claude review
* removed `tw-text-2xl` in nav-group for arrow button
* removed unused `NgClass` import
* more cleanup, removed unused `Ng` imports
* converted `_isActive` to signal and `showActiveStyles` to computed
* removed instances of `variant="tree"`
* renamed color variables from `admin-sidenav` to `sidenav-secondary`
---------
Co-authored-by: Will Martin <contact@willmartian.com>
* fix lint
* [CL-1096] Fix icon button width shrinking in flex containers (#19529)
Add tw-shrink-0 to prevent icon buttons from shrinking below their
fixed size when placed inside flex containers.
* [CL-1101] Fix chip dismiss button hover style and add interaction state stories (#19530)
Use the correct bg-bg-hover token for dismiss button hover background, matching
the Figma spec. The previous hover-contrast token was invisible on light backgrounds.
Add InteractionStates story showing Default, Hover, Focus, and Inactive states
for both large and small sizes.
* [CL-1098] Fix danger icon button color in form field suffix (#19532)
* [CL] Fix danger icon button color in form field suffix
Don't apply tw-text-muted to icon button suffixes — icon buttons manage
their own text color via buttonType, so the muted class was overriding
danger/primary colors (e.g. blue icon on red background in Cipher Form).
* [CL] Fix danger icon button color in form field suffix
Don't apply tw-text-muted to icon button suffixes — icon buttons manage
their own text color via buttonType, so the muted class was overriding
danger/primary colors (e.g. blue icon on red background in Cipher Form).
Also adds a DangerButtonInputGroup story to capture this case.
* [CL-1094] Update icon button default variant to primaryGhost (#19534)
* [CL-1094] Update icon button default variant to primaryGhost
Change buttonType from input to model in BaseButtonDirective, and set
the default to primaryGhost in the icon button constructor.
* [CL-1094] Fix icon button default variant using own input + effect
Using model.set() in the constructor is overridden by Angular's input
initialization lifecycle. Instead, own buttonType as an input directly
on BitIconButtonComponent with primaryGhost as the default, and sync to
the base directive via effect.
* [CL-959] update badge component styles (#19026)
* badge wip
* dynamic truncated badge tooltip
* support legacy variants for now
* add deprecation types and remove hover styles
* updated story docs
* add default icons for badges
* fix incorrect color mapping
* add ability to hide start icon
* take snapshot in both themes
* add icon size styles
* remove tooltip code
* update at risk password to use actual buttons
* more specific badge truncation docs
* remove badge module from imports
* use chip action for link
* fix missing import
* use chip in multi-select inputs
* update org badge to use primary chip
* update premium badge to accent primary action chip
* use chip action for vault item fill
* remove unnecessary icon in badge
* update obsolete notification variant
* replace usage of bitBadge on button in stories
* remove explicit input to hide startIcon
* use berry instead of badge
* fix type error
* fixing imports and badge usage
* use logical text align
* remove dead code and update jsdoc comment
* add back ability to not truncate
* remove default icon for accent-primary
* add missing translation keys to multi select story
* allow null as default icon type
* add element selector and update stories to use it
* conditionally apply truncate class
* conditionally apply title text
* migrate badge to berry
* use correct input for content
* use berry in toggle group stories
* remove unused template reference
* remove unused import of badge
* remove unused custom color code
* remove unused service injection
* [CL-1102] Fix help icon size in bit-label (#19533)
* [CL-1102] Fix help icon size in bit-label
Target bwi icons inside bit-label with [&_.bwi]:tw-text-xl to restore
correct icon sizing after recent icon style changes.
* [CL-1102] Fix text alignment regression in bit-label
Add tw-leading-none to bwi icons to prevent the line-height from
tw-text-xl from disrupting baseline alignment.
* remove bwi-sm from label icon
---------
Co-authored-by: Bryan Cunningham <bryan.cunningham@me.com>
* [CL-964] Update Callout Component (#19424)
* updated callout component
* renamed consumer bit-callout `type` from 'default' to 'subtle'
* updated callout 'end' slot
* migrated spotlight to callout, deleted spotlight
* - updated `title` comment
- updated stories and mdx
* removed `useAlertRole`
* added `CommonModule` import and updated `buttonType` in stories
* updated 'Accessibility' guidelines
* updated 'close' button
* - updated stories for clearer code
- set `(onDismiss)` only for WithCloseButton story
* added boolean switch for `persistent` to story
* fixed tests
* prettier fix
* - updated `bit-callout` instances of `buttonType="unstyled"` to use appropriate `buttonType`
- updated story for correct usage of button styles
* fixed `type` in `vault-list`
* updated to use `bit-icon`
* - fixed vertical centering of icon and text
- updated to 'OnPush' change detection
* fixed error: added 'close' to `mockLayoutI18n`
* updated `bit-callout` jsdoc comment and mdx
* fixed `persistent` callout in `admin-settings`
* removed "interrupt" language
* reverted fix for `bit-callout` `persistent`
* fixed type error
* added `close` translation to stories utilizing `bit-callout`
* converted to JSDoc comments
* updated 'close' button to check if `dismiss` output is bound
* fix: removed `readonly` from `isDismissible`
* converted `isDismissble` to signal
* added translation to `phishing-warning' story
* added bottom margin back in to callout component
* fixed type error, fixed `icon` values
* revert subscription-card callout icon to default if not defined
* fix: update 'bit-callout' type to 'subtle'
* updated colors in `tw-theme`
* added conditional check to compute vertical alignment class
* updated more colors, slight restructure to match design
* fixed vertical alignment with 'close button', avoid long text crowding/overflowing
* remove default icons on non-semantic variants (#19614)
* remove default icons on non-semantic variants
* add back info icon to info variant
* remove info icon again
* [CL-1095] add expanded state for disclosure button (#19637)
* add brand stronger colors
* add aria-expanded styling for primary ghost button
* make all variants aria-expanded style match hover styles
* update orage-600 color value to fix contrast
* minor spacing update to account for expanded button style
* do not show expanded state on sidenav buttons
* no expanded style on toggle width button
* remove extra letter spacing and update story copy (#19668)
* [CL-1123] fix ghost button inactive styles (#19669)
* fix ghost button inactive styles
* remove type declaration
* [CL-1119] toggle berry update (#19609)
* update toggle groups to use berry
* set berry variant based on selected state
* fix failing spec
* add spec to test berry variant set correctly
* fix import errors caused by bad merge conflict resolution
* remove unnecessary variant delaration
* update kitchen sink stories to use berry
* [CL-1122] BUG FIX: Migrated Icon Buttons with button type 'danger' to 'dangerGhost' (#19677)
* migrated `bitIconButton` with 'danger' `buttonType` to 'dangerGhost'
* reverted icon-button story
* fix button variant from merge
* [CL-1117] BUG FIX: Side nav collapse arrow is placed too far left (#19623)
* - updated spacing for side-nav collapse arrow button
- updated collapsed nav-item button spacing and dimensions
- moved individual nav-item wrapper padding into side-nav component
- added button to 'WithLongText' nav-item story
* added sidenav specific hover style to toggle collapse button
* - set horizontal padding back to 'nav-item'
- updated 'bit-divider' color to 'bg-border-brand'
* updated hover styles for interactive trailing elements
* added '4px' more end padding to trailing buttons
* updated 'bit-divider' colors for secondary and dark theme
* moved button hover styles into 'side-nav' button variant
* updated sidenav-divider color for dark theme
* removed `tw-w-10` on nav-item collapsed
* updated inline padding to `12px` for both collapse and expanded states
* [CL-1117] cleaned up, renamed, and organized sidenav color variables (#19665)
* - unified 'strong' styles and `showActiveStyles` into `[style]`
- updated 'side-nav' button variant's `aria-expanded` and `focus-visible` styles
* - inherit bg and fg from parent `sidenav`
- allow trailing buttons set own fg
* updated nav group story for trailing elements
* updated nav-logo 'focus' to nav focus style
* let toggle width arrow inherit 'aria-expanded' style from 'side-nav' buttontype
* removed danger button variants from nav group story
---------
Co-authored-by: Bryan Cunningham <bcunningham@bitwarden.com>
Co-authored-by: Vicki League <vleague@bitwarden.com>
Co-authored-by: Leslie Xiong <lxiong@livefront.com>
* show full urls for autofill confirmation dialog
* add tooltip for autofill confirmation dialog
* add word-break for tooltips
* update tests
* update functionality to account for startsWith and Regular expression
* fix typings
* fix test types that were breaking build