Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
54 commits
Select commit Hold shift + click to select a range
edf8538
feat(vault): secret details in a right sidebar over the list
remko48 Aug 27, 2026
c12eb9d
l10n: detail-sidebar strings in every required locale
remko48 Aug 27, 2026
58082c6
fix(nav): highlight only the "..." node when its hidden folder is open
remko48 Aug 27, 2026
0f69672
feat(vault): show a loading state while switching folders
remko48 Aug 27, 2026
17988a7
l10n: translate the English-copied strings across all locales
remko48 Aug 27, 2026
2e88165
fix(l10n): translate the secret-type labels everywhere they render
remko48 Aug 27, 2026
b5d5cbf
fix(security): remove the dev auto-unlock block that slipped into the…
remko48 Aug 28, 2026
20c5f90
feat(vault): fleet selection with a contextual strip, vault strip, to…
remko48 Aug 28, 2026
e2836c7
fix(nav): the "…" node carries the selection for any folder below the…
remko48 Aug 28, 2026
41ca063
fix(icons): draw the lock shackle as a filled outline in every app icon
remko48 Aug 28, 2026
7b35245
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Aug 28, 2026
3e065f1
style(vault): no blank line after the crumbs custom property
remko48 Aug 28, 2026
80697d6
fix(quality): satisfy the four failing hydra gates
remko48 Aug 31, 2026
8d262a8
chore(deps): bump @conduction/nextcloud-vue to 2.27.0
remko48 Aug 31, 2026
0981d06
style(sidebar): overflow-wrap instead of the deprecated word-break ke…
remko48 Aug 31, 2026
74aa389
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Aug 31, 2026
1a75ee9
chore(release): sync beta back into development
github-actions[bot] Aug 31, 2026
e1b7cda
fix(kpi): drop hardcoded KPI colours so the cards follow the theme (#…
rubenvdlinde Aug 31, 2026
0a1e714
fix(composer): declare ext-xsl so dependabot can resolve (#559)
rubenvdlinde Aug 31, 2026
8825da3
Merge pull request #561 from ConductionNL/sync/beta-to-development-0.…
rubenvdlinde Aug 31, 2026
d5230eb
chore(deps): take @conduction/nextcloud-vue 2.27.2 (#567)
rubenvdlinde Aug 31, 2026
303e601
feat(vault): detail sidebar, role-grouped toolbar and fleet-style sel…
remko48 Aug 31, 2026
4f31612
fix(e2e): click the button inside the Move action, not its li wrapper…
rubenvdlinde Aug 31, 2026
2ae918f
chore(release): 0.2.6-unstable.20260831135900 (#572)
github-actions[bot] Aug 31, 2026
76a9d6d
fix(sidebar): address PR #479 review feedback
remko48 Aug 31, 2026
cc09874
fix(attachments): refetch when the open secret changes
remko48 Aug 31, 2026
759edc1
fix(vault): retire a secret's plaintext when the sidebar loads anothe…
rubenvdlinde Aug 31, 2026
f95ec8f
fix(deps): make the npm overrides follow their direct dependency (#575)
rubenvdlinde Aug 31, 2026
78b88be
test(unit): wait for the async call instead of a single macrotask tic…
rubenvdlinde Aug 31, 2026
76156b2
chore(release): 0.2.7-unstable.20260831194123 (#579)
github-actions[bot] Aug 31, 2026
6bb6eef
chore(register): retire the scaffold example schema (#580)
rubenvdlinde Aug 31, 2026
0a44a8a
chore(release): 0.2.8-unstable.20260831212628 (#581)
github-actions[bot] Sep 1, 2026
185deaa
l10n(walkthrough): translate the getting-started tour into all locales
remko48 Sep 1, 2026
e225828
feat(router): move keepiq off hash routing to clean path URLs (#582)
rubenvdlinde Sep 1, 2026
f5577ff
fix(e2e): match nav links and URLs as paths, not hashes (#584)
rubenvdlinde Sep 1, 2026
0f3c596
feat(folders): persist per-folder custom icon and color
remko48 Sep 1, 2026
9c1cd5e
feat(vault): per-vault icon and color, Proton-style, picked in the va…
remko48 Sep 1, 2026
b1e9d36
feat(vault): render vault icons and colors in the rail and list, with…
remko48 Sep 1, 2026
1c6266b
l10n(vault): Stage-9 strings across all locales
remko48 Sep 1, 2026
a231112
chore(lint): let the linter see tests/ and scripts/ (#585)
rubenvdlinde Sep 1, 2026
62488be
fix(vault): selected rail entries render plain contrast glyphs
remko48 Sep 1, 2026
992b6e6
Merge remote-tracking branch 'origin/development' into feature/fronte…
remko48 Sep 1, 2026
f2ef7fb
fix(e2e): make the suite load again after the lint sweep (#590)
rubenvdlinde Sep 1, 2026
dfe1f3e
fix(vault): selected vaults keep their color on an opaque theme disc
remko48 Sep 1, 2026
c41cf3d
chore(deps): take @conduction/nextcloud-vue 2.29.0
remko48 Sep 1, 2026
43bed6b
fix(e2e): navigate the router, not the URL fragment (#596)
rubenvdlinde Sep 1, 2026
fc2a9ee
fix(quality): satisfy phpcs and phpmd on the Stage-9 backend
remko48 Sep 1, 2026
e4076e2
refactor(nav): extract the empty-vault delete confirm into its own di…
remko48 Sep 1, 2026
7a79b23
style(quality): prettier formatting and @spec anchors for the Stage-9…
remko48 Sep 1, 2026
f387483
fix(quality): mark the AttachmentPanel secretId watcher @spec exclude
remko48 Sep 1, 2026
47d74ae
fix(quality): give the Stage-9 migration's suppression a written reason
remko48 Sep 1, 2026
40bf664
fix(attachments): drop a superseded list response instead of showing …
remko48 Sep 1, 2026
c1e3385
Merge pull request #591 from ConductionNL/feature/frontend-improvements
remko48 Sep 2, 2026
10c2e51
Takes nextcloud-vue 2.31.1 so a hovered KPI tile stops drawing a card…
rubenvdlinde Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion appinfo/info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ Vrij en open source onder de EUPL-1.2-licentie.

**Ondersteuning:** Voor ondersteuning, neem contact op via support@conduction.nl.
]]></description>
<version>0.2.5-unstable.20260831014129</version>
<version>0.2.8-unstable.20260831212628</version>
<licence>EUPL-1.2</licence>
<author mail="info@conduction.nl" homepage="https://www.conduction.nl/">Conduction</author>
<namespace>Keepiq</namespace>
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,8 @@
"optimize-autoloader": true,
"sort-packages": true,
"platform": {
"php": "8.3"
"php": "8.3",
"ext-xsl": "1"
}
}
}
142 changes: 134 additions & 8 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,32 @@ export default [
'no-console': 'off',
'n/no-process-exit': 'off',
'n/hashbang': 'off',
// `_` / `__` as a deliberate throwaway binding — `catch (_)`, a
// discarded destructuring slot. Narrow on purpose: the pattern matches
// UNDERSCORES ONLY, so a real name that happens to start with `_` is
// still reported. v9 drives plain `.js` through the CORE rule (the
// `@typescript-eslint` swap is per-file-type), so it is set here.
// Tests import devDependencies by definition; this rule is about what
// ships in the published package, which tests/ never does.
'n/no-unpublished-import': 'off',
},
},

{
// `_` / `__` as a deliberate throwaway binding — `catch (_)`, a discarded
// destructuring slot. Narrow on purpose: the pattern matches UNDERSCORES
// ONLY, so a real name that happens to start with `_` is still reported.
//
// 🔴 `.js` / `.mjs` ONLY, NOT `.ts`. The CORE rule is not TypeScript-aware:
// applied to a `.ts` file it reads the parameter NAMES inside a function
// TYPE as bindings and reports them unused. Measured on humaniq —
//
// t?: (app: string, key: string) => string
//
// produced four `no-unused-vars` errors for `app` and `key`, which are
// documentation, not variables. The same mis-scoping made every unused
// `catch (e)` in a `.ts` spec report TWICE, once per rule.
//
// v9 already turns the core rule off for `.ts` and drives
// `@typescript-eslint/no-unused-vars` instead; naming `.ts` here switched
// it back on. TypeScript files are handled by the block below.
files: ['tests/**/*.js', 'tests/**/*.mjs'],
rules: {
'no-unused-vars': [
'error',
{
Expand All @@ -165,12 +186,117 @@ export default [
ignoreRestSiblings: true,
},
],
// Tests import devDependencies by definition; this rule is about what
// ships in the published package, which tests/ never does.
'n/no-unpublished-import': 'off',
},
},

{
// The TypeScript half of the block above. Same intent, same patterns, on
// the rule that actually understands the language: it knows a name inside
// a function type is not a binding, so type annotations stay quiet while a
// genuinely dead local is still reported.
files: ['tests/**/*.ts', 'tests/**/*.tsx'],
rules: {
'@typescript-eslint/no-unused-vars': [
'error',
{
varsIgnorePattern: '^_+$',
caughtErrors: 'all',
caughtErrorsIgnorePattern: '^_+$',
argsIgnorePattern: '^_',
ignoreRestSiblings: true,
},
],
},
},

{
// 🔴 Node-side CLI tooling under `scripts/`, which is COMMONJS. Flat
// config defaults every `.js` to ESM with browser-ish globals, so without
// this block eslint reports the CommonJS wrapper itself as undefined
// identifiers. Measured on this app: 52 of the 233 errors under
// `tests/` + `scripts/` were `no-undef`, ALL of them in `scripts/`, and
// all five names were the environment rather than a typo — `process` 23,
// `require` 20, `__dirname` 6, `__filename` 2, `module` 1.
//
// This is describing the environment, not relaxing a rule, and it is the
// same argument the test-globals block below makes: declaring them keeps
// `no-undef` able to do its real job, which is catching a genuinely
// misspelled identifier. Suppressing the rule instead would bury that.
//
// `no-console` is off because printing its report is what a CLI checker
// is FOR.
//
// 🔴 NO `n/*` ENTRIES HERE, DELIBERATELY. `eslint-plugin-n` is NOT
// registered for these files under eslint 10 + @nextcloud/eslint-config
// 9, so `'n/no-process-exit': 'off'` would be dead config that reads as
// if it were doing something. Measured both ways on this app: 0 `n/`
// findings with the entries and 0 without.
//
// What DID report was the opposite — four `scripts/*.js` carried
// `/* eslint-disable n/no-process-exit */` and `/* eslint-disable
// n/shebang */` left over from the eslintrc era, and an inline disable
// naming an unregistered plugin is itself an error ("Definition for rule
// 'n/shebang' was not found"). Those 8 comments are removed; do not add
// `n/*` rules back to replace them.
//
// ⚠️ `.js` and `.cjs` ONLY. A `scripts/*.mjs` is genuinely ESM and must
// keep the default `sourceType`, or `import` stops parsing there.
files: ['scripts/**/*.js', 'scripts/**/*.cjs'],
languageOptions: {
sourceType: 'commonjs',
globals: {
require: 'readonly',
module: 'writable',
exports: 'writable',
process: 'readonly',
__dirname: 'readonly',
__filename: 'readonly',
console: 'readonly',
Buffer: 'readonly',
global: 'readonly',
URL: 'readonly',
TextEncoder: 'readonly',
TextDecoder: 'readonly',
},
},
rules: {
'no-console': 'off',
},
},

{
// The ESM half of the block above. A `scripts/*.mjs` is genuinely a module
// and must keep the default `sourceType`, so it gets Node's globals but
// none of the CommonJS wrapper. Measured: `process` reported undefined 2x
// in hermiq's generate-opengemeenten-icons.mjs and 4x in openregister's
// l10n/runtime-check.mjs, which the `.js`/`.cjs` block deliberately does
// not match.
files: ['scripts/**/*.mjs', 'tests/**/*.mjs'],
languageOptions: {
globals: {
process: 'readonly',
console: 'readonly',
Buffer: 'readonly',
global: 'readonly',
URL: 'readonly',
TextEncoder: 'readonly',
TextDecoder: 'readonly',
},
},
rules: {
'no-console': 'off',
},
},

{
// eslint must not try to PARSE a shell script. `tests/e2e/seed.test.sh`
// matches the `**/*.test.*` glob some presets use, and eslint then reads
// it as JavaScript and reports "Parsing error: Unexpected character" —
// a finding about a file it should never have opened.
ignores: ['**/*.sh', '**/*.bash'],
},


{
// Test globals. Several apps keep their spec files INSIDE `src/`, which the
// lint script scans, and neither `@nextcloud/eslint-config` nor the runner
Expand Down
13 changes: 6 additions & 7 deletions img/app-dark.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions img/app-store.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
12 changes: 6 additions & 6 deletions img/app.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion img/pwa-icon-maskable.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
3 changes: 2 additions & 1 deletion img/pwa-icon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading