Skip to content

fix(secrets): complete the cards and table views and move vault context to Proton-style indicators - #607

Open
remko48 wants to merge 5 commits into
fix/dashboard-tiles-relock-vaultfrom
fix/cards-table-type-icon-strength-badge
Open

fix(secrets): complete the cards and table views and move vault context to Proton-style indicators#607
remko48 wants to merge 5 commits into
fix/dashboard-tiles-relock-vaultfrom
fix/cards-table-type-icon-strength-badge

Conversation

@remko48

@remko48 remko48 commented Sep 3, 2026

Copy link
Copy Markdown
Member

Three changes to the vault page's list surfaces, addressing fix-brief bugs 8+9 and a navigation review of the All-secrets root.

Type icons and strength badges in every view. The List view rendered each secret with its type icon and password-strength pill, but cards and table fell back to the library's generic renderer on a name+url schema — the same secret lost its type and strength the moment the user switched view. Cards now render through the same row component the list uses (favicon/type icon, strength pill, request/blocked/compromised states, copy button) boxed in a card shell matching CnObjectCard's tokens; the table grows non-sortable Type and Strength columns rendered through cell slots, with a muted em dash where no score exists so the column shows no blank holes. The type→icon map moved into a shared SecretTypeIcon component so the views cannot drift apart again. One new l10n key ("Strength"), translated into all 36 locales.

No vault rows above the secrets in All secrets. The root opened with a Vaults strip — navigation posing as contents, duplicating the nav's folder tree and pushing every secret below a screen of vault rows (worst on mobile, where the nav toggle already opens the vault list in one tap). The strip is gone at the root; subfolder rows inside a vault are unchanged, where they are the contents of the thing being looked at. The folder-sharing e2e workflow now descends into vaults through the nav tree.

Proton-style vault indicators carry the cross-vault context instead. A new VaultIndicator component renders the vault's own icon and color in two shapes: a compact icon-only dot on the rows in All secrets — list, cards, and the table's Name cell — with a tooltip plus screen-reader-only vault name (never inside a vault, where the page itself is the location), and an icon+name tag in the vault's color under the secret's title in the detail sidebar. rootVaultOf() walks a secret's folder up to its top-level vault, guarded against cycles.

23 new unit tests across the three commits; full suite 785/785, hydra gates green (75/75 applicable).

…ble views

Fix-brief bugs 8+9 (stage 5). The List view rendered each secret with its
type icon and password-strength pill, but the cards and table views fell
back to CnIndexPage's generic renderer driven by a name+url schema — the
same secret lost its type and strength the moment the user switched view.

Cards now fill CnIndexPage's #card slot with the SAME row component the
list uses (SecretListItem: favicon/type icon, strength pill, outstanding-
request, blocked and compromised states, copy button) boxed in a card
shell that mirrors CnObjectCard's tokens, with the selection checkbox
re-wired like the existing #list-item override. The table grows Type and
Strength columns in listSchema, rendered through #column-type and
#column-strength cell slots since their values live in the type/health
stores rather than on the row; both are non-sortable — no row field backs
them. Unscored Strength cells render a muted em dash instead of a blank
hole. The type→icon map moves into a shared SecretTypeIcon component so
the three views cannot drift apart again.

One new l10n key ("Strength") ships translated into all 36 locales with
the catalogs regenerated. 8 new unit tests cover the icon map and its
fallback, the column set and order, the sort opt-out, the translated type
label, and the badge-or-dash rule.
"All secrets" opened with a Vaults strip above the list — navigation
posing as contents. It duplicated the nav's folder tree one panel away
and pushed every secret below a screen of vault rows, worst on mobile
where the nav toggle already opens the vault list in one tap (Proton Pass
comparison). The root is a cross-vault query, not a container the user is
inside.

folderRows now returns nothing at the root; inside a vault or folder the
subfolder rows are unchanged — there they ARE the contents of the thing
being looked at. The vault-glyph rendering, its three view helpers and
the strip's level-dependent caption go with it. The folder-sharing e2e
workflow reaches a vault through the nav tree instead of the removed root
rows, and a new unit spec pins both sides of the rule.
… tag

Follow-through on removing the root Vaults strip: the cross-vault context
it carried moves into two Proton-style indicators instead of container
rows.

A new VaultIndicator component renders both shapes from the vault's own
Stage 9 icon and color, so the glyphs cannot drift: a compact icon-only
dot on the rows in All secrets — list, cards, and the table's Name cell —
with a tooltip plus screen-reader-only vault name (never inside a vault,
where the page itself is the location), and an icon+name tag in the
vault's color under the secret's title in the detail sidebar, which
renders wherever the sidebar opens. rootVaultOf() in utils/vaultList.js
walks a secret's folderId up to its top-level vault, guarded against
parentId cycles and dangling parents.

No new translatable strings — the indicators show vault names, which are
data. 15 new unit tests cover the walk, both indicator variants with the
icon fallback, the root-only rule for the dot, and the sidebar's
resolution through nested folders.
@remko48
remko48 changed the base branch from fix/dashboard-tiles-relock-vault to development September 3, 2026 11:29
The warning shipped with PR #599 in English and Dutch only — it consumed
the parity ratchet's last slack, and the other locales were left to the
tracked translation debt (#180). Backfill German and French now; the
remaining locales follow with the bulk translation pass, where the
long-tail languages get their native read-through.
@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/keepiq @ 84247c8

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
check-l10n-js
check-schema-l10n
composer ✅ 111/111
npm ✅ 536/536
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-03 11:50 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/keepiq @ 2344e46

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
build
check-manifest
test-l10n
format
check-l10n-js
check-schema-l10n
composer ✅ 111/111
npm ✅ 536/536
app:check-code ⏭️
info.xml
REUSE
PHPUnit
Newman
Playwright ⏭️ deferred — runs on the promotion into beta/main, not on a pull request into development
Hydra gates

Quality workflow — 2026-09-03 12:04 UTC

Download the full PDF report from the workflow artifacts.

@remko48
remko48 changed the base branch from development to fix/dashboard-tiles-relock-vault September 3, 2026 14:28
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.

1 participant