Skip to content

feat(ui-ng): add a dropdown mode and localisable strings to flr-multi-select - #643

Merged
BryanFRD merged 2 commits into
mainfrom
feat/multi-select-dropdown
Oct 6, 2026
Merged

BryanFRD merged 2 commits into
mainfrom
feat/multi-select-dropdown

Conversation

@BryanFRD

@BryanFRD BryanFRD commented Oct 6, 2026

Copy link
Copy Markdown
Contributor

Closes #642

  • mode input on flr-multi-select: list (default, same layout as before) or dropdown. The dropdown trigger matches flr-select (height, border, radius, chevron, focus ring) and shows the placeholder, the single picked label, or the count. The panel sits under the trigger inside the host, so it inherits the tokens set around it, and holds the search and a listbox (aria-multiselectable, aria-activedescendant). Outside click and Escape close it, Escape returns focus to the trigger, ArrowDown/Up open it, arrows/Home/End move, Space/Enter toggle, tabbing out closes it.
  • Checkbox drawn from tokens in both modes: border --flr-rule, fill --flr-accent, check colour --flr-accent-ink falling back to --color-on-accent then white. The native input stays (visually hidden) in list mode.
  • New inputs placeholder, selectedText (a (count) => string, so plurals work) and clearText, defaults keep the current English. id lands on the trigger so a <label for> works.
  • flr-checkbox check mark now takes --color-on-accent too (white stays the default), so it stays readable on light accents.
  • MultiSelectDropdown story with a play function covering open/close (click, Escape, outside click), toggling through the form control, summary text for 0/1/many and keyboard toggling.

flr-tree-select still has the native checkbox and hardcoded strings, left for a follow-up.

@BryanFRD
BryanFRD enabled auto-merge (squash) October 6, 2026 06:52

@ferrfleet ferrfleet Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

One blocking finding: the dropdown panel reimplements positioning and outside-click dismissal that the library already gets from CDK overlay (see flr-menu), and it will clip inside overflow containers. Apart from that, the listbox ARIA, the focus return on Escape, the localisable strings and the checkbox mask change look correct.

Comment thread packages/ui-ng/src/lib/multi-select/multi-select.component.html Outdated
}
}

protected onListKeydown(event: KeyboardEvent): void {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: ActiveDescendantKeyManager from @angular/cdk/a11y already handles the arrow, Home and End navigation and the active index (with withWrap(false), withHomeAndEnd() and typeahead for free). Hand-rolling it here is fine, but if you move to the CDK overlay anyway, using the key manager would shrink this switch to just the Space/Enter and ArrowUp-to-search cases.

@ferrfleet ferrfleet Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

129ba68 fixes the blocking overlay finding. The panel now uses the same CDK connected overlay pattern as flr-menu. Nothing blocking remains.

@BryanFRD
BryanFRD merged commit 9bacdff into main Oct 6, 2026
16 checks passed
@BryanFRD
BryanFRD deleted the feat/multi-select-dropdown branch October 6, 2026 07:21
ferrflow Bot added a commit that referenced this pull request Oct 6, 2026
## [1.44.0] - 2026-10-06

### Features

- feat(ui-ng): add a dropdown mode and localisable strings to flr-multi-select (#643)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat(ui-ng): dropdown mode and localisable strings for flr-multi-select

1 participant