Popover: implement Bootstrap trigger, dismiss, and positioning parity #10

Closed
opened 2026-06-23 19:00:30 +00:00 by mik-tf · 2 comments
Owner

Parent tracker: #1

Objective: upgrade Popover on the same positioning and trigger foundation as Tooltip while preserving Bootstrap popover semantics.

Scope:

  • Use the shared overlay positioning core for viewport-aware placement, fallback placements, offset, and effective placement classes.
  • Add typed trigger support for click, hover, focus, manual, and valid combined trigger behavior.
  • Add delay support and outside-dismiss/focus-dismiss behavior aligned with Bootstrap guidance.
  • Preserve title/body absence behavior and custom popover class support.
  • Add accessibility behavior: role/aria output, focus expectations, and keyboard-safe dismiss behavior.

Acceptance criteria:

  • Popover examples and docs show the typed props.
  • E2E covers click, focus dismiss, outside dismiss, viewport-edge fallback, empty title/body cases, and aria/role output.
  • No Bootstrap JavaScript dependency is introduced.
  • Existing checks stay green.

Dependencies: parity spec issue and overlay positioning core issue.

Signed-by: mik-tf mik-tf@noreply.invalid

Parent tracker: https://forge.ourworld.tf/lhumina_code/dioxus-bootstrap-css/issues/1 Objective: upgrade Popover on the same positioning and trigger foundation as Tooltip while preserving Bootstrap popover semantics. Scope: - Use the shared overlay positioning core for viewport-aware placement, fallback placements, offset, and effective placement classes. - Add typed trigger support for click, hover, focus, manual, and valid combined trigger behavior. - Add delay support and outside-dismiss/focus-dismiss behavior aligned with Bootstrap guidance. - Preserve title/body absence behavior and custom popover class support. - Add accessibility behavior: role/aria output, focus expectations, and keyboard-safe dismiss behavior. Acceptance criteria: - Popover examples and docs show the typed props. - E2E covers click, focus dismiss, outside dismiss, viewport-edge fallback, empty title/body cases, and aria/role output. - No Bootstrap JavaScript dependency is introduced. - Existing checks stay green. Dependencies: parity spec issue and overlay positioning core issue. Signed-by: mik-tf <mik-tf@noreply.invalid>
Author
Owner

Implemented Popover parity in 95373b6dea.

Summary:

  • Added PopoverPlacement::Auto and changed the default placement to End, matching Bootstrap's right-side default.
  • Added typed Popover triggers for click, hover/focus, hover, focus, and manual control.
  • Added delay, controlled open state, fallback placements, offset, boundary padding, outside-dismiss control, and PopoverDisabledTrigger.
  • Reworked Popover positioning onto the shared overlay core for viewport-aware fallback placement.
  • Added Bootstrap role/classes, stable aria-describedby, data-popper-placement output, and empty title/body suppression.
  • Updated showcase examples, parity/design docs, and E2E coverage.

Verification completed locally:

  • cargo fmt --all -- --check
  • cargo check --target wasm32-unknown-unknown -p dioxus-bootstrap-css
  • cargo check --target wasm32-unknown-unknown -p showcase
  • cargo test -p dioxus-bootstrap-css
  • cargo clippy --target wasm32-unknown-unknown -p dioxus-bootstrap-css -- -D warnings
  • npm run test:migrate
  • npm run lint:bootstrap
  • npm run test:e2e -- --grep "popover" (5 passed)
  • npm run test:e2e (55 passed)

Forge CI status:

  • MSRV 1.85 is green.
  • Check, lint, format is still reported as pending/running on actions/runs/22. Leaving this issue open until that status resolves cleanly.

Signed-by: mik-tf mik-tf@noreply.invalid

Implemented Popover parity in 95373b6deadf6fee31d675c882fcab8c83f4b735. Summary: - Added PopoverPlacement::Auto and changed the default placement to End, matching Bootstrap's right-side default. - Added typed Popover triggers for click, hover/focus, hover, focus, and manual control. - Added delay, controlled open state, fallback placements, offset, boundary padding, outside-dismiss control, and PopoverDisabledTrigger. - Reworked Popover positioning onto the shared overlay core for viewport-aware fallback placement. - Added Bootstrap role/classes, stable aria-describedby, data-popper-placement output, and empty title/body suppression. - Updated showcase examples, parity/design docs, and E2E coverage. Verification completed locally: - cargo fmt --all -- --check - cargo check --target wasm32-unknown-unknown -p dioxus-bootstrap-css - cargo check --target wasm32-unknown-unknown -p showcase - cargo test -p dioxus-bootstrap-css - cargo clippy --target wasm32-unknown-unknown -p dioxus-bootstrap-css -- -D warnings - npm run test:migrate - npm run lint:bootstrap - npm run test:e2e -- --grep "popover" (5 passed) - npm run test:e2e (55 passed) Forge CI status: - MSRV 1.85 is green. - Check, lint, format is still reported as pending/running on actions/runs/22. Leaving this issue open until that status resolves cleanly. Signed-by: mik-tf <mik-tf@noreply.invalid>
Author
Owner

Forge CI is now green for 95373b6dea.

Final status:

  • MSRV 1.85: success
  • Check, lint, format: success

Closing #10.

Signed-by: mik-tf mik-tf@noreply.invalid

Forge CI is now green for 95373b6deadf6fee31d675c882fcab8c83f4b735. Final status: - MSRV 1.85: success - Check, lint, format: success Closing #10. Signed-by: mik-tf <mik-tf@noreply.invalid>
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/dioxus-bootstrap-css#10
No description provided.